From 248339258f04037b057b19f08c11f57e8592fb12 Mon Sep 17 00:00:00 2001 From: Preston Vasquez Date: Wed, 26 Mar 2025 15:07:22 -0600 Subject: [PATCH 1/4] GODRIVER-3445 Use Git submodules for spec tests (#1996) --- .gitmodules | 4 +- .../serverselector/server_selector_test.go | 6 +- internal/spectest/skip.go | 77 +- internal/spectest/spectest.go | 20 +- mongo/read_write_concern_spec_test.go | 11 +- .../atlas-data-lake-testing/aggregate.json | 53 - .../atlas-data-lake-testing/aggregate.yml | 23 - .../estimatedDocumentCount.json | 27 - .../estimatedDocumentCount.yml | 18 - testdata/atlas-data-lake-testing/find.json | 65 - testdata/atlas-data-lake-testing/find.yml | 27 - testdata/atlas-data-lake-testing/getMore.json | 57 - testdata/atlas-data-lake-testing/getMore.yml | 35 - .../listCollections.json | 25 - .../listCollections.yml | 17 - .../listDatabases.json | 24 - .../atlas-data-lake-testing/listDatabases.yml | 15 - .../atlas-data-lake-testing/runCommand.json | 31 - .../atlas-data-lake-testing/runCommand.yml | 20 - testdata/auth/connection-string.json | 651 -- testdata/auth/connection-string.yml | 471 - testdata/bson-binary-vector/float32.json | 65 - testdata/bson-binary-vector/int8.json | 57 - testdata/bson-binary-vector/packed_bit.json | 83 - testdata/bson-corpus/array.json | 49 - testdata/bson-corpus/binary.json | 153 - testdata/bson-corpus/boolean.json | 27 - testdata/bson-corpus/bsonview | 434 - testdata/bson-corpus/code.json | 67 - testdata/bson-corpus/code_w_scope.json | 78 - testdata/bson-corpus/datetime.json | 42 - testdata/bson-corpus/dbpointer.json | 56 - testdata/bson-corpus/dbref.json | 51 - testdata/bson-corpus/decimal128-1.json | 317 - testdata/bson-corpus/decimal128-2.json | 793 -- testdata/bson-corpus/decimal128-3.json | 1771 ---- testdata/bson-corpus/decimal128-4.json | 165 - testdata/bson-corpus/decimal128-5.json | 402 - testdata/bson-corpus/decimal128-6.json | 131 - testdata/bson-corpus/decimal128-7.json | 327 - testdata/bson-corpus/document.json | 60 - testdata/bson-corpus/double.json | 87 - testdata/bson-corpus/int32.json | 43 - testdata/bson-corpus/int64.json | 43 - testdata/bson-corpus/maxkey.json | 12 - testdata/bson-corpus/minkey.json | 12 - .../bson-corpus/multi-type-deprecated.json | 15 - testdata/bson-corpus/multi-type.json | 11 - testdata/bson-corpus/null.json | 12 - testdata/bson-corpus/oid.json | 28 - testdata/bson-corpus/regex.json | 65 - testdata/bson-corpus/string.json | 72 - testdata/bson-corpus/symbol.json | 80 - testdata/bson-corpus/timestamp.json | 34 - testdata/bson-corpus/top.json | 266 - testdata/bson-corpus/undefined.json | 15 - .../change-streams-clusterTime.json | 81 - .../change-streams-clusterTime.yml | 41 - .../change-streams-disambiguatedPaths.json | 251 - .../change-streams-disambiguatedPaths.yml | 103 - .../change-streams/change-streams-errors.json | 246 - .../change-streams/change-streams-errors.yml | 120 - .../change-streams-pre_and_post_images.json | 827 -- .../change-streams-pre_and_post_images.yml | 351 - .../change-streams-resume-allowlist.json | 2348 ----- .../change-streams-resume-allowlist.yml | 1169 --- .../change-streams-resume-errorLabels.json | 2130 ---- .../change-streams-resume-errorLabels.yml | 1069 -- .../change-streams-showExpandedEvents.json | 516 - .../change-streams-showExpandedEvents.yml | 307 - testdata/change-streams/change-streams.json | 1795 ---- testdata/change-streams/change-streams.yml | 927 -- .../change-streams-test.json | 70 - .../corpus-encrypted.json | 7685 --------------- .../corpus-key-aws.json | 33 - .../corpus-key-azure.json | 33 - .../corpus-key-gcp.json | 35 - .../corpus-key-kmip.json | 32 - .../corpus-key-local.json | 31 - .../corpus-schema.json | 6335 ------------ .../client-side-encryption-prose/corpus.json | 8619 ----------------- .../encrypted-fields.json | 30 - .../external-key.json | 31 - .../external-schema.json | 19 - .../key1-document.json | 30 - .../limits-doc.json | 102 - .../limits-key.json | 31 - .../limits-schema.json | 1405 --- .../range-encryptedFields-Date.json | 36 - ...ge-encryptedFields-DecimalNoPrecision.json | 26 - ...ange-encryptedFields-DecimalPrecision.json | 35 - ...nge-encryptedFields-DoubleNoPrecision.json | 26 - ...range-encryptedFields-DoublePrecision.json | 35 - .../range-encryptedFields-Int.json | 32 - .../range-encryptedFields-Long.json | 32 - .../legacy/aggregate.json | 390 - .../legacy/aggregate.yml | 120 - .../legacy/awsTemporary.json | 225 - .../legacy/awsTemporary.yml | 57 - .../legacy/azureKMS.json | 224 - .../legacy/azureKMS.yml | 46 - .../legacy/badQueries.json | 1446 --- .../legacy/badQueries.yml | 536 - .../legacy/badSchema.json | 254 - .../legacy/badSchema.yml | 73 - .../client-side-encryption/legacy/basic.json | 350 - .../client-side-encryption/legacy/basic.yml | 102 - .../client-side-encryption/legacy/bulk.json | 333 - .../client-side-encryption/legacy/bulk.yml | 78 - .../legacy/bypassAutoEncryption.json | 402 - .../legacy/bypassAutoEncryption.yml | 100 - .../legacy/bypassedCommand.json | 107 - .../legacy/bypassedCommand.yml | 43 - .../client-side-encryption/legacy/count.json | 229 - .../client-side-encryption/legacy/count.yml | 54 - .../legacy/countDocuments.json | 241 - .../legacy/countDocuments.yml | 52 - .../legacy/create-and-createIndexes.json | 115 - .../legacy/create-and-createIndexes.yml | 58 - .../client-side-encryption/legacy/delete.json | 340 - .../client-side-encryption/legacy/delete.yml | 91 - .../legacy/distinct.json | 276 - .../legacy/distinct.yml | 66 - .../legacy/explain.json | 239 - .../client-side-encryption/legacy/explain.yml | 57 - .../client-side-encryption/legacy/find.json | 408 - .../client-side-encryption/legacy/find.yml | 105 - .../legacy/findOneAndDelete.json | 221 - .../legacy/findOneAndDelete.yml | 50 - .../legacy/findOneAndReplace.json | 227 - .../legacy/findOneAndReplace.yml | 50 - .../legacy/findOneAndUpdate.json | 231 - .../legacy/findOneAndUpdate.yml | 50 - .../legacy/fle2v2-BypassQueryAnalysis.json | 261 - .../legacy/fle2v2-BypassQueryAnalysis.yml | 89 - .../legacy/fle2v2-Compact.json | 233 - .../legacy/fle2v2-Compact.yml | 84 - .../fle2v2-CreateCollection-OldServer.json | 94 - .../fle2v2-CreateCollection-OldServer.yml | 61 - .../legacy/fle2v2-CreateCollection.json | 1758 ---- .../legacy/fle2v2-CreateCollection.yml | 937 -- .../legacy/fle2v2-DecryptExistingData.json | 149 - .../legacy/fle2v2-DecryptExistingData.yml | 66 - .../legacy/fle2v2-Delete.json | 284 - .../legacy/fle2v2-Delete.yml | 100 - ...EncryptedFields-vs-EncryptedFieldsMap.json | 212 - ...-EncryptedFields-vs-EncryptedFieldsMap.yml | 79 - .../fle2v2-EncryptedFields-vs-jsonSchema.json | 300 - .../fle2v2-EncryptedFields-vs-jsonSchema.yml | 102 - .../fle2v2-EncryptedFieldsMap-defaults.json | 105 - .../fle2v2-EncryptedFieldsMap-defaults.yml | 58 - .../legacy/fle2v2-FindOneAndUpdate.json | 560 -- .../legacy/fle2v2-FindOneAndUpdate.yml | 200 - .../legacy/fle2v2-InsertFind-Indexed.json | 296 - .../legacy/fle2v2-InsertFind-Indexed.yml | 96 - .../legacy/fle2v2-InsertFind-Unindexed.json | 248 - .../legacy/fle2v2-InsertFind-Unindexed.yml | 89 - .../legacy/fle2v2-MissingKey.json | 116 - .../legacy/fle2v2-MissingKey.yml | 43 - .../legacy/fle2v2-NoEncryption.json | 87 - .../legacy/fle2v2-NoEncryption.yml | 44 - .../legacy/fle2v2-Rangev2-Compact.json | 290 - .../legacy/fle2v2-Rangev2-Compact.yml | 94 - .../legacy/fle2v2-Rangev2-Date-Aggregate.json | 508 - .../legacy/fle2v2-Rangev2-Date-Aggregate.yml | 229 - .../fle2v2-Rangev2-Date-Correctness.json | 1842 ---- .../fle2v2-Rangev2-Date-Correctness.yml | 422 - .../legacy/fle2v2-Rangev2-Date-Delete.json | 442 - .../legacy/fle2v2-Rangev2-Date-Delete.yml | 176 - .../fle2v2-Rangev2-Date-FindOneAndUpdate.json | 514 - .../fle2v2-Rangev2-Date-FindOneAndUpdate.yml | 227 - .../fle2v2-Rangev2-Date-InsertFind.json | 499 - .../legacy/fle2v2-Rangev2-Date-InsertFind.yml | 223 - .../legacy/fle2v2-Rangev2-Date-Update.json | 516 - .../legacy/fle2v2-Rangev2-Date-Update.yml | 240 - .../fle2v2-Rangev2-Decimal-Aggregate.json | 1902 ---- .../fle2v2-Rangev2-Decimal-Aggregate.yml | 1675 ---- .../fle2v2-Rangev2-Decimal-Correctness.json | 1158 --- .../fle2v2-Rangev2-Decimal-Correctness.yml | 293 - .../legacy/fle2v2-Rangev2-Decimal-Delete.json | 1116 --- .../legacy/fle2v2-Rangev2-Decimal-Delete.yml | 899 -- ...e2v2-Rangev2-Decimal-FindOneAndUpdate.json | 1906 ---- ...le2v2-Rangev2-Decimal-FindOneAndUpdate.yml | 1672 ---- .../fle2v2-Rangev2-Decimal-InsertFind.json | 1893 ---- .../fle2v2-Rangev2-Decimal-InsertFind.yml | 1668 ---- .../legacy/fle2v2-Rangev2-Decimal-Update.json | 1910 ---- .../legacy/fle2v2-Rangev2-Decimal-Update.yml | 1685 ---- ...v2-Rangev2-DecimalPrecision-Aggregate.json | 584 -- ...2v2-Rangev2-DecimalPrecision-Aggregate.yml | 317 - ...-Rangev2-DecimalPrecision-Correctness.json | 1650 ---- ...2-Rangev2-DecimalPrecision-Correctness.yml | 424 - ...le2v2-Rangev2-DecimalPrecision-Delete.json | 476 - ...fle2v2-Rangev2-DecimalPrecision-Delete.yml | 220 - ...ev2-DecimalPrecision-FindOneAndUpdate.json | 588 -- ...gev2-DecimalPrecision-FindOneAndUpdate.yml | 315 - ...2-Rangev2-DecimalPrecision-InsertFind.json | 571 -- ...v2-Rangev2-DecimalPrecision-InsertFind.yml | 307 - ...le2v2-Rangev2-DecimalPrecision-Update.json | 588 -- ...fle2v2-Rangev2-DecimalPrecision-Update.yml | 324 - .../legacy/fle2v2-Rangev2-Defaults.json | 381 - .../legacy/fle2v2-Rangev2-Defaults.yml | 157 - .../fle2v2-Rangev2-Double-Aggregate.json | 1132 --- .../fle2v2-Rangev2-Double-Aggregate.yml | 901 -- .../fle2v2-Rangev2-Double-Correctness.json | 1160 --- .../fle2v2-Rangev2-Double-Correctness.yml | 292 - .../legacy/fle2v2-Rangev2-Double-Delete.json | 732 -- .../legacy/fle2v2-Rangev2-Double-Delete.yml | 512 - ...le2v2-Rangev2-Double-FindOneAndUpdate.json | 1136 --- ...fle2v2-Rangev2-Double-FindOneAndUpdate.yml | 899 -- .../fle2v2-Rangev2-Double-InsertFind.json | 1123 --- .../fle2v2-Rangev2-Double-InsertFind.yml | 895 -- .../legacy/fle2v2-Rangev2-Double-Update.json | 1140 --- .../legacy/fle2v2-Rangev2-Double-Update.yml | 912 -- ...2v2-Rangev2-DoublePrecision-Aggregate.json | 580 -- ...e2v2-Rangev2-DoublePrecision-Aggregate.yml | 313 - ...2-Rangev2-DoublePrecision-Correctness.json | 1650 ---- ...v2-Rangev2-DoublePrecision-Correctness.yml | 424 - ...fle2v2-Rangev2-DoublePrecision-Delete.json | 474 - .../fle2v2-Rangev2-DoublePrecision-Delete.yml | 218 - ...gev2-DoublePrecision-FindOneAndUpdate.json | 584 -- ...ngev2-DoublePrecision-FindOneAndUpdate.yml | 311 - ...v2-Rangev2-DoublePrecision-InsertFind.json | 571 -- ...2v2-Rangev2-DoublePrecision-InsertFind.yml | 307 - ...fle2v2-Rangev2-DoublePrecision-Update.json | 588 -- .../fle2v2-Rangev2-DoublePrecision-Update.yml | 326 - .../legacy/fle2v2-Rangev2-Int-Aggregate.json | 484 - .../legacy/fle2v2-Rangev2-Int-Aggregate.yml | 229 - .../fle2v2-Rangev2-Int-Correctness.json | 1644 ---- .../legacy/fle2v2-Rangev2-Int-Correctness.yml | 423 - .../legacy/fle2v2-Rangev2-Int-Delete.json | 420 - .../legacy/fle2v2-Rangev2-Int-Delete.yml | 176 - .../fle2v2-Rangev2-Int-FindOneAndUpdate.json | 488 - .../fle2v2-Rangev2-Int-FindOneAndUpdate.yml | 227 - .../legacy/fle2v2-Rangev2-Int-InsertFind.json | 475 - .../legacy/fle2v2-Rangev2-Int-InsertFind.yml | 223 - .../legacy/fle2v2-Rangev2-Int-Update.json | 492 - .../legacy/fle2v2-Rangev2-Int-Update.yml | 242 - .../legacy/fle2v2-Rangev2-Long-Aggregate.json | 484 - .../legacy/fle2v2-Rangev2-Long-Aggregate.yml | 229 - .../fle2v2-Rangev2-Long-Correctness.json | 1644 ---- .../fle2v2-Rangev2-Long-Correctness.yml | 422 - .../legacy/fle2v2-Rangev2-Long-Delete.json | 420 - .../legacy/fle2v2-Rangev2-Long-Delete.yml | 176 - .../fle2v2-Rangev2-Long-FindOneAndUpdate.json | 488 - .../fle2v2-Rangev2-Long-FindOneAndUpdate.yml | 227 - .../fle2v2-Rangev2-Long-InsertFind.json | 475 - .../legacy/fle2v2-Rangev2-Long-InsertFind.yml | 223 - .../legacy/fle2v2-Rangev2-Long-Update.json | 492 - .../legacy/fle2v2-Rangev2-Long-Update.yml | 242 - .../legacy/fle2v2-Rangev2-WrongType.json | 163 - .../legacy/fle2v2-Rangev2-WrongType.yml | 44 - .../legacy/fle2v2-Update.json | 570 -- .../legacy/fle2v2-Update.yml | 210 - ...v2-validatorAndPartialFieldExpression.json | 503 - ...2v2-validatorAndPartialFieldExpression.yml | 169 - .../client-side-encryption/legacy/gcpKMS.json | 226 - .../client-side-encryption/legacy/gcpKMS.yml | 46 - .../legacy/getMore.json | 263 - .../client-side-encryption/legacy/getMore.yml | 61 - .../client-side-encryption/legacy/insert.json | 344 - .../client-side-encryption/legacy/insert.yml | 88 - .../legacy/keyAltName.json | 228 - .../legacy/keyAltName.yml | 64 - .../legacy/keyCache.json | 270 - .../legacy/keyCache.yml | 69 - .../legacy/kmipKMS.json | 223 - .../client-side-encryption/legacy/kmipKMS.yml | 46 - .../legacy/localKMS.json | 191 - .../legacy/localKMS.yml | 47 - .../legacy/localSchema.json | 258 - .../legacy/localSchema.yml | 65 - .../legacy/malformedCiphertext.json | 321 - .../legacy/malformedCiphertext.yml | 69 - .../legacy/maxWireVersion.json | 74 - .../legacy/maxWireVersion.yml | 22 - .../legacy/missingKey.json | 179 - .../legacy/missingKey.yml | 42 - .../legacy/noSchema.json | 67 - .../legacy/noSchema.yml | 37 - .../legacy/replaceOne.json | 239 - .../legacy/replaceOne.yml | 54 - .../client-side-encryption/legacy/types.json | 1646 ---- .../client-side-encryption/legacy/types.yml | 501 - .../legacy/unsupportedCommand.json | 152 - .../legacy/unsupportedCommand.yml | 25 - .../legacy/updateMany.json | 307 - .../legacy/updateMany.yml | 70 - .../legacy/updateOne.json | 465 - .../legacy/updateOne.yml | 160 - .../validatorAndPartialFieldExpression.json | 642 -- .../validatorAndPartialFieldExpression.yml | 166 - .../unified/addKeyAltName.json | 609 -- .../unified/addKeyAltName.yml | 194 - .../createDataKey-kms_providers-invalid.json | 119 - .../createDataKey-kms_providers-invalid.yml | 67 - .../unified/createDataKey.json | 711 -- .../unified/createDataKey.yml | 309 - .../unified/deleteKey.json | 557 -- .../unified/deleteKey.yml | 159 - .../unified/getKey.json | 319 - .../client-side-encryption/unified/getKey.yml | 105 - .../unified/getKeyByAltName.json | 289 - .../unified/getKeyByAltName.yml | 104 - .../unified/getKeys.json | 260 - .../unified/getKeys.yml | 122 - .../unified/keyCache.json | 198 - .../unified/keyCache.yml | 85 - .../unified/removeKeyAltName.json | 672 -- .../unified/removeKeyAltName.yml | 157 - .../rewrapManyDataKey-decrypt_failure.json | 162 - .../rewrapManyDataKey-decrypt_failure.yml | 69 - .../rewrapManyDataKey-encrypt_failure.json | 250 - .../rewrapManyDataKey-encrypt_failure.yml | 122 - .../unified/rewrapManyDataKey.json | 1493 --- .../unified/rewrapManyDataKey.yml | 438 - .../bulkWrite.json | 159 - .../bulkWrite.yml | 84 - .../command-execution.json | 393 - .../command-execution.yml | 251 - .../error-transformations.json | 180 - .../error-transformations.yml | 96 - .../global-timeoutMS.json | 5830 ----------- .../global-timeoutMS.yml | 3235 ------- .../gridfs-advanced.json | 385 - .../gridfs-advanced.yml | 206 - .../gridfs-delete.json | 285 - .../gridfs-delete.yml | 152 - .../gridfs-find.json | 183 - .../gridfs-find.yml | 100 - .../override-operation-timeoutMS.json | 3577 ------- .../override-operation-timeoutMS.yml | 1917 ---- .../retryability-legacy-timeouts.json | 3042 ------ .../retryability-legacy-timeouts.yml | 1676 ---- .../retryability-timeoutMS.json | 5688 ----------- .../retryability-timeoutMS.yml | 2823 ------ .../runCursorCommand.json | 583 -- .../runCursorCommand.yml | 304 - .../clustered-indexes.json | 291 - .../clustered-indexes.yml | 135 - .../createCollection-pre_and_post_images.json | 92 - .../createCollection-pre_and_post_images.yml | 50 - .../modifyCollection-errorResponse.json | 118 - .../modifyCollection-errorResponse.yml | 59 - .../modifyCollection-pre_and_post_images.json | 111 - .../modifyCollection-pre_and_post_images.yml | 58 - .../timeseries-collection.json | 320 - .../timeseries-collection.yml | 163 - testdata/command-monitoring/bulkWrite.json | 154 - testdata/command-monitoring/bulkWrite.yml | 68 - testdata/command-monitoring/command.json | 83 - testdata/command-monitoring/command.yml | 50 - testdata/command-monitoring/deleteMany.json | 162 - testdata/command-monitoring/deleteMany.yml | 79 - testdata/command-monitoring/deleteOne.json | 162 - testdata/command-monitoring/deleteOne.yml | 79 - testdata/command-monitoring/find.json | 558 -- testdata/command-monitoring/find.yml | 262 - testdata/command-monitoring/insertMany.json | 148 - testdata/command-monitoring/insertMany.yml | 79 - testdata/command-monitoring/insertOne.json | 144 - testdata/command-monitoring/insertOne.yml | 77 - .../command-monitoring/logging/command.json | 215 - .../command-monitoring/logging/command.yml | 95 - .../logging/driver-connection-id.json | 146 - .../logging/driver-connection-id.yml | 76 - .../logging/no-handshake-messages.json | 94 - .../logging/no-handshake-messages.yml | 58 - .../logging/no-heartbeat-messages.json | 91 - .../logging/no-heartbeat-messages.yml | 58 - .../logging/operation-id.json | 198 - .../logging/operation-id.yml | 99 - .../logging/pre-42-server-connection-id.json | 119 - .../logging/pre-42-server-connection-id.yml | 66 - .../logging/redacted-commands.json | 1438 --- .../logging/redacted-commands.yml | 850 -- .../logging/server-connection-id.json | 131 - .../logging/server-connection-id.yml | 66 - .../logging/service-id.json | 207 - .../command-monitoring/logging/service-id.yml | 111 - .../logging/unacknowledged-write.json | 134 - .../logging/unacknowledged-write.yml | 63 - .../pre-42-server-connection-id.json | 101 - .../pre-42-server-connection-id.yml | 56 - .../command-monitoring/redacted-commands.json | 679 -- .../command-monitoring/redacted-commands.yml | 348 - .../server-connection-id.json | 101 - .../server-connection-id.yml | 56 - .../unacknowledged-client-bulkWrite.json | 220 - .../unacknowledged-client-bulkWrite.yml | 111 - .../unacknowledgedBulkWrite.json | 220 - .../unacknowledgedBulkWrite.yml | 111 - testdata/command-monitoring/updateMany.json | 188 - testdata/command-monitoring/updateMany.yml | 87 - testdata/command-monitoring/updateOne.json | 260 - testdata/command-monitoring/updateOne.yml | 118 - .../connection-must-have-id.json | 52 - .../connection-must-have-id.yml | 29 - .../connection-must-order-ids.json | 52 - .../connection-must-order-ids.yml | 29 - .../logging/connection-logging.json | 525 - .../logging/connection-logging.yml | 226 - .../logging/connection-pool-options.json | 458 - .../logging/connection-pool-options.yml | 254 - .../pool-checkin-destroy-closed.json | 50 - .../pool-checkin-destroy-closed.yml | 29 - .../pool-checkin-destroy-stale.json | 50 - .../pool-checkin-destroy-stale.yml | 29 - .../pool-checkin-make-available.json | 45 - .../pool-checkin-make-available.yml | 26 - .../pool-checkin.json | 34 - .../pool-checkin.yml | 21 - .../pool-checkout-connection.json | 38 - .../pool-checkout-connection.yml | 21 - ...kout-custom-maxConnecting-is-enforced.json | 81 - ...ckout-custom-maxConnecting-is-enforced.yml | 50 - .../pool-checkout-error-closed.json | 68 - .../pool-checkout-error-closed.yml | 38 - ...ol-checkout-maxConnecting-is-enforced.json | 108 - ...ool-checkout-maxConnecting-is-enforced.yml | 79 - .../pool-checkout-maxConnecting-timeout.json | 103 - .../pool-checkout-maxConnecting-timeout.yml | 69 - ...-minPoolSize-connection-maxConnecting.json | 88 - ...t-minPoolSize-connection-maxConnecting.yml | 63 - .../pool-checkout-multiple.json | 70 - .../pool-checkout-multiple.yml | 39 - .../pool-checkout-no-idle.json | 68 - .../pool-checkout-no-idle.yml | 41 - .../pool-checkout-no-stale.json | 73 - .../pool-checkout-no-stale.yml | 41 - ...out-returned-connection-maxConnecting.json | 124 - ...kout-returned-connection-maxConnecting.yml | 86 - .../pool-clear-clears-waitqueue.json | 101 - .../pool-clear-clears-waitqueue.yml | 63 - ...lear-interrupting-pending-connections.json | 77 - ...clear-interrupting-pending-connections.yml | 42 - .../pool-clear-min-size.json | 68 - .../pool-clear-min-size.yml | 37 - .../pool-clear-paused.json | 32 - .../pool-clear-paused.yml | 15 - .../pool-clear-ready.json | 69 - .../pool-clear-ready.yml | 36 - ...e-run-interruptInUseConnections-false.json | 81 - ...le-run-interruptInUseConnections-false.yml | 48 - .../pool-close-destroy-conns.json | 52 - .../pool-close-destroy-conns.yml | 30 - .../pool-close.json | 21 - .../pool-close.yml | 11 - .../pool-create-max-size.json | 133 - .../pool-create-max-size.yml | 73 - .../pool-create-min-size-error.json | 66 - .../pool-create-min-size-error.yml | 40 - .../pool-create-min-size.json | 66 - .../pool-create-min-size.yml | 40 - .../pool-create-with-options.json | 32 - .../pool-create-with-options.yml | 21 - .../pool-create.json | 19 - .../pool-create.yml | 12 - .../pool-ready-ready.json | 39 - .../pool-ready-ready.yml | 19 - .../pool-ready.json | 57 - .../pool-ready.yml | 30 - .../wait-queue-fairness.json | 196 - .../wait-queue-fairness.yml | 126 - .../wait-queue-timeout.json | 75 - .../wait-queue-timeout.yml | 48 - testdata/connection-string/invalid-uris.json | 274 - testdata/connection-string/invalid-uris.yml | 241 - testdata/connection-string/valid-auth.json | 332 - testdata/connection-string/valid-auth.yml | 257 - .../valid-db-with-dotted-name.json | 100 - .../valid-db-with-dotted-name.yml | 77 - .../valid-host_identifiers.json | 154 - .../valid-host_identifiers.yml | 121 - testdata/connection-string/valid-options.json | 25 - testdata/connection-string/valid-options.yml | 17 - .../valid-unix_socket-absolute.json | 266 - .../valid-unix_socket-absolute.yml | 209 - .../valid-unix_socket-relative.json | 286 - .../valid-unix_socket-relative.yml | 225 - .../connection-string/valid-warnings.json | 68 - testdata/connection-string/valid-warnings.yml | 51 - .../callback-aborts.json | 244 - .../callback-aborts.yml | 170 - .../callback-commits.json | 303 - .../callback-commits.yml | 204 - .../callback-retry.json | 315 - .../callback-retry.yml | 215 - .../convenient-transactions/commit-retry.json | 533 - .../convenient-transactions/commit-retry.yml | 327 - .../commit-transienttransactionerror-4.2.json | 197 - .../commit-transienttransactionerror-4.2.yml | 139 - .../commit-transienttransactionerror.json | 725 -- .../commit-transienttransactionerror.yml | 175 - .../commit-writeconcernerror.json | 602 -- .../commit-writeconcernerror.yml | 216 - testdata/convenient-transactions/commit.json | 286 - testdata/convenient-transactions/commit.yml | 193 - .../transaction-options.json | 577 -- .../transaction-options.yml | 274 - .../crud/unified/aggregate-allowdiskuse.json | 155 - .../crud/unified/aggregate-allowdiskuse.yml | 75 - testdata/crud/unified/aggregate-let.json | 376 - testdata/crud/unified/aggregate-let.yml | 138 - .../aggregate-merge-errorResponse.json | 90 - .../unified/aggregate-merge-errorResponse.yml | 42 - testdata/crud/unified/aggregate-merge.json | 497 - testdata/crud/unified/aggregate-merge.yml | 185 - .../unified/aggregate-out-readConcern.json | 407 - .../unified/aggregate-out-readConcern.yml | 171 - .../aggregate-write-readPreference.json | 461 - .../aggregate-write-readPreference.yml | 157 - testdata/crud/unified/aggregate.json | 568 -- testdata/crud/unified/aggregate.yml | 216 - .../bulkWrite-arrayFilters-clientError.json | 151 - .../bulkWrite-arrayFilters-clientError.yml | 98 - .../crud/unified/bulkWrite-arrayFilters.json | 279 - .../crud/unified/bulkWrite-arrayFilters.yml | 174 - testdata/crud/unified/bulkWrite-comment.json | 519 - testdata/crud/unified/bulkWrite-comment.yml | 177 - .../bulkWrite-delete-hint-clientError.json | 193 - .../bulkWrite-delete-hint-clientError.yml | 113 - .../bulkWrite-delete-hint-serverError.json | 252 - .../bulkWrite-delete-hint-serverError.yml | 142 - .../crud/unified/bulkWrite-delete-hint.json | 247 - .../crud/unified/bulkWrite-delete-hint.yml | 154 - .../unified/bulkWrite-deleteMany-let.json | 200 - .../crud/unified/bulkWrite-deleteMany-let.yml | 86 - .../crud/unified/bulkWrite-deleteOne-let.json | 200 - .../crud/unified/bulkWrite-deleteOne-let.yml | 86 - .../crud/unified/bulkWrite-errorResponse.json | 88 - .../crud/unified/bulkWrite-errorResponse.yml | 50 - .../bulkWrite-insertOne-dots_and_dollars.json | 374 - .../bulkWrite-insertOne-dots_and_dollars.yml | 138 - ...bulkWrite-replaceOne-dots_and_dollars.json | 532 - .../bulkWrite-replaceOne-dots_and_dollars.yml | 165 - .../unified/bulkWrite-replaceOne-let.json | 226 - .../crud/unified/bulkWrite-replaceOne-let.yml | 93 - .../unified/bulkWrite-replaceOne-sort.json | 239 - .../unified/bulkWrite-replaceOne-sort.yml | 94 - .../bulkWrite-update-hint-clientError.json | 284 - .../bulkWrite-update-hint-clientError.yml | 148 - .../bulkWrite-update-hint-serverError.json | 422 - .../bulkWrite-update-hint-serverError.yml | 239 - .../crud/unified/bulkWrite-update-hint.json | 445 - .../crud/unified/bulkWrite-update-hint.yml | 256 - .../unified/bulkWrite-update-validation.json | 210 - .../unified/bulkWrite-update-validation.yml | 73 - ...bulkWrite-updateMany-dots_and_dollars.json | 452 - .../bulkWrite-updateMany-dots_and_dollars.yml | 150 - .../unified/bulkWrite-updateMany-let.json | 243 - .../crud/unified/bulkWrite-updateMany-let.yml | 96 - .../bulkWrite-updateOne-dots_and_dollars.json | 460 - .../bulkWrite-updateOne-dots_and_dollars.yml | 150 - .../crud/unified/bulkWrite-updateOne-let.json | 247 - .../crud/unified/bulkWrite-updateOne-let.yml | 95 - .../unified/bulkWrite-updateOne-sort.json | 255 - .../crud/unified/bulkWrite-updateOne-sort.yml | 94 - .../client-bulkWrite-delete-options.json | 268 - .../client-bulkWrite-delete-options.yml | 137 - .../client-bulkWrite-errorResponse.json | 69 - .../client-bulkWrite-errorResponse.yml | 38 - .../crud/unified/client-bulkWrite-errors.json | 513 - .../crud/unified/client-bulkWrite-errors.yml | 270 - .../client-bulkWrite-mixed-namespaces.json | 315 - .../client-bulkWrite-mixed-namespaces.yml | 147 - .../unified/client-bulkWrite-options.json | 716 -- .../crud/unified/client-bulkWrite-options.yml | 351 - .../unified/client-bulkWrite-ordered.json | 291 - .../crud/unified/client-bulkWrite-ordered.yml | 153 - .../client-bulkWrite-partialResults.json | 540 -- .../client-bulkWrite-partialResults.yml | 262 - .../client-bulkWrite-replaceOne-sort.json | 163 - .../client-bulkWrite-replaceOne-sort.yml | 77 - .../unified/client-bulkWrite-results.json | 833 -- .../crud/unified/client-bulkWrite-results.yml | 312 - .../client-bulkWrite-update-options.json | 949 -- .../client-bulkWrite-update-options.yml | 338 - .../client-bulkWrite-update-pipeline.json | 258 - .../client-bulkWrite-update-pipeline.yml | 133 - .../client-bulkWrite-update-validation.json | 216 - .../client-bulkWrite-update-validation.yml | 79 - .../client-bulkWrite-updateOne-sort.json | 167 - .../client-bulkWrite-updateOne-sort.yml | 77 - .../crud/unified/countDocuments-comment.json | 208 - .../crud/unified/countDocuments-comment.yml | 92 - .../db-aggregate-write-readPreference.json | 447 - .../db-aggregate-write-readPreference.yml | 153 - testdata/crud/unified/db-aggregate.json | 107 - testdata/crud/unified/db-aggregate.yml | 73 - testdata/crud/unified/deleteMany-comment.json | 245 - testdata/crud/unified/deleteMany-comment.yml | 97 - .../unified/deleteMany-hint-clientError.json | 149 - .../unified/deleteMany-hint-clientError.yml | 87 - .../unified/deleteMany-hint-serverError.json | 190 - .../unified/deleteMany-hint-serverError.yml | 107 - testdata/crud/unified/deleteMany-hint.json | 173 - testdata/crud/unified/deleteMany-hint.yml | 99 - testdata/crud/unified/deleteMany-let.json | 201 - testdata/crud/unified/deleteMany-let.yml | 93 - testdata/crud/unified/deleteOne-comment.json | 243 - testdata/crud/unified/deleteOne-comment.yml | 98 - .../crud/unified/deleteOne-errorResponse.json | 82 - .../crud/unified/deleteOne-errorResponse.yml | 46 - .../unified/deleteOne-hint-clientError.json | 133 - .../unified/deleteOne-hint-clientError.yml | 80 - .../unified/deleteOne-hint-serverError.json | 170 - .../unified/deleteOne-hint-serverError.yml | 100 - testdata/crud/unified/deleteOne-hint.json | 161 - testdata/crud/unified/deleteOne-hint.yml | 95 - testdata/crud/unified/deleteOne-let.json | 191 - testdata/crud/unified/deleteOne-let.yml | 91 - testdata/crud/unified/distinct-comment.json | 178 - testdata/crud/unified/distinct-comment.yml | 98 - testdata/crud/unified/distinct-hint.json | 139 - testdata/crud/unified/distinct-hint.yml | 73 - .../estimatedDocumentCount-comment.json | 170 - .../estimatedDocumentCount-comment.yml | 95 - .../crud/unified/estimatedDocumentCount.json | 357 - .../crud/unified/estimatedDocumentCount.yml | 181 - .../find-allowdiskuse-clientError.json | 79 - .../unified/find-allowdiskuse-clientError.yml | 55 - .../find-allowdiskuse-serverError.json | 100 - .../unified/find-allowdiskuse-serverError.yml | 68 - testdata/crud/unified/find-allowdiskuse.json | 120 - testdata/crud/unified/find-allowdiskuse.yml | 79 - testdata/crud/unified/find-comment.json | 403 - testdata/crud/unified/find-comment.yml | 166 - testdata/crud/unified/find-let.json | 148 - testdata/crud/unified/find-let.yml | 71 - testdata/crud/unified/find.json | 156 - testdata/crud/unified/find.yml | 68 - .../unified/findOneAndDelete-comment.json | 211 - .../crud/unified/findOneAndDelete-comment.yml | 96 - .../findOneAndDelete-hint-clientError.json | 133 - .../findOneAndDelete-hint-clientError.yml | 91 - .../findOneAndDelete-hint-serverError.json | 162 - .../findOneAndDelete-hint-serverError.yml | 107 - .../crud/unified/findOneAndDelete-hint.json | 155 - .../crud/unified/findOneAndDelete-hint.yml | 102 - .../crud/unified/findOneAndDelete-let.json | 180 - .../crud/unified/findOneAndDelete-let.yml | 86 - .../unified/findOneAndReplace-comment.json | 234 - .../unified/findOneAndReplace-comment.yml | 101 - .../findOneAndReplace-dots_and_dollars.json | 430 - .../findOneAndReplace-dots_and_dollars.yml | 140 - .../findOneAndReplace-hint-clientError.json | 139 - .../findOneAndReplace-hint-clientError.yml | 83 - .../findOneAndReplace-hint-serverError.json | 172 - .../findOneAndReplace-hint-serverError.yml | 99 - .../crud/unified/findOneAndReplace-hint.json | 173 - .../crud/unified/findOneAndReplace-hint.yml | 98 - .../crud/unified/findOneAndReplace-let.json | 197 - .../crud/unified/findOneAndReplace-let.yml | 94 - .../unified/findOneAndUpdate-comment.json | 228 - .../crud/unified/findOneAndUpdate-comment.yml | 95 - .../findOneAndUpdate-dots_and_dollars.json | 380 - .../findOneAndUpdate-dots_and_dollars.yml | 127 - .../findOneAndUpdate-errorResponse.json | 132 - .../findOneAndUpdate-errorResponse.yml | 69 - .../findOneAndUpdate-hint-clientError.json | 143 - .../findOneAndUpdate-hint-clientError.yml | 84 - .../findOneAndUpdate-hint-serverError.json | 180 - .../findOneAndUpdate-hint-serverError.yml | 100 - .../crud/unified/findOneAndUpdate-hint.json | 181 - .../crud/unified/findOneAndUpdate-hint.yml | 99 - .../crud/unified/findOneAndUpdate-let.json | 217 - .../crud/unified/findOneAndUpdate-let.yml | 96 - testdata/crud/unified/insertMany-comment.json | 226 - testdata/crud/unified/insertMany-comment.yml | 93 - .../unified/insertMany-dots_and_dollars.json | 338 - .../unified/insertMany-dots_and_dollars.yml | 128 - testdata/crud/unified/insertOne-comment.json | 220 - testdata/crud/unified/insertOne-comment.yml | 92 - .../unified/insertOne-dots_and_dollars.json | 614 -- .../unified/insertOne-dots_and_dollars.yml | 238 - .../crud/unified/insertOne-errorResponse.json | 82 - .../crud/unified/insertOne-errorResponse.yml | 46 - testdata/crud/unified/replaceOne-comment.json | 230 - testdata/crud/unified/replaceOne-comment.yml | 99 - .../unified/replaceOne-dots_and_dollars.json | 567 -- .../unified/replaceOne-dots_and_dollars.yml | 180 - testdata/crud/unified/replaceOne-hint.json | 203 - testdata/crud/unified/replaceOne-hint.yml | 108 - testdata/crud/unified/replaceOne-let.json | 219 - testdata/crud/unified/replaceOne-let.yml | 98 - testdata/crud/unified/replaceOne-sort.json | 232 - testdata/crud/unified/replaceOne-sort.yml | 94 - .../crud/unified/replaceOne-validation.json | 82 - .../crud/unified/replaceOne-validation.yml | 37 - ...ged-bulkWrite-delete-hint-clientError.json | 193 - ...dged-bulkWrite-delete-hint-clientError.yml | 112 - ...ged-bulkWrite-update-hint-clientError.json | 284 - ...dged-bulkWrite-update-hint-clientError.yml | 147 - ...nowledged-deleteMany-hint-clientError.json | 149 - ...knowledged-deleteMany-hint-clientError.yml | 86 - ...knowledged-deleteOne-hint-clientError.json | 133 - ...cknowledged-deleteOne-hint-clientError.yml | 79 - ...ged-findOneAndDelete-hint-clientError.json | 133 - ...dged-findOneAndDelete-hint-clientError.yml | 90 - ...ed-findOneAndReplace-hint-clientError.json | 139 - ...ged-findOneAndReplace-hint-clientError.yml | 82 - ...ged-findOneAndUpdate-hint-clientError.json | 143 - ...dged-findOneAndUpdate-hint-clientError.yml | 83 - ...nowledged-replaceOne-hint-clientError.json | 143 - ...knowledged-replaceOne-hint-clientError.yml | 83 - ...nowledged-updateMany-hint-clientError.json | 159 - ...knowledged-updateMany-hint-clientError.yml | 90 - ...knowledged-updateOne-hint-clientError.json | 147 - ...cknowledged-updateOne-hint-clientError.yml | 84 - testdata/crud/unified/updateMany-comment.json | 254 - testdata/crud/unified/updateMany-comment.yml | 104 - .../unified/updateMany-dots_and_dollars.json | 404 - .../unified/updateMany-dots_and_dollars.yml | 138 - .../unified/updateMany-hint-clientError.json | 159 - .../unified/updateMany-hint-clientError.yml | 91 - .../unified/updateMany-hint-serverError.json | 216 - .../unified/updateMany-hint-serverError.yml | 115 - testdata/crud/unified/updateMany-hint.json | 219 - testdata/crud/unified/updateMany-hint.yml | 115 - testdata/crud/unified/updateMany-let.json | 249 - testdata/crud/unified/updateMany-let.yml | 107 - .../crud/unified/updateMany-validation.json | 98 - .../crud/unified/updateMany-validation.yml | 39 - testdata/crud/unified/updateOne-comment.json | 260 - testdata/crud/unified/updateOne-comment.yml | 104 - .../unified/updateOne-dots_and_dollars.json | 412 - .../unified/updateOne-dots_and_dollars.yml | 138 - .../crud/unified/updateOne-errorResponse.json | 87 - .../crud/unified/updateOne-errorResponse.yml | 47 - .../unified/updateOne-hint-clientError.json | 147 - .../unified/updateOne-hint-clientError.yml | 85 - .../unified/updateOne-hint-serverError.json | 208 - .../unified/updateOne-hint-serverError.yml | 109 - testdata/crud/unified/updateOne-hint.json | 211 - testdata/crud/unified/updateOne-hint.yml | 109 - testdata/crud/unified/updateOne-let.json | 227 - testdata/crud/unified/updateOne-let.yml | 102 - testdata/crud/unified/updateOne-sort.json | 240 - testdata/crud/unified/updateOne-sort.yml | 96 - .../crud/unified/updateOne-validation.json | 80 - .../crud/unified/updateOne-validation.yml | 37 - .../crud/unified/updateWithPipelines.json | 494 - testdata/crud/unified/updateWithPipelines.yml | 299 - .../crud/v1/read/aggregate-collation.json | 39 - testdata/crud/v1/read/aggregate-collation.yml | 18 - testdata/crud/v1/read/aggregate-out.json | 102 - testdata/crud/v1/read/aggregate-out.yml | 44 - testdata/crud/v1/read/aggregate.json | 53 - testdata/crud/v1/read/aggregate.yml | 21 - testdata/crud/v1/read/count-collation.json | 48 - testdata/crud/v1/read/count-collation.yml | 26 - testdata/crud/v1/read/count-empty.json | 39 - testdata/crud/v1/read/count-empty.yml | 29 - testdata/crud/v1/read/count.json | 112 - testdata/crud/v1/read/count.yml | 74 - testdata/crud/v1/read/distinct-collation.json | 34 - testdata/crud/v1/read/distinct-collation.yml | 18 - testdata/crud/v1/read/distinct.json | 55 - testdata/crud/v1/read/distinct.yml | 32 - testdata/crud/v1/read/find-collation.json | 35 - testdata/crud/v1/read/find-collation.yml | 16 - testdata/crud/v1/read/find.json | 105 - testdata/crud/v1/read/find.yml | 49 - .../crud/v1/write/bulkWrite-arrayFilters.json | 111 - .../crud/v1/write/bulkWrite-arrayFilters.yml | 45 - .../crud/v1/write/bulkWrite-collation.json | 218 - .../crud/v1/write/bulkWrite-collation.yml | 102 - testdata/crud/v1/write/bulkWrite.json | 778 -- testdata/crud/v1/write/bulkWrite.yml | 401 - .../crud/v1/write/deleteMany-collation.json | 48 - .../crud/v1/write/deleteMany-collation.yml | 23 - testdata/crud/v1/write/deleteMany.json | 76 - testdata/crud/v1/write/deleteMany.yml | 35 - .../crud/v1/write/deleteOne-collation.json | 52 - .../crud/v1/write/deleteOne-collation.yml | 23 - testdata/crud/v1/write/deleteOne.json | 96 - testdata/crud/v1/write/deleteOne.yml | 48 - .../v1/write/findOneAndDelete-collation.json | 60 - .../v1/write/findOneAndDelete-collation.yml | 24 - testdata/crud/v1/write/findOneAndDelete.json | 127 - testdata/crud/v1/write/findOneAndDelete.yml | 53 - .../v1/write/findOneAndReplace-collation.json | 59 - .../v1/write/findOneAndReplace-collation.yml | 25 - .../v1/write/findOneAndReplace-upsert.json | 201 - .../v1/write/findOneAndReplace-upsert.yml | 91 - testdata/crud/v1/write/findOneAndReplace.json | 273 - testdata/crud/v1/write/findOneAndReplace.yml | 113 - .../write/findOneAndUpdate-arrayFilters.json | 203 - .../write/findOneAndUpdate-arrayFilters.yml | 69 - .../v1/write/findOneAndUpdate-collation.json | 68 - .../v1/write/findOneAndUpdate-collation.yml | 28 - testdata/crud/v1/write/findOneAndUpdate.json | 379 - testdata/crud/v1/write/findOneAndUpdate.yml | 163 - testdata/crud/v1/write/insertMany.json | 159 - testdata/crud/v1/write/insertMany.yml | 77 - testdata/crud/v1/write/insertOne.json | 39 - testdata/crud/v1/write/insertOne.yml | 18 - .../crud/v1/write/replaceOne-collation.json | 54 - .../crud/v1/write/replaceOne-collation.yml | 25 - testdata/crud/v1/write/replaceOne.json | 205 - testdata/crud/v1/write/replaceOne.yml | 102 - .../v1/write/updateMany-arrayFilters.json | 185 - .../crud/v1/write/updateMany-arrayFilters.yml | 66 - .../crud/v1/write/updateMany-collation.json | 63 - .../crud/v1/write/updateMany-collation.yml | 29 - testdata/crud/v1/write/updateMany.json | 183 - testdata/crud/v1/write/updateMany.yml | 87 - .../crud/v1/write/updateOne-arrayFilters.json | 395 - .../crud/v1/write/updateOne-arrayFilters.yml | 114 - .../crud/v1/write/updateOne-collation.json | 55 - .../crud/v1/write/updateOne-collation.yml | 26 - testdata/crud/v1/write/updateOne.json | 167 - testdata/crud/v1/write/updateOne.yml | 84 - testdata/extended_bson/deep_bson.json.gz | Bin 616 -> 0 bytes testdata/extended_bson/flat_bson.json.gz | Bin 5078 -> 0 bytes testdata/extended_bson/full_bson.json.gz | Bin 3345 -> 0 bytes testdata/gridfs/delete.json | 799 -- testdata/gridfs/delete.yml | 198 - testdata/gridfs/download.json | 558 -- testdata/gridfs/download.yml | 241 - testdata/gridfs/downloadByName.json | 330 - testdata/gridfs/downloadByName.yml | 159 - testdata/gridfs/upload-disableMD5.json | 172 - testdata/gridfs/upload-disableMD5.yml | 92 - testdata/gridfs/upload.json | 616 -- testdata/gridfs/upload.yml | 288 - .../index-management/createSearchIndex.json | 210 - .../index-management/createSearchIndex.yml | 92 - .../index-management/createSearchIndexes.json | 248 - .../index-management/createSearchIndexes.yml | 114 - .../index-management/dropSearchIndex.json | 74 - testdata/index-management/dropSearchIndex.yml | 43 - .../index-management/listSearchIndexes.json | 156 - .../index-management/listSearchIndexes.yml | 88 - .../searchIndexIgnoresReadWriteConcern.json | 252 - .../searchIndexIgnoresReadWriteConcern.yml | 146 - .../index-management/updateSearchIndex.json | 76 - .../index-management/updateSearchIndex.yml | 45 - .../loadBalanced-directConnection.json | 15 - .../loadBalanced-directConnection.yml | 14 - .../loadBalanced-no-results.json | 7 - .../load-balanced/loadBalanced-no-results.yml | 5 - .../loadBalanced-replicaSet-errors.json | 7 - .../loadBalanced-replicaSet-errors.yml | 6 - .../loadBalanced-true-multiple-hosts.json | 7 - .../loadBalanced-true-multiple-hosts.yml | 5 - .../load-balanced/loadBalanced-true-txt.json | 14 - .../load-balanced/loadBalanced-true-txt.yml | 11 - ...-conflicts_with_loadBalanced-true-txt.json | 7 - ...s-conflicts_with_loadBalanced-true-txt.yml | 5 - ...osts-conflicts_with_loadBalanced-true.json | 7 - ...Hosts-conflicts_with_loadBalanced-true.yml | 5 - .../load-balanced/srvMaxHosts-zero-txt.json | 15 - .../load-balanced/srvMaxHosts-zero-txt.yml | 11 - .../load-balanced/srvMaxHosts-zero.json | 15 - .../load-balanced/srvMaxHosts-zero.yml | 11 - .../replica-set/direct-connection-false.json | 16 - .../replica-set/direct-connection-false.yml | 11 - .../replica-set/direct-connection-true.json | 7 - .../replica-set/direct-connection-true.yml | 5 - .../replica-set/encoded-userinfo-and-db.json | 22 - .../replica-set/encoded-userinfo-and-db.yml | 19 - .../replica-set/loadBalanced-false-txt.json | 16 - .../replica-set/loadBalanced-false-txt.yml | 11 - .../replica-set/longer-parent-in-return.json | 17 - .../replica-set/longer-parent-in-return.yml | 12 - .../replica-set/misformatted-option.json | 7 - .../replica-set/misformatted-option.yml | 5 - .../replica-set/no-results.json | 7 - .../replica-set/no-results.yml | 5 - .../replica-set/not-enough-parts.json | 7 - .../replica-set/not-enough-parts.yml | 5 - .../replica-set/one-result-default-port.json | 16 - .../replica-set/one-result-default-port.yml | 11 - .../one-txt-record-multiple-strings.json | 16 - .../one-txt-record-multiple-strings.yml | 11 - .../replica-set/one-txt-record.json | 17 - .../replica-set/one-txt-record.yml | 12 - .../replica-set/parent-part-mismatch1.json | 7 - .../replica-set/parent-part-mismatch1.yml | 5 - .../replica-set/parent-part-mismatch2.json | 7 - .../replica-set/parent-part-mismatch2.yml | 5 - .../replica-set/parent-part-mismatch3.json | 7 - .../replica-set/parent-part-mismatch3.yml | 5 - .../replica-set/parent-part-mismatch4.json | 7 - .../replica-set/parent-part-mismatch4.yml | 5 - .../replica-set/parent-part-mismatch5.json | 7 - .../replica-set/parent-part-mismatch5.yml | 5 - .../returned-parent-too-short.json | 7 - .../replica-set/returned-parent-too-short.yml | 5 - .../replica-set/returned-parent-wrong.json | 7 - .../replica-set/returned-parent-wrong.yml | 5 - .../replica-set/srv-service-name.json | 17 - .../replica-set/srv-service-name.yml | 12 - ...axHosts-conflicts_with_replicaSet-txt.json | 7 - ...MaxHosts-conflicts_with_replicaSet-txt.yml | 5 - ...srvMaxHosts-conflicts_with_replicaSet.json | 7 - .../srvMaxHosts-conflicts_with_replicaSet.yml | 5 - .../srvMaxHosts-equal_to_srv_records.json | 18 - .../srvMaxHosts-equal_to_srv_records.yml | 17 - .../srvMaxHosts-greater_than_srv_records.json | 17 - .../srvMaxHosts-greater_than_srv_records.yml | 16 - .../srvMaxHosts-less_than_srv_records.json | 14 - .../srvMaxHosts-less_than_srv_records.yml | 16 - .../replica-set/srvMaxHosts-zero-txt.json | 18 - .../replica-set/srvMaxHosts-zero-txt.yml | 16 - .../replica-set/srvMaxHosts-zero.json | 18 - .../replica-set/srvMaxHosts-zero.yml | 16 - .../replica-set/two-results-default-port.json | 17 - .../replica-set/two-results-default-port.yml | 12 - .../two-results-nonstandard-port.json | 17 - .../two-results-nonstandard-port.yml | 12 - .../replica-set/two-txt-records.json | 7 - .../replica-set/two-txt-records.yml | 5 - .../txt-record-not-allowed-option.json | 7 - .../txt-record-not-allowed-option.yml | 5 - ...txt-record-with-overridden-ssl-option.json | 17 - .../txt-record-with-overridden-ssl-option.yml | 12 - ...txt-record-with-overridden-uri-option.json | 17 - .../txt-record-with-overridden-uri-option.yml | 12 - .../txt-record-with-unallowed-option.json | 7 - .../txt-record-with-unallowed-option.yml | 5 - .../replica-set/uri-with-admin-database.json | 20 - .../replica-set/uri-with-admin-database.yml | 14 - .../replica-set/uri-with-auth.json | 22 - .../replica-set/uri-with-auth.yml | 19 - .../replica-set/uri-with-port.json | 7 - .../replica-set/uri-with-port.yml | 5 - .../replica-set/uri-with-two-hosts.json | 7 - .../replica-set/uri-with-two-hosts.yml | 5 - .../uri-with-uppercase-hostname.json | 16 - .../uri-with-uppercase-hostname.yml | 11 - .../srvMaxHosts-equal_to_srv_records.json | 17 - .../srvMaxHosts-equal_to_srv_records.yml | 14 - .../srvMaxHosts-greater_than_srv_records.json | 16 - .../srvMaxHosts-greater_than_srv_records.yml | 13 - .../srvMaxHosts-less_than_srv_records.json | 10 - .../srvMaxHosts-less_than_srv_records.yml | 11 - .../sharded/srvMaxHosts-zero.json | 16 - .../sharded/srvMaxHosts-zero.yml | 12 - testdata/load-balancers/cursors.json | 1238 --- testdata/load-balancers/cursors.yml | 507 - testdata/load-balancers/event-monitoring.json | 184 - testdata/load-balancers/event-monitoring.yml | 99 - .../lb-connection-establishment.json | 58 - .../lb-connection-establishment.yml | 36 - .../non-lb-connection-establishment.json | 92 - .../non-lb-connection-establishment.yml | 56 - .../load-balancers/sdam-error-handling.json | 514 - .../load-balancers/sdam-error-handling.yml | 274 - testdata/load-balancers/server-selection.json | 82 - testdata/load-balancers/server-selection.yml | 50 - testdata/load-balancers/transactions.json | 1621 ---- testdata/load-balancers/transactions.yml | 598 -- .../load-balancers/wait-queue-timeouts.json | 153 - .../load-balancers/wait-queue-timeouts.yml | 82 - .../DefaultNoMaxStaleness.json | 74 - .../DefaultNoMaxStaleness.yml | 26 - .../ReplicaSetNoPrimary/LastUpdateTime.json | 88 - .../ReplicaSetNoPrimary/LastUpdateTime.yml | 33 - .../MaxStalenessTooSmall.json | 20 - .../MaxStalenessTooSmall.yml | 15 - .../ReplicaSetNoPrimary/Nearest.json | 88 - .../ReplicaSetNoPrimary/Nearest.yml | 33 - .../ReplicaSetNoPrimary/Nearest2.json | 88 - .../ReplicaSetNoPrimary/Nearest2.yml | 33 - .../ReplicaSetNoPrimary/NoKnownServers.json | 21 - .../ReplicaSetNoPrimary/NoKnownServers.yml | 16 - .../ReplicaSetNoPrimary/PrimaryPreferred.json | 64 - .../ReplicaSetNoPrimary/PrimaryPreferred.yml | 27 - .../PrimaryPreferred_tags.json | 84 - .../PrimaryPreferred_tags.yml | 36 - .../ReplicaSetNoPrimary/Secondary.json | 111 - .../ReplicaSetNoPrimary/Secondary.yml | 51 - .../SecondaryPreferred.json | 63 - .../SecondaryPreferred.yml | 26 - .../SecondaryPreferred_tags.json | 111 - .../SecondaryPreferred_tags.yml | 51 - .../ReplicaSetNoPrimary/ZeroMaxStaleness.json | 36 - .../ReplicaSetNoPrimary/ZeroMaxStaleness.yml | 23 - .../DefaultNoMaxStaleness.json | 74 - .../DefaultNoMaxStaleness.yml | 26 - .../ReplicaSetWithPrimary/LastUpdateTime.json | 88 - .../ReplicaSetWithPrimary/LastUpdateTime.yml | 35 - .../ReplicaSetWithPrimary/LongHeartbeat.json | 76 - .../ReplicaSetWithPrimary/LongHeartbeat.yml | 29 - .../ReplicaSetWithPrimary/LongHeartbeat2.json | 37 - .../ReplicaSetWithPrimary/LongHeartbeat2.yml | 25 - .../MaxStalenessTooSmall.json | 37 - .../MaxStalenessTooSmall.yml | 26 - .../MaxStalenessWithModePrimary.json | 35 - .../MaxStalenessWithModePrimary.yml | 23 - .../ReplicaSetWithPrimary/Nearest.json | 88 - .../ReplicaSetWithPrimary/Nearest.yml | 33 - .../ReplicaSetWithPrimary/Nearest2.json | 88 - .../ReplicaSetWithPrimary/Nearest2.yml | 33 - .../ReplicaSetWithPrimary/Nearest_tags.json | 84 - .../ReplicaSetWithPrimary/Nearest_tags.yml | 36 - .../PrimaryPreferred.json | 64 - .../PrimaryPreferred.yml | 27 - .../SecondaryPreferred.json | 63 - .../SecondaryPreferred.yml | 26 - .../SecondaryPreferred_tags.json | 138 - .../SecondaryPreferred_tags.yml | 59 - .../SecondaryPreferred_tags2.json | 96 - .../SecondaryPreferred_tags2.yml | 43 - .../ReplicaSetWithPrimary/Secondary_tags.json | 138 - .../ReplicaSetWithPrimary/Secondary_tags.yml | 59 - .../Secondary_tags2.json | 96 - .../ReplicaSetWithPrimary/Secondary_tags2.yml | 43 - .../ZeroMaxStaleness.json | 36 - .../ZeroMaxStaleness.yml | 23 - .../Sharded/SmallMaxStaleness.json | 76 - .../Sharded/SmallMaxStaleness.yml | 28 - .../Single/SmallMaxStaleness.json | 52 - .../Single/SmallMaxStaleness.yml | 20 - .../Unknown/SmallMaxStaleness.json | 19 - .../Unknown/SmallMaxStaleness.yml | 15 - testdata/mongocrypt/collection-info.json | 37 - testdata/mongocrypt/command-reply.json | 13 - testdata/mongocrypt/command.json | 6 - .../mongocrypt/encrypted-command-reply.json | 16 - testdata/mongocrypt/encrypted-command.json | 11 - testdata/mongocrypt/encrypted-value.json | 6 - testdata/mongocrypt/json-schema.json | 15 - testdata/mongocrypt/key-document.json | 36 - .../mongocrypt/key-filter-keyAltName.json | 14 - testdata/mongocrypt/key-filter.json | 19 - testdata/mongocrypt/kms-reply.txt | 6 - .../mongocrypt/list-collections-filter.json | 3 - testdata/mongocrypt/local-key-document.json | 24 - .../mongocrypt/mongocryptd-command-local.json | 22 - .../mongocryptd-command-remote.json | 22 - testdata/mongocrypt/mongocryptd-reply.json | 18 - .../connection-string/read-concern.json | 56 - .../connection-string/read-concern.yml | 37 - .../connection-string/write-concern.json | 122 - .../connection-string/write-concern.yml | 81 - .../document/read-concern.json | 66 - .../document/read-concern.yml | 37 - .../document/write-concern.json | 178 - .../document/write-concern.yml | 102 - .../operation/default-write-concern-2.6.json | 544 -- .../operation/default-write-concern-2.6.yml | 215 - .../operation/default-write-concern-3.2.json | 125 - .../operation/default-write-concern-3.2.yml | 58 - .../operation/default-write-concern-3.4.json | 216 - .../operation/default-write-concern-3.4.yml | 95 - .../operation/default-write-concern-4.2.json | 87 - .../operation/default-write-concern-4.2.yml | 36 - .../legacy/aggregate-merge.json | 98 - .../legacy/aggregate-merge.yml | 39 - .../legacy/aggregate-serverErrors.json | 1208 --- .../legacy/aggregate-serverErrors.yml | 157 - .../retryable-reads/legacy/aggregate.json | 406 - testdata/retryable-reads/legacy/aggregate.yml | 87 - ...angeStreams-client.watch-serverErrors.json | 740 -- ...hangeStreams-client.watch-serverErrors.yml | 150 - .../legacy/changeStreams-client.watch.json | 209 - .../legacy/changeStreams-client.watch.yml | 62 - ...ngeStreams-db.coll.watch-serverErrors.json | 690 -- ...angeStreams-db.coll.watch-serverErrors.yml | 150 - .../legacy/changeStreams-db.coll.watch.json | 197 - .../legacy/changeStreams-db.coll.watch.yml | 66 - .../changeStreams-db.watch-serverErrors.json | 690 -- .../changeStreams-db.watch-serverErrors.yml | 154 - .../legacy/changeStreams-db.watch.json | 197 - .../legacy/changeStreams-db.watch.yml | 62 - .../legacy/count-serverErrors.json | 586 -- .../legacy/count-serverErrors.yml | 150 - testdata/retryable-reads/legacy/count.json | 179 - testdata/retryable-reads/legacy/count.yml | 64 - .../legacy/countDocuments-serverErrors.json | 911 -- .../legacy/countDocuments-serverErrors.yml | 150 - .../legacy/countDocuments.json | 257 - .../retryable-reads/legacy/countDocuments.yml | 64 - .../legacy/distinct-serverErrors.json | 838 -- .../legacy/distinct-serverErrors.yml | 156 - testdata/retryable-reads/legacy/distinct.json | 245 - testdata/retryable-reads/legacy/distinct.yml | 71 - .../estimatedDocumentCount-serverErrors.json | 546 -- .../estimatedDocumentCount-serverErrors.yml | 148 - .../legacy/estimatedDocumentCount.json | 166 - .../legacy/estimatedDocumentCount.yml | 62 - .../legacy/find-serverErrors.json | 962 -- .../legacy/find-serverErrors.yml | 160 - testdata/retryable-reads/legacy/find.json | 348 - testdata/retryable-reads/legacy/find.yml | 86 - .../legacy/findOne-serverErrors.json | 732 -- .../legacy/findOne-serverErrors.yml | 154 - testdata/retryable-reads/legacy/findOne.json | 223 - testdata/retryable-reads/legacy/findOne.yml | 68 - .../legacy/gridfs-download-serverErrors.json | 925 -- .../legacy/gridfs-download-serverErrors.yml | 173 - .../legacy/gridfs-download.json | 270 - .../legacy/gridfs-download.yml | 79 - .../gridfs-downloadByName-serverErrors.json | 849 -- .../gridfs-downloadByName-serverErrors.yml | 174 - .../legacy/gridfs-downloadByName.json | 250 - .../legacy/gridfs-downloadByName.yml | 79 - .../listCollectionNames-serverErrors.json | 502 - .../listCollectionNames-serverErrors.yml | 143 - .../legacy/listCollectionNames.json | 150 - .../legacy/listCollectionNames.yml | 59 - .../listCollectionObjects-serverErrors.json | 502 - .../listCollectionObjects-serverErrors.yml | 144 - .../legacy/listCollectionObjects.json | 150 - .../legacy/listCollectionObjects.yml | 59 - .../legacy/listCollections-serverErrors.json | 502 - .../legacy/listCollections-serverErrors.yml | 143 - .../legacy/listCollections.json | 150 - .../legacy/listCollections.yml | 59 - .../listDatabaseNames-serverErrors.json | 502 - .../legacy/listDatabaseNames-serverErrors.yml | 143 - .../legacy/listDatabaseNames.json | 150 - .../legacy/listDatabaseNames.yml | 59 - .../listDatabaseObjects-serverErrors.json | 502 - .../listDatabaseObjects-serverErrors.yml | 144 - .../legacy/listDatabaseObjects.json | 150 - .../legacy/listDatabaseObjects.yml | 59 - .../legacy/listDatabases-serverErrors.json | 502 - .../legacy/listDatabases-serverErrors.yml | 144 - .../retryable-reads/legacy/listDatabases.json | 150 - .../retryable-reads/legacy/listDatabases.yml | 59 - .../legacy/listIndexNames-serverErrors.json | 527 - .../legacy/listIndexNames-serverErrors.yml | 144 - .../legacy/listIndexNames.json | 156 - .../retryable-reads/legacy/listIndexNames.yml | 60 - .../legacy/listIndexes-serverErrors.json | 527 - .../legacy/listIndexes-serverErrors.yml | 145 - .../retryable-reads/legacy/listIndexes.json | 156 - .../retryable-reads/legacy/listIndexes.yml | 60 - .../retryable-reads/legacy/mapReduce.json | 188 - testdata/retryable-reads/legacy/mapReduce.yml | 60 - .../readConcernMajorityNotAvailableYet.json | 147 - .../readConcernMajorityNotAvailableYet.yml | 68 - .../unified/bulkWrite-serverErrors.json | 285 - .../unified/bulkWrite-serverErrors.yml | 136 - .../client-bulkWrite-clientErrors.json | 351 - .../unified/client-bulkWrite-clientErrors.yml | 173 - .../client-bulkWrite-serverErrors.json | 873 -- .../unified/client-bulkWrite-serverErrors.yml | 413 - .../insertOne-noWritesPerformedError.yml | 54 - .../insertOne-noWritesPerformedErrors.json | 90 - .../unified/insertOne-serverErrors.json | 865 -- .../unified/insertOne-serverErrors.yml | 406 - testdata/run-command/runCommand.json | 634 -- testdata/run-command/runCommand.yml | 319 - testdata/run-command/runCursorCommand.json | 877 -- testdata/run-command/runCursorCommand.yml | 391 - .../errors/error_handling_handshake.json | 113 - .../errors/error_handling_handshake.yml | 55 - .../errors/generate-error-tests.py | 172 - .../errors/non-stale-network-error.json | 80 - .../errors/non-stale-network-error.yml | 47 - .../non-stale-network-timeout-error.json | 88 - .../non-stale-network-timeout-error.yml | 38 - ...Version-greater-InterruptedAtShutdown.json | 100 - ...yVersion-greater-InterruptedAtShutdown.yml | 61 - ...eater-InterruptedDueToReplStateChange.json | 100 - ...reater-InterruptedDueToReplStateChange.yml | 61 - ...ologyVersion-greater-LegacyNotPrimary.json | 100 - ...pologyVersion-greater-LegacyNotPrimary.yml | 61 - ...rsion-greater-NotPrimaryNoSecondaryOk.json | 100 - ...ersion-greater-NotPrimaryNoSecondaryOk.yml | 61 - ...Version-greater-NotPrimaryOrSecondary.json | 100 - ...yVersion-greater-NotPrimaryOrSecondary.yml | 61 - ...ogyVersion-greater-NotWritablePrimary.json | 100 - ...logyVersion-greater-NotWritablePrimary.yml | 61 - ...ogyVersion-greater-PrimarySteppedDown.json | 100 - ...logyVersion-greater-PrimarySteppedDown.yml | 61 - ...ogyVersion-greater-ShutdownInProgress.json | 100 - ...logyVersion-greater-ShutdownInProgress.yml | 61 - ...Version-missing-InterruptedAtShutdown.json | 85 - ...yVersion-missing-InterruptedAtShutdown.yml | 52 - ...ssing-InterruptedDueToReplStateChange.json | 85 - ...issing-InterruptedDueToReplStateChange.yml | 52 - ...ologyVersion-missing-LegacyNotPrimary.json | 85 - ...pologyVersion-missing-LegacyNotPrimary.yml | 52 - ...rsion-missing-NotPrimaryNoSecondaryOk.json | 85 - ...ersion-missing-NotPrimaryNoSecondaryOk.yml | 52 - ...Version-missing-NotPrimaryOrSecondary.json | 85 - ...yVersion-missing-NotPrimaryOrSecondary.yml | 52 - ...ogyVersion-missing-NotWritablePrimary.json | 85 - ...logyVersion-missing-NotWritablePrimary.yml | 52 - ...ogyVersion-missing-PrimarySteppedDown.json | 85 - ...logyVersion-missing-PrimarySteppedDown.yml | 52 - ...ogyVersion-missing-ShutdownInProgress.json | 85 - ...logyVersion-missing-ShutdownInProgress.yml | 52 - ...ccessId-changed-InterruptedAtShutdown.json | 100 - ...occessId-changed-InterruptedAtShutdown.yml | 61 - ...anged-InterruptedDueToReplStateChange.json | 100 - ...hanged-InterruptedDueToReplStateChange.yml | 61 - ...n-proccessId-changed-LegacyNotPrimary.json | 100 - ...on-proccessId-changed-LegacyNotPrimary.yml | 61 - ...essId-changed-NotPrimaryNoSecondaryOk.json | 100 - ...cessId-changed-NotPrimaryNoSecondaryOk.yml | 61 - ...ccessId-changed-NotPrimaryOrSecondary.json | 100 - ...occessId-changed-NotPrimaryOrSecondary.yml | 61 - ...proccessId-changed-NotWritablePrimary.json | 100 - ...-proccessId-changed-NotWritablePrimary.yml | 61 - ...proccessId-changed-PrimarySteppedDown.json | 100 - ...-proccessId-changed-PrimarySteppedDown.yml | 61 - ...proccessId-changed-ShutdownInProgress.json | 100 - ...-proccessId-changed-ShutdownInProgress.yml | 61 - .../non-stale-topologyVersion.yml.template | 52 - .../errors/post-42-InterruptedAtShutdown.json | 70 - .../errors/post-42-InterruptedAtShutdown.yml | 47 - ...st-42-InterruptedDueToReplStateChange.json | 70 - ...ost-42-InterruptedDueToReplStateChange.yml | 47 - .../errors/post-42-LegacyNotPrimary.json | 70 - .../errors/post-42-LegacyNotPrimary.yml | 47 - .../post-42-NotPrimaryNoSecondaryOk.json | 70 - .../post-42-NotPrimaryNoSecondaryOk.yml | 47 - .../errors/post-42-NotPrimaryOrSecondary.json | 70 - .../errors/post-42-NotPrimaryOrSecondary.yml | 47 - .../errors/post-42-NotWritablePrimary.json | 70 - .../errors/post-42-NotWritablePrimary.yml | 47 - .../errors/post-42-PrimarySteppedDown.json | 70 - .../errors/post-42-PrimarySteppedDown.yml | 47 - .../errors/post-42-ShutdownInProgress.json | 70 - .../errors/post-42-ShutdownInProgress.yml | 47 - .../errors/post-42.yml.template | 47 - .../errors/pre-42-InterruptedAtShutdown.json | 70 - .../errors/pre-42-InterruptedAtShutdown.yml | 47 - ...re-42-InterruptedDueToReplStateChange.json | 70 - ...pre-42-InterruptedDueToReplStateChange.yml | 47 - .../errors/pre-42-LegacyNotPrimary.json | 70 - .../errors/pre-42-LegacyNotPrimary.yml | 47 - .../pre-42-NotPrimaryNoSecondaryOk.json | 70 - .../errors/pre-42-NotPrimaryNoSecondaryOk.yml | 47 - .../errors/pre-42-NotPrimaryOrSecondary.json | 70 - .../errors/pre-42-NotPrimaryOrSecondary.yml | 47 - .../errors/pre-42-NotWritablePrimary.json | 70 - .../errors/pre-42-NotWritablePrimary.yml | 47 - .../errors/pre-42-PrimarySteppedDown.json | 70 - .../errors/pre-42-PrimarySteppedDown.yml | 47 - .../errors/pre-42-ShutdownInProgress.json | 70 - .../errors/pre-42-ShutdownInProgress.yml | 47 - .../errors/pre-42.yml.template | 47 - .../errors/prefer-error-code.json | 131 - .../errors/prefer-error-code.yml | 54 - ...tale-generation-InterruptedAtShutdown.json | 176 - ...stale-generation-InterruptedAtShutdown.yml | 91 - ...ation-InterruptedDueToReplStateChange.json | 176 - ...ration-InterruptedDueToReplStateChange.yml | 91 - ...le-generation-NotPrimaryNoSecondaryOk.json | 176 - ...ale-generation-NotPrimaryNoSecondaryOk.yml | 91 - ...tale-generation-NotPrimaryOrSecondary.json | 176 - ...stale-generation-NotPrimaryOrSecondary.yml | 91 - .../stale-generation-NotWritablePrimary.json | 176 - .../stale-generation-NotWritablePrimary.yml | 91 - .../stale-generation-PrimarySteppedDown.json | 176 - .../stale-generation-PrimarySteppedDown.yml | 91 - .../stale-generation-ShutdownInProgress.json | 176 - .../stale-generation-ShutdownInProgress.yml | 91 - ...dshakeCompletes-InterruptedAtShutdown.json | 176 - ...ndshakeCompletes-InterruptedAtShutdown.yml | 91 - ...letes-InterruptedDueToReplStateChange.json | 176 - ...pletes-InterruptedDueToReplStateChange.yml | 91 - ...erHandshakeCompletes-LegacyNotPrimary.json | 176 - ...terHandshakeCompletes-LegacyNotPrimary.yml | 91 - ...hakeCompletes-NotPrimaryNoSecondaryOk.json | 176 - ...shakeCompletes-NotPrimaryNoSecondaryOk.yml | 91 - ...dshakeCompletes-NotPrimaryOrSecondary.json | 176 - ...ndshakeCompletes-NotPrimaryOrSecondary.yml | 91 - ...HandshakeCompletes-NotWritablePrimary.json | 176 - ...rHandshakeCompletes-NotWritablePrimary.yml | 91 - ...HandshakeCompletes-PrimarySteppedDown.json | 176 - ...rHandshakeCompletes-PrimarySteppedDown.yml | 91 - ...HandshakeCompletes-ShutdownInProgress.json | 176 - ...rHandshakeCompletes-ShutdownInProgress.yml | 91 - ...ation-afterHandshakeCompletes-network.json | 163 - ...ration-afterHandshakeCompletes-network.yml | 82 - ...ation-afterHandshakeCompletes-timeout.json | 163 - ...ration-afterHandshakeCompletes-timeout.yml | 82 - ...dshakeCompletes-InterruptedAtShutdown.json | 176 - ...ndshakeCompletes-InterruptedAtShutdown.yml | 91 - ...letes-InterruptedDueToReplStateChange.json | 176 - ...pletes-InterruptedDueToReplStateChange.yml | 91 - ...reHandshakeCompletes-LegacyNotPrimary.json | 176 - ...oreHandshakeCompletes-LegacyNotPrimary.yml | 91 - ...hakeCompletes-NotPrimaryNoSecondaryOk.json | 176 - ...shakeCompletes-NotPrimaryNoSecondaryOk.yml | 91 - ...dshakeCompletes-NotPrimaryOrSecondary.json | 176 - ...ndshakeCompletes-NotPrimaryOrSecondary.yml | 91 - ...HandshakeCompletes-NotWritablePrimary.json | 176 - ...eHandshakeCompletes-NotWritablePrimary.yml | 91 - ...HandshakeCompletes-PrimarySteppedDown.json | 176 - ...eHandshakeCompletes-PrimarySteppedDown.yml | 91 - ...HandshakeCompletes-ShutdownInProgress.json | 176 - ...eHandshakeCompletes-ShutdownInProgress.yml | 91 - ...tion-beforeHandshakeCompletes-network.json | 163 - ...ation-beforeHandshakeCompletes-network.yml | 82 - ...tion-beforeHandshakeCompletes-timeout.json | 163 - ...ation-beforeHandshakeCompletes-timeout.yml | 82 - .../errors/stale-generation.yml.template | 81 - ...topologyVersion-InterruptedAtShutdown.json | 147 - ...-topologyVersion-InterruptedAtShutdown.yml | 65 - ...rsion-InterruptedDueToReplStateChange.json | 147 - ...ersion-InterruptedDueToReplStateChange.yml | 65 - ...tale-topologyVersion-LegacyNotPrimary.json | 147 - ...stale-topologyVersion-LegacyNotPrimary.yml | 65 - ...pologyVersion-NotPrimaryNoSecondaryOk.json | 147 - ...opologyVersion-NotPrimaryNoSecondaryOk.yml | 65 - ...topologyVersion-NotPrimaryOrSecondary.json | 147 - ...-topologyVersion-NotPrimaryOrSecondary.yml | 65 - ...le-topologyVersion-NotWritablePrimary.json | 147 - ...ale-topologyVersion-NotWritablePrimary.yml | 65 - ...le-topologyVersion-PrimarySteppedDown.json | 147 - ...ale-topologyVersion-PrimarySteppedDown.yml | 65 - ...le-topologyVersion-ShutdownInProgress.json | 147 - ...ale-topologyVersion-ShutdownInProgress.yml | 65 - .../errors/stale-topologyVersion.yml.template | 65 - .../errors/write_errors_ignored.json | 98 - .../errors/write_errors_ignored.yml | 42 - .../load-balanced/discover_load_balancer.json | 28 - .../load-balanced/discover_load_balancer.yml | 25 - .../monitoring/discovered_standalone.json | 105 - .../monitoring/discovered_standalone.yml | 70 - .../monitoring/load_balancer.json | 93 - .../monitoring/load_balancer.yml | 65 - .../replica_set_with_no_primary.json | 151 - .../replica_set_with_no_primary.yml | 112 - .../monitoring/replica_set_with_primary.json | 150 - .../monitoring/replica_set_with_primary.yml | 111 - .../monitoring/replica_set_with_removal.json | 161 - .../monitoring/replica_set_with_removal.yml | 111 - .../monitoring/required_replica_set.json | 152 - .../monitoring/required_replica_set.yml | 108 - .../monitoring/standalone.json | 105 - .../monitoring/standalone.yml | 70 - ...ne_suppress_equal_description_changes.json | 115 - ...one_suppress_equal_description_changes.yml | 73 - .../rs/compatible.json | 57 - .../rs/compatible.yml | 45 - .../rs/compatible_unknown.json | 40 - .../rs/compatible_unknown.yml | 34 - .../rs/discover_arbiters.json | 42 - .../rs/discover_arbiters.yml | 44 - .../rs/discover_arbiters_replicaset.json | 42 - .../rs/discover_arbiters_replicaset.yml | 44 - .../rs/discover_ghost.json | 32 - .../rs/discover_ghost.yml | 36 - .../rs/discover_ghost_replicaset.json | 36 - .../rs/discover_ghost_replicaset.yml | 42 - .../rs/discover_hidden.json | 46 - .../rs/discover_hidden.yml | 51 - .../rs/discover_hidden_replicaset.json | 46 - .../rs/discover_hidden_replicaset.yml | 51 - .../rs/discover_passives.json | 80 - .../rs/discover_passives.yml | 83 - .../rs/discover_passives_replicaset.json | 80 - .../rs/discover_passives_replicaset.yml | 83 - .../rs/discover_primary.json | 40 - .../rs/discover_primary.yml | 43 - .../rs/discover_primary_replicaset.json | 40 - .../rs/discover_primary_replicaset.yml | 43 - .../rs/discover_rsother.json | 45 - .../rs/discover_rsother.yml | 50 - .../rs/discover_rsother_replicaset.json | 66 - .../rs/discover_rsother_replicaset.yml | 68 - .../rs/discover_secondary.json | 41 - .../rs/discover_secondary.yml | 44 - .../rs/discover_secondary_replicaset.json | 41 - .../rs/discover_secondary_replicaset.yml | 44 - .../rs/discovery.json | 179 - .../rs/discovery.yml | 207 - .../rs/electionId_precedence_setVersion.json | 92 - .../rs/electionId_precedence_setVersion.yml | 62 - .../rs/equal_electionids.json | 73 - .../rs/equal_electionids.yml | 57 - .../rs/hosts_differ_from_seeds.json | 35 - .../rs/hosts_differ_from_seeds.yml | 37 - .../rs/incompatible_arbiter.json | 56 - .../rs/incompatible_arbiter.yml | 36 - .../rs/incompatible_ghost.json | 51 - .../rs/incompatible_ghost.yml | 34 - .../rs/incompatible_other.json | 56 - .../rs/incompatible_other.yml | 36 - .../rs/ls_timeout.json | 279 - .../rs/ls_timeout.yml | 249 - .../rs/member_reconfig.json | 69 - .../rs/member_reconfig.yml | 74 - .../rs/member_standalone.json | 60 - .../rs/member_standalone.yml | 66 - .../rs/new_primary.json | 74 - .../rs/new_primary.yml | 80 - .../rs/new_primary_new_electionid.json | 147 - .../rs/new_primary_new_electionid.yml | 119 - .../rs/new_primary_new_setversion.json | 147 - .../rs/new_primary_new_setversion.yml | 119 - .../rs/new_primary_wrong_set_name.json | 69 - .../rs/new_primary_wrong_set_name.yml | 77 - .../rs/non_rs_member.json | 30 - .../rs/non_rs_member.yml | 33 - .../rs/normalize_case.json | 49 - .../rs/normalize_case.yml | 52 - .../rs/normalize_case_me.json | 95 - .../rs/normalize_case_me.yml | 102 - .../rs/null_election_id-pre-6.0.json | 203 - .../rs/null_election_id-pre-6.0.yml | 175 - .../rs/null_election_id.json | 209 - .../rs/null_election_id.yml | 177 - .../rs/primary_becomes_ghost.json | 61 - .../rs/primary_becomes_ghost.yml | 65 - .../rs/primary_becomes_mongos.json | 56 - .../rs/primary_becomes_mongos.yml | 58 - .../rs/primary_becomes_standalone.json | 53 - .../rs/primary_becomes_standalone.yml | 55 - .../rs/primary_changes_set_name.json | 59 - .../rs/primary_changes_set_name.yml | 63 - .../rs/primary_disconnect.json | 54 - .../rs/primary_disconnect.yml | 59 - .../rs/primary_disconnect_electionid.json | 235 - .../rs/primary_disconnect_electionid.yml | 189 - .../rs/primary_disconnect_setversion.json | 235 - .../rs/primary_disconnect_setversion.yml | 189 - ...int_from_secondary_with_mismatched_me.json | 68 - ...hint_from_secondary_with_mismatched_me.yml | 64 - .../rs/primary_mismatched_me.json | 41 - .../rs/primary_mismatched_me.yml | 27 - .../rs/primary_mismatched_me_not_removed.json | 79 - .../rs/primary_mismatched_me_not_removed.yml | 75 - .../rs/primary_reports_new_member.json | 155 - .../rs/primary_reports_new_member.yml | 175 - .../primary_to_no_primary_mismatched_me.json | 76 - .../primary_to_no_primary_mismatched_me.yml | 81 - .../rs/primary_wrong_set_name.json | 30 - .../rs/primary_wrong_set_name.yml | 30 - .../rs/repeated.json | 144 - .../rs/repeated.yml | 105 - .../rs/replicaset_rsnp.json | 26 - .../rs/replicaset_rsnp.yml | 21 - .../rs/response_from_removed.json | 66 - .../rs/response_from_removed.yml | 69 - .../rs/sec_not_auth.json | 56 - .../rs/sec_not_auth.yml | 55 - .../rs/secondary_ignore_ok_0-pre-6.0.json | 83 - .../rs/secondary_ignore_ok_0-pre-6.0.yml | 87 - .../rs/secondary_ignore_ok_0.json | 83 - .../rs/secondary_ignore_ok_0.yml | 87 - .../rs/secondary_mismatched_me.json | 41 - .../rs/secondary_mismatched_me.yml | 28 - .../rs/secondary_wrong_set_name.json | 31 - .../rs/secondary_wrong_set_name.yml | 31 - ...secondary_wrong_set_name_with_primary.json | 71 - .../secondary_wrong_set_name_with_primary.yml | 75 - .../rs/set_version_can_rollback.json | 147 - .../rs/set_version_can_rollback.yml | 101 - ...tversion_equal_max_without_electionid.json | 84 - ...etversion_equal_max_without_electionid.yml | 78 - ...on_greaterthan_max_without_electionid.json | 84 - ...ion_greaterthan_max_without_electionid.yml | 79 - ...setversion_without_electionid-pre-6.0.json | 84 - .../setversion_without_electionid-pre-6.0.yml | 79 - .../rs/setversion_without_electionid.json | 84 - .../rs/setversion_without_electionid.yml | 78 - .../rs/stepdown_change_set_name.json | 60 - .../rs/stepdown_change_set_name.yml | 65 - .../rs/too_new.json | 57 - .../rs/too_new.yml | 45 - .../rs/too_old.json | 55 - .../rs/too_old.yml | 41 - .../rs/topology_version_equal.json | 101 - .../rs/topology_version_equal.yml | 68 - .../rs/topology_version_greater.json | 259 - .../rs/topology_version_greater.yml | 194 - .../rs/topology_version_less.json | 97 - .../rs/topology_version_less.yml | 64 - .../rs/unexpected_mongos.json | 27 - .../rs/unexpected_mongos.yml | 29 - ...setversion_without_electionid-pre-6.0.json | 138 - ..._setversion_without_electionid-pre-6.0.yml | 117 - .../rs/use_setversion_without_electionid.json | 144 - .../rs/use_setversion_without_electionid.yml | 119 - .../rs/wrong_set_name.json | 37 - .../rs/wrong_set_name.yml | 38 - .../sharded/compatible.json | 48 - .../sharded/compatible.yml | 40 - .../sharded/discover_single_mongos.json | 31 - .../sharded/discover_single_mongos.yml | 24 - .../sharded/ls_timeout_mongos.json | 91 - .../sharded/ls_timeout_mongos.yml | 101 - .../sharded/mongos_disconnect.json | 100 - .../sharded/mongos_disconnect.yml | 113 - .../sharded/multiple_mongoses.json | 47 - .../sharded/multiple_mongoses.yml | 52 - .../sharded/non_mongos_removed.json | 46 - .../sharded/non_mongos_removed.yml | 47 - .../sharded/normalize_uri_case.json | 24 - .../sharded/normalize_uri_case.yml | 32 - .../sharded/too_new.json | 46 - .../sharded/too_new.yml | 38 - .../sharded/too_old.json | 46 - .../sharded/too_old.yml | 38 - .../single/compatible.json | 32 - .../single/compatible.yml | 27 - .../single/direct_connection_external_ip.json | 35 - .../single/direct_connection_external_ip.yml | 37 - .../single/direct_connection_mongos.json | 32 - .../single/direct_connection_mongos.yml | 36 - .../single/direct_connection_replicaset.json | 32 - .../single/direct_connection_replicaset.yml | 23 - .../single/direct_connection_rsarbiter.json | 37 - .../single/direct_connection_rsarbiter.yml | 38 - .../single/direct_connection_rsprimary.json | 36 - .../single/direct_connection_rsprimary.yml | 37 - .../single/direct_connection_rssecondary.json | 37 - .../single/direct_connection_rssecondary.yml | 38 - .../single/direct_connection_standalone.json | 31 - .../single/direct_connection_standalone.yml | 35 - .../direct_connection_unavailable_seed.json | 25 - .../direct_connection_unavailable_seed.yml | 28 - .../direct_connection_wrong_set_name.json | 65 - .../direct_connection_wrong_set_name.yml | 40 - .../single/discover_standalone.json | 31 - .../single/discover_standalone.yml | 35 - .../single/discover_unavailable_seed.json | 25 - .../single/discover_unavailable_seed.yml | 28 - .../single/ls_timeout_standalone.json | 32 - .../single/ls_timeout_standalone.yml | 36 - .../single/not_ok_response.json | 41 - .../single/not_ok_response.yml | 44 - .../single/standalone_removed.json | 31 - .../single/standalone_removed.yml | 35 - .../single/standalone_using_legacy_hello.json | 30 - .../single/standalone_using_legacy_hello.yml | 34 - .../single/too_new.json | 32 - .../single/too_new.yml | 27 - .../single/too_old.json | 30 - .../single/too_old.yml | 25 - .../single/too_old_then_upgraded.json | 56 - .../single/too_old_then_upgraded.yml | 48 - .../unified/auth-error.json | 230 - .../unified/auth-error.yml | 130 - .../unified/auth-misc-command-error.json | 230 - .../unified/auth-misc-command-error.yml | 132 - .../unified/auth-network-error.json | 230 - .../unified/auth-network-error.yml | 132 - .../unified/auth-network-timeout-error.json | 233 - .../unified/auth-network-timeout-error.yml | 138 - .../unified/auth-shutdown-error.json | 230 - .../unified/auth-shutdown-error.yml | 133 - .../unified/cancel-server-check.json | 201 - .../unified/cancel-server-check.yml | 143 - .../unified/connectTimeoutMS.json | 221 - .../unified/connectTimeoutMS.yml | 130 - .../unified/find-network-error.json | 234 - .../unified/find-network-error.yml | 135 - .../unified/find-network-timeout-error.json | 199 - .../unified/find-network-timeout-error.yml | 119 - .../unified/find-shutdown-error.json | 251 - .../unified/find-shutdown-error.yml | 163 - .../unified/hello-command-error.json | 376 - .../unified/hello-command-error.yml | 233 - .../unified/hello-network-error.json | 346 - .../unified/hello-network-error.yml | 227 - .../unified/hello-timeout.json | 514 - .../unified/hello-timeout.yml | 318 - .../unified/insert-network-error.json | 246 - .../unified/insert-network-error.yml | 137 - .../unified/insert-shutdown-error.json | 250 - .../unified/insert-shutdown-error.yml | 162 - .../unified/interruptInUse-pool-clear.json | 591 -- .../unified/interruptInUse-pool-clear.yml | 341 - ...ed-emit-topology-changed-before-close.json | 88 - ...ced-emit-topology-changed-before-close.yml | 49 - .../unified/logging-loadbalanced.json | 166 - .../unified/logging-loadbalanced.yml | 81 - .../unified/logging-replicaset.json | 606 -- .../unified/logging-replicaset.yml | 289 - .../unified/logging-sharded.json | 492 - .../unified/logging-sharded.yml | 248 - .../unified/logging-standalone.json | 517 - .../unified/logging-standalone.yml | 258 - .../unified/minPoolSize-error.json | 177 - .../unified/minPoolSize-error.yml | 125 - .../unified/pool-cleared-error.json | 373 - .../unified/pool-cleared-error.yml | 239 - .../rediscover-quickly-after-step-down.json | 242 - .../rediscover-quickly-after-step-down.yml | 144 - ...et-emit-topology-changed-before-close.json | 89 - ...set-emit-topology-changed-before-close.yml | 49 - .../unified/serverMonitoringMode.json | 512 - .../unified/serverMonitoringMode.yml | 213 - ...ed-emit-topology-changed-before-close.json | 108 - ...ded-emit-topology-changed-before-close.yml | 62 - ...ne-emit-topology-changed-before-close.json | 97 - ...one-emit-topology-changed-before-close.yml | 55 - .../in_window/equilibrium.json | 46 - .../in_window/equilibrium.yml | 27 - .../in_window/many-choices.json | 106 - .../in_window/many-choices.yml | 63 - .../in_window/one-least-two-tied.json | 46 - .../in_window/one-least-two-tied.yml | 27 - .../in_window/rs-equilibrium.json | 46 - .../in_window/rs-equilibrium.yml | 27 - .../in_window/rs-three-choices.json | 46 - .../in_window/rs-three-choices.yml | 27 - .../in_window/three-choices.json | 46 - .../in_window/three-choices.yml | 27 - .../in_window/two-choices.json | 36 - .../in_window/two-choices.yml | 21 - .../server-selection/in_window/two-least.json | 46 - .../server-selection/in_window/two-least.yml | 27 - .../logging/load-balanced.json | 107 - .../logging/load-balanced.yml | 60 - .../logging/operation-id.json | 418 - .../server-selection/logging/operation-id.yml | 223 - .../server-selection/logging/replica-set.json | 228 - .../server-selection/logging/replica-set.yml | 126 - .../server-selection/logging/sharded.json | 237 - testdata/server-selection/logging/sharded.yml | 129 - .../server-selection/logging/standalone.json | 235 - .../server-selection/logging/standalone.yml | 128 - .../server-selection/rtt/first_value.json | 5 - testdata/server-selection/rtt/first_value.yml | 3 - .../rtt/first_value_zero.json | 5 - .../server-selection/rtt/first_value_zero.yml | 3 - .../server-selection/rtt/value_test_1.json | 5 - .../server-selection/rtt/value_test_1.yml | 3 - .../server-selection/rtt/value_test_2.json | 5 - .../server-selection/rtt/value_test_2.yml | 3 - .../server-selection/rtt/value_test_3.json | 5 - .../server-selection/rtt/value_test_3.yml | 3 - .../server-selection/rtt/value_test_4.json | 5 - .../server-selection/rtt/value_test_4.yml | 3 - .../server-selection/rtt/value_test_5.json | 5 - .../server-selection/rtt/value_test_5.yml | 3 - .../LoadBalanced/read/Nearest.json | 35 - .../LoadBalanced/read/Nearest.yml | 16 - .../LoadBalanced/read/Primary.json | 30 - .../LoadBalanced/read/Primary.yml | 14 - .../LoadBalanced/read/PrimaryPreferred.json | 35 - .../LoadBalanced/read/PrimaryPreferred.yml | 16 - .../LoadBalanced/read/Secondary.json | 35 - .../LoadBalanced/read/Secondary.yml | 16 - .../LoadBalanced/read/SecondaryPreferred.json | 35 - .../LoadBalanced/read/SecondaryPreferred.yml | 16 - .../LoadBalanced/write/Nearest.json | 35 - .../LoadBalanced/write/Nearest.yml | 16 - .../LoadBalanced/write/Primary.json | 30 - .../LoadBalanced/write/Primary.yml | 14 - .../LoadBalanced/write/PrimaryPreferred.json | 35 - .../LoadBalanced/write/PrimaryPreferred.yml | 16 - .../LoadBalanced/write/Secondary.json | 35 - .../LoadBalanced/write/Secondary.yml | 16 - .../write/SecondaryPreferred.json | 35 - .../LoadBalanced/write/SecondaryPreferred.yml | 16 - .../ReplicaSetNoPrimary/read/Nearest.json | 60 - .../ReplicaSetNoPrimary/read/Nearest.yml | 25 - .../read/Nearest_multiple.json | 68 - .../read/Nearest_multiple.yml | 26 - .../read/Nearest_non_matching.json | 34 - .../read/Nearest_non_matching.yml | 20 - .../read/PossiblePrimary.json | 21 - .../read/PossiblePrimary.yml | 15 - .../read/PossiblePrimaryNearest.json | 21 - .../read/PossiblePrimaryNearest.yml | 15 - .../ReplicaSetNoPrimary/read/Primary.json | 32 - .../ReplicaSetNoPrimary/read/Primary.yml | 20 - .../read/PrimaryPreferred.json | 58 - .../read/PrimaryPreferred.yml | 25 - .../read/PrimaryPreferred_non_matching.json | 34 - .../read/PrimaryPreferred_non_matching.yml | 20 - .../ReplicaSetNoPrimary/read/Secondary.json | 60 - .../ReplicaSetNoPrimary/read/Secondary.yml | 25 - .../read/SecondaryPreferred.json | 60 - .../read/SecondaryPreferred.yml | 25 - .../read/SecondaryPreferred_non_matching.json | 34 - .../read/SecondaryPreferred_non_matching.yml | 20 - .../read/Secondary_multi_tags.json | 60 - .../read/Secondary_multi_tags.yml | 31 - .../read/Secondary_multi_tags2.json | 60 - .../read/Secondary_multi_tags2.yml | 31 - .../read/Secondary_non_matching.json | 34 - .../read/Secondary_non_matching.yml | 20 - .../write/SecondaryPreferred.json | 34 - .../write/SecondaryPreferred.yml | 20 - .../ReplicaSetWithPrimary/read/Nearest.json | 76 - .../ReplicaSetWithPrimary/read/Nearest.yml | 32 - .../read/Nearest_multiple.json | 84 - .../read/Nearest_multiple.yml | 33 - .../read/Nearest_non_matching.json | 42 - .../read/Nearest_non_matching.yml | 25 - .../ReplicaSetWithPrimary/read/Primary.json | 58 - .../ReplicaSetWithPrimary/read/Primary.yml | 28 - .../read/PrimaryPreferred.json | 58 - .../read/PrimaryPreferred.yml | 28 - .../read/PrimaryPreferred_non_matching.json | 60 - .../read/PrimaryPreferred_non_matching.yml | 28 - .../ReplicaSetWithPrimary/read/Secondary.json | 68 - .../ReplicaSetWithPrimary/read/Secondary.yml | 30 - .../read/SecondaryPreferred.json | 68 - .../read/SecondaryPreferred.yml | 30 - .../read/SecondaryPreferred_non_matching.json | 60 - .../read/SecondaryPreferred_non_matching.yml | 28 - .../read/SecondaryPreferred_tags.json | 52 - .../read/SecondaryPreferred_tags.yml | 28 - .../read/Secondary_non_matching.json | 42 - .../read/Secondary_non_matching.yml | 25 - .../write/SecondaryPreferred.json | 60 - .../write/SecondaryPreferred.yml | 28 - .../Sharded/read/Nearest.json | 45 - .../server_selection/Sharded/read/Nearest.yml | 21 - .../Sharded/read/Primary.json | 40 - .../server_selection/Sharded/read/Primary.yml | 19 - .../Sharded/read/PrimaryPreferred.json | 45 - .../Sharded/read/PrimaryPreferred.yml | 21 - .../Sharded/read/Secondary.json | 45 - .../Sharded/read/Secondary.yml | 21 - .../Sharded/read/SecondaryPreferred.json | 45 - .../Sharded/read/SecondaryPreferred.yml | 21 - .../Sharded/write/Nearest.json | 45 - .../Sharded/write/Nearest.yml | 21 - .../Sharded/write/Primary.json | 40 - .../Sharded/write/Primary.yml | 19 - .../Sharded/write/PrimaryPreferred.json | 45 - .../Sharded/write/PrimaryPreferred.yml | 21 - .../Sharded/write/Secondary.json | 45 - .../Sharded/write/Secondary.yml | 21 - .../Sharded/write/SecondaryPreferred.json | 45 - .../Sharded/write/SecondaryPreferred.yml | 21 - .../Single/read/SecondaryPreferred.json | 44 - .../Single/read/SecondaryPreferred.yml | 18 - .../Single/write/SecondaryPreferred.json | 44 - .../Single/write/SecondaryPreferred.yml | 18 - .../Unknown/read/SecondaryPreferred.json | 17 - .../Unknown/read/SecondaryPreferred.yml | 10 - .../Unknown/write/SecondaryPreferred.json | 17 - .../Unknown/write/SecondaryPreferred.yml | 10 - .../driver-sessions-dirty-session-errors.json | 968 -- .../driver-sessions-dirty-session-errors.yml | 351 - .../driver-sessions-server-support.json | 256 - .../driver-sessions-server-support.yml | 123 - ...t-sessions-default-causal-consistency.json | 318 - ...it-sessions-default-causal-consistency.yml | 119 - ...t-sessions-not-supported-client-error.json | 128 - ...ot-sessions-not-supported-client-error.yml | 75 - ...t-sessions-not-supported-server-error.json | 187 - ...ot-sessions-not-supported-server-error.yml | 102 - .../snapshot-sessions-unsupported-ops.json | 493 - .../snapshot-sessions-unsupported-ops.yml | 258 - testdata/sessions/snapshot-sessions.json | 993 -- testdata/sessions/snapshot-sessions.yml | 482 - .../large_doc.json.gz | Bin 1835846 -> 0 bytes .../small_doc.json.gz | Bin 258 -> 0 bytes .../single_and_multi_document/tweet.json.gz | Bin 845 -> 0 bytes testdata/specifications | 1 + testdata/transactions/legacy/abort.json | 621 -- testdata/transactions/legacy/abort.yml | 413 - testdata/transactions/legacy/bulk.json | 531 - testdata/transactions/legacy/bulk.yml | 268 - .../legacy/causal-consistency.json | 305 - .../legacy/causal-consistency.yml | 175 - testdata/transactions/legacy/commit.json | 925 -- testdata/transactions/legacy/commit.yml | 603 -- testdata/transactions/legacy/count.json | 120 - testdata/transactions/legacy/count.yml | 67 - .../legacy/create-collection.json | 204 - .../transactions/legacy/create-collection.yml | 131 - .../transactions/legacy/create-index.json | 237 - testdata/transactions/legacy/create-index.yml | 152 - testdata/transactions/legacy/delete.json | 327 - testdata/transactions/legacy/delete.yml | 192 - .../transactions/legacy/error-labels.json | 2089 ---- testdata/transactions/legacy/error-labels.yml | 1276 --- .../transactions/legacy/errors-client.json | 96 - .../transactions/legacy/errors-client.yml | 55 - testdata/transactions/legacy/errors.json | 222 - testdata/transactions/legacy/errors.yml | 133 - .../transactions/legacy/findOneAndDelete.json | 221 - .../transactions/legacy/findOneAndDelete.yml | 134 - .../legacy/findOneAndReplace.json | 255 - .../transactions/legacy/findOneAndReplace.yml | 148 - .../transactions/legacy/findOneAndUpdate.json | 413 - .../transactions/legacy/findOneAndUpdate.yml | 236 - testdata/transactions/legacy/insert.json | 648 -- testdata/transactions/legacy/insert.yml | 390 - testdata/transactions/legacy/isolation.json | 225 - testdata/transactions/legacy/isolation.yml | 133 - .../legacy/mongos-recovery-token.json | 511 - .../legacy/mongos-recovery-token.yml | 350 - testdata/transactions/legacy/pin-mongos.json | 1229 --- testdata/transactions/legacy/pin-mongos.yml | 559 -- .../transactions/legacy/read-concern.json | 1628 ---- testdata/transactions/legacy/read-concern.yml | 623 -- testdata/transactions/legacy/read-pref.json | 720 -- testdata/transactions/legacy/read-pref.yml | 348 - testdata/transactions/legacy/reads.json | 543 -- testdata/transactions/legacy/reads.yml | 261 - .../legacy/retryable-abort-errorLabels.json | 204 - .../legacy/retryable-abort-errorLabels.yml | 124 - .../transactions/legacy/retryable-abort.json | 2017 ---- .../transactions/legacy/retryable-abort.yml | 1315 --- .../legacy/retryable-commit-errorLabels.json | 223 - .../legacy/retryable-commit-errorLabels.yml | 132 - .../transactions/legacy/retryable-commit.json | 2337 ----- .../transactions/legacy/retryable-commit.yml | 1461 --- .../transactions/legacy/retryable-writes.json | 343 - .../transactions/legacy/retryable-writes.yml | 216 - testdata/transactions/legacy/run-command.json | 306 - testdata/transactions/legacy/run-command.yml | 197 - .../legacy/transaction-options-repl.json | 181 - .../legacy/transaction-options-repl.yml | 117 - .../legacy/transaction-options.json | 1407 --- .../legacy/transaction-options.yml | 806 -- testdata/transactions/legacy/update.json | 442 - testdata/transactions/legacy/update.yml | 246 - .../transactions/legacy/write-concern.json | 1278 --- .../transactions/legacy/write-concern.yml | 554 -- .../unified/client-bulkWrite.json | 593 -- .../transactions/unified/client-bulkWrite.yml | 263 - .../do-not-retry-read-in-transaction.json | 115 - .../do-not-retry-read-in-transaction.yml | 64 - .../transactions/unified/mongos-pin-auto.json | 5474 ----------- .../transactions/unified/mongos-pin-auto.yml | 1705 ---- .../transactions/unified/mongos-unpin.json | 450 - .../transactions/unified/mongos-unpin.yml | 185 - .../assertNumberConnectionsCheckedOut.json | 63 - .../assertNumberConnectionsCheckedOut.yml | 38 - ...ncryptionOpts-missing-kms-credentials.json | 37 - ...EncryptionOpts-missing-kms-credentials.yml | 20 - .../clientEncryptionOpts-no-kms.json | 27 - .../clientEncryptionOpts-no-kms.yml | 17 - .../entity-bucket-database-undefined.json | 18 - .../entity-bucket-database-undefined.yml | 12 - .../entity-client-apiVersion-unsupported.json | 20 - .../entity-client-apiVersion-unsupported.yml | 13 - ...ntsAsEntities-conflict_with_client_id.json | 28 - ...entsAsEntities-conflict_with_client_id.yml | 16 - ...ities-conflict_within_different_array.json | 43 - ...tities-conflict_within_different_array.yml | 19 - ...AsEntities-conflict_within_same_array.json | 36 - ...sAsEntities-conflict_within_same_array.yml | 16 - .../entity-collection-database-undefined.json | 19 - .../entity-collection-database-undefined.yml | 13 - .../entity-database-client-undefined.json | 19 - .../entity-database-client-undefined.yml | 13 - .../valid-fail/entity-find-cursor.json | 62 - .../valid-fail/entity-find-cursor.yml | 37 - .../entity-session-client-undefined.json | 18 - .../entity-session-client-undefined.yml | 12 - ...gesForClient-ignoreExtraMessages-type.json | 24 - ...agesForClient-ignoreExtraMessages-type.yml | 15 - ...essagesForClient-ignoreMessages-items.json | 26 - ...MessagesForClient-ignoreMessages-items.yml | 15 - ...MessagesForClient-ignoreMessages-type.json | 24 - ...gMessagesForClient-ignoreMessages-type.yml | 15 - ...tionChangedEvent-additionalProperties.json | 23 - ...ptionChangedEvent-additionalProperties.yml | 13 - .../valid-fail/ignoreResultAndError.json | 72 - .../valid-fail/ignoreResultAndError.yml | 43 - ...Providers-missing_aws_kms_credentials.json | 36 - ...sProviders-missing_aws_kms_credentials.yml | 22 - ...oviders-missing_azure_kms_credentials.json | 36 - ...roviders-missing_azure_kms_credentials.yml | 22 - ...Providers-missing_gcp_kms_credentials.json | 36 - ...sProviders-missing_gcp_kms_credentials.yml | 22 - .../valid-fail/kmsProviders-no_kms.json | 32 - .../valid-fail/kmsProviders-no_kms.yml | 21 - .../valid-fail/operation-failure.json | 56 - .../valid-fail/operation-failure.yml | 31 - .../valid-fail/operation-unsupported.json | 22 - .../valid-fail/operation-unsupported.yml | 13 - .../returnDocument-enum-invalid.json | 66 - .../returnDocument-enum-invalid.yml | 34 - .../valid-fail/schemaVersion-unsupported.json | 10 - .../valid-fail/schemaVersion-unsupported.yml | 7 - .../assertNumberConnectionsCheckedOut.json | 27 - .../assertNumberConnectionsCheckedOut.yml | 17 - .../collectionData-createOptions.json | 79 - .../collectionData-createOptions.yml | 37 - .../valid-pass/entity-client-cmap-events.json | 71 - .../valid-pass/entity-client-cmap-events.yml | 40 - .../entity-client-storeEventsAsEntities.json | 67 - .../entity-client-storeEventsAsEntities.yml | 37 - .../valid-pass/entity-commandCursor.json | 278 - .../valid-pass/entity-commandCursor.yml | 115 - .../valid-pass/entity-cursor-iterateOnce.json | 108 - .../valid-pass/entity-cursor-iterateOnce.yml | 58 - .../valid-pass/entity-find-cursor.json | 182 - .../valid-pass/entity-find-cursor.yml | 89 - .../expectedEventsForClient-eventType.json | 126 - .../expectedEventsForClient-eventType.yml | 66 - ...ctedEventsForClient-ignoreExtraEvents.json | 151 - ...ectedEventsForClient-ignoreExtraEvents.yml | 78 - .../valid-pass/ignoreResultAndError.json | 59 - .../valid-pass/ignoreResultAndError.yml | 34 - ...kmsProviders-explicit_kms_credentials.json | 52 - .../kmsProviders-explicit_kms_credentials.yml | 26 - ...Providers-mixed_kms_credential_fields.json | 54 - ...sProviders-mixed_kms_credential_fields.yml | 24 - ...Providers-placeholder_kms_credentials.json | 70 - ...sProviders-placeholder_kms_credentials.yml | 26 - .../kmsProviders-unconfigured_kms.json | 39 - .../kmsProviders-unconfigured_kms.yml | 27 - .../valid-pass/matches-lte-operator.json | 78 - .../valid-pass/matches-lte-operator.yml | 40 - .../valid-pass/observeSensitiveCommands.json | 706 -- .../valid-pass/observeSensitiveCommands.yml | 255 - .../valid-pass/poc-change-streams.json | 455 - .../valid-pass/poc-change-streams.yml | 241 - .../valid-pass/poc-command-monitoring.json | 223 - .../valid-pass/poc-command-monitoring.yml | 102 - .../valid-pass/poc-crud.json | 450 - .../valid-pass/poc-crud.yml | 190 - .../valid-pass/poc-gridfs.json | 301 - .../valid-pass/poc-gridfs.yml | 155 - .../valid-pass/poc-retryable-reads.json | 433 - .../valid-pass/poc-retryable-reads.yml | 193 - .../valid-pass/poc-retryable-writes.json | 491 - .../valid-pass/poc-retryable-writes.yml | 214 - .../valid-pass/poc-sessions.json | 466 - .../valid-pass/poc-sessions.yml | 213 - .../poc-transactions-convenient-api.json | 505 - .../poc-transactions-convenient-api.yml | 235 - .../poc-transactions-mongos-pin-auto.json | 409 - .../poc-transactions-mongos-pin-auto.yml | 169 - .../valid-pass/poc-transactions.json | 323 - .../valid-pass/poc-transactions.yml | 171 - testdata/uri-options/auth-options.json | 32 - testdata/uri-options/auth-options.yml | 24 - testdata/uri-options/ca.pem | 1 - testdata/uri-options/cert.pem | 1 - testdata/uri-options/client.pem | 1 - testdata/uri-options/compression-options.json | 59 - testdata/uri-options/compression-options.yml | 48 - testdata/uri-options/concern-options.json | 76 - testdata/uri-options/concern-options.yml | 55 - testdata/uri-options/connection-options.json | 243 - testdata/uri-options/connection-options.yml | 209 - .../uri-options/connection-pool-options.json | 33 - .../uri-options/connection-pool-options.yml | 26 - .../uri-options/read-preference-options.json | 67 - .../uri-options/read-preference-options.yml | 53 - testdata/uri-options/sdam-options.json | 46 - testdata/uri-options/sdam-options.yml | 35 - .../uri-options/single-threaded-options.json | 24 - .../uri-options/single-threaded-options.yml | 18 - testdata/uri-options/srv-options.json | 116 - testdata/uri-options/srv-options.yml | 89 - testdata/uri-options/tls-options.json | 649 -- testdata/uri-options/tls-options.yml | 578 -- .../crud-api-version-1-strict.json | 1109 --- .../crud-api-version-1-strict.yml | 419 - .../versioned-api/crud-api-version-1.json | 1182 --- testdata/versioned-api/crud-api-version-1.yml | 455 - ...ommand-helper-no-api-version-declared.json | 127 - ...command-helper-no-api-version-declared.yml | 75 - .../test-commands-deprecation-errors.json | 74 - .../test-commands-deprecation-errors.yml | 47 - .../test-commands-strict-mode.json | 75 - .../test-commands-strict-mode.yml | 46 - .../versioned-api/transaction-handling.json | 348 - .../versioned-api/transaction-handling.yml | 128 - x/mongo/driver/auth/auth_spec_test.go | 3 +- .../driver/connstring/connstring_spec_test.go | 31 +- x/mongo/driver/mongocrypt/mongocrypt_test.go | 1 + x/mongo/driver/topology/CMAP_spec_test.go | 2 +- x/mongo/driver/topology/sdam_spec_test.go | 2 +- x/mongo/driver/topology/server_rtt_test.go | 2 +- x/mongo/driver/topology/topology_test.go | 2 +- 1964 files changed, 122 insertions(+), 402164 deletions(-) delete mode 100644 testdata/atlas-data-lake-testing/aggregate.json delete mode 100644 testdata/atlas-data-lake-testing/aggregate.yml delete mode 100644 testdata/atlas-data-lake-testing/estimatedDocumentCount.json delete mode 100644 testdata/atlas-data-lake-testing/estimatedDocumentCount.yml delete mode 100644 testdata/atlas-data-lake-testing/find.json delete mode 100644 testdata/atlas-data-lake-testing/find.yml delete mode 100644 testdata/atlas-data-lake-testing/getMore.json delete mode 100644 testdata/atlas-data-lake-testing/getMore.yml delete mode 100644 testdata/atlas-data-lake-testing/listCollections.json delete mode 100644 testdata/atlas-data-lake-testing/listCollections.yml delete mode 100644 testdata/atlas-data-lake-testing/listDatabases.json delete mode 100644 testdata/atlas-data-lake-testing/listDatabases.yml delete mode 100644 testdata/atlas-data-lake-testing/runCommand.json delete mode 100644 testdata/atlas-data-lake-testing/runCommand.yml delete mode 100644 testdata/auth/connection-string.json delete mode 100644 testdata/auth/connection-string.yml delete mode 100644 testdata/bson-binary-vector/float32.json delete mode 100644 testdata/bson-binary-vector/int8.json delete mode 100644 testdata/bson-binary-vector/packed_bit.json delete mode 100644 testdata/bson-corpus/array.json delete mode 100644 testdata/bson-corpus/binary.json delete mode 100644 testdata/bson-corpus/boolean.json delete mode 100755 testdata/bson-corpus/bsonview delete mode 100644 testdata/bson-corpus/code.json delete mode 100644 testdata/bson-corpus/code_w_scope.json delete mode 100644 testdata/bson-corpus/datetime.json delete mode 100644 testdata/bson-corpus/dbpointer.json delete mode 100644 testdata/bson-corpus/dbref.json delete mode 100644 testdata/bson-corpus/decimal128-1.json delete mode 100644 testdata/bson-corpus/decimal128-2.json delete mode 100644 testdata/bson-corpus/decimal128-3.json delete mode 100644 testdata/bson-corpus/decimal128-4.json delete mode 100644 testdata/bson-corpus/decimal128-5.json delete mode 100644 testdata/bson-corpus/decimal128-6.json delete mode 100644 testdata/bson-corpus/decimal128-7.json delete mode 100644 testdata/bson-corpus/document.json delete mode 100644 testdata/bson-corpus/double.json delete mode 100644 testdata/bson-corpus/int32.json delete mode 100644 testdata/bson-corpus/int64.json delete mode 100644 testdata/bson-corpus/maxkey.json delete mode 100644 testdata/bson-corpus/minkey.json delete mode 100644 testdata/bson-corpus/multi-type-deprecated.json delete mode 100644 testdata/bson-corpus/multi-type.json delete mode 100644 testdata/bson-corpus/null.json delete mode 100644 testdata/bson-corpus/oid.json delete mode 100644 testdata/bson-corpus/regex.json delete mode 100644 testdata/bson-corpus/string.json delete mode 100644 testdata/bson-corpus/symbol.json delete mode 100644 testdata/bson-corpus/timestamp.json delete mode 100644 testdata/bson-corpus/top.json delete mode 100644 testdata/bson-corpus/undefined.json delete mode 100644 testdata/change-streams/change-streams-clusterTime.json delete mode 100644 testdata/change-streams/change-streams-clusterTime.yml delete mode 100644 testdata/change-streams/change-streams-disambiguatedPaths.json delete mode 100644 testdata/change-streams/change-streams-disambiguatedPaths.yml delete mode 100644 testdata/change-streams/change-streams-errors.json delete mode 100644 testdata/change-streams/change-streams-errors.yml delete mode 100644 testdata/change-streams/change-streams-pre_and_post_images.json delete mode 100644 testdata/change-streams/change-streams-pre_and_post_images.yml delete mode 100644 testdata/change-streams/change-streams-resume-allowlist.json delete mode 100644 testdata/change-streams/change-streams-resume-allowlist.yml delete mode 100644 testdata/change-streams/change-streams-resume-errorLabels.json delete mode 100644 testdata/change-streams/change-streams-resume-errorLabels.yml delete mode 100644 testdata/change-streams/change-streams-showExpandedEvents.json delete mode 100644 testdata/change-streams/change-streams-showExpandedEvents.yml delete mode 100644 testdata/change-streams/change-streams.json delete mode 100644 testdata/change-streams/change-streams.yml delete mode 100644 testdata/client-side-encryption-prose/change-streams-test.json delete mode 100644 testdata/client-side-encryption-prose/corpus-encrypted.json delete mode 100644 testdata/client-side-encryption-prose/corpus-key-aws.json delete mode 100644 testdata/client-side-encryption-prose/corpus-key-azure.json delete mode 100644 testdata/client-side-encryption-prose/corpus-key-gcp.json delete mode 100644 testdata/client-side-encryption-prose/corpus-key-kmip.json delete mode 100644 testdata/client-side-encryption-prose/corpus-key-local.json delete mode 100644 testdata/client-side-encryption-prose/corpus-schema.json delete mode 100644 testdata/client-side-encryption-prose/corpus.json delete mode 100644 testdata/client-side-encryption-prose/encrypted-fields.json delete mode 100644 testdata/client-side-encryption-prose/external-key.json delete mode 100644 testdata/client-side-encryption-prose/external-schema.json delete mode 100644 testdata/client-side-encryption-prose/key1-document.json delete mode 100644 testdata/client-side-encryption-prose/limits-doc.json delete mode 100644 testdata/client-side-encryption-prose/limits-key.json delete mode 100644 testdata/client-side-encryption-prose/limits-schema.json delete mode 100644 testdata/client-side-encryption-prose/range-encryptedFields-Date.json delete mode 100644 testdata/client-side-encryption-prose/range-encryptedFields-DecimalNoPrecision.json delete mode 100644 testdata/client-side-encryption-prose/range-encryptedFields-DecimalPrecision.json delete mode 100644 testdata/client-side-encryption-prose/range-encryptedFields-DoubleNoPrecision.json delete mode 100644 testdata/client-side-encryption-prose/range-encryptedFields-DoublePrecision.json delete mode 100644 testdata/client-side-encryption-prose/range-encryptedFields-Int.json delete mode 100644 testdata/client-side-encryption-prose/range-encryptedFields-Long.json delete mode 100644 testdata/client-side-encryption/legacy/aggregate.json delete mode 100644 testdata/client-side-encryption/legacy/aggregate.yml delete mode 100644 testdata/client-side-encryption/legacy/awsTemporary.json delete mode 100644 testdata/client-side-encryption/legacy/awsTemporary.yml delete mode 100644 testdata/client-side-encryption/legacy/azureKMS.json delete mode 100644 testdata/client-side-encryption/legacy/azureKMS.yml delete mode 100644 testdata/client-side-encryption/legacy/badQueries.json delete mode 100644 testdata/client-side-encryption/legacy/badQueries.yml delete mode 100644 testdata/client-side-encryption/legacy/badSchema.json delete mode 100644 testdata/client-side-encryption/legacy/badSchema.yml delete mode 100644 testdata/client-side-encryption/legacy/basic.json delete mode 100644 testdata/client-side-encryption/legacy/basic.yml delete mode 100644 testdata/client-side-encryption/legacy/bulk.json delete mode 100644 testdata/client-side-encryption/legacy/bulk.yml delete mode 100644 testdata/client-side-encryption/legacy/bypassAutoEncryption.json delete mode 100644 testdata/client-side-encryption/legacy/bypassAutoEncryption.yml delete mode 100644 testdata/client-side-encryption/legacy/bypassedCommand.json delete mode 100644 testdata/client-side-encryption/legacy/bypassedCommand.yml delete mode 100644 testdata/client-side-encryption/legacy/count.json delete mode 100644 testdata/client-side-encryption/legacy/count.yml delete mode 100644 testdata/client-side-encryption/legacy/countDocuments.json delete mode 100644 testdata/client-side-encryption/legacy/countDocuments.yml delete mode 100644 testdata/client-side-encryption/legacy/create-and-createIndexes.json delete mode 100644 testdata/client-side-encryption/legacy/create-and-createIndexes.yml delete mode 100644 testdata/client-side-encryption/legacy/delete.json delete mode 100644 testdata/client-side-encryption/legacy/delete.yml delete mode 100644 testdata/client-side-encryption/legacy/distinct.json delete mode 100644 testdata/client-side-encryption/legacy/distinct.yml delete mode 100644 testdata/client-side-encryption/legacy/explain.json delete mode 100644 testdata/client-side-encryption/legacy/explain.yml delete mode 100644 testdata/client-side-encryption/legacy/find.json delete mode 100644 testdata/client-side-encryption/legacy/find.yml delete mode 100644 testdata/client-side-encryption/legacy/findOneAndDelete.json delete mode 100644 testdata/client-side-encryption/legacy/findOneAndDelete.yml delete mode 100644 testdata/client-side-encryption/legacy/findOneAndReplace.json delete mode 100644 testdata/client-side-encryption/legacy/findOneAndReplace.yml delete mode 100644 testdata/client-side-encryption/legacy/findOneAndUpdate.json delete mode 100644 testdata/client-side-encryption/legacy/findOneAndUpdate.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-BypassQueryAnalysis.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-BypassQueryAnalysis.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Compact.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Compact.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-CreateCollection-OldServer.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-CreateCollection-OldServer.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-CreateCollection.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-CreateCollection.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-DecryptExistingData.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-DecryptExistingData.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Delete.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Delete.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-EncryptedFields-vs-jsonSchema.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-EncryptedFields-vs-jsonSchema.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-EncryptedFieldsMap-defaults.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-EncryptedFieldsMap-defaults.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-FindOneAndUpdate.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-FindOneAndUpdate.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-InsertFind-Indexed.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-InsertFind-Indexed.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-InsertFind-Unindexed.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-InsertFind-Unindexed.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-MissingKey.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-MissingKey.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-NoEncryption.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-NoEncryption.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Compact.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Compact.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Aggregate.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Aggregate.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Correctness.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Correctness.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Delete.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Delete.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-FindOneAndUpdate.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-FindOneAndUpdate.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-InsertFind.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-InsertFind.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Update.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Update.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Aggregate.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Aggregate.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Correctness.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Correctness.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Delete.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Delete.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-FindOneAndUpdate.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-FindOneAndUpdate.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-InsertFind.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-InsertFind.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Update.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Update.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Aggregate.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Aggregate.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Correctness.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Correctness.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Delete.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Delete.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-FindOneAndUpdate.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-FindOneAndUpdate.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-InsertFind.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-InsertFind.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Update.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Update.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Defaults.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Defaults.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Aggregate.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Aggregate.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Correctness.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Correctness.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Delete.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Delete.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-FindOneAndUpdate.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-FindOneAndUpdate.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-InsertFind.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-InsertFind.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Update.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Update.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Aggregate.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Aggregate.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Correctness.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Correctness.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Delete.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Delete.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-FindOneAndUpdate.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-FindOneAndUpdate.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-InsertFind.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-InsertFind.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Update.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Update.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Aggregate.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Aggregate.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Correctness.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Correctness.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Delete.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Delete.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-FindOneAndUpdate.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-FindOneAndUpdate.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-InsertFind.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-InsertFind.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Update.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Update.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Aggregate.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Aggregate.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Correctness.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Correctness.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Delete.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Delete.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-FindOneAndUpdate.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-FindOneAndUpdate.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-InsertFind.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-InsertFind.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Update.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Update.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-WrongType.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Rangev2-WrongType.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Update.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-Update.yml delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-validatorAndPartialFieldExpression.json delete mode 100644 testdata/client-side-encryption/legacy/fle2v2-validatorAndPartialFieldExpression.yml delete mode 100644 testdata/client-side-encryption/legacy/gcpKMS.json delete mode 100644 testdata/client-side-encryption/legacy/gcpKMS.yml delete mode 100644 testdata/client-side-encryption/legacy/getMore.json delete mode 100644 testdata/client-side-encryption/legacy/getMore.yml delete mode 100644 testdata/client-side-encryption/legacy/insert.json delete mode 100644 testdata/client-side-encryption/legacy/insert.yml delete mode 100644 testdata/client-side-encryption/legacy/keyAltName.json delete mode 100644 testdata/client-side-encryption/legacy/keyAltName.yml delete mode 100644 testdata/client-side-encryption/legacy/keyCache.json delete mode 100644 testdata/client-side-encryption/legacy/keyCache.yml delete mode 100644 testdata/client-side-encryption/legacy/kmipKMS.json delete mode 100644 testdata/client-side-encryption/legacy/kmipKMS.yml delete mode 100644 testdata/client-side-encryption/legacy/localKMS.json delete mode 100644 testdata/client-side-encryption/legacy/localKMS.yml delete mode 100644 testdata/client-side-encryption/legacy/localSchema.json delete mode 100644 testdata/client-side-encryption/legacy/localSchema.yml delete mode 100644 testdata/client-side-encryption/legacy/malformedCiphertext.json delete mode 100644 testdata/client-side-encryption/legacy/malformedCiphertext.yml delete mode 100644 testdata/client-side-encryption/legacy/maxWireVersion.json delete mode 100644 testdata/client-side-encryption/legacy/maxWireVersion.yml delete mode 100644 testdata/client-side-encryption/legacy/missingKey.json delete mode 100644 testdata/client-side-encryption/legacy/missingKey.yml delete mode 100644 testdata/client-side-encryption/legacy/noSchema.json delete mode 100644 testdata/client-side-encryption/legacy/noSchema.yml delete mode 100644 testdata/client-side-encryption/legacy/replaceOne.json delete mode 100644 testdata/client-side-encryption/legacy/replaceOne.yml delete mode 100644 testdata/client-side-encryption/legacy/types.json delete mode 100644 testdata/client-side-encryption/legacy/types.yml delete mode 100644 testdata/client-side-encryption/legacy/unsupportedCommand.json delete mode 100644 testdata/client-side-encryption/legacy/unsupportedCommand.yml delete mode 100644 testdata/client-side-encryption/legacy/updateMany.json delete mode 100644 testdata/client-side-encryption/legacy/updateMany.yml delete mode 100644 testdata/client-side-encryption/legacy/updateOne.json delete mode 100644 testdata/client-side-encryption/legacy/updateOne.yml delete mode 100644 testdata/client-side-encryption/legacy/validatorAndPartialFieldExpression.json delete mode 100644 testdata/client-side-encryption/legacy/validatorAndPartialFieldExpression.yml delete mode 100644 testdata/client-side-encryption/unified/addKeyAltName.json delete mode 100644 testdata/client-side-encryption/unified/addKeyAltName.yml delete mode 100644 testdata/client-side-encryption/unified/createDataKey-kms_providers-invalid.json delete mode 100644 testdata/client-side-encryption/unified/createDataKey-kms_providers-invalid.yml delete mode 100644 testdata/client-side-encryption/unified/createDataKey.json delete mode 100644 testdata/client-side-encryption/unified/createDataKey.yml delete mode 100644 testdata/client-side-encryption/unified/deleteKey.json delete mode 100644 testdata/client-side-encryption/unified/deleteKey.yml delete mode 100644 testdata/client-side-encryption/unified/getKey.json delete mode 100644 testdata/client-side-encryption/unified/getKey.yml delete mode 100644 testdata/client-side-encryption/unified/getKeyByAltName.json delete mode 100644 testdata/client-side-encryption/unified/getKeyByAltName.yml delete mode 100644 testdata/client-side-encryption/unified/getKeys.json delete mode 100644 testdata/client-side-encryption/unified/getKeys.yml delete mode 100644 testdata/client-side-encryption/unified/keyCache.json delete mode 100644 testdata/client-side-encryption/unified/keyCache.yml delete mode 100644 testdata/client-side-encryption/unified/removeKeyAltName.json delete mode 100644 testdata/client-side-encryption/unified/removeKeyAltName.yml delete mode 100644 testdata/client-side-encryption/unified/rewrapManyDataKey-decrypt_failure.json delete mode 100644 testdata/client-side-encryption/unified/rewrapManyDataKey-decrypt_failure.yml delete mode 100644 testdata/client-side-encryption/unified/rewrapManyDataKey-encrypt_failure.json delete mode 100644 testdata/client-side-encryption/unified/rewrapManyDataKey-encrypt_failure.yml delete mode 100644 testdata/client-side-encryption/unified/rewrapManyDataKey.json delete mode 100644 testdata/client-side-encryption/unified/rewrapManyDataKey.yml delete mode 100644 testdata/client-side-operations-timeout/bulkWrite.json delete mode 100644 testdata/client-side-operations-timeout/bulkWrite.yml delete mode 100644 testdata/client-side-operations-timeout/command-execution.json delete mode 100644 testdata/client-side-operations-timeout/command-execution.yml delete mode 100644 testdata/client-side-operations-timeout/error-transformations.json delete mode 100644 testdata/client-side-operations-timeout/error-transformations.yml delete mode 100644 testdata/client-side-operations-timeout/global-timeoutMS.json delete mode 100644 testdata/client-side-operations-timeout/global-timeoutMS.yml delete mode 100644 testdata/client-side-operations-timeout/gridfs-advanced.json delete mode 100644 testdata/client-side-operations-timeout/gridfs-advanced.yml delete mode 100644 testdata/client-side-operations-timeout/gridfs-delete.json delete mode 100644 testdata/client-side-operations-timeout/gridfs-delete.yml delete mode 100644 testdata/client-side-operations-timeout/gridfs-find.json delete mode 100644 testdata/client-side-operations-timeout/gridfs-find.yml delete mode 100644 testdata/client-side-operations-timeout/override-operation-timeoutMS.json delete mode 100644 testdata/client-side-operations-timeout/override-operation-timeoutMS.yml delete mode 100644 testdata/client-side-operations-timeout/retryability-legacy-timeouts.json delete mode 100644 testdata/client-side-operations-timeout/retryability-legacy-timeouts.yml delete mode 100644 testdata/client-side-operations-timeout/retryability-timeoutMS.json delete mode 100644 testdata/client-side-operations-timeout/retryability-timeoutMS.yml delete mode 100644 testdata/client-side-operations-timeout/runCursorCommand.json delete mode 100644 testdata/client-side-operations-timeout/runCursorCommand.yml delete mode 100644 testdata/collection-management/clustered-indexes.json delete mode 100644 testdata/collection-management/clustered-indexes.yml delete mode 100644 testdata/collection-management/createCollection-pre_and_post_images.json delete mode 100644 testdata/collection-management/createCollection-pre_and_post_images.yml delete mode 100644 testdata/collection-management/modifyCollection-errorResponse.json delete mode 100644 testdata/collection-management/modifyCollection-errorResponse.yml delete mode 100644 testdata/collection-management/modifyCollection-pre_and_post_images.json delete mode 100644 testdata/collection-management/modifyCollection-pre_and_post_images.yml delete mode 100644 testdata/collection-management/timeseries-collection.json delete mode 100644 testdata/collection-management/timeseries-collection.yml delete mode 100644 testdata/command-monitoring/bulkWrite.json delete mode 100644 testdata/command-monitoring/bulkWrite.yml delete mode 100644 testdata/command-monitoring/command.json delete mode 100644 testdata/command-monitoring/command.yml delete mode 100644 testdata/command-monitoring/deleteMany.json delete mode 100644 testdata/command-monitoring/deleteMany.yml delete mode 100644 testdata/command-monitoring/deleteOne.json delete mode 100644 testdata/command-monitoring/deleteOne.yml delete mode 100644 testdata/command-monitoring/find.json delete mode 100644 testdata/command-monitoring/find.yml delete mode 100644 testdata/command-monitoring/insertMany.json delete mode 100644 testdata/command-monitoring/insertMany.yml delete mode 100644 testdata/command-monitoring/insertOne.json delete mode 100644 testdata/command-monitoring/insertOne.yml delete mode 100644 testdata/command-monitoring/logging/command.json delete mode 100644 testdata/command-monitoring/logging/command.yml delete mode 100644 testdata/command-monitoring/logging/driver-connection-id.json delete mode 100644 testdata/command-monitoring/logging/driver-connection-id.yml delete mode 100644 testdata/command-monitoring/logging/no-handshake-messages.json delete mode 100644 testdata/command-monitoring/logging/no-handshake-messages.yml delete mode 100644 testdata/command-monitoring/logging/no-heartbeat-messages.json delete mode 100644 testdata/command-monitoring/logging/no-heartbeat-messages.yml delete mode 100644 testdata/command-monitoring/logging/operation-id.json delete mode 100644 testdata/command-monitoring/logging/operation-id.yml delete mode 100644 testdata/command-monitoring/logging/pre-42-server-connection-id.json delete mode 100644 testdata/command-monitoring/logging/pre-42-server-connection-id.yml delete mode 100644 testdata/command-monitoring/logging/redacted-commands.json delete mode 100644 testdata/command-monitoring/logging/redacted-commands.yml delete mode 100644 testdata/command-monitoring/logging/server-connection-id.json delete mode 100644 testdata/command-monitoring/logging/server-connection-id.yml delete mode 100644 testdata/command-monitoring/logging/service-id.json delete mode 100644 testdata/command-monitoring/logging/service-id.yml delete mode 100644 testdata/command-monitoring/logging/unacknowledged-write.json delete mode 100644 testdata/command-monitoring/logging/unacknowledged-write.yml delete mode 100644 testdata/command-monitoring/pre-42-server-connection-id.json delete mode 100644 testdata/command-monitoring/pre-42-server-connection-id.yml delete mode 100644 testdata/command-monitoring/redacted-commands.json delete mode 100644 testdata/command-monitoring/redacted-commands.yml delete mode 100644 testdata/command-monitoring/server-connection-id.json delete mode 100644 testdata/command-monitoring/server-connection-id.yml delete mode 100644 testdata/command-monitoring/unacknowledged-client-bulkWrite.json delete mode 100644 testdata/command-monitoring/unacknowledged-client-bulkWrite.yml delete mode 100644 testdata/command-monitoring/unacknowledgedBulkWrite.json delete mode 100644 testdata/command-monitoring/unacknowledgedBulkWrite.yml delete mode 100644 testdata/command-monitoring/updateMany.json delete mode 100644 testdata/command-monitoring/updateMany.yml delete mode 100644 testdata/command-monitoring/updateOne.json delete mode 100644 testdata/command-monitoring/updateOne.yml delete mode 100644 testdata/connection-monitoring-and-pooling/connection-must-have-id.json delete mode 100644 testdata/connection-monitoring-and-pooling/connection-must-have-id.yml delete mode 100644 testdata/connection-monitoring-and-pooling/connection-must-order-ids.json delete mode 100644 testdata/connection-monitoring-and-pooling/connection-must-order-ids.yml delete mode 100644 testdata/connection-monitoring-and-pooling/logging/connection-logging.json delete mode 100644 testdata/connection-monitoring-and-pooling/logging/connection-logging.yml delete mode 100644 testdata/connection-monitoring-and-pooling/logging/connection-pool-options.json delete mode 100644 testdata/connection-monitoring-and-pooling/logging/connection-pool-options.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkin-destroy-closed.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkin-destroy-closed.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkin-destroy-stale.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkin-destroy-stale.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkin-make-available.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkin-make-available.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkin.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkin.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkout-connection.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkout-connection.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkout-custom-maxConnecting-is-enforced.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkout-custom-maxConnecting-is-enforced.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkout-error-closed.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkout-error-closed.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkout-maxConnecting-is-enforced.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkout-maxConnecting-is-enforced.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkout-maxConnecting-timeout.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkout-maxConnecting-timeout.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkout-minPoolSize-connection-maxConnecting.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkout-minPoolSize-connection-maxConnecting.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkout-multiple.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkout-multiple.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkout-no-idle.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkout-no-idle.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkout-no-stale.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkout-no-stale.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkout-returned-connection-maxConnecting.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-checkout-returned-connection-maxConnecting.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-clear-clears-waitqueue.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-clear-clears-waitqueue.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-clear-interrupting-pending-connections.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-clear-interrupting-pending-connections.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-clear-min-size.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-clear-min-size.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-clear-paused.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-clear-paused.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-clear-ready.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-clear-ready.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-clear-schedule-run-interruptInUseConnections-false.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-clear-schedule-run-interruptInUseConnections-false.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-close-destroy-conns.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-close-destroy-conns.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-close.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-close.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-create-max-size.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-create-max-size.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-create-min-size-error.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-create-min-size-error.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-create-min-size.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-create-min-size.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-create-with-options.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-create-with-options.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-create.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-create.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-ready-ready.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-ready-ready.yml delete mode 100644 testdata/connection-monitoring-and-pooling/pool-ready.json delete mode 100644 testdata/connection-monitoring-and-pooling/pool-ready.yml delete mode 100644 testdata/connection-monitoring-and-pooling/wait-queue-fairness.json delete mode 100644 testdata/connection-monitoring-and-pooling/wait-queue-fairness.yml delete mode 100644 testdata/connection-monitoring-and-pooling/wait-queue-timeout.json delete mode 100644 testdata/connection-monitoring-and-pooling/wait-queue-timeout.yml delete mode 100644 testdata/connection-string/invalid-uris.json delete mode 100644 testdata/connection-string/invalid-uris.yml delete mode 100644 testdata/connection-string/valid-auth.json delete mode 100644 testdata/connection-string/valid-auth.yml delete mode 100644 testdata/connection-string/valid-db-with-dotted-name.json delete mode 100644 testdata/connection-string/valid-db-with-dotted-name.yml delete mode 100644 testdata/connection-string/valid-host_identifiers.json delete mode 100644 testdata/connection-string/valid-host_identifiers.yml delete mode 100644 testdata/connection-string/valid-options.json delete mode 100644 testdata/connection-string/valid-options.yml delete mode 100644 testdata/connection-string/valid-unix_socket-absolute.json delete mode 100644 testdata/connection-string/valid-unix_socket-absolute.yml delete mode 100644 testdata/connection-string/valid-unix_socket-relative.json delete mode 100644 testdata/connection-string/valid-unix_socket-relative.yml delete mode 100644 testdata/connection-string/valid-warnings.json delete mode 100644 testdata/connection-string/valid-warnings.yml delete mode 100644 testdata/convenient-transactions/callback-aborts.json delete mode 100644 testdata/convenient-transactions/callback-aborts.yml delete mode 100644 testdata/convenient-transactions/callback-commits.json delete mode 100644 testdata/convenient-transactions/callback-commits.yml delete mode 100644 testdata/convenient-transactions/callback-retry.json delete mode 100644 testdata/convenient-transactions/callback-retry.yml delete mode 100644 testdata/convenient-transactions/commit-retry.json delete mode 100644 testdata/convenient-transactions/commit-retry.yml delete mode 100644 testdata/convenient-transactions/commit-transienttransactionerror-4.2.json delete mode 100644 testdata/convenient-transactions/commit-transienttransactionerror-4.2.yml delete mode 100644 testdata/convenient-transactions/commit-transienttransactionerror.json delete mode 100644 testdata/convenient-transactions/commit-transienttransactionerror.yml delete mode 100644 testdata/convenient-transactions/commit-writeconcernerror.json delete mode 100644 testdata/convenient-transactions/commit-writeconcernerror.yml delete mode 100644 testdata/convenient-transactions/commit.json delete mode 100644 testdata/convenient-transactions/commit.yml delete mode 100644 testdata/convenient-transactions/transaction-options.json delete mode 100644 testdata/convenient-transactions/transaction-options.yml delete mode 100644 testdata/crud/unified/aggregate-allowdiskuse.json delete mode 100644 testdata/crud/unified/aggregate-allowdiskuse.yml delete mode 100644 testdata/crud/unified/aggregate-let.json delete mode 100644 testdata/crud/unified/aggregate-let.yml delete mode 100644 testdata/crud/unified/aggregate-merge-errorResponse.json delete mode 100644 testdata/crud/unified/aggregate-merge-errorResponse.yml delete mode 100644 testdata/crud/unified/aggregate-merge.json delete mode 100644 testdata/crud/unified/aggregate-merge.yml delete mode 100644 testdata/crud/unified/aggregate-out-readConcern.json delete mode 100644 testdata/crud/unified/aggregate-out-readConcern.yml delete mode 100644 testdata/crud/unified/aggregate-write-readPreference.json delete mode 100644 testdata/crud/unified/aggregate-write-readPreference.yml delete mode 100644 testdata/crud/unified/aggregate.json delete mode 100644 testdata/crud/unified/aggregate.yml delete mode 100644 testdata/crud/unified/bulkWrite-arrayFilters-clientError.json delete mode 100644 testdata/crud/unified/bulkWrite-arrayFilters-clientError.yml delete mode 100644 testdata/crud/unified/bulkWrite-arrayFilters.json delete mode 100644 testdata/crud/unified/bulkWrite-arrayFilters.yml delete mode 100644 testdata/crud/unified/bulkWrite-comment.json delete mode 100644 testdata/crud/unified/bulkWrite-comment.yml delete mode 100644 testdata/crud/unified/bulkWrite-delete-hint-clientError.json delete mode 100644 testdata/crud/unified/bulkWrite-delete-hint-clientError.yml delete mode 100644 testdata/crud/unified/bulkWrite-delete-hint-serverError.json delete mode 100644 testdata/crud/unified/bulkWrite-delete-hint-serverError.yml delete mode 100644 testdata/crud/unified/bulkWrite-delete-hint.json delete mode 100644 testdata/crud/unified/bulkWrite-delete-hint.yml delete mode 100644 testdata/crud/unified/bulkWrite-deleteMany-let.json delete mode 100644 testdata/crud/unified/bulkWrite-deleteMany-let.yml delete mode 100644 testdata/crud/unified/bulkWrite-deleteOne-let.json delete mode 100644 testdata/crud/unified/bulkWrite-deleteOne-let.yml delete mode 100644 testdata/crud/unified/bulkWrite-errorResponse.json delete mode 100644 testdata/crud/unified/bulkWrite-errorResponse.yml delete mode 100644 testdata/crud/unified/bulkWrite-insertOne-dots_and_dollars.json delete mode 100644 testdata/crud/unified/bulkWrite-insertOne-dots_and_dollars.yml delete mode 100644 testdata/crud/unified/bulkWrite-replaceOne-dots_and_dollars.json delete mode 100644 testdata/crud/unified/bulkWrite-replaceOne-dots_and_dollars.yml delete mode 100644 testdata/crud/unified/bulkWrite-replaceOne-let.json delete mode 100644 testdata/crud/unified/bulkWrite-replaceOne-let.yml delete mode 100644 testdata/crud/unified/bulkWrite-replaceOne-sort.json delete mode 100644 testdata/crud/unified/bulkWrite-replaceOne-sort.yml delete mode 100644 testdata/crud/unified/bulkWrite-update-hint-clientError.json delete mode 100644 testdata/crud/unified/bulkWrite-update-hint-clientError.yml delete mode 100644 testdata/crud/unified/bulkWrite-update-hint-serverError.json delete mode 100644 testdata/crud/unified/bulkWrite-update-hint-serverError.yml delete mode 100644 testdata/crud/unified/bulkWrite-update-hint.json delete mode 100644 testdata/crud/unified/bulkWrite-update-hint.yml delete mode 100644 testdata/crud/unified/bulkWrite-update-validation.json delete mode 100644 testdata/crud/unified/bulkWrite-update-validation.yml delete mode 100644 testdata/crud/unified/bulkWrite-updateMany-dots_and_dollars.json delete mode 100644 testdata/crud/unified/bulkWrite-updateMany-dots_and_dollars.yml delete mode 100644 testdata/crud/unified/bulkWrite-updateMany-let.json delete mode 100644 testdata/crud/unified/bulkWrite-updateMany-let.yml delete mode 100644 testdata/crud/unified/bulkWrite-updateOne-dots_and_dollars.json delete mode 100644 testdata/crud/unified/bulkWrite-updateOne-dots_and_dollars.yml delete mode 100644 testdata/crud/unified/bulkWrite-updateOne-let.json delete mode 100644 testdata/crud/unified/bulkWrite-updateOne-let.yml delete mode 100644 testdata/crud/unified/bulkWrite-updateOne-sort.json delete mode 100644 testdata/crud/unified/bulkWrite-updateOne-sort.yml delete mode 100644 testdata/crud/unified/client-bulkWrite-delete-options.json delete mode 100644 testdata/crud/unified/client-bulkWrite-delete-options.yml delete mode 100644 testdata/crud/unified/client-bulkWrite-errorResponse.json delete mode 100644 testdata/crud/unified/client-bulkWrite-errorResponse.yml delete mode 100644 testdata/crud/unified/client-bulkWrite-errors.json delete mode 100644 testdata/crud/unified/client-bulkWrite-errors.yml delete mode 100644 testdata/crud/unified/client-bulkWrite-mixed-namespaces.json delete mode 100644 testdata/crud/unified/client-bulkWrite-mixed-namespaces.yml delete mode 100644 testdata/crud/unified/client-bulkWrite-options.json delete mode 100644 testdata/crud/unified/client-bulkWrite-options.yml delete mode 100644 testdata/crud/unified/client-bulkWrite-ordered.json delete mode 100644 testdata/crud/unified/client-bulkWrite-ordered.yml delete mode 100644 testdata/crud/unified/client-bulkWrite-partialResults.json delete mode 100644 testdata/crud/unified/client-bulkWrite-partialResults.yml delete mode 100644 testdata/crud/unified/client-bulkWrite-replaceOne-sort.json delete mode 100644 testdata/crud/unified/client-bulkWrite-replaceOne-sort.yml delete mode 100644 testdata/crud/unified/client-bulkWrite-results.json delete mode 100644 testdata/crud/unified/client-bulkWrite-results.yml delete mode 100644 testdata/crud/unified/client-bulkWrite-update-options.json delete mode 100644 testdata/crud/unified/client-bulkWrite-update-options.yml delete mode 100644 testdata/crud/unified/client-bulkWrite-update-pipeline.json delete mode 100644 testdata/crud/unified/client-bulkWrite-update-pipeline.yml delete mode 100644 testdata/crud/unified/client-bulkWrite-update-validation.json delete mode 100644 testdata/crud/unified/client-bulkWrite-update-validation.yml delete mode 100644 testdata/crud/unified/client-bulkWrite-updateOne-sort.json delete mode 100644 testdata/crud/unified/client-bulkWrite-updateOne-sort.yml delete mode 100644 testdata/crud/unified/countDocuments-comment.json delete mode 100644 testdata/crud/unified/countDocuments-comment.yml delete mode 100644 testdata/crud/unified/db-aggregate-write-readPreference.json delete mode 100644 testdata/crud/unified/db-aggregate-write-readPreference.yml delete mode 100644 testdata/crud/unified/db-aggregate.json delete mode 100644 testdata/crud/unified/db-aggregate.yml delete mode 100644 testdata/crud/unified/deleteMany-comment.json delete mode 100644 testdata/crud/unified/deleteMany-comment.yml delete mode 100644 testdata/crud/unified/deleteMany-hint-clientError.json delete mode 100644 testdata/crud/unified/deleteMany-hint-clientError.yml delete mode 100644 testdata/crud/unified/deleteMany-hint-serverError.json delete mode 100644 testdata/crud/unified/deleteMany-hint-serverError.yml delete mode 100644 testdata/crud/unified/deleteMany-hint.json delete mode 100644 testdata/crud/unified/deleteMany-hint.yml delete mode 100644 testdata/crud/unified/deleteMany-let.json delete mode 100644 testdata/crud/unified/deleteMany-let.yml delete mode 100644 testdata/crud/unified/deleteOne-comment.json delete mode 100644 testdata/crud/unified/deleteOne-comment.yml delete mode 100644 testdata/crud/unified/deleteOne-errorResponse.json delete mode 100644 testdata/crud/unified/deleteOne-errorResponse.yml delete mode 100644 testdata/crud/unified/deleteOne-hint-clientError.json delete mode 100644 testdata/crud/unified/deleteOne-hint-clientError.yml delete mode 100644 testdata/crud/unified/deleteOne-hint-serverError.json delete mode 100644 testdata/crud/unified/deleteOne-hint-serverError.yml delete mode 100644 testdata/crud/unified/deleteOne-hint.json delete mode 100644 testdata/crud/unified/deleteOne-hint.yml delete mode 100644 testdata/crud/unified/deleteOne-let.json delete mode 100644 testdata/crud/unified/deleteOne-let.yml delete mode 100644 testdata/crud/unified/distinct-comment.json delete mode 100644 testdata/crud/unified/distinct-comment.yml delete mode 100644 testdata/crud/unified/distinct-hint.json delete mode 100644 testdata/crud/unified/distinct-hint.yml delete mode 100644 testdata/crud/unified/estimatedDocumentCount-comment.json delete mode 100644 testdata/crud/unified/estimatedDocumentCount-comment.yml delete mode 100644 testdata/crud/unified/estimatedDocumentCount.json delete mode 100644 testdata/crud/unified/estimatedDocumentCount.yml delete mode 100644 testdata/crud/unified/find-allowdiskuse-clientError.json delete mode 100644 testdata/crud/unified/find-allowdiskuse-clientError.yml delete mode 100644 testdata/crud/unified/find-allowdiskuse-serverError.json delete mode 100644 testdata/crud/unified/find-allowdiskuse-serverError.yml delete mode 100644 testdata/crud/unified/find-allowdiskuse.json delete mode 100644 testdata/crud/unified/find-allowdiskuse.yml delete mode 100644 testdata/crud/unified/find-comment.json delete mode 100644 testdata/crud/unified/find-comment.yml delete mode 100644 testdata/crud/unified/find-let.json delete mode 100644 testdata/crud/unified/find-let.yml delete mode 100644 testdata/crud/unified/find.json delete mode 100644 testdata/crud/unified/find.yml delete mode 100644 testdata/crud/unified/findOneAndDelete-comment.json delete mode 100644 testdata/crud/unified/findOneAndDelete-comment.yml delete mode 100644 testdata/crud/unified/findOneAndDelete-hint-clientError.json delete mode 100644 testdata/crud/unified/findOneAndDelete-hint-clientError.yml delete mode 100644 testdata/crud/unified/findOneAndDelete-hint-serverError.json delete mode 100644 testdata/crud/unified/findOneAndDelete-hint-serverError.yml delete mode 100644 testdata/crud/unified/findOneAndDelete-hint.json delete mode 100644 testdata/crud/unified/findOneAndDelete-hint.yml delete mode 100644 testdata/crud/unified/findOneAndDelete-let.json delete mode 100644 testdata/crud/unified/findOneAndDelete-let.yml delete mode 100644 testdata/crud/unified/findOneAndReplace-comment.json delete mode 100644 testdata/crud/unified/findOneAndReplace-comment.yml delete mode 100644 testdata/crud/unified/findOneAndReplace-dots_and_dollars.json delete mode 100644 testdata/crud/unified/findOneAndReplace-dots_and_dollars.yml delete mode 100644 testdata/crud/unified/findOneAndReplace-hint-clientError.json delete mode 100644 testdata/crud/unified/findOneAndReplace-hint-clientError.yml delete mode 100644 testdata/crud/unified/findOneAndReplace-hint-serverError.json delete mode 100644 testdata/crud/unified/findOneAndReplace-hint-serverError.yml delete mode 100644 testdata/crud/unified/findOneAndReplace-hint.json delete mode 100644 testdata/crud/unified/findOneAndReplace-hint.yml delete mode 100644 testdata/crud/unified/findOneAndReplace-let.json delete mode 100644 testdata/crud/unified/findOneAndReplace-let.yml delete mode 100644 testdata/crud/unified/findOneAndUpdate-comment.json delete mode 100644 testdata/crud/unified/findOneAndUpdate-comment.yml delete mode 100644 testdata/crud/unified/findOneAndUpdate-dots_and_dollars.json delete mode 100644 testdata/crud/unified/findOneAndUpdate-dots_and_dollars.yml delete mode 100644 testdata/crud/unified/findOneAndUpdate-errorResponse.json delete mode 100644 testdata/crud/unified/findOneAndUpdate-errorResponse.yml delete mode 100644 testdata/crud/unified/findOneAndUpdate-hint-clientError.json delete mode 100644 testdata/crud/unified/findOneAndUpdate-hint-clientError.yml delete mode 100644 testdata/crud/unified/findOneAndUpdate-hint-serverError.json delete mode 100644 testdata/crud/unified/findOneAndUpdate-hint-serverError.yml delete mode 100644 testdata/crud/unified/findOneAndUpdate-hint.json delete mode 100644 testdata/crud/unified/findOneAndUpdate-hint.yml delete mode 100644 testdata/crud/unified/findOneAndUpdate-let.json delete mode 100644 testdata/crud/unified/findOneAndUpdate-let.yml delete mode 100644 testdata/crud/unified/insertMany-comment.json delete mode 100644 testdata/crud/unified/insertMany-comment.yml delete mode 100644 testdata/crud/unified/insertMany-dots_and_dollars.json delete mode 100644 testdata/crud/unified/insertMany-dots_and_dollars.yml delete mode 100644 testdata/crud/unified/insertOne-comment.json delete mode 100644 testdata/crud/unified/insertOne-comment.yml delete mode 100644 testdata/crud/unified/insertOne-dots_and_dollars.json delete mode 100644 testdata/crud/unified/insertOne-dots_and_dollars.yml delete mode 100644 testdata/crud/unified/insertOne-errorResponse.json delete mode 100644 testdata/crud/unified/insertOne-errorResponse.yml delete mode 100644 testdata/crud/unified/replaceOne-comment.json delete mode 100644 testdata/crud/unified/replaceOne-comment.yml delete mode 100644 testdata/crud/unified/replaceOne-dots_and_dollars.json delete mode 100644 testdata/crud/unified/replaceOne-dots_and_dollars.yml delete mode 100644 testdata/crud/unified/replaceOne-hint.json delete mode 100644 testdata/crud/unified/replaceOne-hint.yml delete mode 100644 testdata/crud/unified/replaceOne-let.json delete mode 100644 testdata/crud/unified/replaceOne-let.yml delete mode 100644 testdata/crud/unified/replaceOne-sort.json delete mode 100644 testdata/crud/unified/replaceOne-sort.yml delete mode 100644 testdata/crud/unified/replaceOne-validation.json delete mode 100644 testdata/crud/unified/replaceOne-validation.yml delete mode 100644 testdata/crud/unified/unacknowledged-bulkWrite-delete-hint-clientError.json delete mode 100644 testdata/crud/unified/unacknowledged-bulkWrite-delete-hint-clientError.yml delete mode 100644 testdata/crud/unified/unacknowledged-bulkWrite-update-hint-clientError.json delete mode 100644 testdata/crud/unified/unacknowledged-bulkWrite-update-hint-clientError.yml delete mode 100644 testdata/crud/unified/unacknowledged-deleteMany-hint-clientError.json delete mode 100644 testdata/crud/unified/unacknowledged-deleteMany-hint-clientError.yml delete mode 100644 testdata/crud/unified/unacknowledged-deleteOne-hint-clientError.json delete mode 100644 testdata/crud/unified/unacknowledged-deleteOne-hint-clientError.yml delete mode 100644 testdata/crud/unified/unacknowledged-findOneAndDelete-hint-clientError.json delete mode 100644 testdata/crud/unified/unacknowledged-findOneAndDelete-hint-clientError.yml delete mode 100644 testdata/crud/unified/unacknowledged-findOneAndReplace-hint-clientError.json delete mode 100644 testdata/crud/unified/unacknowledged-findOneAndReplace-hint-clientError.yml delete mode 100644 testdata/crud/unified/unacknowledged-findOneAndUpdate-hint-clientError.json delete mode 100644 testdata/crud/unified/unacknowledged-findOneAndUpdate-hint-clientError.yml delete mode 100644 testdata/crud/unified/unacknowledged-replaceOne-hint-clientError.json delete mode 100644 testdata/crud/unified/unacknowledged-replaceOne-hint-clientError.yml delete mode 100644 testdata/crud/unified/unacknowledged-updateMany-hint-clientError.json delete mode 100644 testdata/crud/unified/unacknowledged-updateMany-hint-clientError.yml delete mode 100644 testdata/crud/unified/unacknowledged-updateOne-hint-clientError.json delete mode 100644 testdata/crud/unified/unacknowledged-updateOne-hint-clientError.yml delete mode 100644 testdata/crud/unified/updateMany-comment.json delete mode 100644 testdata/crud/unified/updateMany-comment.yml delete mode 100644 testdata/crud/unified/updateMany-dots_and_dollars.json delete mode 100644 testdata/crud/unified/updateMany-dots_and_dollars.yml delete mode 100644 testdata/crud/unified/updateMany-hint-clientError.json delete mode 100644 testdata/crud/unified/updateMany-hint-clientError.yml delete mode 100644 testdata/crud/unified/updateMany-hint-serverError.json delete mode 100644 testdata/crud/unified/updateMany-hint-serverError.yml delete mode 100644 testdata/crud/unified/updateMany-hint.json delete mode 100644 testdata/crud/unified/updateMany-hint.yml delete mode 100644 testdata/crud/unified/updateMany-let.json delete mode 100644 testdata/crud/unified/updateMany-let.yml delete mode 100644 testdata/crud/unified/updateMany-validation.json delete mode 100644 testdata/crud/unified/updateMany-validation.yml delete mode 100644 testdata/crud/unified/updateOne-comment.json delete mode 100644 testdata/crud/unified/updateOne-comment.yml delete mode 100644 testdata/crud/unified/updateOne-dots_and_dollars.json delete mode 100644 testdata/crud/unified/updateOne-dots_and_dollars.yml delete mode 100644 testdata/crud/unified/updateOne-errorResponse.json delete mode 100644 testdata/crud/unified/updateOne-errorResponse.yml delete mode 100644 testdata/crud/unified/updateOne-hint-clientError.json delete mode 100644 testdata/crud/unified/updateOne-hint-clientError.yml delete mode 100644 testdata/crud/unified/updateOne-hint-serverError.json delete mode 100644 testdata/crud/unified/updateOne-hint-serverError.yml delete mode 100644 testdata/crud/unified/updateOne-hint.json delete mode 100644 testdata/crud/unified/updateOne-hint.yml delete mode 100644 testdata/crud/unified/updateOne-let.json delete mode 100644 testdata/crud/unified/updateOne-let.yml delete mode 100644 testdata/crud/unified/updateOne-sort.json delete mode 100644 testdata/crud/unified/updateOne-sort.yml delete mode 100644 testdata/crud/unified/updateOne-validation.json delete mode 100644 testdata/crud/unified/updateOne-validation.yml delete mode 100644 testdata/crud/unified/updateWithPipelines.json delete mode 100644 testdata/crud/unified/updateWithPipelines.yml delete mode 100644 testdata/crud/v1/read/aggregate-collation.json delete mode 100644 testdata/crud/v1/read/aggregate-collation.yml delete mode 100644 testdata/crud/v1/read/aggregate-out.json delete mode 100644 testdata/crud/v1/read/aggregate-out.yml delete mode 100644 testdata/crud/v1/read/aggregate.json delete mode 100644 testdata/crud/v1/read/aggregate.yml delete mode 100644 testdata/crud/v1/read/count-collation.json delete mode 100644 testdata/crud/v1/read/count-collation.yml delete mode 100644 testdata/crud/v1/read/count-empty.json delete mode 100644 testdata/crud/v1/read/count-empty.yml delete mode 100644 testdata/crud/v1/read/count.json delete mode 100644 testdata/crud/v1/read/count.yml delete mode 100644 testdata/crud/v1/read/distinct-collation.json delete mode 100644 testdata/crud/v1/read/distinct-collation.yml delete mode 100644 testdata/crud/v1/read/distinct.json delete mode 100644 testdata/crud/v1/read/distinct.yml delete mode 100644 testdata/crud/v1/read/find-collation.json delete mode 100644 testdata/crud/v1/read/find-collation.yml delete mode 100644 testdata/crud/v1/read/find.json delete mode 100644 testdata/crud/v1/read/find.yml delete mode 100644 testdata/crud/v1/write/bulkWrite-arrayFilters.json delete mode 100644 testdata/crud/v1/write/bulkWrite-arrayFilters.yml delete mode 100644 testdata/crud/v1/write/bulkWrite-collation.json delete mode 100644 testdata/crud/v1/write/bulkWrite-collation.yml delete mode 100644 testdata/crud/v1/write/bulkWrite.json delete mode 100644 testdata/crud/v1/write/bulkWrite.yml delete mode 100644 testdata/crud/v1/write/deleteMany-collation.json delete mode 100644 testdata/crud/v1/write/deleteMany-collation.yml delete mode 100644 testdata/crud/v1/write/deleteMany.json delete mode 100644 testdata/crud/v1/write/deleteMany.yml delete mode 100644 testdata/crud/v1/write/deleteOne-collation.json delete mode 100644 testdata/crud/v1/write/deleteOne-collation.yml delete mode 100644 testdata/crud/v1/write/deleteOne.json delete mode 100644 testdata/crud/v1/write/deleteOne.yml delete mode 100644 testdata/crud/v1/write/findOneAndDelete-collation.json delete mode 100644 testdata/crud/v1/write/findOneAndDelete-collation.yml delete mode 100644 testdata/crud/v1/write/findOneAndDelete.json delete mode 100644 testdata/crud/v1/write/findOneAndDelete.yml delete mode 100644 testdata/crud/v1/write/findOneAndReplace-collation.json delete mode 100644 testdata/crud/v1/write/findOneAndReplace-collation.yml delete mode 100644 testdata/crud/v1/write/findOneAndReplace-upsert.json delete mode 100644 testdata/crud/v1/write/findOneAndReplace-upsert.yml delete mode 100644 testdata/crud/v1/write/findOneAndReplace.json delete mode 100644 testdata/crud/v1/write/findOneAndReplace.yml delete mode 100644 testdata/crud/v1/write/findOneAndUpdate-arrayFilters.json delete mode 100644 testdata/crud/v1/write/findOneAndUpdate-arrayFilters.yml delete mode 100644 testdata/crud/v1/write/findOneAndUpdate-collation.json delete mode 100644 testdata/crud/v1/write/findOneAndUpdate-collation.yml delete mode 100644 testdata/crud/v1/write/findOneAndUpdate.json delete mode 100644 testdata/crud/v1/write/findOneAndUpdate.yml delete mode 100644 testdata/crud/v1/write/insertMany.json delete mode 100644 testdata/crud/v1/write/insertMany.yml delete mode 100644 testdata/crud/v1/write/insertOne.json delete mode 100644 testdata/crud/v1/write/insertOne.yml delete mode 100644 testdata/crud/v1/write/replaceOne-collation.json delete mode 100644 testdata/crud/v1/write/replaceOne-collation.yml delete mode 100644 testdata/crud/v1/write/replaceOne.json delete mode 100644 testdata/crud/v1/write/replaceOne.yml delete mode 100644 testdata/crud/v1/write/updateMany-arrayFilters.json delete mode 100644 testdata/crud/v1/write/updateMany-arrayFilters.yml delete mode 100644 testdata/crud/v1/write/updateMany-collation.json delete mode 100644 testdata/crud/v1/write/updateMany-collation.yml delete mode 100644 testdata/crud/v1/write/updateMany.json delete mode 100644 testdata/crud/v1/write/updateMany.yml delete mode 100644 testdata/crud/v1/write/updateOne-arrayFilters.json delete mode 100644 testdata/crud/v1/write/updateOne-arrayFilters.yml delete mode 100644 testdata/crud/v1/write/updateOne-collation.json delete mode 100644 testdata/crud/v1/write/updateOne-collation.yml delete mode 100644 testdata/crud/v1/write/updateOne.json delete mode 100644 testdata/crud/v1/write/updateOne.yml delete mode 100644 testdata/extended_bson/deep_bson.json.gz delete mode 100644 testdata/extended_bson/flat_bson.json.gz delete mode 100644 testdata/extended_bson/full_bson.json.gz delete mode 100644 testdata/gridfs/delete.json delete mode 100644 testdata/gridfs/delete.yml delete mode 100644 testdata/gridfs/download.json delete mode 100644 testdata/gridfs/download.yml delete mode 100644 testdata/gridfs/downloadByName.json delete mode 100644 testdata/gridfs/downloadByName.yml delete mode 100644 testdata/gridfs/upload-disableMD5.json delete mode 100644 testdata/gridfs/upload-disableMD5.yml delete mode 100644 testdata/gridfs/upload.json delete mode 100644 testdata/gridfs/upload.yml delete mode 100644 testdata/index-management/createSearchIndex.json delete mode 100644 testdata/index-management/createSearchIndex.yml delete mode 100644 testdata/index-management/createSearchIndexes.json delete mode 100644 testdata/index-management/createSearchIndexes.yml delete mode 100644 testdata/index-management/dropSearchIndex.json delete mode 100644 testdata/index-management/dropSearchIndex.yml delete mode 100644 testdata/index-management/listSearchIndexes.json delete mode 100644 testdata/index-management/listSearchIndexes.yml delete mode 100644 testdata/index-management/searchIndexIgnoresReadWriteConcern.json delete mode 100644 testdata/index-management/searchIndexIgnoresReadWriteConcern.yml delete mode 100644 testdata/index-management/updateSearchIndex.json delete mode 100644 testdata/index-management/updateSearchIndex.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/load-balanced/loadBalanced-directConnection.json delete mode 100644 testdata/initial-dns-seedlist-discovery/load-balanced/loadBalanced-directConnection.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/load-balanced/loadBalanced-no-results.json delete mode 100644 testdata/initial-dns-seedlist-discovery/load-balanced/loadBalanced-no-results.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/load-balanced/loadBalanced-replicaSet-errors.json delete mode 100644 testdata/initial-dns-seedlist-discovery/load-balanced/loadBalanced-replicaSet-errors.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/load-balanced/loadBalanced-true-multiple-hosts.json delete mode 100644 testdata/initial-dns-seedlist-discovery/load-balanced/loadBalanced-true-multiple-hosts.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/load-balanced/loadBalanced-true-txt.json delete mode 100644 testdata/initial-dns-seedlist-discovery/load-balanced/loadBalanced-true-txt.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.json delete mode 100644 testdata/initial-dns-seedlist-discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true.json delete mode 100644 testdata/initial-dns-seedlist-discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/load-balanced/srvMaxHosts-zero-txt.json delete mode 100644 testdata/initial-dns-seedlist-discovery/load-balanced/srvMaxHosts-zero-txt.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/load-balanced/srvMaxHosts-zero.json delete mode 100644 testdata/initial-dns-seedlist-discovery/load-balanced/srvMaxHosts-zero.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/direct-connection-false.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/direct-connection-false.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/direct-connection-true.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/direct-connection-true.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/encoded-userinfo-and-db.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/encoded-userinfo-and-db.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/loadBalanced-false-txt.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/loadBalanced-false-txt.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/longer-parent-in-return.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/longer-parent-in-return.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/misformatted-option.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/misformatted-option.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/no-results.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/no-results.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/not-enough-parts.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/not-enough-parts.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/one-result-default-port.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/one-result-default-port.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/one-txt-record-multiple-strings.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/one-txt-record-multiple-strings.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/one-txt-record.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/one-txt-record.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/parent-part-mismatch1.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/parent-part-mismatch1.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/parent-part-mismatch2.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/parent-part-mismatch2.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/parent-part-mismatch3.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/parent-part-mismatch3.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/parent-part-mismatch4.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/parent-part-mismatch4.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/parent-part-mismatch5.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/parent-part-mismatch5.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/returned-parent-too-short.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/returned-parent-too-short.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/returned-parent-wrong.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/returned-parent-wrong.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/srv-service-name.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/srv-service-name.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet-txt.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet-txt.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/srvMaxHosts-equal_to_srv_records.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/srvMaxHosts-equal_to_srv_records.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/srvMaxHosts-greater_than_srv_records.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/srvMaxHosts-greater_than_srv_records.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/srvMaxHosts-less_than_srv_records.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/srvMaxHosts-less_than_srv_records.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/srvMaxHosts-zero-txt.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/srvMaxHosts-zero-txt.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/srvMaxHosts-zero.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/srvMaxHosts-zero.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/two-results-default-port.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/two-results-default-port.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/two-results-nonstandard-port.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/two-results-nonstandard-port.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/two-txt-records.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/two-txt-records.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/txt-record-not-allowed-option.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/txt-record-not-allowed-option.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/txt-record-with-overridden-ssl-option.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/txt-record-with-overridden-ssl-option.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/txt-record-with-overridden-uri-option.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/txt-record-with-overridden-uri-option.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/txt-record-with-unallowed-option.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/txt-record-with-unallowed-option.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/uri-with-admin-database.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/uri-with-admin-database.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/uri-with-auth.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/uri-with-auth.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/uri-with-port.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/uri-with-port.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/uri-with-two-hosts.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/uri-with-two-hosts.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/uri-with-uppercase-hostname.json delete mode 100644 testdata/initial-dns-seedlist-discovery/replica-set/uri-with-uppercase-hostname.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/sharded/srvMaxHosts-equal_to_srv_records.json delete mode 100644 testdata/initial-dns-seedlist-discovery/sharded/srvMaxHosts-equal_to_srv_records.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/sharded/srvMaxHosts-greater_than_srv_records.json delete mode 100644 testdata/initial-dns-seedlist-discovery/sharded/srvMaxHosts-greater_than_srv_records.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/sharded/srvMaxHosts-less_than_srv_records.json delete mode 100644 testdata/initial-dns-seedlist-discovery/sharded/srvMaxHosts-less_than_srv_records.yml delete mode 100644 testdata/initial-dns-seedlist-discovery/sharded/srvMaxHosts-zero.json delete mode 100644 testdata/initial-dns-seedlist-discovery/sharded/srvMaxHosts-zero.yml delete mode 100644 testdata/load-balancers/cursors.json delete mode 100644 testdata/load-balancers/cursors.yml delete mode 100644 testdata/load-balancers/event-monitoring.json delete mode 100644 testdata/load-balancers/event-monitoring.yml delete mode 100644 testdata/load-balancers/lb-connection-establishment.json delete mode 100644 testdata/load-balancers/lb-connection-establishment.yml delete mode 100644 testdata/load-balancers/non-lb-connection-establishment.json delete mode 100644 testdata/load-balancers/non-lb-connection-establishment.yml delete mode 100644 testdata/load-balancers/sdam-error-handling.json delete mode 100644 testdata/load-balancers/sdam-error-handling.yml delete mode 100644 testdata/load-balancers/server-selection.json delete mode 100644 testdata/load-balancers/server-selection.yml delete mode 100644 testdata/load-balancers/transactions.json delete mode 100644 testdata/load-balancers/transactions.yml delete mode 100644 testdata/load-balancers/wait-queue-timeouts.json delete mode 100644 testdata/load-balancers/wait-queue-timeouts.yml delete mode 100644 testdata/max-staleness/ReplicaSetNoPrimary/DefaultNoMaxStaleness.json delete mode 100644 testdata/max-staleness/ReplicaSetNoPrimary/DefaultNoMaxStaleness.yml delete mode 100644 testdata/max-staleness/ReplicaSetNoPrimary/LastUpdateTime.json delete mode 100644 testdata/max-staleness/ReplicaSetNoPrimary/LastUpdateTime.yml delete mode 100644 testdata/max-staleness/ReplicaSetNoPrimary/MaxStalenessTooSmall.json delete mode 100644 testdata/max-staleness/ReplicaSetNoPrimary/MaxStalenessTooSmall.yml delete mode 100644 testdata/max-staleness/ReplicaSetNoPrimary/Nearest.json delete mode 100644 testdata/max-staleness/ReplicaSetNoPrimary/Nearest.yml delete mode 100644 testdata/max-staleness/ReplicaSetNoPrimary/Nearest2.json delete mode 100644 testdata/max-staleness/ReplicaSetNoPrimary/Nearest2.yml delete mode 100644 testdata/max-staleness/ReplicaSetNoPrimary/NoKnownServers.json delete mode 100644 testdata/max-staleness/ReplicaSetNoPrimary/NoKnownServers.yml delete mode 100644 testdata/max-staleness/ReplicaSetNoPrimary/PrimaryPreferred.json delete mode 100644 testdata/max-staleness/ReplicaSetNoPrimary/PrimaryPreferred.yml delete mode 100644 testdata/max-staleness/ReplicaSetNoPrimary/PrimaryPreferred_tags.json delete mode 100644 testdata/max-staleness/ReplicaSetNoPrimary/PrimaryPreferred_tags.yml delete mode 100644 testdata/max-staleness/ReplicaSetNoPrimary/Secondary.json delete mode 100644 testdata/max-staleness/ReplicaSetNoPrimary/Secondary.yml delete mode 100644 testdata/max-staleness/ReplicaSetNoPrimary/SecondaryPreferred.json delete mode 100644 testdata/max-staleness/ReplicaSetNoPrimary/SecondaryPreferred.yml delete mode 100644 testdata/max-staleness/ReplicaSetNoPrimary/SecondaryPreferred_tags.json delete mode 100644 testdata/max-staleness/ReplicaSetNoPrimary/SecondaryPreferred_tags.yml delete mode 100644 testdata/max-staleness/ReplicaSetNoPrimary/ZeroMaxStaleness.json delete mode 100644 testdata/max-staleness/ReplicaSetNoPrimary/ZeroMaxStaleness.yml delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/DefaultNoMaxStaleness.json delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/DefaultNoMaxStaleness.yml delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/LastUpdateTime.json delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/LastUpdateTime.yml delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/LongHeartbeat.json delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/LongHeartbeat.yml delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/LongHeartbeat2.json delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/LongHeartbeat2.yml delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/MaxStalenessTooSmall.json delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/MaxStalenessTooSmall.yml delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/MaxStalenessWithModePrimary.json delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/MaxStalenessWithModePrimary.yml delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/Nearest.json delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/Nearest.yml delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/Nearest2.json delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/Nearest2.yml delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/Nearest_tags.json delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/Nearest_tags.yml delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/PrimaryPreferred.json delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/PrimaryPreferred.yml delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/SecondaryPreferred.json delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/SecondaryPreferred.yml delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags.json delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags.yml delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags2.json delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags2.yml delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/Secondary_tags.json delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/Secondary_tags.yml delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/Secondary_tags2.json delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/Secondary_tags2.yml delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/ZeroMaxStaleness.json delete mode 100644 testdata/max-staleness/ReplicaSetWithPrimary/ZeroMaxStaleness.yml delete mode 100644 testdata/max-staleness/Sharded/SmallMaxStaleness.json delete mode 100644 testdata/max-staleness/Sharded/SmallMaxStaleness.yml delete mode 100644 testdata/max-staleness/Single/SmallMaxStaleness.json delete mode 100644 testdata/max-staleness/Single/SmallMaxStaleness.yml delete mode 100644 testdata/max-staleness/Unknown/SmallMaxStaleness.json delete mode 100644 testdata/max-staleness/Unknown/SmallMaxStaleness.yml delete mode 100644 testdata/mongocrypt/collection-info.json delete mode 100644 testdata/mongocrypt/command-reply.json delete mode 100644 testdata/mongocrypt/command.json delete mode 100644 testdata/mongocrypt/encrypted-command-reply.json delete mode 100644 testdata/mongocrypt/encrypted-command.json delete mode 100644 testdata/mongocrypt/encrypted-value.json delete mode 100644 testdata/mongocrypt/json-schema.json delete mode 100644 testdata/mongocrypt/key-document.json delete mode 100644 testdata/mongocrypt/key-filter-keyAltName.json delete mode 100644 testdata/mongocrypt/key-filter.json delete mode 100644 testdata/mongocrypt/kms-reply.txt delete mode 100644 testdata/mongocrypt/list-collections-filter.json delete mode 100644 testdata/mongocrypt/local-key-document.json delete mode 100644 testdata/mongocrypt/mongocryptd-command-local.json delete mode 100644 testdata/mongocrypt/mongocryptd-command-remote.json delete mode 100644 testdata/mongocrypt/mongocryptd-reply.json delete mode 100644 testdata/read-write-concern/connection-string/read-concern.json delete mode 100644 testdata/read-write-concern/connection-string/read-concern.yml delete mode 100644 testdata/read-write-concern/connection-string/write-concern.json delete mode 100644 testdata/read-write-concern/connection-string/write-concern.yml delete mode 100644 testdata/read-write-concern/document/read-concern.json delete mode 100644 testdata/read-write-concern/document/read-concern.yml delete mode 100644 testdata/read-write-concern/document/write-concern.json delete mode 100644 testdata/read-write-concern/document/write-concern.yml delete mode 100644 testdata/read-write-concern/operation/default-write-concern-2.6.json delete mode 100644 testdata/read-write-concern/operation/default-write-concern-2.6.yml delete mode 100644 testdata/read-write-concern/operation/default-write-concern-3.2.json delete mode 100644 testdata/read-write-concern/operation/default-write-concern-3.2.yml delete mode 100644 testdata/read-write-concern/operation/default-write-concern-3.4.json delete mode 100644 testdata/read-write-concern/operation/default-write-concern-3.4.yml delete mode 100644 testdata/read-write-concern/operation/default-write-concern-4.2.json delete mode 100644 testdata/read-write-concern/operation/default-write-concern-4.2.yml delete mode 100644 testdata/retryable-reads/legacy/aggregate-merge.json delete mode 100644 testdata/retryable-reads/legacy/aggregate-merge.yml delete mode 100644 testdata/retryable-reads/legacy/aggregate-serverErrors.json delete mode 100644 testdata/retryable-reads/legacy/aggregate-serverErrors.yml delete mode 100644 testdata/retryable-reads/legacy/aggregate.json delete mode 100644 testdata/retryable-reads/legacy/aggregate.yml delete mode 100644 testdata/retryable-reads/legacy/changeStreams-client.watch-serverErrors.json delete mode 100644 testdata/retryable-reads/legacy/changeStreams-client.watch-serverErrors.yml delete mode 100644 testdata/retryable-reads/legacy/changeStreams-client.watch.json delete mode 100644 testdata/retryable-reads/legacy/changeStreams-client.watch.yml delete mode 100644 testdata/retryable-reads/legacy/changeStreams-db.coll.watch-serverErrors.json delete mode 100644 testdata/retryable-reads/legacy/changeStreams-db.coll.watch-serverErrors.yml delete mode 100644 testdata/retryable-reads/legacy/changeStreams-db.coll.watch.json delete mode 100644 testdata/retryable-reads/legacy/changeStreams-db.coll.watch.yml delete mode 100644 testdata/retryable-reads/legacy/changeStreams-db.watch-serverErrors.json delete mode 100644 testdata/retryable-reads/legacy/changeStreams-db.watch-serverErrors.yml delete mode 100644 testdata/retryable-reads/legacy/changeStreams-db.watch.json delete mode 100644 testdata/retryable-reads/legacy/changeStreams-db.watch.yml delete mode 100644 testdata/retryable-reads/legacy/count-serverErrors.json delete mode 100644 testdata/retryable-reads/legacy/count-serverErrors.yml delete mode 100644 testdata/retryable-reads/legacy/count.json delete mode 100644 testdata/retryable-reads/legacy/count.yml delete mode 100644 testdata/retryable-reads/legacy/countDocuments-serverErrors.json delete mode 100644 testdata/retryable-reads/legacy/countDocuments-serverErrors.yml delete mode 100644 testdata/retryable-reads/legacy/countDocuments.json delete mode 100644 testdata/retryable-reads/legacy/countDocuments.yml delete mode 100644 testdata/retryable-reads/legacy/distinct-serverErrors.json delete mode 100644 testdata/retryable-reads/legacy/distinct-serverErrors.yml delete mode 100644 testdata/retryable-reads/legacy/distinct.json delete mode 100644 testdata/retryable-reads/legacy/distinct.yml delete mode 100644 testdata/retryable-reads/legacy/estimatedDocumentCount-serverErrors.json delete mode 100644 testdata/retryable-reads/legacy/estimatedDocumentCount-serverErrors.yml delete mode 100644 testdata/retryable-reads/legacy/estimatedDocumentCount.json delete mode 100644 testdata/retryable-reads/legacy/estimatedDocumentCount.yml delete mode 100644 testdata/retryable-reads/legacy/find-serverErrors.json delete mode 100644 testdata/retryable-reads/legacy/find-serverErrors.yml delete mode 100644 testdata/retryable-reads/legacy/find.json delete mode 100644 testdata/retryable-reads/legacy/find.yml delete mode 100644 testdata/retryable-reads/legacy/findOne-serverErrors.json delete mode 100644 testdata/retryable-reads/legacy/findOne-serverErrors.yml delete mode 100644 testdata/retryable-reads/legacy/findOne.json delete mode 100644 testdata/retryable-reads/legacy/findOne.yml delete mode 100644 testdata/retryable-reads/legacy/gridfs-download-serverErrors.json delete mode 100644 testdata/retryable-reads/legacy/gridfs-download-serverErrors.yml delete mode 100644 testdata/retryable-reads/legacy/gridfs-download.json delete mode 100644 testdata/retryable-reads/legacy/gridfs-download.yml delete mode 100644 testdata/retryable-reads/legacy/gridfs-downloadByName-serverErrors.json delete mode 100644 testdata/retryable-reads/legacy/gridfs-downloadByName-serverErrors.yml delete mode 100644 testdata/retryable-reads/legacy/gridfs-downloadByName.json delete mode 100644 testdata/retryable-reads/legacy/gridfs-downloadByName.yml delete mode 100644 testdata/retryable-reads/legacy/listCollectionNames-serverErrors.json delete mode 100644 testdata/retryable-reads/legacy/listCollectionNames-serverErrors.yml delete mode 100644 testdata/retryable-reads/legacy/listCollectionNames.json delete mode 100644 testdata/retryable-reads/legacy/listCollectionNames.yml delete mode 100644 testdata/retryable-reads/legacy/listCollectionObjects-serverErrors.json delete mode 100644 testdata/retryable-reads/legacy/listCollectionObjects-serverErrors.yml delete mode 100644 testdata/retryable-reads/legacy/listCollectionObjects.json delete mode 100644 testdata/retryable-reads/legacy/listCollectionObjects.yml delete mode 100644 testdata/retryable-reads/legacy/listCollections-serverErrors.json delete mode 100644 testdata/retryable-reads/legacy/listCollections-serverErrors.yml delete mode 100644 testdata/retryable-reads/legacy/listCollections.json delete mode 100644 testdata/retryable-reads/legacy/listCollections.yml delete mode 100644 testdata/retryable-reads/legacy/listDatabaseNames-serverErrors.json delete mode 100644 testdata/retryable-reads/legacy/listDatabaseNames-serverErrors.yml delete mode 100644 testdata/retryable-reads/legacy/listDatabaseNames.json delete mode 100644 testdata/retryable-reads/legacy/listDatabaseNames.yml delete mode 100644 testdata/retryable-reads/legacy/listDatabaseObjects-serverErrors.json delete mode 100644 testdata/retryable-reads/legacy/listDatabaseObjects-serverErrors.yml delete mode 100644 testdata/retryable-reads/legacy/listDatabaseObjects.json delete mode 100644 testdata/retryable-reads/legacy/listDatabaseObjects.yml delete mode 100644 testdata/retryable-reads/legacy/listDatabases-serverErrors.json delete mode 100644 testdata/retryable-reads/legacy/listDatabases-serverErrors.yml delete mode 100644 testdata/retryable-reads/legacy/listDatabases.json delete mode 100644 testdata/retryable-reads/legacy/listDatabases.yml delete mode 100644 testdata/retryable-reads/legacy/listIndexNames-serverErrors.json delete mode 100644 testdata/retryable-reads/legacy/listIndexNames-serverErrors.yml delete mode 100644 testdata/retryable-reads/legacy/listIndexNames.json delete mode 100644 testdata/retryable-reads/legacy/listIndexNames.yml delete mode 100644 testdata/retryable-reads/legacy/listIndexes-serverErrors.json delete mode 100644 testdata/retryable-reads/legacy/listIndexes-serverErrors.yml delete mode 100644 testdata/retryable-reads/legacy/listIndexes.json delete mode 100644 testdata/retryable-reads/legacy/listIndexes.yml delete mode 100644 testdata/retryable-reads/legacy/mapReduce.json delete mode 100644 testdata/retryable-reads/legacy/mapReduce.yml delete mode 100644 testdata/retryable-reads/unified/readConcernMajorityNotAvailableYet.json delete mode 100644 testdata/retryable-reads/unified/readConcernMajorityNotAvailableYet.yml delete mode 100644 testdata/retryable-writes/unified/bulkWrite-serverErrors.json delete mode 100644 testdata/retryable-writes/unified/bulkWrite-serverErrors.yml delete mode 100644 testdata/retryable-writes/unified/client-bulkWrite-clientErrors.json delete mode 100644 testdata/retryable-writes/unified/client-bulkWrite-clientErrors.yml delete mode 100644 testdata/retryable-writes/unified/client-bulkWrite-serverErrors.json delete mode 100644 testdata/retryable-writes/unified/client-bulkWrite-serverErrors.yml delete mode 100644 testdata/retryable-writes/unified/insertOne-noWritesPerformedError.yml delete mode 100644 testdata/retryable-writes/unified/insertOne-noWritesPerformedErrors.json delete mode 100644 testdata/retryable-writes/unified/insertOne-serverErrors.json delete mode 100644 testdata/retryable-writes/unified/insertOne-serverErrors.yml delete mode 100644 testdata/run-command/runCommand.json delete mode 100644 testdata/run-command/runCommand.yml delete mode 100644 testdata/run-command/runCursorCommand.json delete mode 100644 testdata/run-command/runCursorCommand.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/error_handling_handshake.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/error_handling_handshake.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/generate-error-tests.py delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-network-error.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-network-error.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-network-timeout-error.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-network-timeout-error.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-InterruptedAtShutdown.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-InterruptedAtShutdown.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-InterruptedDueToReplStateChange.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-InterruptedDueToReplStateChange.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-LegacyNotPrimary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-LegacyNotPrimary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-NotPrimaryNoSecondaryOk.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-NotPrimaryNoSecondaryOk.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-NotPrimaryOrSecondary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-NotPrimaryOrSecondary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-NotWritablePrimary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-NotWritablePrimary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-PrimarySteppedDown.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-PrimarySteppedDown.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-ShutdownInProgress.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-ShutdownInProgress.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-InterruptedAtShutdown.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-InterruptedAtShutdown.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-InterruptedDueToReplStateChange.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-InterruptedDueToReplStateChange.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-LegacyNotPrimary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-LegacyNotPrimary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-NotPrimaryNoSecondaryOk.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-NotPrimaryNoSecondaryOk.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-NotPrimaryOrSecondary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-NotPrimaryOrSecondary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-NotWritablePrimary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-NotWritablePrimary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-PrimarySteppedDown.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-PrimarySteppedDown.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-ShutdownInProgress.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-ShutdownInProgress.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-InterruptedAtShutdown.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-InterruptedAtShutdown.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-InterruptedDueToReplStateChange.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-InterruptedDueToReplStateChange.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-LegacyNotPrimary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-LegacyNotPrimary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryNoSecondaryOk.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryNoSecondaryOk.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryOrSecondary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryOrSecondary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-NotWritablePrimary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-NotWritablePrimary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-PrimarySteppedDown.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-PrimarySteppedDown.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-ShutdownInProgress.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-ShutdownInProgress.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion.yml.template delete mode 100644 testdata/server-discovery-and-monitoring/errors/post-42-InterruptedAtShutdown.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/post-42-InterruptedAtShutdown.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/post-42-InterruptedDueToReplStateChange.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/post-42-InterruptedDueToReplStateChange.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/post-42-LegacyNotPrimary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/post-42-LegacyNotPrimary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/post-42-NotPrimaryNoSecondaryOk.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/post-42-NotPrimaryNoSecondaryOk.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/post-42-NotPrimaryOrSecondary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/post-42-NotPrimaryOrSecondary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/post-42-NotWritablePrimary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/post-42-NotWritablePrimary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/post-42-PrimarySteppedDown.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/post-42-PrimarySteppedDown.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/post-42-ShutdownInProgress.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/post-42-ShutdownInProgress.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/post-42.yml.template delete mode 100644 testdata/server-discovery-and-monitoring/errors/pre-42-InterruptedAtShutdown.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/pre-42-InterruptedAtShutdown.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/pre-42-InterruptedDueToReplStateChange.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/pre-42-InterruptedDueToReplStateChange.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/pre-42-LegacyNotPrimary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/pre-42-LegacyNotPrimary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/pre-42-NotPrimaryNoSecondaryOk.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/pre-42-NotPrimaryNoSecondaryOk.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/pre-42-NotPrimaryOrSecondary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/pre-42-NotPrimaryOrSecondary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/pre-42-NotWritablePrimary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/pre-42-NotWritablePrimary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/pre-42-PrimarySteppedDown.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/pre-42-PrimarySteppedDown.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/pre-42-ShutdownInProgress.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/pre-42-ShutdownInProgress.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/pre-42.yml.template delete mode 100644 testdata/server-discovery-and-monitoring/errors/prefer-error-code.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/prefer-error-code.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-InterruptedAtShutdown.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-InterruptedAtShutdown.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-InterruptedDueToReplStateChange.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-InterruptedDueToReplStateChange.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-NotPrimaryNoSecondaryOk.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-NotPrimaryNoSecondaryOk.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-NotPrimaryOrSecondary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-NotPrimaryOrSecondary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-NotWritablePrimary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-NotWritablePrimary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-PrimarySteppedDown.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-PrimarySteppedDown.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-ShutdownInProgress.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-ShutdownInProgress.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-InterruptedAtShutdown.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-InterruptedAtShutdown.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-InterruptedDueToReplStateChange.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-InterruptedDueToReplStateChange.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-LegacyNotPrimary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-LegacyNotPrimary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-NotPrimaryNoSecondaryOk.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-NotPrimaryNoSecondaryOk.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-NotPrimaryOrSecondary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-NotPrimaryOrSecondary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-NotWritablePrimary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-NotWritablePrimary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-PrimarySteppedDown.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-PrimarySteppedDown.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-ShutdownInProgress.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-ShutdownInProgress.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-network.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-network.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-timeout.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-timeout.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-InterruptedAtShutdown.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-InterruptedAtShutdown.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-InterruptedDueToReplStateChange.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-InterruptedDueToReplStateChange.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-LegacyNotPrimary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-LegacyNotPrimary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryNoSecondaryOk.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryNoSecondaryOk.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryOrSecondary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryOrSecondary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-NotWritablePrimary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-NotWritablePrimary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-PrimarySteppedDown.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-PrimarySteppedDown.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-ShutdownInProgress.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-ShutdownInProgress.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-network.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-network.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-timeout.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-timeout.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-generation.yml.template delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-InterruptedAtShutdown.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-InterruptedAtShutdown.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-InterruptedDueToReplStateChange.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-InterruptedDueToReplStateChange.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-LegacyNotPrimary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-LegacyNotPrimary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-NotPrimaryNoSecondaryOk.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-NotPrimaryNoSecondaryOk.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-NotPrimaryOrSecondary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-NotPrimaryOrSecondary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-NotWritablePrimary.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-NotWritablePrimary.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-PrimarySteppedDown.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-PrimarySteppedDown.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-ShutdownInProgress.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-ShutdownInProgress.yml delete mode 100644 testdata/server-discovery-and-monitoring/errors/stale-topologyVersion.yml.template delete mode 100644 testdata/server-discovery-and-monitoring/errors/write_errors_ignored.json delete mode 100644 testdata/server-discovery-and-monitoring/errors/write_errors_ignored.yml delete mode 100644 testdata/server-discovery-and-monitoring/load-balanced/discover_load_balancer.json delete mode 100644 testdata/server-discovery-and-monitoring/load-balanced/discover_load_balancer.yml delete mode 100644 testdata/server-discovery-and-monitoring/monitoring/discovered_standalone.json delete mode 100644 testdata/server-discovery-and-monitoring/monitoring/discovered_standalone.yml delete mode 100644 testdata/server-discovery-and-monitoring/monitoring/load_balancer.json delete mode 100644 testdata/server-discovery-and-monitoring/monitoring/load_balancer.yml delete mode 100644 testdata/server-discovery-and-monitoring/monitoring/replica_set_with_no_primary.json delete mode 100644 testdata/server-discovery-and-monitoring/monitoring/replica_set_with_no_primary.yml delete mode 100644 testdata/server-discovery-and-monitoring/monitoring/replica_set_with_primary.json delete mode 100644 testdata/server-discovery-and-monitoring/monitoring/replica_set_with_primary.yml delete mode 100644 testdata/server-discovery-and-monitoring/monitoring/replica_set_with_removal.json delete mode 100644 testdata/server-discovery-and-monitoring/monitoring/replica_set_with_removal.yml delete mode 100644 testdata/server-discovery-and-monitoring/monitoring/required_replica_set.json delete mode 100644 testdata/server-discovery-and-monitoring/monitoring/required_replica_set.yml delete mode 100644 testdata/server-discovery-and-monitoring/monitoring/standalone.json delete mode 100644 testdata/server-discovery-and-monitoring/monitoring/standalone.yml delete mode 100644 testdata/server-discovery-and-monitoring/monitoring/standalone_suppress_equal_description_changes.json delete mode 100644 testdata/server-discovery-and-monitoring/monitoring/standalone_suppress_equal_description_changes.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/compatible.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/compatible.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/compatible_unknown.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/compatible_unknown.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_arbiters.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_arbiters.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_arbiters_replicaset.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_arbiters_replicaset.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_ghost.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_ghost.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_ghost_replicaset.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_ghost_replicaset.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_hidden.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_hidden.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_hidden_replicaset.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_hidden_replicaset.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_passives.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_passives.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_passives_replicaset.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_passives_replicaset.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_primary.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_primary.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_primary_replicaset.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_primary_replicaset.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_rsother.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_rsother.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_rsother_replicaset.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_rsother_replicaset.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_secondary.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_secondary.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_secondary_replicaset.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/discover_secondary_replicaset.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/discovery.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/discovery.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/electionId_precedence_setVersion.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/electionId_precedence_setVersion.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/equal_electionids.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/equal_electionids.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/hosts_differ_from_seeds.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/hosts_differ_from_seeds.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/incompatible_arbiter.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/incompatible_arbiter.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/incompatible_ghost.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/incompatible_ghost.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/incompatible_other.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/incompatible_other.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/ls_timeout.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/ls_timeout.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/member_reconfig.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/member_reconfig.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/member_standalone.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/member_standalone.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/new_primary.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/new_primary.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/new_primary_new_electionid.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/new_primary_new_electionid.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/new_primary_new_setversion.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/new_primary_new_setversion.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/new_primary_wrong_set_name.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/new_primary_wrong_set_name.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/non_rs_member.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/non_rs_member.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/normalize_case.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/normalize_case.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/normalize_case_me.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/normalize_case_me.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/null_election_id-pre-6.0.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/null_election_id-pre-6.0.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/null_election_id.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/null_election_id.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_becomes_ghost.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_becomes_ghost.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_becomes_mongos.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_becomes_mongos.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_becomes_standalone.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_becomes_standalone.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_changes_set_name.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_changes_set_name.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_disconnect.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_disconnect.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_disconnect_electionid.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_disconnect_electionid.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_disconnect_setversion.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_disconnect_setversion.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_hint_from_secondary_with_mismatched_me.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_hint_from_secondary_with_mismatched_me.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_mismatched_me.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_mismatched_me.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_mismatched_me_not_removed.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_mismatched_me_not_removed.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_reports_new_member.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_reports_new_member.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_to_no_primary_mismatched_me.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_to_no_primary_mismatched_me.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_wrong_set_name.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/primary_wrong_set_name.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/repeated.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/repeated.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/replicaset_rsnp.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/replicaset_rsnp.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/response_from_removed.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/response_from_removed.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/sec_not_auth.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/sec_not_auth.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/secondary_ignore_ok_0-pre-6.0.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/secondary_ignore_ok_0-pre-6.0.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/secondary_ignore_ok_0.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/secondary_ignore_ok_0.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/secondary_mismatched_me.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/secondary_mismatched_me.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/secondary_wrong_set_name.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/secondary_wrong_set_name.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/secondary_wrong_set_name_with_primary.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/secondary_wrong_set_name_with_primary.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/set_version_can_rollback.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/set_version_can_rollback.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/setversion_equal_max_without_electionid.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/setversion_equal_max_without_electionid.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/setversion_greaterthan_max_without_electionid.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/setversion_greaterthan_max_without_electionid.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/setversion_without_electionid-pre-6.0.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/setversion_without_electionid-pre-6.0.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/setversion_without_electionid.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/setversion_without_electionid.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/stepdown_change_set_name.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/stepdown_change_set_name.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/too_new.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/too_new.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/too_old.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/too_old.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/topology_version_equal.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/topology_version_equal.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/topology_version_greater.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/topology_version_greater.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/topology_version_less.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/topology_version_less.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/unexpected_mongos.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/unexpected_mongos.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/use_setversion_without_electionid-pre-6.0.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/use_setversion_without_electionid-pre-6.0.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/use_setversion_without_electionid.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/use_setversion_without_electionid.yml delete mode 100644 testdata/server-discovery-and-monitoring/rs/wrong_set_name.json delete mode 100644 testdata/server-discovery-and-monitoring/rs/wrong_set_name.yml delete mode 100644 testdata/server-discovery-and-monitoring/sharded/compatible.json delete mode 100644 testdata/server-discovery-and-monitoring/sharded/compatible.yml delete mode 100644 testdata/server-discovery-and-monitoring/sharded/discover_single_mongos.json delete mode 100644 testdata/server-discovery-and-monitoring/sharded/discover_single_mongos.yml delete mode 100644 testdata/server-discovery-and-monitoring/sharded/ls_timeout_mongos.json delete mode 100644 testdata/server-discovery-and-monitoring/sharded/ls_timeout_mongos.yml delete mode 100644 testdata/server-discovery-and-monitoring/sharded/mongos_disconnect.json delete mode 100644 testdata/server-discovery-and-monitoring/sharded/mongos_disconnect.yml delete mode 100644 testdata/server-discovery-and-monitoring/sharded/multiple_mongoses.json delete mode 100644 testdata/server-discovery-and-monitoring/sharded/multiple_mongoses.yml delete mode 100644 testdata/server-discovery-and-monitoring/sharded/non_mongos_removed.json delete mode 100644 testdata/server-discovery-and-monitoring/sharded/non_mongos_removed.yml delete mode 100644 testdata/server-discovery-and-monitoring/sharded/normalize_uri_case.json delete mode 100644 testdata/server-discovery-and-monitoring/sharded/normalize_uri_case.yml delete mode 100644 testdata/server-discovery-and-monitoring/sharded/too_new.json delete mode 100644 testdata/server-discovery-and-monitoring/sharded/too_new.yml delete mode 100644 testdata/server-discovery-and-monitoring/sharded/too_old.json delete mode 100644 testdata/server-discovery-and-monitoring/sharded/too_old.yml delete mode 100644 testdata/server-discovery-and-monitoring/single/compatible.json delete mode 100644 testdata/server-discovery-and-monitoring/single/compatible.yml delete mode 100644 testdata/server-discovery-and-monitoring/single/direct_connection_external_ip.json delete mode 100644 testdata/server-discovery-and-monitoring/single/direct_connection_external_ip.yml delete mode 100644 testdata/server-discovery-and-monitoring/single/direct_connection_mongos.json delete mode 100644 testdata/server-discovery-and-monitoring/single/direct_connection_mongos.yml delete mode 100644 testdata/server-discovery-and-monitoring/single/direct_connection_replicaset.json delete mode 100644 testdata/server-discovery-and-monitoring/single/direct_connection_replicaset.yml delete mode 100644 testdata/server-discovery-and-monitoring/single/direct_connection_rsarbiter.json delete mode 100644 testdata/server-discovery-and-monitoring/single/direct_connection_rsarbiter.yml delete mode 100644 testdata/server-discovery-and-monitoring/single/direct_connection_rsprimary.json delete mode 100644 testdata/server-discovery-and-monitoring/single/direct_connection_rsprimary.yml delete mode 100644 testdata/server-discovery-and-monitoring/single/direct_connection_rssecondary.json delete mode 100644 testdata/server-discovery-and-monitoring/single/direct_connection_rssecondary.yml delete mode 100644 testdata/server-discovery-and-monitoring/single/direct_connection_standalone.json delete mode 100644 testdata/server-discovery-and-monitoring/single/direct_connection_standalone.yml delete mode 100644 testdata/server-discovery-and-monitoring/single/direct_connection_unavailable_seed.json delete mode 100644 testdata/server-discovery-and-monitoring/single/direct_connection_unavailable_seed.yml delete mode 100644 testdata/server-discovery-and-monitoring/single/direct_connection_wrong_set_name.json delete mode 100644 testdata/server-discovery-and-monitoring/single/direct_connection_wrong_set_name.yml delete mode 100644 testdata/server-discovery-and-monitoring/single/discover_standalone.json delete mode 100644 testdata/server-discovery-and-monitoring/single/discover_standalone.yml delete mode 100644 testdata/server-discovery-and-monitoring/single/discover_unavailable_seed.json delete mode 100644 testdata/server-discovery-and-monitoring/single/discover_unavailable_seed.yml delete mode 100644 testdata/server-discovery-and-monitoring/single/ls_timeout_standalone.json delete mode 100644 testdata/server-discovery-and-monitoring/single/ls_timeout_standalone.yml delete mode 100644 testdata/server-discovery-and-monitoring/single/not_ok_response.json delete mode 100644 testdata/server-discovery-and-monitoring/single/not_ok_response.yml delete mode 100644 testdata/server-discovery-and-monitoring/single/standalone_removed.json delete mode 100644 testdata/server-discovery-and-monitoring/single/standalone_removed.yml delete mode 100644 testdata/server-discovery-and-monitoring/single/standalone_using_legacy_hello.json delete mode 100644 testdata/server-discovery-and-monitoring/single/standalone_using_legacy_hello.yml delete mode 100644 testdata/server-discovery-and-monitoring/single/too_new.json delete mode 100644 testdata/server-discovery-and-monitoring/single/too_new.yml delete mode 100644 testdata/server-discovery-and-monitoring/single/too_old.json delete mode 100644 testdata/server-discovery-and-monitoring/single/too_old.yml delete mode 100644 testdata/server-discovery-and-monitoring/single/too_old_then_upgraded.json delete mode 100644 testdata/server-discovery-and-monitoring/single/too_old_then_upgraded.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/auth-error.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/auth-error.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/auth-misc-command-error.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/auth-misc-command-error.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/auth-network-error.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/auth-network-error.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/auth-network-timeout-error.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/auth-network-timeout-error.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/auth-shutdown-error.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/auth-shutdown-error.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/cancel-server-check.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/cancel-server-check.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/connectTimeoutMS.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/connectTimeoutMS.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/find-network-error.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/find-network-error.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/find-network-timeout-error.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/find-network-timeout-error.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/find-shutdown-error.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/find-shutdown-error.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/hello-command-error.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/hello-command-error.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/hello-network-error.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/hello-network-error.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/hello-timeout.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/hello-timeout.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/insert-network-error.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/insert-network-error.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/insert-shutdown-error.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/insert-shutdown-error.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/interruptInUse-pool-clear.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/interruptInUse-pool-clear.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/logging-loadbalanced.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/logging-loadbalanced.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/logging-replicaset.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/logging-replicaset.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/logging-sharded.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/logging-sharded.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/logging-standalone.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/logging-standalone.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/minPoolSize-error.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/minPoolSize-error.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/pool-cleared-error.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/pool-cleared-error.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/rediscover-quickly-after-step-down.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/rediscover-quickly-after-step-down.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/serverMonitoringMode.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/serverMonitoringMode.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.yml delete mode 100644 testdata/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json delete mode 100644 testdata/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml delete mode 100644 testdata/server-selection/in_window/equilibrium.json delete mode 100644 testdata/server-selection/in_window/equilibrium.yml delete mode 100644 testdata/server-selection/in_window/many-choices.json delete mode 100644 testdata/server-selection/in_window/many-choices.yml delete mode 100644 testdata/server-selection/in_window/one-least-two-tied.json delete mode 100644 testdata/server-selection/in_window/one-least-two-tied.yml delete mode 100644 testdata/server-selection/in_window/rs-equilibrium.json delete mode 100644 testdata/server-selection/in_window/rs-equilibrium.yml delete mode 100644 testdata/server-selection/in_window/rs-three-choices.json delete mode 100644 testdata/server-selection/in_window/rs-three-choices.yml delete mode 100644 testdata/server-selection/in_window/three-choices.json delete mode 100644 testdata/server-selection/in_window/three-choices.yml delete mode 100644 testdata/server-selection/in_window/two-choices.json delete mode 100644 testdata/server-selection/in_window/two-choices.yml delete mode 100644 testdata/server-selection/in_window/two-least.json delete mode 100644 testdata/server-selection/in_window/two-least.yml delete mode 100644 testdata/server-selection/logging/load-balanced.json delete mode 100644 testdata/server-selection/logging/load-balanced.yml delete mode 100644 testdata/server-selection/logging/operation-id.json delete mode 100644 testdata/server-selection/logging/operation-id.yml delete mode 100644 testdata/server-selection/logging/replica-set.json delete mode 100644 testdata/server-selection/logging/replica-set.yml delete mode 100644 testdata/server-selection/logging/sharded.json delete mode 100644 testdata/server-selection/logging/sharded.yml delete mode 100644 testdata/server-selection/logging/standalone.json delete mode 100644 testdata/server-selection/logging/standalone.yml delete mode 100644 testdata/server-selection/rtt/first_value.json delete mode 100644 testdata/server-selection/rtt/first_value.yml delete mode 100644 testdata/server-selection/rtt/first_value_zero.json delete mode 100644 testdata/server-selection/rtt/first_value_zero.yml delete mode 100644 testdata/server-selection/rtt/value_test_1.json delete mode 100644 testdata/server-selection/rtt/value_test_1.yml delete mode 100644 testdata/server-selection/rtt/value_test_2.json delete mode 100644 testdata/server-selection/rtt/value_test_2.yml delete mode 100644 testdata/server-selection/rtt/value_test_3.json delete mode 100644 testdata/server-selection/rtt/value_test_3.yml delete mode 100644 testdata/server-selection/rtt/value_test_4.json delete mode 100644 testdata/server-selection/rtt/value_test_4.yml delete mode 100644 testdata/server-selection/rtt/value_test_5.json delete mode 100644 testdata/server-selection/rtt/value_test_5.yml delete mode 100644 testdata/server-selection/server_selection/LoadBalanced/read/Nearest.json delete mode 100644 testdata/server-selection/server_selection/LoadBalanced/read/Nearest.yml delete mode 100644 testdata/server-selection/server_selection/LoadBalanced/read/Primary.json delete mode 100644 testdata/server-selection/server_selection/LoadBalanced/read/Primary.yml delete mode 100644 testdata/server-selection/server_selection/LoadBalanced/read/PrimaryPreferred.json delete mode 100644 testdata/server-selection/server_selection/LoadBalanced/read/PrimaryPreferred.yml delete mode 100644 testdata/server-selection/server_selection/LoadBalanced/read/Secondary.json delete mode 100644 testdata/server-selection/server_selection/LoadBalanced/read/Secondary.yml delete mode 100644 testdata/server-selection/server_selection/LoadBalanced/read/SecondaryPreferred.json delete mode 100644 testdata/server-selection/server_selection/LoadBalanced/read/SecondaryPreferred.yml delete mode 100644 testdata/server-selection/server_selection/LoadBalanced/write/Nearest.json delete mode 100644 testdata/server-selection/server_selection/LoadBalanced/write/Nearest.yml delete mode 100644 testdata/server-selection/server_selection/LoadBalanced/write/Primary.json delete mode 100644 testdata/server-selection/server_selection/LoadBalanced/write/Primary.yml delete mode 100644 testdata/server-selection/server_selection/LoadBalanced/write/PrimaryPreferred.json delete mode 100644 testdata/server-selection/server_selection/LoadBalanced/write/PrimaryPreferred.yml delete mode 100644 testdata/server-selection/server_selection/LoadBalanced/write/Secondary.json delete mode 100644 testdata/server-selection/server_selection/LoadBalanced/write/Secondary.yml delete mode 100644 testdata/server-selection/server_selection/LoadBalanced/write/SecondaryPreferred.json delete mode 100644 testdata/server-selection/server_selection/LoadBalanced/write/SecondaryPreferred.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Nearest.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Nearest.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Nearest_multiple.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Nearest_multiple.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Nearest_non_matching.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PossiblePrimary.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PossiblePrimary.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PossiblePrimaryNearest.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PossiblePrimaryNearest.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Primary.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Primary.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PrimaryPreferred.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/SecondaryPreferred.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary_multi_tags.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary_multi_tags.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary_multi_tags2.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary_multi_tags2.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary_non_matching.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/write/SecondaryPreferred.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetNoPrimary/write/SecondaryPreferred.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Nearest.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Nearest.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Nearest_multiple.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Nearest_multiple.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Nearest_non_matching.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Primary.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Primary.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/PrimaryPreferred.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Secondary.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Secondary.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred_tags.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred_tags.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Secondary_non_matching.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Secondary_non_matching.yml delete mode 100644 testdata/server-selection/server_selection/ReplicaSetWithPrimary/write/SecondaryPreferred.json delete mode 100644 testdata/server-selection/server_selection/ReplicaSetWithPrimary/write/SecondaryPreferred.yml delete mode 100644 testdata/server-selection/server_selection/Sharded/read/Nearest.json delete mode 100644 testdata/server-selection/server_selection/Sharded/read/Nearest.yml delete mode 100644 testdata/server-selection/server_selection/Sharded/read/Primary.json delete mode 100644 testdata/server-selection/server_selection/Sharded/read/Primary.yml delete mode 100644 testdata/server-selection/server_selection/Sharded/read/PrimaryPreferred.json delete mode 100644 testdata/server-selection/server_selection/Sharded/read/PrimaryPreferred.yml delete mode 100644 testdata/server-selection/server_selection/Sharded/read/Secondary.json delete mode 100644 testdata/server-selection/server_selection/Sharded/read/Secondary.yml delete mode 100644 testdata/server-selection/server_selection/Sharded/read/SecondaryPreferred.json delete mode 100644 testdata/server-selection/server_selection/Sharded/read/SecondaryPreferred.yml delete mode 100644 testdata/server-selection/server_selection/Sharded/write/Nearest.json delete mode 100644 testdata/server-selection/server_selection/Sharded/write/Nearest.yml delete mode 100644 testdata/server-selection/server_selection/Sharded/write/Primary.json delete mode 100644 testdata/server-selection/server_selection/Sharded/write/Primary.yml delete mode 100644 testdata/server-selection/server_selection/Sharded/write/PrimaryPreferred.json delete mode 100644 testdata/server-selection/server_selection/Sharded/write/PrimaryPreferred.yml delete mode 100644 testdata/server-selection/server_selection/Sharded/write/Secondary.json delete mode 100644 testdata/server-selection/server_selection/Sharded/write/Secondary.yml delete mode 100644 testdata/server-selection/server_selection/Sharded/write/SecondaryPreferred.json delete mode 100644 testdata/server-selection/server_selection/Sharded/write/SecondaryPreferred.yml delete mode 100644 testdata/server-selection/server_selection/Single/read/SecondaryPreferred.json delete mode 100644 testdata/server-selection/server_selection/Single/read/SecondaryPreferred.yml delete mode 100644 testdata/server-selection/server_selection/Single/write/SecondaryPreferred.json delete mode 100644 testdata/server-selection/server_selection/Single/write/SecondaryPreferred.yml delete mode 100644 testdata/server-selection/server_selection/Unknown/read/SecondaryPreferred.json delete mode 100644 testdata/server-selection/server_selection/Unknown/read/SecondaryPreferred.yml delete mode 100644 testdata/server-selection/server_selection/Unknown/write/SecondaryPreferred.json delete mode 100644 testdata/server-selection/server_selection/Unknown/write/SecondaryPreferred.yml delete mode 100644 testdata/sessions/driver-sessions-dirty-session-errors.json delete mode 100644 testdata/sessions/driver-sessions-dirty-session-errors.yml delete mode 100644 testdata/sessions/driver-sessions-server-support.json delete mode 100644 testdata/sessions/driver-sessions-server-support.yml delete mode 100644 testdata/sessions/implicit-sessions-default-causal-consistency.json delete mode 100644 testdata/sessions/implicit-sessions-default-causal-consistency.yml delete mode 100644 testdata/sessions/snapshot-sessions-not-supported-client-error.json delete mode 100644 testdata/sessions/snapshot-sessions-not-supported-client-error.yml delete mode 100644 testdata/sessions/snapshot-sessions-not-supported-server-error.json delete mode 100644 testdata/sessions/snapshot-sessions-not-supported-server-error.yml delete mode 100644 testdata/sessions/snapshot-sessions-unsupported-ops.json delete mode 100644 testdata/sessions/snapshot-sessions-unsupported-ops.yml delete mode 100644 testdata/sessions/snapshot-sessions.json delete mode 100644 testdata/sessions/snapshot-sessions.yml delete mode 100644 testdata/single_and_multi_document/large_doc.json.gz delete mode 100644 testdata/single_and_multi_document/small_doc.json.gz delete mode 100644 testdata/single_and_multi_document/tweet.json.gz create mode 160000 testdata/specifications delete mode 100644 testdata/transactions/legacy/abort.json delete mode 100644 testdata/transactions/legacy/abort.yml delete mode 100644 testdata/transactions/legacy/bulk.json delete mode 100644 testdata/transactions/legacy/bulk.yml delete mode 100644 testdata/transactions/legacy/causal-consistency.json delete mode 100644 testdata/transactions/legacy/causal-consistency.yml delete mode 100644 testdata/transactions/legacy/commit.json delete mode 100644 testdata/transactions/legacy/commit.yml delete mode 100644 testdata/transactions/legacy/count.json delete mode 100644 testdata/transactions/legacy/count.yml delete mode 100644 testdata/transactions/legacy/create-collection.json delete mode 100644 testdata/transactions/legacy/create-collection.yml delete mode 100644 testdata/transactions/legacy/create-index.json delete mode 100644 testdata/transactions/legacy/create-index.yml delete mode 100644 testdata/transactions/legacy/delete.json delete mode 100644 testdata/transactions/legacy/delete.yml delete mode 100644 testdata/transactions/legacy/error-labels.json delete mode 100644 testdata/transactions/legacy/error-labels.yml delete mode 100644 testdata/transactions/legacy/errors-client.json delete mode 100644 testdata/transactions/legacy/errors-client.yml delete mode 100644 testdata/transactions/legacy/errors.json delete mode 100644 testdata/transactions/legacy/errors.yml delete mode 100644 testdata/transactions/legacy/findOneAndDelete.json delete mode 100644 testdata/transactions/legacy/findOneAndDelete.yml delete mode 100644 testdata/transactions/legacy/findOneAndReplace.json delete mode 100644 testdata/transactions/legacy/findOneAndReplace.yml delete mode 100644 testdata/transactions/legacy/findOneAndUpdate.json delete mode 100644 testdata/transactions/legacy/findOneAndUpdate.yml delete mode 100644 testdata/transactions/legacy/insert.json delete mode 100644 testdata/transactions/legacy/insert.yml delete mode 100644 testdata/transactions/legacy/isolation.json delete mode 100644 testdata/transactions/legacy/isolation.yml delete mode 100644 testdata/transactions/legacy/mongos-recovery-token.json delete mode 100644 testdata/transactions/legacy/mongos-recovery-token.yml delete mode 100644 testdata/transactions/legacy/pin-mongos.json delete mode 100644 testdata/transactions/legacy/pin-mongos.yml delete mode 100644 testdata/transactions/legacy/read-concern.json delete mode 100644 testdata/transactions/legacy/read-concern.yml delete mode 100644 testdata/transactions/legacy/read-pref.json delete mode 100644 testdata/transactions/legacy/read-pref.yml delete mode 100644 testdata/transactions/legacy/reads.json delete mode 100644 testdata/transactions/legacy/reads.yml delete mode 100644 testdata/transactions/legacy/retryable-abort-errorLabels.json delete mode 100644 testdata/transactions/legacy/retryable-abort-errorLabels.yml delete mode 100644 testdata/transactions/legacy/retryable-abort.json delete mode 100644 testdata/transactions/legacy/retryable-abort.yml delete mode 100644 testdata/transactions/legacy/retryable-commit-errorLabels.json delete mode 100644 testdata/transactions/legacy/retryable-commit-errorLabels.yml delete mode 100644 testdata/transactions/legacy/retryable-commit.json delete mode 100644 testdata/transactions/legacy/retryable-commit.yml delete mode 100644 testdata/transactions/legacy/retryable-writes.json delete mode 100644 testdata/transactions/legacy/retryable-writes.yml delete mode 100644 testdata/transactions/legacy/run-command.json delete mode 100644 testdata/transactions/legacy/run-command.yml delete mode 100644 testdata/transactions/legacy/transaction-options-repl.json delete mode 100644 testdata/transactions/legacy/transaction-options-repl.yml delete mode 100644 testdata/transactions/legacy/transaction-options.json delete mode 100644 testdata/transactions/legacy/transaction-options.yml delete mode 100644 testdata/transactions/legacy/update.json delete mode 100644 testdata/transactions/legacy/update.yml delete mode 100644 testdata/transactions/legacy/write-concern.json delete mode 100644 testdata/transactions/legacy/write-concern.yml delete mode 100644 testdata/transactions/unified/client-bulkWrite.json delete mode 100644 testdata/transactions/unified/client-bulkWrite.yml delete mode 100644 testdata/transactions/unified/do-not-retry-read-in-transaction.json delete mode 100644 testdata/transactions/unified/do-not-retry-read-in-transaction.yml delete mode 100644 testdata/transactions/unified/mongos-pin-auto.json delete mode 100644 testdata/transactions/unified/mongos-pin-auto.yml delete mode 100644 testdata/transactions/unified/mongos-unpin.json delete mode 100644 testdata/transactions/unified/mongos-unpin.yml delete mode 100644 testdata/unified-test-format/valid-fail/assertNumberConnectionsCheckedOut.json delete mode 100644 testdata/unified-test-format/valid-fail/assertNumberConnectionsCheckedOut.yml delete mode 100644 testdata/unified-test-format/valid-fail/clientEncryptionOpts-missing-kms-credentials.json delete mode 100644 testdata/unified-test-format/valid-fail/clientEncryptionOpts-missing-kms-credentials.yml delete mode 100644 testdata/unified-test-format/valid-fail/clientEncryptionOpts-no-kms.json delete mode 100644 testdata/unified-test-format/valid-fail/clientEncryptionOpts-no-kms.yml delete mode 100644 testdata/unified-test-format/valid-fail/entity-bucket-database-undefined.json delete mode 100644 testdata/unified-test-format/valid-fail/entity-bucket-database-undefined.yml delete mode 100644 testdata/unified-test-format/valid-fail/entity-client-apiVersion-unsupported.json delete mode 100644 testdata/unified-test-format/valid-fail/entity-client-apiVersion-unsupported.yml delete mode 100644 testdata/unified-test-format/valid-fail/entity-client-storeEventsAsEntities-conflict_with_client_id.json delete mode 100644 testdata/unified-test-format/valid-fail/entity-client-storeEventsAsEntities-conflict_with_client_id.yml delete mode 100644 testdata/unified-test-format/valid-fail/entity-client-storeEventsAsEntities-conflict_within_different_array.json delete mode 100644 testdata/unified-test-format/valid-fail/entity-client-storeEventsAsEntities-conflict_within_different_array.yml delete mode 100644 testdata/unified-test-format/valid-fail/entity-client-storeEventsAsEntities-conflict_within_same_array.json delete mode 100644 testdata/unified-test-format/valid-fail/entity-client-storeEventsAsEntities-conflict_within_same_array.yml delete mode 100644 testdata/unified-test-format/valid-fail/entity-collection-database-undefined.json delete mode 100644 testdata/unified-test-format/valid-fail/entity-collection-database-undefined.yml delete mode 100644 testdata/unified-test-format/valid-fail/entity-database-client-undefined.json delete mode 100644 testdata/unified-test-format/valid-fail/entity-database-client-undefined.yml delete mode 100644 testdata/unified-test-format/valid-fail/entity-find-cursor.json delete mode 100644 testdata/unified-test-format/valid-fail/entity-find-cursor.yml delete mode 100644 testdata/unified-test-format/valid-fail/entity-session-client-undefined.json delete mode 100644 testdata/unified-test-format/valid-fail/entity-session-client-undefined.yml delete mode 100644 testdata/unified-test-format/valid-fail/expectedLogMessagesForClient-ignoreExtraMessages-type.json delete mode 100644 testdata/unified-test-format/valid-fail/expectedLogMessagesForClient-ignoreExtraMessages-type.yml delete mode 100644 testdata/unified-test-format/valid-fail/expectedLogMessagesForClient-ignoreMessages-items.json delete mode 100644 testdata/unified-test-format/valid-fail/expectedLogMessagesForClient-ignoreMessages-items.yml delete mode 100644 testdata/unified-test-format/valid-fail/expectedLogMessagesForClient-ignoreMessages-type.json delete mode 100644 testdata/unified-test-format/valid-fail/expectedLogMessagesForClient-ignoreMessages-type.yml delete mode 100644 testdata/unified-test-format/valid-fail/expectedSdamEvent-topologyDescriptionChangedEvent-additionalProperties.json delete mode 100644 testdata/unified-test-format/valid-fail/expectedSdamEvent-topologyDescriptionChangedEvent-additionalProperties.yml delete mode 100644 testdata/unified-test-format/valid-fail/ignoreResultAndError.json delete mode 100644 testdata/unified-test-format/valid-fail/ignoreResultAndError.yml delete mode 100644 testdata/unified-test-format/valid-fail/kmsProviders-missing_aws_kms_credentials.json delete mode 100644 testdata/unified-test-format/valid-fail/kmsProviders-missing_aws_kms_credentials.yml delete mode 100644 testdata/unified-test-format/valid-fail/kmsProviders-missing_azure_kms_credentials.json delete mode 100644 testdata/unified-test-format/valid-fail/kmsProviders-missing_azure_kms_credentials.yml delete mode 100644 testdata/unified-test-format/valid-fail/kmsProviders-missing_gcp_kms_credentials.json delete mode 100644 testdata/unified-test-format/valid-fail/kmsProviders-missing_gcp_kms_credentials.yml delete mode 100644 testdata/unified-test-format/valid-fail/kmsProviders-no_kms.json delete mode 100644 testdata/unified-test-format/valid-fail/kmsProviders-no_kms.yml delete mode 100644 testdata/unified-test-format/valid-fail/operation-failure.json delete mode 100644 testdata/unified-test-format/valid-fail/operation-failure.yml delete mode 100644 testdata/unified-test-format/valid-fail/operation-unsupported.json delete mode 100644 testdata/unified-test-format/valid-fail/operation-unsupported.yml delete mode 100644 testdata/unified-test-format/valid-fail/returnDocument-enum-invalid.json delete mode 100644 testdata/unified-test-format/valid-fail/returnDocument-enum-invalid.yml delete mode 100644 testdata/unified-test-format/valid-fail/schemaVersion-unsupported.json delete mode 100644 testdata/unified-test-format/valid-fail/schemaVersion-unsupported.yml delete mode 100644 testdata/unified-test-format/valid-pass/assertNumberConnectionsCheckedOut.json delete mode 100644 testdata/unified-test-format/valid-pass/assertNumberConnectionsCheckedOut.yml delete mode 100644 testdata/unified-test-format/valid-pass/collectionData-createOptions.json delete mode 100644 testdata/unified-test-format/valid-pass/collectionData-createOptions.yml delete mode 100644 testdata/unified-test-format/valid-pass/entity-client-cmap-events.json delete mode 100644 testdata/unified-test-format/valid-pass/entity-client-cmap-events.yml delete mode 100644 testdata/unified-test-format/valid-pass/entity-client-storeEventsAsEntities.json delete mode 100644 testdata/unified-test-format/valid-pass/entity-client-storeEventsAsEntities.yml delete mode 100644 testdata/unified-test-format/valid-pass/entity-commandCursor.json delete mode 100644 testdata/unified-test-format/valid-pass/entity-commandCursor.yml delete mode 100644 testdata/unified-test-format/valid-pass/entity-cursor-iterateOnce.json delete mode 100644 testdata/unified-test-format/valid-pass/entity-cursor-iterateOnce.yml delete mode 100644 testdata/unified-test-format/valid-pass/entity-find-cursor.json delete mode 100644 testdata/unified-test-format/valid-pass/entity-find-cursor.yml delete mode 100644 testdata/unified-test-format/valid-pass/expectedEventsForClient-eventType.json delete mode 100644 testdata/unified-test-format/valid-pass/expectedEventsForClient-eventType.yml delete mode 100644 testdata/unified-test-format/valid-pass/expectedEventsForClient-ignoreExtraEvents.json delete mode 100644 testdata/unified-test-format/valid-pass/expectedEventsForClient-ignoreExtraEvents.yml delete mode 100644 testdata/unified-test-format/valid-pass/ignoreResultAndError.json delete mode 100644 testdata/unified-test-format/valid-pass/ignoreResultAndError.yml delete mode 100644 testdata/unified-test-format/valid-pass/kmsProviders-explicit_kms_credentials.json delete mode 100644 testdata/unified-test-format/valid-pass/kmsProviders-explicit_kms_credentials.yml delete mode 100644 testdata/unified-test-format/valid-pass/kmsProviders-mixed_kms_credential_fields.json delete mode 100644 testdata/unified-test-format/valid-pass/kmsProviders-mixed_kms_credential_fields.yml delete mode 100644 testdata/unified-test-format/valid-pass/kmsProviders-placeholder_kms_credentials.json delete mode 100644 testdata/unified-test-format/valid-pass/kmsProviders-placeholder_kms_credentials.yml delete mode 100644 testdata/unified-test-format/valid-pass/kmsProviders-unconfigured_kms.json delete mode 100644 testdata/unified-test-format/valid-pass/kmsProviders-unconfigured_kms.yml delete mode 100644 testdata/unified-test-format/valid-pass/matches-lte-operator.json delete mode 100644 testdata/unified-test-format/valid-pass/matches-lte-operator.yml delete mode 100644 testdata/unified-test-format/valid-pass/observeSensitiveCommands.json delete mode 100644 testdata/unified-test-format/valid-pass/observeSensitiveCommands.yml delete mode 100644 testdata/unified-test-format/valid-pass/poc-change-streams.json delete mode 100644 testdata/unified-test-format/valid-pass/poc-change-streams.yml delete mode 100644 testdata/unified-test-format/valid-pass/poc-command-monitoring.json delete mode 100644 testdata/unified-test-format/valid-pass/poc-command-monitoring.yml delete mode 100644 testdata/unified-test-format/valid-pass/poc-crud.json delete mode 100644 testdata/unified-test-format/valid-pass/poc-crud.yml delete mode 100644 testdata/unified-test-format/valid-pass/poc-gridfs.json delete mode 100644 testdata/unified-test-format/valid-pass/poc-gridfs.yml delete mode 100644 testdata/unified-test-format/valid-pass/poc-retryable-reads.json delete mode 100644 testdata/unified-test-format/valid-pass/poc-retryable-reads.yml delete mode 100644 testdata/unified-test-format/valid-pass/poc-retryable-writes.json delete mode 100644 testdata/unified-test-format/valid-pass/poc-retryable-writes.yml delete mode 100644 testdata/unified-test-format/valid-pass/poc-sessions.json delete mode 100644 testdata/unified-test-format/valid-pass/poc-sessions.yml delete mode 100644 testdata/unified-test-format/valid-pass/poc-transactions-convenient-api.json delete mode 100644 testdata/unified-test-format/valid-pass/poc-transactions-convenient-api.yml delete mode 100644 testdata/unified-test-format/valid-pass/poc-transactions-mongos-pin-auto.json delete mode 100644 testdata/unified-test-format/valid-pass/poc-transactions-mongos-pin-auto.yml delete mode 100644 testdata/unified-test-format/valid-pass/poc-transactions.json delete mode 100644 testdata/unified-test-format/valid-pass/poc-transactions.yml delete mode 100644 testdata/uri-options/auth-options.json delete mode 100644 testdata/uri-options/auth-options.yml delete mode 100644 testdata/uri-options/ca.pem delete mode 100644 testdata/uri-options/cert.pem delete mode 100644 testdata/uri-options/client.pem delete mode 100644 testdata/uri-options/compression-options.json delete mode 100644 testdata/uri-options/compression-options.yml delete mode 100644 testdata/uri-options/concern-options.json delete mode 100644 testdata/uri-options/concern-options.yml delete mode 100644 testdata/uri-options/connection-options.json delete mode 100644 testdata/uri-options/connection-options.yml delete mode 100644 testdata/uri-options/connection-pool-options.json delete mode 100644 testdata/uri-options/connection-pool-options.yml delete mode 100644 testdata/uri-options/read-preference-options.json delete mode 100644 testdata/uri-options/read-preference-options.yml delete mode 100644 testdata/uri-options/sdam-options.json delete mode 100644 testdata/uri-options/sdam-options.yml delete mode 100644 testdata/uri-options/single-threaded-options.json delete mode 100644 testdata/uri-options/single-threaded-options.yml delete mode 100644 testdata/uri-options/srv-options.json delete mode 100644 testdata/uri-options/srv-options.yml delete mode 100644 testdata/uri-options/tls-options.json delete mode 100644 testdata/uri-options/tls-options.yml delete mode 100644 testdata/versioned-api/crud-api-version-1-strict.json delete mode 100644 testdata/versioned-api/crud-api-version-1-strict.yml delete mode 100644 testdata/versioned-api/crud-api-version-1.json delete mode 100644 testdata/versioned-api/crud-api-version-1.yml delete mode 100644 testdata/versioned-api/runcommand-helper-no-api-version-declared.json delete mode 100644 testdata/versioned-api/runcommand-helper-no-api-version-declared.yml delete mode 100644 testdata/versioned-api/test-commands-deprecation-errors.json delete mode 100644 testdata/versioned-api/test-commands-deprecation-errors.yml delete mode 100644 testdata/versioned-api/test-commands-strict-mode.json delete mode 100644 testdata/versioned-api/test-commands-strict-mode.yml delete mode 100644 testdata/versioned-api/transaction-handling.json delete mode 100644 testdata/versioned-api/transaction-handling.yml diff --git a/.gitmodules b/.gitmodules index e5d2a68887..e3b5c7b3ee 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "specifications"] - path = specifications - url = git@github.com:mongodb/specifications.git + path = testdata/specifications + url = https://github.com/mongodb/specifications diff --git a/internal/serverselector/server_selector_test.go b/internal/serverselector/server_selector_test.go index 0d114d2516..b00d0a0ecd 100644 --- a/internal/serverselector/server_selector_test.go +++ b/internal/serverselector/server_selector_test.go @@ -157,7 +157,7 @@ func compareServers(t *testing.T, expected []*serverDesc, actual []description.S } } -const maxStalenessTestsDir = "../../testdata/max-staleness" +var maxStalenessTestsDir = spectest.TestPath(2, "max-staleness") // Test case for all max staleness spec tests. func TestMaxStalenessSpec(t *testing.T) { @@ -176,7 +176,7 @@ func TestMaxStalenessSpec(t *testing.T) { } } -const selectorTestsDir = "../../testdata/server-selection/server_selection" +var selectorTestsDir = spectest.TestPath(2, "server-selection") func selectServers(t *testing.T, test *testCase) error { servers := make([]description.Server, 0, len(test.TopologyDescription.Servers)) @@ -321,7 +321,7 @@ func TestServerSelectionSpec(t *testing.T) { "LoadBalanced", } { for _, subdir := range [...]string{"read", "write"} { - subdirPath := path.Join(topology, subdir) + subdirPath := path.Join("server_selection", topology, subdir) for _, file := range spectest.FindJSONFilesInDir(t, path.Join(selectorTestsDir, subdirPath)) { diff --git a/internal/spectest/skip.go b/internal/spectest/skip.go index 4efa8f428e..fe1e441762 100644 --- a/internal/spectest/skip.go +++ b/internal/spectest/skip.go @@ -12,8 +12,6 @@ import "testing" // the test". var skipTests = map[string]string{ "TestURIOptionsSpec/single-threaded-options.json/Valid_options_specific_to_single-threaded_drivers_are_parsed_correctly": "The Go Driver is not single-threaded.", - // GODRIVER-2348: The wtimeoutMS write concern option is not supported. - "TestURIOptionsSpec/concern-options.json/Valid_read_and_write_concern_are_parsed_correctly": "The wtimeoutMS write concern option is not supported", // SPEC-1403: This test checks to see if the correct error is thrown when // auto encrypting with a server < 4.2. Currently, the test will fail @@ -152,6 +150,81 @@ var skipTests = map[string]string{ "TestUnifiedSpec/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.json/Topology_lifecycle": "Implement GODRIVER-2967", "TestUnifiedSpec/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json/Topology_lifecycle": "Implement GODRIVER-2967", "TestUnifiedSpec/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json/Topology_lifecycle": "Implement GODRIVER-2967", + + // TODO(GODRIVER-2183): Socks5 Proxy Support. + "TestURIOptionsSpec/proxy-options.json/proxyPort_without_proxyHost": "Implement GODRIVER-2183 for Socks5 Proxy Support", + "TestURIOptionsSpec/proxy-options.json/proxyUsername_without_proxyHost": "Implement GODRIVER-2183 for Socks5 Proxy Support", + "TestURIOptionsSpec/proxy-options.json/proxyPassword_without_proxyHost": "Implement GODRIVER-2183 for Socks5 Proxy Support", + "TestURIOptionsSpec/proxy-options.json/all_other_proxy_options_without_proxyHost": "Implement GODRIVER-2183 for Socks5 Proxy Support", + "TestURIOptionsSpec/proxy-options.json/proxyUsername_without_proxyPassword": "Implement GODRIVER-2183 for Socks5 Proxy Support", + "TestURIOptionsSpec/proxy-options.json/proxyPassword_without_proxyUsername": "Implement GODRIVER-2183 for Socks5 Proxy Support", + "TestURIOptionsSpec/proxy-options.json/multiple_proxyHost_parameters": "Implement GODRIVER-2183 for Socks5 Proxy Support", + "TestURIOptionsSpec/proxy-options.json/multiple_proxyPort_parameters": "Implement GODRIVER-2183 for Socks5 Proxy Support", + "TestURIOptionsSpec/proxy-options.json/multiple_proxyUsername_parameters": "Implement GODRIVER-2183 for Socks5 Proxy Support", + "TestURIOptionsSpec/proxy-options.json/multiple_proxyPassword_parameters": "Implement GODRIVER-2183 for Socks5 Proxy Support", + + // wtimeoutMS write concern option is not supported. + "TestURIOptionsSpec/concern-options.json/Valid_read_and_write_concern_are_parsed_correctly": "wtimeoutMS is deprecated", + "TestURIOptionsSpec/concern-options.json/Non-numeric_wTimeoutMS_causes_a_warning": "wtimeoutMS is deprecated", + "TestURIOptionsSpec/concern-options.json/Too_low_wTimeoutMS_causes_a_warning": "wtimeoutMS is deprecated", + "TestReadWriteConcernSpec/connstring/write-concern.json/wtimeoutMS_as_an_invalid_number": "wtimeoutMS is deprecated", + + // Unsupported TLS behavior in connection strings. + "TestURIOptionsSpec/tls-options.json/tlsAllowInvalidCertificates_and_tlsDisableCertificateRevocationCheck_both_present_(and_true)_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsAllowInvalidCertificates=true_and_tlsDisableCertificateRevocationCheck=false_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsAllowInvalidCertificates=false_and_tlsDisableCertificateRevocationCheck=true_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsAllowInvalidCertificates_and_tlsDisableCertificateRevocationCheck_both_present_(and_false)_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsDisableCertificateRevocationCheck_and_tlsAllowInvalidCertificates_both_present_(and_true)_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsDisableCertificateRevocationCheck=true_and_tlsAllowInvalidCertificates=false_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsDisableCertificateRevocationCheck=false_and_tlsAllowInvalidCertificates=true_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsDisableCertificateRevocationCheck_and_tlsAllowInvalidCertificates_both_present_(and_false)_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsInsecure_and_tlsDisableCertificateRevocationCheck_both_present_(and_true)_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsInsecure=true_and_tlsDisableCertificateRevocationCheck=false_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsInsecure=false_and_tlsDisableCertificateRevocationCheck=true_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsInsecure_and_tlsDisableCertificateRevocationCheck_both_present_(and_false)_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsDisableCertificateRevocationCheck_and_tlsInsecure_both_present_(and_true)_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsDisableCertificateRevocationCheck=true_and_tlsInsecure=false_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsDisableCertificateRevocationCheck=false_and_tlsInsecure=true_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsDisableCertificateRevocationCheck_and_tlsInsecure_both_present_(and_false)_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsDisableCertificateRevocationCheck_and_tlsDisableOCSPEndpointCheck_both_present_(and_true)_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsDisableCertificateRevocationCheck=true_and_tlsDisableOCSPEndpointCheck=false_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsDisableCertificateRevocationCheck=false_and_tlsDisableOCSPEndpointCheck=true_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsDisableCertificateRevocationCheck_and_tlsDisableOCSPEndpointCheck_both_present_(and_false)_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsDisableOCSPEndpointCheck_and_tlsDisableCertificateRevocationCheck_both_present_(and_true)_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsDisableOCSPEndpointCheck=true_and_tlsDisableCertificateRevocationCheck=false_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsDisableOCSPEndpointCheck=false_and_tlsDisableCertificateRevocationCheck=true_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsDisableOCSPEndpointCheck_and_tlsDisableCertificateRevocationCheck_both_present_(and_false)_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsAllowInvalidCertificates_and_tlsDisableOCSPEndpointCheck_both_present_(and_true)_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsAllowInvalidCertificates=true_and_tlsDisableOCSPEndpointCheck=false_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsAllowInvalidCertificates=false_and_tlsDisableOCSPEndpointCheck=true_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsAllowInvalidCertificates_and_tlsDisableOCSPEndpointCheck_both_present_(and_false)_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsDisableOCSPEndpointCheck_and_tlsAllowInvalidCertificates_both_present_(and_true)_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsDisableOCSPEndpointCheck=true_and_tlsAllowInvalidCertificates=false_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsDisableOCSPEndpointCheck=false_and_tlsAllowInvalidCertificates=true_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsDisableOCSPEndpointCheck_and_tlsAllowInvalidCertificates_both_present_(and_false)_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/Invalid_tlsAllowInvalidCertificates_causes_a_warning": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsAllowInvalidCertificates_is_parsed_correctly": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsAllowInvalidHostnames_is_parsed_correctly": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/Invalid_tlsAllowInvalidHostnames_causes_a_warning": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsInsecure_and_tlsAllowInvalidCertificates_both_present_(and_true)_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsInsecure_and_tlsAllowInvalidCertificates_both_present_(and_false)_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsAllowInvalidCertificates_and_tlsInsecure_both_present_(and_true)_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsAllowInvalidCertificates_and_tlsInsecure_both_present_(and_false)_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsInsecure_and_tlsAllowInvalidHostnames_both_present_(and_true)_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsInsecure_and_tlsAllowInvalidHostnames_both_present_(and_false)_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsAllowInvalidHostnames_and_tlsInsecure_both_present_(and_true)_raises_an_error": "unsupported connstring behavior", + "TestURIOptionsSpec/tls-options.json/tlsAllowInvalidHostnames_and_tlsInsecure_both_present_(and_false)_raises_an_error": "unsupported connstring behavior", + + // TODO(GODRIVER-2991): make delimiting slash between hosts and options + // optional. + "TestConnStringSpec/valid-options.json/Missing_delimiting_slash_between_hosts_and_options": "Implement GODRIVER-2991 making delimiting slash between hosts and options optional", + + // Connstring tests violate current Go Driver behavior + "TestURIOptionsSpec/connection-pool-options.json/maxConnecting=0_causes_a_warning": "unsupported behavior", + "TestURIOptionsSpec/single-threaded-options.json/Invalid_serverSelectionTryOnce_causes_a_warning": "unsupported behavior", + "TestConnStringSpec/valid-warnings.json/Empty_integer_option_values_are_ignored": "SPEC-1545: unsupported behavior", + "TestConnStringSpec/valid-warnings.json/Empty_boolean_option_value_are_ignored": "SPEC-1545: unsupported behavior", + "TestConnStringSpec/valid-warnings.json/Comma_in_a_key_value_pair_causes_a_warning": "DRIVERS-2915: unsupported behavior", } // CheckSkip checks if the fully-qualified test name matches a skipped test diff --git a/internal/spectest/spectest.go b/internal/spectest/spectest.go index 363b072c2c..1b57599011 100644 --- a/internal/spectest/spectest.go +++ b/internal/spectest/spectest.go @@ -7,8 +7,10 @@ package spectest import ( - "io/ioutil" + "os" "path" + "path/filepath" + "strings" "testing" "go.mongodb.org/mongo-driver/v2/internal/require" @@ -20,7 +22,7 @@ func FindJSONFilesInDir(t *testing.T, dir string) []string { files := make([]string, 0) - entries, err := ioutil.ReadDir(dir) + entries, err := os.ReadDir(dir) require.NoError(t, err) for _, entry := range entries { @@ -33,3 +35,17 @@ func FindJSONFilesInDir(t *testing.T, dir string) []string { return files } + +// TestPath will construct a path to a test file in the specifications git +// submodule. The path will be relative to the current package so a depth should +// be provided to indicate how many directories to go up. +func TestPath(depth int, testDir string, subDirs ...string) string { + const basePath = "testdata/specifications/source/" + + // Create a string of "../" repeated 'depth' times + relativePath := strings.Repeat("../", depth) + // Construct the full path + fullPath := relativePath + basePath + testDir + "/tests/" + filepath.Join(subDirs...) + + return fullPath +} diff --git a/mongo/read_write_concern_spec_test.go b/mongo/read_write_concern_spec_test.go index c7a1256113..f7b6270264 100644 --- a/mongo/read_write_concern_spec_test.go +++ b/mongo/read_write_concern_spec_test.go @@ -16,6 +16,7 @@ import ( "go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/internal/assert" + "go.mongodb.org/mongo-driver/v2/internal/spectest" "go.mongodb.org/mongo-driver/v2/mongo/readconcern" "go.mongodb.org/mongo-driver/v2/mongo/writeconcern" "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" @@ -24,9 +25,8 @@ import ( ) const ( - readWriteConcernTestsDir = "../testdata/read-write-concern" - connstringTestsDir = "connection-string" - documentTestsDir = "document" + connstringTestsDir = "connection-string" + documentTestsDir = "document" ) var ( @@ -36,6 +36,7 @@ var ( reg.RegisterTypeMapEntry(bson.TypeEmbeddedDocument, reflect.TypeOf(bson.Raw{})) return reg }() + readWriteConcernTestsDir = spectest.TestPath(1, "read-write-concern") ) type connectionStringTestFile struct { @@ -103,9 +104,7 @@ func runConnectionStringTestFile(t *testing.T, filePath string) { } func runConnectionStringTest(t *testing.T, test connectionStringTest) { - if test.SkipReason != "" { - t.Skip(test.SkipReason) - } + spectest.CheckSkip(t) cs, err := connstring.ParseAndValidate(test.URI) if !test.Valid { diff --git a/testdata/atlas-data-lake-testing/aggregate.json b/testdata/atlas-data-lake-testing/aggregate.json deleted file mode 100644 index 99995bca41..0000000000 --- a/testdata/atlas-data-lake-testing/aggregate.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "collection_name": "driverdata", - "database_name": "test", - "tests": [ - { - "description": "Aggregate with pipeline (project, sort, limit)", - "operations": [ - { - "object": "collection", - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$project": { - "_id": 0 - } - }, - { - "$sort": { - "a": 1 - } - }, - { - "$limit": 2 - } - ] - }, - "result": [ - { - "a": 1, - "b": 2, - "c": 3 - }, - { - "a": 2, - "b": 3, - "c": 4 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "driverdata" - } - } - } - ] - } - ] -} diff --git a/testdata/atlas-data-lake-testing/aggregate.yml b/testdata/atlas-data-lake-testing/aggregate.yml deleted file mode 100644 index bbe813987d..0000000000 --- a/testdata/atlas-data-lake-testing/aggregate.yml +++ /dev/null @@ -1,23 +0,0 @@ -collection_name: &collection_name "driverdata" -database_name: &database_name "test" - -tests: - - - description: "Aggregate with pipeline (project, sort, limit)" - operations: - - - object: collection - name: aggregate - arguments: - pipeline: - - $project: { _id: 0 } - - $sort: { a: 1 } - - $limit: 2 - result: - - { a: 1, b: 2, c: 3 } - - { a: 2, b: 3, c: 4 } - expectations: - - - command_started_event: - command: - aggregate: *collection_name diff --git a/testdata/atlas-data-lake-testing/estimatedDocumentCount.json b/testdata/atlas-data-lake-testing/estimatedDocumentCount.json deleted file mode 100644 index 997a3ab3fc..0000000000 --- a/testdata/atlas-data-lake-testing/estimatedDocumentCount.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "collection_name": "driverdata", - "database_name": "test", - "tests": [ - { - "description": "estimatedDocumentCount succeeds", - "operations": [ - { - "object": "collection", - "name": "estimatedDocumentCount", - "result": 15 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "driverdata" - }, - "command_name": "count", - "database_name": "test" - } - } - ] - } - ] -} diff --git a/testdata/atlas-data-lake-testing/estimatedDocumentCount.yml b/testdata/atlas-data-lake-testing/estimatedDocumentCount.yml deleted file mode 100644 index 64c6bbd04f..0000000000 --- a/testdata/atlas-data-lake-testing/estimatedDocumentCount.yml +++ /dev/null @@ -1,18 +0,0 @@ -collection_name: &collection_name "driverdata" -database_name: &database_name "test" - -tests: - - - description: "estimatedDocumentCount succeeds" - operations: - - - object: collection - name: estimatedDocumentCount - result: 15 - expectations: - - - command_started_event: - command: - count: *collection_name - command_name: count - database_name: *database_name diff --git a/testdata/atlas-data-lake-testing/find.json b/testdata/atlas-data-lake-testing/find.json deleted file mode 100644 index 8a3468a135..0000000000 --- a/testdata/atlas-data-lake-testing/find.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "collection_name": "driverdata", - "database_name": "test", - "tests": [ - { - "description": "Find with projection and sort", - "operations": [ - { - "object": "collection", - "name": "find", - "arguments": { - "filter": { - "b": { - "$gt": 5 - } - }, - "projection": { - "_id": 0 - }, - "sort": { - "a": 1 - }, - "limit": 5 - }, - "result": [ - { - "a": 5, - "b": 6, - "c": 7 - }, - { - "a": 6, - "b": 7, - "c": 8 - }, - { - "a": 7, - "b": 8, - "c": 9 - }, - { - "a": 8, - "b": 9, - "c": 10 - }, - { - "a": 9, - "b": 10, - "c": 11 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "driverdata" - } - } - } - ] - } - ] -} diff --git a/testdata/atlas-data-lake-testing/find.yml b/testdata/atlas-data-lake-testing/find.yml deleted file mode 100644 index ed0f9fd530..0000000000 --- a/testdata/atlas-data-lake-testing/find.yml +++ /dev/null @@ -1,27 +0,0 @@ -collection_name: &collection_name "driverdata" -database_name: &database_name "test" - -tests: - - - description: "Find with projection and sort" - operations: - - - object: collection - name: find - arguments: - filter: { b: { $gt: 5 } } - projection: { _id: 0 } - sort: { a: 1 } - limit: 5 - result: - - {"a": 5, "b": 6, "c": 7} - - {"a": 6, "b": 7, "c": 8} - - {"a": 7, "b": 8, "c": 9} - - {"a": 8, "b": 9, "c": 10} - - {"a": 9, "b": 10, "c": 11} - expectations: - - - command_started_event: - command: - find: *collection_name - diff --git a/testdata/atlas-data-lake-testing/getMore.json b/testdata/atlas-data-lake-testing/getMore.json deleted file mode 100644 index fa1deab4f3..0000000000 --- a/testdata/atlas-data-lake-testing/getMore.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "collection_name": "driverdata", - "database_name": "test", - "tests": [ - { - "description": "A successful find event with getMore", - "operations": [ - { - "object": "collection", - "name": "find", - "arguments": { - "filter": { - "a": { - "$gte": 2 - } - }, - "sort": { - "a": 1 - }, - "batchSize": 3, - "limit": 4 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "driverdata", - "filter": { - "a": { - "$gte": 2 - } - }, - "sort": { - "a": 1 - }, - "batchSize": 3, - "limit": 4 - }, - "command_name": "find", - "database_name": "test" - } - }, - { - "command_started_event": { - "command": { - "batchSize": 1 - }, - "command_name": "getMore", - "database_name": "cursors" - } - } - ] - } - ] -} \ No newline at end of file diff --git a/testdata/atlas-data-lake-testing/getMore.yml b/testdata/atlas-data-lake-testing/getMore.yml deleted file mode 100644 index c16c1224c5..0000000000 --- a/testdata/atlas-data-lake-testing/getMore.yml +++ /dev/null @@ -1,35 +0,0 @@ -collection_name: &collection_name "driverdata" -database_name: &database_name "test" - -tests: - - - description: "A successful find event with getMore" - operations: - - - object: collection - name: find - arguments: - filter: { a: { $gte: 2 }} - sort: { a: 1 } - batchSize: 3 - limit: 4 - expectations: - - - command_started_event: - command: - find: *collection_name - filter: { a: { $gte : 2 }} - sort: { a: 1 } - batchSize: 3 - limit: 4 - command_name: "find" - database_name: *database_name - - - command_started_event: - command: - # Assertions for "getMore" and "collection" fields are omitted, as they will have arbitrary values - # TODO: Those assertions can be added after wildcard matchers are available via SPEC-1215 - batchSize: 1 - command_name: "getMore" - # mongohoused always expects getMores on the "cursors" database - database_name: "cursors" diff --git a/testdata/atlas-data-lake-testing/listCollections.json b/testdata/atlas-data-lake-testing/listCollections.json deleted file mode 100644 index 8d8a8f6c1b..0000000000 --- a/testdata/atlas-data-lake-testing/listCollections.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "database_name": "test", - "tests": [ - { - "description": "ListCollections succeeds", - "operations": [ - { - "name": "listCollections", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command_name": "listCollections", - "database_name": "test", - "command": { - "listCollections": 1 - } - } - } - ] - } - ] -} \ No newline at end of file diff --git a/testdata/atlas-data-lake-testing/listCollections.yml b/testdata/atlas-data-lake-testing/listCollections.yml deleted file mode 100644 index 2b1fedcddb..0000000000 --- a/testdata/atlas-data-lake-testing/listCollections.yml +++ /dev/null @@ -1,17 +0,0 @@ -database_name: &database_name "test" - -tests: - - - description: "ListCollections succeeds" - operations: - - - name: listCollections - object: database - expectations: - - - command_started_event: - command_name: "listCollections" - database_name: *database_name - command: - listCollections: 1 - diff --git a/testdata/atlas-data-lake-testing/listDatabases.json b/testdata/atlas-data-lake-testing/listDatabases.json deleted file mode 100644 index f8ec9a0bf4..0000000000 --- a/testdata/atlas-data-lake-testing/listDatabases.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "tests": [ - { - "description": "ListDatabases succeeds", - "operations": [ - { - "name": "listDatabases", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command_name": "listDatabases", - "database_name": "admin", - "command": { - "listDatabases": 1 - } - } - } - ] - } - ] -} \ No newline at end of file diff --git a/testdata/atlas-data-lake-testing/listDatabases.yml b/testdata/atlas-data-lake-testing/listDatabases.yml deleted file mode 100644 index b6e565b90f..0000000000 --- a/testdata/atlas-data-lake-testing/listDatabases.yml +++ /dev/null @@ -1,15 +0,0 @@ -tests: - - - description: "ListDatabases succeeds" - operations: - - - name: listDatabases - object: client - expectations: - - - command_started_event: - command_name: "listDatabases" - database_name: "admin" - command: - listDatabases: 1 - diff --git a/testdata/atlas-data-lake-testing/runCommand.json b/testdata/atlas-data-lake-testing/runCommand.json deleted file mode 100644 index f72e863ba5..0000000000 --- a/testdata/atlas-data-lake-testing/runCommand.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "database_name": "test", - "tests": [ - { - "description": "ping succeeds using runCommand", - "operations": [ - { - "name": "runCommand", - "object": "database", - "command_name": "ping", - "arguments": { - "command": { - "ping": 1 - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command_name": "ping", - "database_name": "test", - "command": { - "ping": 1 - } - } - } - ] - } - ] -} \ No newline at end of file diff --git a/testdata/atlas-data-lake-testing/runCommand.yml b/testdata/atlas-data-lake-testing/runCommand.yml deleted file mode 100644 index 14435c28d5..0000000000 --- a/testdata/atlas-data-lake-testing/runCommand.yml +++ /dev/null @@ -1,20 +0,0 @@ -database_name: &database_name "test" - -tests: - - - description: "ping succeeds using runCommand" - operations: - - - name: runCommand - object: database - command_name: ping - arguments: - command: - ping: 1 - expectations: - - - command_started_event: - command_name: ping - database_name: *database_name - command: - ping: 1 diff --git a/testdata/auth/connection-string.json b/testdata/auth/connection-string.json deleted file mode 100644 index 3a099c8137..0000000000 --- a/testdata/auth/connection-string.json +++ /dev/null @@ -1,651 +0,0 @@ -{ - "tests": [ - { - "description": "should use the default source and mechanism", - "uri": "mongodb://user:password@localhost", - "valid": true, - "credential": { - "username": "user", - "password": "password", - "source": "admin", - "mechanism": null, - "mechanism_properties": null - } - }, - { - "description": "should use the database when no authSource is specified", - "uri": "mongodb://user:password@localhost/foo", - "valid": true, - "credential": { - "username": "user", - "password": "password", - "source": "foo", - "mechanism": null, - "mechanism_properties": null - } - }, - { - "description": "should use the authSource when specified", - "uri": "mongodb://user:password@localhost/foo?authSource=bar", - "valid": true, - "credential": { - "username": "user", - "password": "password", - "source": "bar", - "mechanism": null, - "mechanism_properties": null - } - }, - { - "description": "should recognise the mechanism (GSSAPI)", - "uri": "mongodb://user%40DOMAIN.COM@localhost/?authMechanism=GSSAPI", - "valid": true, - "credential": { - "username": "user@DOMAIN.COM", - "password": null, - "source": "$external", - "mechanism": "GSSAPI", - "mechanism_properties": { - "SERVICE_NAME": "mongodb" - } - } - }, - { - "description": "should ignore the database (GSSAPI)", - "uri": "mongodb://user%40DOMAIN.COM@localhost/foo?authMechanism=GSSAPI", - "valid": true, - "credential": { - "username": "user@DOMAIN.COM", - "password": null, - "source": "$external", - "mechanism": "GSSAPI", - "mechanism_properties": { - "SERVICE_NAME": "mongodb" - } - } - }, - { - "description": "should accept valid authSource (GSSAPI)", - "uri": "mongodb://user%40DOMAIN.COM@localhost/?authMechanism=GSSAPI&authSource=$external", - "valid": true, - "credential": { - "username": "user@DOMAIN.COM", - "password": null, - "source": "$external", - "mechanism": "GSSAPI", - "mechanism_properties": { - "SERVICE_NAME": "mongodb" - } - } - }, - { - "description": "should accept generic mechanism property (GSSAPI)", - "uri": "mongodb://user%40DOMAIN.COM@localhost/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:other,CANONICALIZE_HOST_NAME:forward,SERVICE_HOST:example.com", - "valid": true, - "credential": { - "username": "user@DOMAIN.COM", - "password": null, - "source": "$external", - "mechanism": "GSSAPI", - "mechanism_properties": { - "SERVICE_NAME": "other", - "SERVICE_HOST": "example.com", - "CANONICALIZE_HOST_NAME": "forward" - } - } - }, - { - "description": "should accept forwardAndReverse hostname canonicalization (GSSAPI)", - "uri": "mongodb://user%40DOMAIN.COM@localhost/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:other,CANONICALIZE_HOST_NAME:forwardAndReverse", - "valid": true, - "credential": { - "username": "user@DOMAIN.COM", - "password": null, - "source": "$external", - "mechanism": "GSSAPI", - "mechanism_properties": { - "SERVICE_NAME": "other", - "CANONICALIZE_HOST_NAME": "forwardAndReverse" - } - } - }, - { - "description": "should accept no hostname canonicalization (GSSAPI)", - "uri": "mongodb://user%40DOMAIN.COM@localhost/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:other,CANONICALIZE_HOST_NAME:none", - "valid": true, - "credential": { - "username": "user@DOMAIN.COM", - "password": null, - "source": "$external", - "mechanism": "GSSAPI", - "mechanism_properties": { - "SERVICE_NAME": "other", - "CANONICALIZE_HOST_NAME": "none" - } - } - }, - { - "description": "must raise an error when the hostname canonicalization is invalid", - "uri": "mongodb://user%40DOMAIN.COM@localhost/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:other,CANONICALIZE_HOST_NAME:invalid", - "valid": false - }, - { - "description": "should accept the password (GSSAPI)", - "uri": "mongodb://user%40DOMAIN.COM:password@localhost/?authMechanism=GSSAPI&authSource=$external", - "valid": true, - "credential": { - "username": "user@DOMAIN.COM", - "password": "password", - "source": "$external", - "mechanism": "GSSAPI", - "mechanism_properties": { - "SERVICE_NAME": "mongodb" - } - } - }, - { - "description": "must raise an error when the authSource is empty", - "uri": "mongodb://user:password@localhost/foo?authSource=", - "valid": false - }, - { - "description": "must raise an error when the authSource is empty without credentials", - "uri": "mongodb://localhost/admin?authSource=", - "valid": false - }, - { - "description": "should throw an exception if authSource is invalid (GSSAPI)", - "uri": "mongodb://user%40DOMAIN.COM@localhost/?authMechanism=GSSAPI&authSource=foo", - "valid": false - }, - { - "description": "should throw an exception if no username (GSSAPI)", - "uri": "mongodb://localhost/?authMechanism=GSSAPI", - "valid": false - }, - { - "description": "should recognize the mechanism (MONGODB-X509)", - "uri": "mongodb://CN%3DmyName%2COU%3DmyOrgUnit%2CO%3DmyOrg%2CL%3DmyLocality%2CST%3DmyState%2CC%3DmyCountry@localhost/?authMechanism=MONGODB-X509", - "valid": true, - "credential": { - "username": "CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry", - "password": null, - "source": "$external", - "mechanism": "MONGODB-X509", - "mechanism_properties": null - } - }, - { - "description": "should ignore the database (MONGODB-X509)", - "uri": "mongodb://CN%3DmyName%2COU%3DmyOrgUnit%2CO%3DmyOrg%2CL%3DmyLocality%2CST%3DmyState%2CC%3DmyCountry@localhost/foo?authMechanism=MONGODB-X509", - "valid": true, - "credential": { - "username": "CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry", - "password": null, - "source": "$external", - "mechanism": "MONGODB-X509", - "mechanism_properties": null - } - }, - { - "description": "should accept valid authSource (MONGODB-X509)", - "uri": "mongodb://CN%3DmyName%2COU%3DmyOrgUnit%2CO%3DmyOrg%2CL%3DmyLocality%2CST%3DmyState%2CC%3DmyCountry@localhost/?authMechanism=MONGODB-X509&authSource=$external", - "valid": true, - "credential": { - "username": "CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry", - "password": null, - "source": "$external", - "mechanism": "MONGODB-X509", - "mechanism_properties": null - } - }, - { - "description": "should recognize the mechanism with no username (MONGODB-X509)", - "uri": "mongodb://localhost/?authMechanism=MONGODB-X509", - "valid": true, - "credential": { - "username": null, - "password": null, - "source": "$external", - "mechanism": "MONGODB-X509", - "mechanism_properties": null - } - }, - { - "description": "should recognize the mechanism with no username when auth source is explicitly specified (MONGODB-X509)", - "uri": "mongodb://localhost/?authMechanism=MONGODB-X509&authSource=$external", - "valid": true, - "credential": { - "username": null, - "password": null, - "source": "$external", - "mechanism": "MONGODB-X509", - "mechanism_properties": null - } - }, - { - "description": "should throw an exception if supplied a password (MONGODB-X509)", - "uri": "mongodb://user:password@localhost/?authMechanism=MONGODB-X509", - "valid": false - }, - { - "description": "should throw an exception if authSource is invalid (MONGODB-X509)", - "uri": "mongodb://CN%3DmyName%2COU%3DmyOrgUnit%2CO%3DmyOrg%2CL%3DmyLocality%2CST%3DmyState%2CC%3DmyCountry@localhost/foo?authMechanism=MONGODB-X509&authSource=bar", - "valid": false - }, - { - "description": "should recognize the mechanism (PLAIN)", - "uri": "mongodb://user:password@localhost/?authMechanism=PLAIN", - "valid": true, - "credential": { - "username": "user", - "password": "password", - "source": "$external", - "mechanism": "PLAIN", - "mechanism_properties": null - } - }, - { - "description": "should use the database when no authSource is specified (PLAIN)", - "uri": "mongodb://user:password@localhost/foo?authMechanism=PLAIN", - "valid": true, - "credential": { - "username": "user", - "password": "password", - "source": "foo", - "mechanism": "PLAIN", - "mechanism_properties": null - } - }, - { - "description": "should use the authSource when specified (PLAIN)", - "uri": "mongodb://user:password@localhost/foo?authMechanism=PLAIN&authSource=bar", - "valid": true, - "credential": { - "username": "user", - "password": "password", - "source": "bar", - "mechanism": "PLAIN", - "mechanism_properties": null - } - }, - { - "description": "should throw an exception if no username (PLAIN)", - "uri": "mongodb://localhost/?authMechanism=PLAIN", - "valid": false - }, - { - "description": "should recognize the mechanism (SCRAM-SHA-1)", - "uri": "mongodb://user:password@localhost/?authMechanism=SCRAM-SHA-1", - "valid": true, - "credential": { - "username": "user", - "password": "password", - "source": "admin", - "mechanism": "SCRAM-SHA-1", - "mechanism_properties": null - } - }, - { - "description": "should use the database when no authSource is specified (SCRAM-SHA-1)", - "uri": "mongodb://user:password@localhost/foo?authMechanism=SCRAM-SHA-1", - "valid": true, - "credential": { - "username": "user", - "password": "password", - "source": "foo", - "mechanism": "SCRAM-SHA-1", - "mechanism_properties": null - } - }, - { - "description": "should accept valid authSource (SCRAM-SHA-1)", - "uri": "mongodb://user:password@localhost/foo?authMechanism=SCRAM-SHA-1&authSource=bar", - "valid": true, - "credential": { - "username": "user", - "password": "password", - "source": "bar", - "mechanism": "SCRAM-SHA-1", - "mechanism_properties": null - } - }, - { - "description": "should throw an exception if no username (SCRAM-SHA-1)", - "uri": "mongodb://localhost/?authMechanism=SCRAM-SHA-1", - "valid": false - }, - { - "description": "should recognize the mechanism (SCRAM-SHA-256)", - "uri": "mongodb://user:password@localhost/?authMechanism=SCRAM-SHA-256", - "valid": true, - "credential": { - "username": "user", - "password": "password", - "source": "admin", - "mechanism": "SCRAM-SHA-256", - "mechanism_properties": null - } - }, - { - "description": "should use the database when no authSource is specified (SCRAM-SHA-256)", - "uri": "mongodb://user:password@localhost/foo?authMechanism=SCRAM-SHA-256", - "valid": true, - "credential": { - "username": "user", - "password": "password", - "source": "foo", - "mechanism": "SCRAM-SHA-256", - "mechanism_properties": null - } - }, - { - "description": "should accept valid authSource (SCRAM-SHA-256)", - "uri": "mongodb://user:password@localhost/foo?authMechanism=SCRAM-SHA-256&authSource=bar", - "valid": true, - "credential": { - "username": "user", - "password": "password", - "source": "bar", - "mechanism": "SCRAM-SHA-256", - "mechanism_properties": null - } - }, - { - "description": "should throw an exception if no username (SCRAM-SHA-256)", - "uri": "mongodb://localhost/?authMechanism=SCRAM-SHA-256", - "valid": false - }, - { - "description": "URI with no auth-related info doesn't create credential", - "uri": "mongodb://localhost/", - "valid": true, - "credential": null - }, - { - "description": "database in URI path doesn't create credentials", - "uri": "mongodb://localhost/foo", - "valid": true, - "credential": null - }, - { - "description": "authSource without username doesn't create credential (default mechanism)", - "uri": "mongodb://localhost/?authSource=foo", - "valid": true, - "credential": null - }, - { - "description": "should throw an exception if no username provided (userinfo implies default mechanism)", - "uri": "mongodb://@localhost.com/", - "valid": false - }, - { - "description": "should throw an exception if no username/password provided (userinfo implies default mechanism)", - "uri": "mongodb://:@localhost.com/", - "valid": false - }, - { - "description": "should recognise the mechanism (MONGODB-AWS)", - "uri": "mongodb://localhost/?authMechanism=MONGODB-AWS", - "valid": true, - "credential": { - "username": null, - "password": null, - "source": "$external", - "mechanism": "MONGODB-AWS", - "mechanism_properties": null - } - }, - { - "description": "should recognise the mechanism when auth source is explicitly specified (MONGODB-AWS)", - "uri": "mongodb://localhost/?authMechanism=MONGODB-AWS&authSource=$external", - "valid": true, - "credential": { - "username": null, - "password": null, - "source": "$external", - "mechanism": "MONGODB-AWS", - "mechanism_properties": null - } - }, - { - "description": "should throw an exception if username and no password (MONGODB-AWS)", - "uri": "mongodb://user@localhost/?authMechanism=MONGODB-AWS", - "valid": false, - "credential": null - }, - { - "description": "should use username and password if specified (MONGODB-AWS)", - "uri": "mongodb://user%21%40%23%24%25%5E%26%2A%28%29_%2B:pass%21%40%23%24%25%5E%26%2A%28%29_%2B@localhost/?authMechanism=MONGODB-AWS", - "valid": true, - "credential": { - "username": "user!@#$%^&*()_+", - "password": "pass!@#$%^&*()_+", - "source": "$external", - "mechanism": "MONGODB-AWS", - "mechanism_properties": null - } - }, - { - "description": "should use username, password and session token if specified (MONGODB-AWS)", - "uri": "mongodb://user:password@localhost/?authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:token%21%40%23%24%25%5E%26%2A%28%29_%2B", - "valid": true, - "credential": { - "username": "user", - "password": "password", - "source": "$external", - "mechanism": "MONGODB-AWS", - "mechanism_properties": { - "AWS_SESSION_TOKEN": "token!@#$%^&*()_+" - } - } - }, - { - "description": "should recognise the mechanism with test environment (MONGODB-OIDC)", - "uri": "mongodb://localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:test", - "valid": true, - "credential": { - "username": null, - "password": null, - "source": "$external", - "mechanism": "MONGODB-OIDC", - "mechanism_properties": { - "ENVIRONMENT": "test" - } - } - }, - { - "description": "should recognise the mechanism when auth source is explicitly specified and with environment (MONGODB-OIDC)", - "uri": "mongodb://localhost/?authMechanism=MONGODB-OIDC&authSource=$external&authMechanismProperties=ENVIRONMENT:test", - "valid": true, - "credential": { - "username": null, - "password": null, - "source": "$external", - "mechanism": "MONGODB-OIDC", - "mechanism_properties": { - "ENVIRONMENT": "test" - } - } - }, - { - "description": "should throw an exception if supplied a password (MONGODB-OIDC)", - "uri": "mongodb://user:pass@localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:test", - "valid": false, - "credential": null - }, - { - "description": "should throw an exception if username is specified for test (MONGODB-OIDC)", - "uri": "mongodb://principalName@localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:test", - "valid": false, - "credential": null - }, - { - "description": "should throw an exception if specified environment is not supported (MONGODB-OIDC)", - "uri": "mongodb://localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:invalid", - "valid": false, - "credential": null - }, - { - "description": "should throw an exception if neither environment nor callbacks specified (MONGODB-OIDC)", - "uri": "mongodb://localhost/?authMechanism=MONGODB-OIDC", - "valid": false, - "credential": null - }, - { - "description": "should throw an exception when unsupported auth property is specified (MONGODB-OIDC)", - "uri": "mongodb://localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=UnsupportedProperty:unexisted", - "valid": false, - "credential": null - }, - { - "description": "should recognise the mechanism with azure provider (MONGODB-OIDC)", - "uri": "mongodb://localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:foo", - "valid": true, - "credential": { - "username": null, - "password": null, - "source": "$external", - "mechanism": "MONGODB-OIDC", - "mechanism_properties": { - "ENVIRONMENT": "azure", - "TOKEN_RESOURCE": "foo" - } - } - }, - { - "description": "should accept a username with azure provider (MONGODB-OIDC)", - "uri": "mongodb://user@localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:foo", - "valid": true, - "credential": { - "username": "user", - "password": null, - "source": "$external", - "mechanism": "MONGODB-OIDC", - "mechanism_properties": { - "ENVIRONMENT": "azure", - "TOKEN_RESOURCE": "foo" - } - } - }, - { - "description": "should accept a url-encoded TOKEN_RESOURCE (MONGODB-OIDC)", - "uri": "mongodb://user@localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:mongodb%3A%2F%2Ftest-cluster", - "valid": true, - "credential": { - "username": "user", - "password": null, - "source": "$external", - "mechanism": "MONGODB-OIDC", - "mechanism_properties": { - "ENVIRONMENT": "azure", - "TOKEN_RESOURCE": "mongodb://test-cluster" - } - } - }, - { - "description": "should accept an un-encoded TOKEN_RESOURCE (MONGODB-OIDC)", - "uri": "mongodb://user@localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:mongodb://test-cluster", - "valid": true, - "credential": { - "username": "user", - "password": null, - "source": "$external", - "mechanism": "MONGODB-OIDC", - "mechanism_properties": { - "ENVIRONMENT": "azure", - "TOKEN_RESOURCE": "mongodb://test-cluster" - } - } - }, - { - "description": "should handle a complicated url-encoded TOKEN_RESOURCE (MONGODB-OIDC)", - "uri": "mongodb://user@localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:abcd%25ef%3Ag%26hi", - "valid": true, - "credential": { - "username": "user", - "password": null, - "source": "$external", - "mechanism": "MONGODB-OIDC", - "mechanism_properties": { - "ENVIRONMENT": "azure", - "TOKEN_RESOURCE": "abcd%ef:g&hi" - } - } - }, - { - "description": "should url-encode a TOKEN_RESOURCE (MONGODB-OIDC)", - "uri": "mongodb://user@localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:a$b", - "valid": true, - "credential": { - "username": "user", - "password": null, - "source": "$external", - "mechanism": "MONGODB-OIDC", - "mechanism_properties": { - "ENVIRONMENT": "azure", - "TOKEN_RESOURCE": "a$b" - } - } - }, - { - "description": "should accept a username and throw an error for a password with azure provider (MONGODB-OIDC)", - "uri": "mongodb://user:pass@localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:foo", - "valid": false, - "credential": null - }, - { - "description": "should throw an exception if no token audience is given for azure provider (MONGODB-OIDC)", - "uri": "mongodb://username@localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:azure", - "valid": false, - "credential": null - }, - { - "description": "should recognise the mechanism with gcp provider (MONGODB-OIDC)", - "uri": "mongodb://localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:foo", - "valid": true, - "credential": { - "username": null, - "password": null, - "source": "$external", - "mechanism": "MONGODB-OIDC", - "mechanism_properties": { - "ENVIRONMENT": "gcp", - "TOKEN_RESOURCE": "foo" - } - } - }, - { - "description": "should throw an error for a username and password with gcp provider (MONGODB-OIDC)", - "uri": "mongodb://user:pass@localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:foo", - "valid": false, - "credential": null - }, - { - "description": "should throw an error if not TOKEN_RESOURCE with gcp provider (MONGODB-OIDC)", - "uri": "mongodb://user:pass@localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:gcp", - "valid": false, - "credential": null - }, - { - "description": "should recognise the mechanism with k8s provider (MONGODB-OIDC)", - "uri": "mongodb://localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:k8s", - "valid": true, - "credential": { - "username": null, - "password": null, - "source": "$external", - "mechanism": "MONGODB-OIDC", - "mechanism_properties": { - "ENVIRONMENT": "k8s" - } - } - }, - { - "description": "should throw an error for a username and password with k8s provider (MONGODB-OIDC)", - "uri": "mongodb://user:pass@localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:k8s", - "valid": false, - "credential": null - } - ] -} diff --git a/testdata/auth/connection-string.yml b/testdata/auth/connection-string.yml deleted file mode 100644 index 1f5d470041..0000000000 --- a/testdata/auth/connection-string.yml +++ /dev/null @@ -1,471 +0,0 @@ ---- -tests: -- description: should use the default source and mechanism - uri: mongodb://user:password@localhost - valid: true - credential: - username: user - password: password - source: admin - mechanism: - mechanism_properties: -- description: should use the database when no authSource is specified - uri: mongodb://user:password@localhost/foo - valid: true - credential: - username: user - password: password - source: foo - mechanism: - mechanism_properties: -- description: should use the authSource when specified - uri: mongodb://user:password@localhost/foo?authSource=bar - valid: true - credential: - username: user - password: password - source: bar - mechanism: - mechanism_properties: -- description: should recognise the mechanism (GSSAPI) - uri: mongodb://user%40DOMAIN.COM@localhost/?authMechanism=GSSAPI - valid: true - credential: - username: user@DOMAIN.COM - password: - source: "$external" - mechanism: GSSAPI - mechanism_properties: - SERVICE_NAME: mongodb -- description: should ignore the database (GSSAPI) - uri: mongodb://user%40DOMAIN.COM@localhost/foo?authMechanism=GSSAPI - valid: true - credential: - username: user@DOMAIN.COM - password: - source: "$external" - mechanism: GSSAPI - mechanism_properties: - SERVICE_NAME: mongodb -- description: should accept valid authSource (GSSAPI) - uri: mongodb://user%40DOMAIN.COM@localhost/?authMechanism=GSSAPI&authSource=$external - valid: true - credential: - username: user@DOMAIN.COM - password: - source: "$external" - mechanism: GSSAPI - mechanism_properties: - SERVICE_NAME: mongodb -- description: should accept generic mechanism property (GSSAPI) - uri: mongodb://user%40DOMAIN.COM@localhost/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:other,CANONICALIZE_HOST_NAME:forward,SERVICE_HOST:example.com - valid: true - credential: - username: user@DOMAIN.COM - password: - source: "$external" - mechanism: GSSAPI - mechanism_properties: - SERVICE_NAME: other - SERVICE_HOST: example.com - CANONICALIZE_HOST_NAME: forward -- description: should accept forwardAndReverse hostname canonicalization (GSSAPI) - uri: mongodb://user%40DOMAIN.COM@localhost/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:other,CANONICALIZE_HOST_NAME:forwardAndReverse - valid: true - credential: - username: user@DOMAIN.COM - password: - source: "$external" - mechanism: GSSAPI - mechanism_properties: - SERVICE_NAME: other - CANONICALIZE_HOST_NAME: forwardAndReverse -- description: should accept no hostname canonicalization (GSSAPI) - uri: mongodb://user%40DOMAIN.COM@localhost/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:other,CANONICALIZE_HOST_NAME:none - valid: true - credential: - username: user@DOMAIN.COM - password: - source: "$external" - mechanism: GSSAPI - mechanism_properties: - SERVICE_NAME: other - CANONICALIZE_HOST_NAME: none -- description: must raise an error when the hostname canonicalization is invalid - uri: mongodb://user%40DOMAIN.COM@localhost/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:other,CANONICALIZE_HOST_NAME:invalid - valid: false -- description: should accept the password (GSSAPI) - uri: mongodb://user%40DOMAIN.COM:password@localhost/?authMechanism=GSSAPI&authSource=$external - valid: true - credential: - username: user@DOMAIN.COM - password: password - source: "$external" - mechanism: GSSAPI - mechanism_properties: - SERVICE_NAME: mongodb -- description: must raise an error when the authSource is empty - uri: mongodb://user:password@localhost/foo?authSource= - valid: false -- description: must raise an error when the authSource is empty without credentials - uri: mongodb://localhost/admin?authSource= - valid: false -- description: should throw an exception if authSource is invalid (GSSAPI) - uri: mongodb://user%40DOMAIN.COM@localhost/?authMechanism=GSSAPI&authSource=foo - valid: false -- description: should throw an exception if no username (GSSAPI) - uri: mongodb://localhost/?authMechanism=GSSAPI - valid: false -- description: should recognize the mechanism (MONGODB-X509) - uri: mongodb://CN%3DmyName%2COU%3DmyOrgUnit%2CO%3DmyOrg%2CL%3DmyLocality%2CST%3DmyState%2CC%3DmyCountry@localhost/?authMechanism=MONGODB-X509 - valid: true - credential: - username: CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry - password: - source: "$external" - mechanism: MONGODB-X509 - mechanism_properties: -- description: should ignore the database (MONGODB-X509) - uri: mongodb://CN%3DmyName%2COU%3DmyOrgUnit%2CO%3DmyOrg%2CL%3DmyLocality%2CST%3DmyState%2CC%3DmyCountry@localhost/foo?authMechanism=MONGODB-X509 - valid: true - credential: - username: CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry - password: - source: "$external" - mechanism: MONGODB-X509 - mechanism_properties: -- description: should accept valid authSource (MONGODB-X509) - uri: mongodb://CN%3DmyName%2COU%3DmyOrgUnit%2CO%3DmyOrg%2CL%3DmyLocality%2CST%3DmyState%2CC%3DmyCountry@localhost/?authMechanism=MONGODB-X509&authSource=$external - valid: true - credential: - username: CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry - password: - source: "$external" - mechanism: MONGODB-X509 - mechanism_properties: -- description: should recognize the mechanism with no username (MONGODB-X509) - uri: mongodb://localhost/?authMechanism=MONGODB-X509 - valid: true - credential: - username: - password: - source: "$external" - mechanism: MONGODB-X509 - mechanism_properties: -- description: should recognize the mechanism with no username when auth source is - explicitly specified (MONGODB-X509) - uri: mongodb://localhost/?authMechanism=MONGODB-X509&authSource=$external - valid: true - credential: - username: - password: - source: "$external" - mechanism: MONGODB-X509 - mechanism_properties: -- description: should throw an exception if supplied a password (MONGODB-X509) - uri: mongodb://user:password@localhost/?authMechanism=MONGODB-X509 - valid: false -- description: should throw an exception if authSource is invalid (MONGODB-X509) - uri: mongodb://CN%3DmyName%2COU%3DmyOrgUnit%2CO%3DmyOrg%2CL%3DmyLocality%2CST%3DmyState%2CC%3DmyCountry@localhost/foo?authMechanism=MONGODB-X509&authSource=bar - valid: false -- description: should recognize the mechanism (PLAIN) - uri: mongodb://user:password@localhost/?authMechanism=PLAIN - valid: true - credential: - username: user - password: password - source: "$external" - mechanism: PLAIN - mechanism_properties: -- description: should use the database when no authSource is specified (PLAIN) - uri: mongodb://user:password@localhost/foo?authMechanism=PLAIN - valid: true - credential: - username: user - password: password - source: foo - mechanism: PLAIN - mechanism_properties: -- description: should use the authSource when specified (PLAIN) - uri: mongodb://user:password@localhost/foo?authMechanism=PLAIN&authSource=bar - valid: true - credential: - username: user - password: password - source: bar - mechanism: PLAIN - mechanism_properties: -- description: should throw an exception if no username (PLAIN) - uri: mongodb://localhost/?authMechanism=PLAIN - valid: false -- description: should recognize the mechanism (SCRAM-SHA-1) - uri: mongodb://user:password@localhost/?authMechanism=SCRAM-SHA-1 - valid: true - credential: - username: user - password: password - source: admin - mechanism: SCRAM-SHA-1 - mechanism_properties: -- description: should use the database when no authSource is specified (SCRAM-SHA-1) - uri: mongodb://user:password@localhost/foo?authMechanism=SCRAM-SHA-1 - valid: true - credential: - username: user - password: password - source: foo - mechanism: SCRAM-SHA-1 - mechanism_properties: -- description: should accept valid authSource (SCRAM-SHA-1) - uri: mongodb://user:password@localhost/foo?authMechanism=SCRAM-SHA-1&authSource=bar - valid: true - credential: - username: user - password: password - source: bar - mechanism: SCRAM-SHA-1 - mechanism_properties: -- description: should throw an exception if no username (SCRAM-SHA-1) - uri: mongodb://localhost/?authMechanism=SCRAM-SHA-1 - valid: false -- description: should recognize the mechanism (SCRAM-SHA-256) - uri: mongodb://user:password@localhost/?authMechanism=SCRAM-SHA-256 - valid: true - credential: - username: user - password: password - source: admin - mechanism: SCRAM-SHA-256 - mechanism_properties: -- description: should use the database when no authSource is specified (SCRAM-SHA-256) - uri: mongodb://user:password@localhost/foo?authMechanism=SCRAM-SHA-256 - valid: true - credential: - username: user - password: password - source: foo - mechanism: SCRAM-SHA-256 - mechanism_properties: -- description: should accept valid authSource (SCRAM-SHA-256) - uri: mongodb://user:password@localhost/foo?authMechanism=SCRAM-SHA-256&authSource=bar - valid: true - credential: - username: user - password: password - source: bar - mechanism: SCRAM-SHA-256 - mechanism_properties: -- description: should throw an exception if no username (SCRAM-SHA-256) - uri: mongodb://localhost/?authMechanism=SCRAM-SHA-256 - valid: false -- description: URI with no auth-related info doesn't create credential - uri: mongodb://localhost/ - valid: true - credential: -- description: database in URI path doesn't create credentials - uri: mongodb://localhost/foo - valid: true - credential: -- description: authSource without username doesn't create credential (default mechanism) - uri: mongodb://localhost/?authSource=foo - valid: true - credential: -- description: should throw an exception if no username provided (userinfo implies - default mechanism) - uri: mongodb://@localhost.com/ - valid: false -- description: should throw an exception if no username/password provided (userinfo - implies default mechanism) - uri: mongodb://:@localhost.com/ - valid: false -- description: should recognise the mechanism (MONGODB-AWS) - uri: mongodb://localhost/?authMechanism=MONGODB-AWS - valid: true - credential: - username: - password: - source: "$external" - mechanism: MONGODB-AWS - mechanism_properties: -- description: should recognise the mechanism when auth source is explicitly specified - (MONGODB-AWS) - uri: mongodb://localhost/?authMechanism=MONGODB-AWS&authSource=$external - valid: true - credential: - username: - password: - source: "$external" - mechanism: MONGODB-AWS - mechanism_properties: -- description: should throw an exception if username and no password (MONGODB-AWS) - uri: mongodb://user@localhost/?authMechanism=MONGODB-AWS - valid: false - credential: -- description: should use username and password if specified (MONGODB-AWS) - uri: mongodb://user%21%40%23%24%25%5E%26%2A%28%29_%2B:pass%21%40%23%24%25%5E%26%2A%28%29_%2B@localhost/?authMechanism=MONGODB-AWS - valid: true - credential: - username: user!@#$%^&*()_+ - password: pass!@#$%^&*()_+ - source: "$external" - mechanism: MONGODB-AWS - mechanism_properties: -- description: should use username, password and session token if specified (MONGODB-AWS) - uri: mongodb://user:password@localhost/?authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:token%21%40%23%24%25%5E%26%2A%28%29_%2B - valid: true - credential: - username: user - password: password - source: "$external" - mechanism: MONGODB-AWS - mechanism_properties: - AWS_SESSION_TOKEN: token!@#$%^&*()_+ -- description: should recognise the mechanism with test environment (MONGODB-OIDC) - uri: mongodb://localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:test - valid: true - credential: - username: - password: - source: "$external" - mechanism: MONGODB-OIDC - mechanism_properties: - ENVIRONMENT: test -- description: should recognise the mechanism when auth source is explicitly specified and with environment (MONGODB-OIDC) - uri: mongodb://localhost/?authMechanism=MONGODB-OIDC&authSource=$external&authMechanismProperties=ENVIRONMENT:test - valid: true - credential: - username: - password: - source: "$external" - mechanism: MONGODB-OIDC - mechanism_properties: - ENVIRONMENT: test -- description: should throw an exception if supplied a password (MONGODB-OIDC) - uri: mongodb://user:pass@localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:test - valid: false - credential: -- description: should throw an exception if username is specified for test (MONGODB-OIDC) - uri: mongodb://principalName@localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:test - valid: false - credential: -- description: should throw an exception if specified environment is not supported (MONGODB-OIDC) - uri: mongodb://localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:invalid - valid: false - credential: -- description: should throw an exception if neither environment nor callbacks specified (MONGODB-OIDC) - uri: mongodb://localhost/?authMechanism=MONGODB-OIDC - valid: false - credential: -- description: should throw an exception when unsupported auth property is specified (MONGODB-OIDC) - uri: mongodb://localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=UnsupportedProperty:unexisted - valid: false - credential: -- description: should recognise the mechanism with azure provider (MONGODB-OIDC) - uri: mongodb://localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:foo - valid: true - credential: - username: null - password: null - source: $external - mechanism: MONGODB-OIDC - mechanism_properties: - ENVIRONMENT: azure - TOKEN_RESOURCE: foo -- description: should accept a username with azure provider (MONGODB-OIDC) - uri: mongodb://user@localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:foo - valid: true - credential: - username: user - password: null - source: $external - mechanism: MONGODB-OIDC - mechanism_properties: - ENVIRONMENT: azure - TOKEN_RESOURCE: foo -- description: should accept a url-encoded TOKEN_RESOURCE (MONGODB-OIDC) - uri: mongodb://user@localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:mongodb%3A%2F%2Ftest-cluster - valid: true - credential: - username: user - password: null - source: $external - mechanism: MONGODB-OIDC - mechanism_properties: - ENVIRONMENT: azure - TOKEN_RESOURCE: 'mongodb://test-cluster' -- description: should accept an un-encoded TOKEN_RESOURCE (MONGODB-OIDC) - uri: mongodb://user@localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:mongodb://test-cluster - valid: true - credential: - username: user - password: null - source: $external - mechanism: MONGODB-OIDC - mechanism_properties: - ENVIRONMENT: azure - TOKEN_RESOURCE: 'mongodb://test-cluster' -- description: should handle a complicated url-encoded TOKEN_RESOURCE (MONGODB-OIDC) - uri: mongodb://user@localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:abcd%25ef%3Ag%26hi - valid: true - credential: - username: user - password: null - source: $external - mechanism: MONGODB-OIDC - mechanism_properties: - ENVIRONMENT: azure - TOKEN_RESOURCE: 'abcd%ef:g&hi' -- description: should url-encode a TOKEN_RESOURCE (MONGODB-OIDC) - uri: mongodb://user@localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:a$b - valid: true - credential: - username: user - password: null - source: $external - mechanism: MONGODB-OIDC - mechanism_properties: - ENVIRONMENT: azure - TOKEN_RESOURCE: a$b -- description: should accept a username and throw an error for a password with azure provider (MONGODB-OIDC) - uri: mongodb://user:pass@localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:foo - valid: false - credential: null -- description: should throw an exception if no token audience is given for azure provider (MONGODB-OIDC) - uri: mongodb://username@localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:azure - valid: false - credential: null -- description: should recognise the mechanism with gcp provider (MONGODB-OIDC) - uri: mongodb://localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:foo - valid: true - credential: - username: null - password: null - source: $external - mechanism: MONGODB-OIDC - mechanism_properties: - ENVIRONMENT: gcp - TOKEN_RESOURCE: foo -- description: should throw an error for a username and password with gcp provider - (MONGODB-OIDC) - uri: mongodb://user:pass@localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:foo - valid: false - credential: null -- description: should throw an error if not TOKEN_RESOURCE with gcp provider (MONGODB-OIDC) - uri: mongodb://user:pass@localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:gcp - valid: false - credential: null -- description: should recognise the mechanism with k8s provider (MONGODB-OIDC) - uri: mongodb://localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:k8s - valid: true - credential: - username: null - password: null - source: $external - mechanism: MONGODB-OIDC - mechanism_properties: - ENVIRONMENT: k8s -- description: should throw an error for a username and password with k8s provider - (MONGODB-OIDC) - uri: mongodb://user:pass@localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:k8s - valid: false - credential: null diff --git a/testdata/bson-binary-vector/float32.json b/testdata/bson-binary-vector/float32.json deleted file mode 100644 index 845f504ff3..0000000000 --- a/testdata/bson-binary-vector/float32.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "description": "Tests of Binary subtype 9, Vectors, with dtype FLOAT32", - "test_key": "vector", - "tests": [ - { - "description": "Simple Vector FLOAT32", - "valid": true, - "vector": [127.0, 7.0], - "dtype_hex": "0x27", - "dtype_alias": "FLOAT32", - "padding": 0, - "canonical_bson": "1C00000005766563746F72000A0000000927000000FE420000E04000" - }, - { - "description": "Vector with decimals and negative value FLOAT32", - "valid": true, - "vector": [127.7, -7.7], - "dtype_hex": "0x27", - "dtype_alias": "FLOAT32", - "padding": 0, - "canonical_bson": "1C00000005766563746F72000A0000000927006666FF426666F6C000" - }, - { - "description": "Empty Vector FLOAT32", - "valid": true, - "vector": [], - "dtype_hex": "0x27", - "dtype_alias": "FLOAT32", - "padding": 0, - "canonical_bson": "1400000005766563746F72000200000009270000" - }, - { - "description": "Infinity Vector FLOAT32", - "valid": true, - "vector": ["-inf", 0.0, "inf"], - "dtype_hex": "0x27", - "dtype_alias": "FLOAT32", - "padding": 0, - "canonical_bson": "2000000005766563746F72000E000000092700000080FF000000000000807F00" - }, - { - "description": "FLOAT32 with padding", - "valid": false, - "vector": [127.0, 7.0], - "dtype_hex": "0x27", - "dtype_alias": "FLOAT32", - "padding": 3, - "canonical_bson": "1C00000005766563746F72000A0000000927030000FE420000E04000" - }, - { - "description": "Insufficient vector data with 3 bytes FLOAT32", - "valid": false, - "dtype_hex": "0x27", - "dtype_alias": "FLOAT32", - "canonical_bson": "1700000005766563746F7200050000000927002A2A2A00" - }, - { - "description": "Insufficient vector data with 5 bytes FLOAT32", - "valid": false, - "dtype_hex": "0x27", - "dtype_alias": "FLOAT32", - "canonical_bson": "1900000005766563746F7200070000000927002A2A2A2A2A00" - } - ] -} diff --git a/testdata/bson-binary-vector/int8.json b/testdata/bson-binary-vector/int8.json deleted file mode 100644 index 29524fb617..0000000000 --- a/testdata/bson-binary-vector/int8.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "description": "Tests of Binary subtype 9, Vectors, with dtype INT8", - "test_key": "vector", - "tests": [ - { - "description": "Simple Vector INT8", - "valid": true, - "vector": [127, 7], - "dtype_hex": "0x03", - "dtype_alias": "INT8", - "padding": 0, - "canonical_bson": "1600000005766563746F7200040000000903007F0700" - }, - { - "description": "Empty Vector INT8", - "valid": true, - "vector": [], - "dtype_hex": "0x03", - "dtype_alias": "INT8", - "padding": 0, - "canonical_bson": "1400000005766563746F72000200000009030000" - }, - { - "description": "Overflow Vector INT8", - "valid": false, - "vector": [128], - "dtype_hex": "0x03", - "dtype_alias": "INT8", - "padding": 0 - }, - { - "description": "Underflow Vector INT8", - "valid": false, - "vector": [-129], - "dtype_hex": "0x03", - "dtype_alias": "INT8", - "padding": 0 - }, - { - "description": "INT8 with padding", - "valid": false, - "vector": [127, 7], - "dtype_hex": "0x03", - "dtype_alias": "INT8", - "padding": 3, - "canonical_bson": "1600000005766563746F7200040000000903037F0700" - }, - { - "description": "INT8 with float inputs", - "valid": false, - "vector": [127.77, 7.77], - "dtype_hex": "0x03", - "dtype_alias": "INT8", - "padding": 0 - } - ] -} diff --git a/testdata/bson-binary-vector/packed_bit.json b/testdata/bson-binary-vector/packed_bit.json deleted file mode 100644 index a220e7e318..0000000000 --- a/testdata/bson-binary-vector/packed_bit.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "description": "Tests of Binary subtype 9, Vectors, with dtype PACKED_BIT", - "test_key": "vector", - "tests": [ - { - "description": "Padding specified with no vector data PACKED_BIT", - "valid": false, - "vector": [], - "dtype_hex": "0x10", - "dtype_alias": "PACKED_BIT", - "padding": 1, - "canonical_bson": "1400000005766563746F72000200000009100100" - }, - { - "description": "Simple Vector PACKED_BIT", - "valid": true, - "vector": [127, 7], - "dtype_hex": "0x10", - "dtype_alias": "PACKED_BIT", - "padding": 0, - "canonical_bson": "1600000005766563746F7200040000000910007F0700" - }, - { - "description": "Empty Vector PACKED_BIT", - "valid": true, - "vector": [], - "dtype_hex": "0x10", - "dtype_alias": "PACKED_BIT", - "padding": 0, - "canonical_bson": "1400000005766563746F72000200000009100000" - }, - { - "description": "PACKED_BIT with padding", - "valid": true, - "vector": [127, 7], - "dtype_hex": "0x10", - "dtype_alias": "PACKED_BIT", - "padding": 3, - "canonical_bson": "1600000005766563746F7200040000000910037F0700" - }, - { - "description": "Overflow Vector PACKED_BIT", - "valid": false, - "vector": [256], - "dtype_hex": "0x10", - "dtype_alias": "PACKED_BIT", - "padding": 0 - }, - { - "description": "Underflow Vector PACKED_BIT", - "valid": false, - "vector": [-1], - "dtype_hex": "0x10", - "dtype_alias": "PACKED_BIT", - "padding": 0 - }, - { - "description": "Vector with float values PACKED_BIT", - "valid": false, - "vector": [127.5], - "dtype_hex": "0x10", - "dtype_alias": "PACKED_BIT", - "padding": 0 - }, - { - "description": "Exceeding maximum padding PACKED_BIT", - "valid": false, - "vector": [1], - "dtype_hex": "0x10", - "dtype_alias": "PACKED_BIT", - "padding": 8, - "canonical_bson": "1500000005766563746F7200030000000910080100" - }, - { - "description": "Negative padding PACKED_BIT", - "valid": false, - "vector": [1], - "dtype_hex": "0x10", - "dtype_alias": "PACKED_BIT", - "padding": -1 - } - ] -} diff --git a/testdata/bson-corpus/array.json b/testdata/bson-corpus/array.json deleted file mode 100644 index 9ff953e5ae..0000000000 --- a/testdata/bson-corpus/array.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "description": "Array", - "bson_type": "0x04", - "test_key": "a", - "valid": [ - { - "description": "Empty", - "canonical_bson": "0D000000046100050000000000", - "canonical_extjson": "{\"a\" : []}" - }, - { - "description": "Single Element Array", - "canonical_bson": "140000000461000C0000001030000A0000000000", - "canonical_extjson": "{\"a\" : [{\"$numberInt\": \"10\"}]}" - }, - { - "description": "Single Element Array with index set incorrectly to empty string", - "degenerate_bson": "130000000461000B00000010000A0000000000", - "canonical_bson": "140000000461000C0000001030000A0000000000", - "canonical_extjson": "{\"a\" : [{\"$numberInt\": \"10\"}]}" - }, - { - "description": "Single Element Array with index set incorrectly to ab", - "degenerate_bson": "150000000461000D000000106162000A0000000000", - "canonical_bson": "140000000461000C0000001030000A0000000000", - "canonical_extjson": "{\"a\" : [{\"$numberInt\": \"10\"}]}" - }, - { - "description": "Multi Element Array with duplicate indexes", - "degenerate_bson": "1b000000046100130000001030000a000000103000140000000000", - "canonical_bson": "1b000000046100130000001030000a000000103100140000000000", - "canonical_extjson": "{\"a\" : [{\"$numberInt\": \"10\"}, {\"$numberInt\": \"20\"}]}" - } - ], - "decodeErrors": [ - { - "description": "Array length too long: eats outer terminator", - "bson": "140000000461000D0000001030000A0000000000" - }, - { - "description": "Array length too short: leaks terminator", - "bson": "140000000461000B0000001030000A0000000000" - }, - { - "description": "Invalid Array: bad string length in field", - "bson": "1A00000004666F6F00100000000230000500000062617A000000" - } - ] -} diff --git a/testdata/bson-corpus/binary.json b/testdata/bson-corpus/binary.json deleted file mode 100644 index 0e0056f3a2..0000000000 --- a/testdata/bson-corpus/binary.json +++ /dev/null @@ -1,153 +0,0 @@ -{ - "description": "Binary type", - "bson_type": "0x05", - "test_key": "x", - "valid": [ - { - "description": "subtype 0x00 (Zero-length)", - "canonical_bson": "0D000000057800000000000000", - "canonical_extjson": "{\"x\" : { \"$binary\" : {\"base64\" : \"\", \"subType\" : \"00\"}}}" - }, - { - "description": "subtype 0x00 (Zero-length, keys reversed)", - "canonical_bson": "0D000000057800000000000000", - "canonical_extjson": "{\"x\" : { \"$binary\" : {\"base64\" : \"\", \"subType\" : \"00\"}}}", - "degenerate_extjson": "{\"x\" : { \"$binary\" : {\"subType\" : \"00\", \"base64\" : \"\"}}}" - }, - { - "description": "subtype 0x00", - "canonical_bson": "0F0000000578000200000000FFFF00", - "canonical_extjson": "{\"x\" : { \"$binary\" : {\"base64\" : \"//8=\", \"subType\" : \"00\"}}}" - }, - { - "description": "subtype 0x01", - "canonical_bson": "0F0000000578000200000001FFFF00", - "canonical_extjson": "{\"x\" : { \"$binary\" : {\"base64\" : \"//8=\", \"subType\" : \"01\"}}}" - }, - { - "description": "subtype 0x02", - "canonical_bson": "13000000057800060000000202000000FFFF00", - "canonical_extjson": "{\"x\" : { \"$binary\" : {\"base64\" : \"//8=\", \"subType\" : \"02\"}}}" - }, - { - "description": "subtype 0x03", - "canonical_bson": "1D000000057800100000000373FFD26444B34C6990E8E7D1DFC035D400", - "canonical_extjson": "{\"x\" : { \"$binary\" : {\"base64\" : \"c//SZESzTGmQ6OfR38A11A==\", \"subType\" : \"03\"}}}" - }, - { - "description": "subtype 0x04", - "canonical_bson": "1D000000057800100000000473FFD26444B34C6990E8E7D1DFC035D400", - "canonical_extjson": "{\"x\" : { \"$binary\" : {\"base64\" : \"c//SZESzTGmQ6OfR38A11A==\", \"subType\" : \"04\"}}}" - }, - { - "description": "subtype 0x04 UUID", - "canonical_bson": "1D000000057800100000000473FFD26444B34C6990E8E7D1DFC035D400", - "canonical_extjson": "{\"x\" : { \"$binary\" : {\"base64\" : \"c//SZESzTGmQ6OfR38A11A==\", \"subType\" : \"04\"}}}", - "degenerate_extjson": "{\"x\" : { \"$uuid\" : \"73ffd264-44b3-4c69-90e8-e7d1dfc035d4\"}}" - }, - { - "description": "subtype 0x05", - "canonical_bson": "1D000000057800100000000573FFD26444B34C6990E8E7D1DFC035D400", - "canonical_extjson": "{\"x\" : { \"$binary\" : {\"base64\" : \"c//SZESzTGmQ6OfR38A11A==\", \"subType\" : \"05\"}}}" - }, - { - "description": "subtype 0x07", - "canonical_bson": "1D000000057800100000000773FFD26444B34C6990E8E7D1DFC035D400", - "canonical_extjson": "{\"x\" : { \"$binary\" : {\"base64\" : \"c//SZESzTGmQ6OfR38A11A==\", \"subType\" : \"07\"}}}" - }, - { - "description": "subtype 0x08", - "canonical_bson": "1D000000057800100000000873FFD26444B34C6990E8E7D1DFC035D400", - "canonical_extjson": "{\"x\" : { \"$binary\" : {\"base64\" : \"c//SZESzTGmQ6OfR38A11A==\", \"subType\" : \"08\"}}}" - }, - { - "description": "subtype 0x80", - "canonical_bson": "0F0000000578000200000080FFFF00", - "canonical_extjson": "{\"x\" : { \"$binary\" : {\"base64\" : \"//8=\", \"subType\" : \"80\"}}}" - }, - { - "description": "$type query operator (conflicts with legacy $binary form with $type field)", - "canonical_bson": "1F000000037800170000000224747970650007000000737472696E67000000", - "canonical_extjson": "{\"x\" : { \"$type\" : \"string\"}}" - }, - { - "description": "$type query operator (conflicts with legacy $binary form with $type field)", - "canonical_bson": "180000000378001000000010247479706500020000000000", - "canonical_extjson": "{\"x\" : { \"$type\" : {\"$numberInt\": \"2\"}}}" - }, - { - "description": "subtype 0x09 Vector FLOAT32", - "canonical_bson": "170000000578000A0000000927000000FE420000E04000", - "canonical_extjson": "{\"x\": {\"$binary\": {\"base64\": \"JwAAAP5CAADgQA==\", \"subType\": \"09\"}}}" - }, - { - "description": "subtype 0x09 Vector INT8", - "canonical_bson": "11000000057800040000000903007F0700", - "canonical_extjson": "{\"x\": {\"$binary\": {\"base64\": \"AwB/Bw==\", \"subType\": \"09\"}}}" - }, - { - "description": "subtype 0x09 Vector PACKED_BIT", - "canonical_bson": "11000000057800040000000910007F0700", - "canonical_extjson": "{\"x\": {\"$binary\": {\"base64\": \"EAB/Bw==\", \"subType\": \"09\"}}}" - }, - { - "description": "subtype 0x09 Vector (Zero-length) FLOAT32", - "canonical_bson": "0F0000000578000200000009270000", - "canonical_extjson": "{\"x\": {\"$binary\": {\"base64\": \"JwA=\", \"subType\": \"09\"}}}" - }, - { - "description": "subtype 0x09 Vector (Zero-length) INT8", - "canonical_bson": "0F0000000578000200000009030000", - "canonical_extjson": "{\"x\": {\"$binary\": {\"base64\": \"AwA=\", \"subType\": \"09\"}}}" - }, - { - "description": "subtype 0x09 Vector (Zero-length) PACKED_BIT", - "canonical_bson": "0F0000000578000200000009100000", - "canonical_extjson": "{\"x\": {\"$binary\": {\"base64\": \"EAA=\", \"subType\": \"09\"}}}" - } - ], - "decodeErrors": [ - { - "description": "Length longer than document", - "bson": "1D000000057800FF0000000573FFD26444B34C6990E8E7D1DFC035D400" - }, - { - "description": "Negative length", - "bson": "0D000000057800FFFFFFFF0000" - }, - { - "description": "subtype 0x02 length too long ", - "bson": "13000000057800060000000203000000FFFF00" - }, - { - "description": "subtype 0x02 length too short", - "bson": "13000000057800060000000201000000FFFF00" - }, - { - "description": "subtype 0x02 length negative one", - "bson": "130000000578000600000002FFFFFFFFFFFF00" - } - ], - "parseErrors": [ - { - "description": "$uuid wrong type", - "string": "{\"x\" : { \"$uuid\" : { \"data\" : \"73ffd264-44b3-4c69-90e8-e7d1dfc035d4\"}}}" - }, - { - "description": "$uuid invalid value--too short", - "string": "{\"x\" : { \"$uuid\" : \"73ffd264-44b3-90e8-e7d1dfc035d4\"}}" - }, - { - "description": "$uuid invalid value--too long", - "string": "{\"x\" : { \"$uuid\" : \"73ffd264-44b3-4c69-90e8-e7d1dfc035d4-789e4\"}}" - }, - { - "description": "$uuid invalid value--misplaced hyphens", - "string": "{\"x\" : { \"$uuid\" : \"73ff-d26444b-34c6-990e8e-7d1dfc035d4\"}}" - }, - { - "description": "$uuid invalid value--too many hyphens", - "string": "{\"x\" : { \"$uuid\" : \"----d264-44b3-4--9-90e8-e7d1dfc0----\"}}" - } - ] -} diff --git a/testdata/bson-corpus/boolean.json b/testdata/bson-corpus/boolean.json deleted file mode 100644 index 84c282299a..0000000000 --- a/testdata/bson-corpus/boolean.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "description": "Boolean", - "bson_type": "0x08", - "test_key": "b", - "valid": [ - { - "description": "True", - "canonical_bson": "090000000862000100", - "canonical_extjson": "{\"b\" : true}" - }, - { - "description": "False", - "canonical_bson": "090000000862000000", - "canonical_extjson": "{\"b\" : false}" - } - ], - "decodeErrors": [ - { - "description": "Invalid boolean value of 2", - "bson": "090000000862000200" - }, - { - "description": "Invalid boolean value of -1", - "bson": "09000000086200FF00" - } - ] -} diff --git a/testdata/bson-corpus/bsonview b/testdata/bson-corpus/bsonview deleted file mode 100755 index b803fc87e6..0000000000 --- a/testdata/bson-corpus/bsonview +++ /dev/null @@ -1,434 +0,0 @@ -#!/usr/bin/env perl -use v5.10; -use strict; -use warnings; -use utf8; -use open qw/:std :utf8/; - -use Getopt::Long; -use Pod::Usage; - -use if $^O eq 'MSWin32', 'Win32::Console::ANSI'; -use Term::ANSIColor; - -use constant { - NULL => "\x00", - BSON_TYPE => "C", - BSON_ENAME => "Z*", - BSON_TYPE_NAME => "CZ*", - BSON_DOUBLE => "d", - BSON_STRING => "l/A", - BSON_BOOLEAN => "C", - BSON_REGEX => "Z*Z*", - BSON_JSCODE => "", - BSON_INT32 => "l", - BSON_INT64 => "q", - BSON_TIMESTAMP => "q", - BSON_CODE_W_SCOPE => "l", - BSON_REMAINING => 'a*', - BSON_SKIP_4_BYTES => 'x4', - BSON_OBJECTID => 'a12', - BSON_BINARY_TYPE => 'C', - BSON_CSTRING => 'Z*', - BSON_BYTES => 'a*' -}; - -my $BOLD = $^O eq 'MSWin32' ? "bold " : ""; - -# minimum field size -my %FIELD_SIZES = ( - 0x01 => 8, - 0x02 => 5, - 0x03 => 5, - 0x04 => 5, - 0x05 => 5, - 0x06 => 0, - 0x07 => 12, - 0x08 => 1, - 0x09 => 8, - 0x0A => 0, - 0x0B => 2, - 0x0C => 17, - 0x0D => 5, - 0x0E => 5, - 0x0F => 14, - 0x10 => 4, - 0x11 => 8, - 0x12 => 8, - 0x7F => 0, - 0xFF => 0, -); - -sub main { - my ( $hex, $file, $help ); - GetOptions( - "file=s" => \$file, - "x" => \$hex, - "help|h" => \$help, - ) or die("Error in command line args"); - pod2usage( { -exitval => 2, -verbose => 2, } ) if $help; - - if ( $file ) { - dump_file($file); - } - else { - dump_stdin($hex); - } -} - -sub dump_stdin { - my $hex = shift; - while ( defined( my $bson = ) ) { - chomp $bson; - if ( !length($bson) ) { - print_error("[ no document ]\n"); - next; - } - # in -x mode, treat leading # as a comment - if ( $hex && index( $bson, "#" ) == 0 ) { - say $bson; - next; - } - $bson =~ s[ ][]g if $hex; - $bson = pack( "H*", $bson ) if $hex; - dump_document( \$bson ); - print "\n"; - } -} - -sub dump_file { - my $file = shift; - open my $fh, "<", $file; - binmode($fh); - my $data = do { local $/; <$fh> }; - while ( length $data ) { - my $len = unpack( BSON_INT32, $data ); - my $bson = substr($data,0,$len,''); - dump_document(\$bson); - print "\n"; - } -} - -sub dump_document { - my ( $ref, $is_array ) = @_; - print $is_array ? " [" : " {" if defined $is_array; - dump_header($ref); - 1 while dump_field($ref); - print_error( " " . unpack( "H*", $$ref ) ) if length($$ref); - print $is_array ? " ]" : " }" if defined $is_array; - return; -} - -sub dump_header { - my ($ref) = @_; - - my $len = get_length( $ref, 4 ); - return unless defined $len; - - if ( $len < 5 || $len < length($$ref) + 4 ) { - print_length( $len, 'red' ); - } - else { - print_length( $len, 'blue' ); - } -} - -sub dump_field { - my ($ref) = @_; - - # detect end of document - if ( length($$ref) < 2 ) { - if ( length($$ref) == 0 ) { - print_error(" [missing terminator]"); - } - else { - my $end = substr( $$ref, 0, 1, '' ); - print_hex( $end, $end eq NULL ? 'blue' : 'red' ); - } - return; - } - - # unpack type - my $type = unpack( BSON_TYPE, substr( $$ref, 0, 1, '' ) ); - - if ( !exists $FIELD_SIZES{$type} ) { - print_type( $type, 'red' ); - return; - } - - print_type($type); - - # check for key termination - my $key_end = index( $$ref, NULL ); - return if $key_end == -1; - - # unpack key - my $key = unpack( BSON_CSTRING, substr( $$ref, 0, $key_end + 1, '' ) ); - print_key($key); - - # Check if there is enough data to complete field for this type - # This is greedy, so it checks length, not length -1 - my $min_size = $FIELD_SIZES{$type}; - return if length($$ref) < $min_size; - - # fields without payload: 0x06, 0x0A, 0x7F, 0xFF - return 1 if $min_size == 0; - - # document or array - if ( $type == 0x03 || $type == 0x04 ) { - my ($len) = unpack( BSON_INT32, $$ref ); - my $doc = substr( $$ref, 0, $len, '' ); - dump_document( \$doc, $type == 0x04 ); - return 1; - } - - # fixed width fields - if ( $type == 0x01 - || $type == 0x07 - || $type == 0x09 - || $type == 0x10 - || $type == 0x11 - || $type == 0x12 ) - { - my $len = ( $type == 0x10 ? 4 : $type == 0x07 ? 12 : 8 ); - print_hex( substr( $$ref, 0, $len, '' ) ); - return 1; - } - - # boolean - if ( $type == 0x08 ) { - my $bool = substr( $$ref, 0, 1, '' ); - print_hex( $bool, ( $bool eq "\x00" || $bool eq "\x01" ) ? 'green' : 'red' ); - return 1; - } - - # binary field - if ( $type == 0x05 ) { - my $len = get_length( $ref, -1 ); - my $subtype = substr( $$ref, 0, 1, '' ); - - if ( !defined($len) ) { - print_hex($subtype); - return; - } - - my $binary = substr( $$ref, 0, $len, '' ); - - print_length($len); - print_hex($subtype); - - if ( $subtype eq "\x02" ) { - my $bin_len = get_length( \$binary ); - if ( !defined($bin_len) ) { - print_hex( $binary, 'red' ); - return; - } - if ( $bin_len != length($binary) ) { - print_length( $bin_len, 'red' ); - print_hex( $binary, 'red' ); - return; - } - } - - print_hex($binary) if length($binary); - return 1; - } - - # string or symbol or code - if ( $type == 0x02 || $type == 0x0e || $type == 0x0d ) { - my ( $len, $string ) = get_string($ref); - return unless defined $len; - - print_length( $len, 'cyan' ); - print_string($string); - return 1; - - } - - # regex 0x0B - if ( $type == 0x0B ) { - my ( $pattern, $flag ) = unpack( BSON_CSTRING . BSON_CSTRING, $$ref ); - substr( $$ref, 0, length($pattern) + length($flag) + 2, '' ); - print_string($pattern); - print_string($flag); - return 1; - } - - # code with scope 0x0F - if ( $type == 0x0F ) { - my $len = get_length( $ref, 4 ); - return unless defined $len; - - # len + string + doc minimum size is 4 + 5 + 5 - if ( $len < 14 ) { - print_length( $len, 'red' ); - return; - } - - print_length($len); - - my $cws = substr( $$ref, 0, $len - 4, '' ); - - my ( $strlen, $string ) = get_string( \$cws ); - - if ( !defined $strlen ) { - print_hex( $cws, 'red' ); - return; - } - - print_length($strlen); - print_string($string); - - dump_document( \$cws, 0 ); - - return 1; - } - - # dbpointer 0x0C - if ( $type == 0x0C ) { - my ( $len, $string ) = get_string($ref); - return unless defined $len; - - print_length($len); - print_string($string); - - # Check if there are 12 bytes (plus terminator) or more - return if length($$ref) < 13; - - my $oid = substr( $$ref, 0, 12, '' ); - print_hex($oid); - - return 1; - } - - die "Shouldn't reach here"; -} - -sub get_length { - my ( $ref, $adj ) = @_; - $adj ||= 0; - my $len = unpack( BSON_INT32, substr( $$ref, 0, 4, '' ) ); - return unless defined $len; - - # check if requested length is too long - if ( $len < 0 || $len > length($$ref) + $adj ) { - print_length( $len, 'red' ); - return; - } - - return $len; -} - -sub get_string { - my ($ref) = @_; - - my $len = get_length($ref); - return unless defined $len; - - # len must be at least 1 for trailing 0x00 - if ( $len == 0 ) { - print_length( $len, 'red' ); - return; - } - - my $string = substr( $$ref, 0, $len, '' ); - - # check if null terminated - if ( substr( $string, -1, 1 ) ne NULL ) { - print_length($len); - print_hex( $string, 'red' ); - return; - } - - # remove trailing null - chop($string); - - # try to decode to UTF-8 - if ( !utf8::decode($string) ) { - print_length($len); - print_hex( $string . "\x00", 'red' ); - return; - } - - return ( $len, $string ); -} - -sub print_error { - my ($text) = @_; - print colored( ["${BOLD}red"], $text ); -} - -sub print_type { - my ( $type, $color ) = @_; - $color ||= 'magenta'; - print colored( ["$BOLD$color"], sprintf( " %02x", $type ) ); -} - -sub print_key { - my ($string) = @_; - print_string( $string, 'yellow' ); -} - -sub print_string { - my ( $string, $color ) = @_; - $color ||= 'green'; - $string =~ s{([^[:graph:]])}{sprintf("\\x%02x",ord($1))}ge; - print colored( ["$BOLD$color"], qq[ "$string"] . " 00" ); -} - -sub print_length { - my ( $len, $color ) = @_; - $color ||= 'cyan'; - print colored( ["$BOLD$color"], " " . unpack( "H*", pack( BSON_INT32, $len ) ) ); -} - -sub print_hex { - my ( $value, $color ) = @_; - $color ||= 'green'; - print colored( ["$BOLD$color"], " " . uc( unpack( "H*", $value ) ) ); -} - -main(); - -__END__ - -=head1 NAME - -bsonview - dump a BSON string with color output showing structure - -=head1 SYNOPSIS - - cat file.bson | bsondump - - echo "0500000000" | bsondump -x - -=head1 OPTIONS - - -x input is in hex format (default is 0) - --help, -h show help - -=head1 USAGE - -Reads from C and dumps colored structures to C. - -=head1 AUTHOR - -=over 4 - -=item * - -David Golden - -=back - -=head1 COPYRIGHT AND LICENSE - -This software is Copyright (c) 2016 by MongoDB, Inc.. - -This is free software, licensed under: - - The Apache License, Version 2.0, January 2004 - -=cut - -=cut diff --git a/testdata/bson-corpus/code.json b/testdata/bson-corpus/code.json deleted file mode 100644 index b8482b2541..0000000000 --- a/testdata/bson-corpus/code.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "description": "Javascript Code", - "bson_type": "0x0D", - "test_key": "a", - "valid": [ - { - "description": "Empty string", - "canonical_bson": "0D0000000D6100010000000000", - "canonical_extjson": "{\"a\" : {\"$code\" : \"\"}}" - }, - { - "description": "Single character", - "canonical_bson": "0E0000000D610002000000620000", - "canonical_extjson": "{\"a\" : {\"$code\" : \"b\"}}" - }, - { - "description": "Multi-character", - "canonical_bson": "190000000D61000D0000006162616261626162616261620000", - "canonical_extjson": "{\"a\" : {\"$code\" : \"abababababab\"}}" - }, - { - "description": "two-byte UTF-8 (\u00e9)", - "canonical_bson": "190000000D61000D000000C3A9C3A9C3A9C3A9C3A9C3A90000", - "canonical_extjson": "{\"a\" : {\"$code\" : \"\\u00e9\\u00e9\\u00e9\\u00e9\\u00e9\\u00e9\"}}" - }, - { - "description": "three-byte UTF-8 (\u2606)", - "canonical_bson": "190000000D61000D000000E29886E29886E29886E298860000", - "canonical_extjson": "{\"a\" : {\"$code\" : \"\\u2606\\u2606\\u2606\\u2606\"}}" - }, - { - "description": "Embedded nulls", - "canonical_bson": "190000000D61000D0000006162006261620062616261620000", - "canonical_extjson": "{\"a\" : {\"$code\" : \"ab\\u0000bab\\u0000babab\"}}" - } - ], - "decodeErrors": [ - { - "description": "bad code string length: 0 (but no 0x00 either)", - "bson": "0C0000000D61000000000000" - }, - { - "description": "bad code string length: -1", - "bson": "0C0000000D6100FFFFFFFF00" - }, - { - "description": "bad code string length: eats terminator", - "bson": "100000000D6100050000006200620000" - }, - { - "description": "bad code string length: longer than rest of document", - "bson": "120000000D00FFFFFF00666F6F6261720000" - }, - { - "description": "code string is not null-terminated", - "bson": "100000000D610004000000616263FF00" - }, - { - "description": "empty code string, but extra null", - "bson": "0E0000000D610001000000000000" - }, - { - "description": "invalid UTF-8", - "bson": "0E0000000D610002000000E90000" - } - ] -} diff --git a/testdata/bson-corpus/code_w_scope.json b/testdata/bson-corpus/code_w_scope.json deleted file mode 100644 index f956bcd54f..0000000000 --- a/testdata/bson-corpus/code_w_scope.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "description": "Javascript Code with Scope", - "bson_type": "0x0F", - "test_key": "a", - "valid": [ - { - "description": "Empty code string, empty scope", - "canonical_bson": "160000000F61000E0000000100000000050000000000", - "canonical_extjson": "{\"a\" : {\"$code\" : \"\", \"$scope\" : {}}}" - }, - { - "description": "Non-empty code string, empty scope", - "canonical_bson": "1A0000000F610012000000050000006162636400050000000000", - "canonical_extjson": "{\"a\" : {\"$code\" : \"abcd\", \"$scope\" : {}}}" - }, - { - "description": "Empty code string, non-empty scope", - "canonical_bson": "1D0000000F61001500000001000000000C000000107800010000000000", - "canonical_extjson": "{\"a\" : {\"$code\" : \"\", \"$scope\" : {\"x\" : {\"$numberInt\": \"1\"}}}}" - }, - { - "description": "Non-empty code string and non-empty scope", - "canonical_bson": "210000000F6100190000000500000061626364000C000000107800010000000000", - "canonical_extjson": "{\"a\" : {\"$code\" : \"abcd\", \"$scope\" : {\"x\" : {\"$numberInt\": \"1\"}}}}" - }, - { - "description": "Unicode and embedded null in code string, empty scope", - "canonical_bson": "1A0000000F61001200000005000000C3A9006400050000000000", - "canonical_extjson": "{\"a\" : {\"$code\" : \"\\u00e9\\u0000d\", \"$scope\" : {}}}" - } - ], - "decodeErrors": [ - { - "description": "field length zero", - "bson": "280000000F6100000000000500000061626364001300000010780001000000107900010000000000" - }, - { - "description": "field length negative", - "bson": "280000000F6100FFFFFFFF0500000061626364001300000010780001000000107900010000000000" - }, - { - "description": "field length too short (less than minimum size)", - "bson": "160000000F61000D0000000100000000050000000000" - }, - { - "description": "field length too short (truncates scope)", - "bson": "280000000F61001F0000000500000061626364001300000010780001000000107900010000000000" - }, - { - "description": "field length too long (clips outer doc)", - "bson": "280000000F6100210000000500000061626364001300000010780001000000107900010000000000" - }, - { - "description": "field length too long (longer than outer doc)", - "bson": "280000000F6100FF0000000500000061626364001300000010780001000000107900010000000000" - }, - { - "description": "bad code string: length too short", - "bson": "280000000F6100200000000400000061626364001300000010780001000000107900010000000000" - }, - { - "description": "bad code string: length too long (clips scope)", - "bson": "280000000F6100200000000600000061626364001300000010780001000000107900010000000000" - }, - { - "description": "bad code string: negative length", - "bson": "280000000F610020000000FFFFFFFF61626364001300000010780001000000107900010000000000" - }, - { - "description": "bad code string: length longer than field", - "bson": "280000000F610020000000FF00000061626364001300000010780001000000107900010000000000" - }, - { - "description": "bad scope doc (field has bad string length)", - "bson": "1C0000000F001500000001000000000C000000020000000000000000" - } - ] -} diff --git a/testdata/bson-corpus/datetime.json b/testdata/bson-corpus/datetime.json deleted file mode 100644 index f857afdc36..0000000000 --- a/testdata/bson-corpus/datetime.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "description": "DateTime", - "bson_type": "0x09", - "test_key": "a", - "valid": [ - { - "description": "epoch", - "canonical_bson": "10000000096100000000000000000000", - "relaxed_extjson": "{\"a\" : {\"$date\" : \"1970-01-01T00:00:00Z\"}}", - "canonical_extjson": "{\"a\" : {\"$date\" : {\"$numberLong\" : \"0\"}}}" - }, - { - "description": "positive ms", - "canonical_bson": "10000000096100C5D8D6CC3B01000000", - "relaxed_extjson": "{\"a\" : {\"$date\" : \"2012-12-24T12:15:30.501Z\"}}", - "canonical_extjson": "{\"a\" : {\"$date\" : {\"$numberLong\" : \"1356351330501\"}}}" - }, - { - "description": "negative", - "canonical_bson": "10000000096100C33CE7B9BDFFFFFF00", - "relaxed_extjson": "{\"a\" : {\"$date\" : {\"$numberLong\" : \"-284643869501\"}}}", - "canonical_extjson": "{\"a\" : {\"$date\" : {\"$numberLong\" : \"-284643869501\"}}}" - }, - { - "description" : "Y10K", - "canonical_bson" : "1000000009610000DC1FD277E6000000", - "canonical_extjson" : "{\"a\":{\"$date\":{\"$numberLong\":\"253402300800000\"}}}" - }, - { - "description": "leading zero ms", - "canonical_bson": "10000000096100D1D6D6CC3B01000000", - "relaxed_extjson": "{\"a\" : {\"$date\" : \"2012-12-24T12:15:30.001Z\"}}", - "canonical_extjson": "{\"a\" : {\"$date\" : {\"$numberLong\" : \"1356351330001\"}}}" - } - ], - "decodeErrors": [ - { - "description": "datetime field truncated", - "bson": "0C0000000961001234567800" - } - ] -} diff --git a/testdata/bson-corpus/dbpointer.json b/testdata/bson-corpus/dbpointer.json deleted file mode 100644 index 377e556a0a..0000000000 --- a/testdata/bson-corpus/dbpointer.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "description": "DBPointer type (deprecated)", - "bson_type": "0x0C", - "deprecated": true, - "test_key": "a", - "valid": [ - { - "description": "DBpointer", - "canonical_bson": "1A0000000C610002000000620056E1FC72E0C917E9C471416100", - "canonical_extjson": "{\"a\": {\"$dbPointer\": {\"$ref\": \"b\", \"$id\": {\"$oid\": \"56e1fc72e0c917e9c4714161\"}}}}", - "converted_bson": "2a00000003610022000000022472656600020000006200072469640056e1fc72e0c917e9c47141610000", - "converted_extjson": "{\"a\": {\"$ref\": \"b\", \"$id\": {\"$oid\": \"56e1fc72e0c917e9c4714161\"}}}" - }, - { - "description": "DBpointer with opposite key order", - "canonical_bson": "1A0000000C610002000000620056E1FC72E0C917E9C471416100", - "canonical_extjson": "{\"a\": {\"$dbPointer\": {\"$ref\": \"b\", \"$id\": {\"$oid\": \"56e1fc72e0c917e9c4714161\"}}}}", - "degenerate_extjson": "{\"a\": {\"$dbPointer\": {\"$id\": {\"$oid\": \"56e1fc72e0c917e9c4714161\"}, \"$ref\": \"b\"}}}", - "converted_bson": "2a00000003610022000000022472656600020000006200072469640056e1fc72e0c917e9c47141610000", - "converted_extjson": "{\"a\": {\"$ref\": \"b\", \"$id\": {\"$oid\": \"56e1fc72e0c917e9c4714161\"}}}" - }, - { - "description": "With two-byte UTF-8", - "canonical_bson": "1B0000000C610003000000C3A90056E1FC72E0C917E9C471416100", - "canonical_extjson": "{\"a\": {\"$dbPointer\": {\"$ref\": \"é\", \"$id\": {\"$oid\": \"56e1fc72e0c917e9c4714161\"}}}}", - "converted_bson": "2B0000000361002300000002247265660003000000C3A900072469640056E1FC72E0C917E9C47141610000", - "converted_extjson": "{\"a\": {\"$ref\": \"é\", \"$id\": {\"$oid\": \"56e1fc72e0c917e9c4714161\"}}}" - } - ], - "decodeErrors": [ - { - "description": "String with negative length", - "bson": "1A0000000C6100FFFFFFFF620056E1FC72E0C917E9C471416100" - }, - { - "description": "String with zero length", - "bson": "1A0000000C610000000000620056E1FC72E0C917E9C471416100" - }, - { - "description": "String not null terminated", - "bson": "1A0000000C610002000000626256E1FC72E0C917E9C471416100" - }, - { - "description": "short OID (less than minimum length for field)", - "bson": "160000000C61000300000061620056E1FC72E0C91700" - }, - { - "description": "short OID (greater than minimum, but truncated)", - "bson": "1A0000000C61000300000061620056E1FC72E0C917E9C4716100" - }, - { - "description": "String with bad UTF-8", - "bson": "1A0000000C610002000000E90056E1FC72E0C917E9C471416100" - } - ] -} diff --git a/testdata/bson-corpus/dbref.json b/testdata/bson-corpus/dbref.json deleted file mode 100644 index 41c0b09d0e..0000000000 --- a/testdata/bson-corpus/dbref.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "description": "Document type (DBRef sub-documents)", - "bson_type": "0x03", - "valid": [ - { - "description": "DBRef", - "canonical_bson": "37000000036462726566002b0000000224726566000b000000636f6c6c656374696f6e00072469640058921b3e6e32ab156a22b59e0000", - "canonical_extjson": "{\"dbref\": {\"$ref\": \"collection\", \"$id\": {\"$oid\": \"58921b3e6e32ab156a22b59e\"}}}" - }, - { - "description": "DBRef with database", - "canonical_bson": "4300000003646272656600370000000224726566000b000000636f6c6c656374696f6e00072469640058921b3e6e32ab156a22b59e0224646200030000006462000000", - "canonical_extjson": "{\"dbref\": {\"$ref\": \"collection\", \"$id\": {\"$oid\": \"58921b3e6e32ab156a22b59e\"}, \"$db\": \"db\"}}" - }, - { - "description": "DBRef with database and additional fields", - "canonical_bson": "48000000036462726566003c0000000224726566000b000000636f6c6c656374696f6e0010246964002a00000002246462000300000064620002666f6f0004000000626172000000", - "canonical_extjson": "{\"dbref\": {\"$ref\": \"collection\", \"$id\": {\"$numberInt\": \"42\"}, \"$db\": \"db\", \"foo\": \"bar\"}}" - }, - { - "description": "DBRef with additional fields", - "canonical_bson": "4400000003646272656600380000000224726566000b000000636f6c6c656374696f6e00072469640058921b3e6e32ab156a22b59e02666f6f0004000000626172000000", - "canonical_extjson": "{\"dbref\": {\"$ref\": \"collection\", \"$id\": {\"$oid\": \"58921b3e6e32ab156a22b59e\"}, \"foo\": \"bar\"}}" - }, - { - "description": "Document with key names similar to those of a DBRef", - "canonical_bson": "3e0000000224726566000c0000006e6f742d612d646272656600072469640058921b3e6e32ab156a22b59e022462616e616e6100050000007065656c0000", - "canonical_extjson": "{\"$ref\": \"not-a-dbref\", \"$id\": {\"$oid\": \"58921b3e6e32ab156a22b59e\"}, \"$banana\": \"peel\"}" - }, - { - "description": "DBRef with additional dollar-prefixed and dotted fields", - "canonical_bson": "48000000036462726566003c0000000224726566000b000000636f6c6c656374696f6e00072469640058921b3e6e32ab156a22b59e10612e62000100000010246300010000000000", - "canonical_extjson": "{\"dbref\": {\"$ref\": \"collection\", \"$id\": {\"$oid\": \"58921b3e6e32ab156a22b59e\"}, \"a.b\": {\"$numberInt\": \"1\"}, \"$c\": {\"$numberInt\": \"1\"}}}" - }, - { - "description": "Sub-document resembles DBRef but $id is missing", - "canonical_bson": "26000000036462726566001a0000000224726566000b000000636f6c6c656374696f6e000000", - "canonical_extjson": "{\"dbref\": {\"$ref\": \"collection\"}}" - }, - { - "description": "Sub-document resembles DBRef but $ref is not a string", - "canonical_bson": "2c000000036462726566002000000010247265660001000000072469640058921b3e6e32ab156a22b59e0000", - "canonical_extjson": "{\"dbref\": {\"$ref\": {\"$numberInt\": \"1\"}, \"$id\": {\"$oid\": \"58921b3e6e32ab156a22b59e\"}}}" - }, - { - "description": "Sub-document resembles DBRef but $db is not a string", - "canonical_bson": "4000000003646272656600340000000224726566000b000000636f6c6c656374696f6e00072469640058921b3e6e32ab156a22b59e1024646200010000000000", - "canonical_extjson": "{\"dbref\": {\"$ref\": \"collection\", \"$id\": {\"$oid\": \"58921b3e6e32ab156a22b59e\"}, \"$db\": {\"$numberInt\": \"1\"}}}" - } - ] -} diff --git a/testdata/bson-corpus/decimal128-1.json b/testdata/bson-corpus/decimal128-1.json deleted file mode 100644 index 7eefec6bf7..0000000000 --- a/testdata/bson-corpus/decimal128-1.json +++ /dev/null @@ -1,317 +0,0 @@ -{ - "description": "Decimal128", - "bson_type": "0x13", - "test_key": "d", - "valid": [ - { - "description": "Special - Canonical NaN", - "canonical_bson": "180000001364000000000000000000000000000000007C00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"NaN\"}}" - }, - { - "description": "Special - Negative NaN", - "canonical_bson": "18000000136400000000000000000000000000000000FC00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"NaN\"}}", - "lossy": true - }, - { - "description": "Special - Negative NaN", - "canonical_bson": "18000000136400000000000000000000000000000000FC00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"NaN\"}}", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-NaN\"}}", - "lossy": true - }, - { - "description": "Special - Canonical SNaN", - "canonical_bson": "180000001364000000000000000000000000000000007E00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"NaN\"}}", - "lossy": true - }, - { - "description": "Special - Negative SNaN", - "canonical_bson": "18000000136400000000000000000000000000000000FE00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"NaN\"}}", - "lossy": true - }, - { - "description": "Special - NaN with a payload", - "canonical_bson": "180000001364001200000000000000000000000000007E00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"NaN\"}}", - "lossy": true - }, - { - "description": "Special - Canonical Positive Infinity", - "canonical_bson": "180000001364000000000000000000000000000000007800", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"Infinity\"}}" - }, - { - "description": "Special - Canonical Negative Infinity", - "canonical_bson": "18000000136400000000000000000000000000000000F800", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-Infinity\"}}" - }, - { - "description": "Special - Invalid representation treated as 0", - "canonical_bson": "180000001364000000000000000000000000000000106C00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0\"}}", - "lossy": true - }, - { - "description": "Special - Invalid representation treated as -0", - "canonical_bson": "18000000136400DCBA9876543210DEADBEEF00000010EC00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0\"}}", - "lossy": true - }, - { - "description": "Special - Invalid representation treated as 0E3", - "canonical_bson": "18000000136400FFFFFFFFFFFFFFFFFFFFFFFFFFFF116C00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+3\"}}", - "lossy": true - }, - { - "description": "Regular - Adjusted Exponent Limit", - "canonical_bson": "18000000136400F2AF967ED05C82DE3297FF6FDE3CF22F00", - "canonical_extjson": "{\"d\": { \"$numberDecimal\": \"0.000001234567890123456789012345678901234\" }}" - }, - { - "description": "Regular - Smallest", - "canonical_bson": "18000000136400D204000000000000000000000000343000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.001234\"}}" - }, - { - "description": "Regular - Smallest with Trailing Zeros", - "canonical_bson": "1800000013640040EF5A07000000000000000000002A3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00123400000\"}}" - }, - { - "description": "Regular - 0.1", - "canonical_bson": "1800000013640001000000000000000000000000003E3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.1\"}}" - }, - { - "description": "Regular - 0.1234567890123456789012345678901234", - "canonical_bson": "18000000136400F2AF967ED05C82DE3297FF6FDE3CFC2F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.1234567890123456789012345678901234\"}}" - }, - { - "description": "Regular - 0", - "canonical_bson": "180000001364000000000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0\"}}" - }, - { - "description": "Regular - -0", - "canonical_bson": "18000000136400000000000000000000000000000040B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0\"}}" - }, - { - "description": "Regular - -0.0", - "canonical_bson": "1800000013640000000000000000000000000000003EB000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.0\"}}" - }, - { - "description": "Regular - 2", - "canonical_bson": "180000001364000200000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"2\"}}" - }, - { - "description": "Regular - 2.000", - "canonical_bson": "18000000136400D0070000000000000000000000003A3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"2.000\"}}" - }, - { - "description": "Regular - Largest", - "canonical_bson": "18000000136400F2AF967ED05C82DE3297FF6FDE3C403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1234567890123456789012345678901234\"}}" - }, - { - "description": "Scientific - Tiniest", - "canonical_bson": "18000000136400FFFFFFFF638E8D37C087ADBE09ED010000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"9.999999999999999999999999999999999E-6143\"}}" - }, - { - "description": "Scientific - Tiny", - "canonical_bson": "180000001364000100000000000000000000000000000000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E-6176\"}}" - }, - { - "description": "Scientific - Negative Tiny", - "canonical_bson": "180000001364000100000000000000000000000000008000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1E-6176\"}}" - }, - { - "description": "Scientific - Adjusted Exponent Limit", - "canonical_bson": "18000000136400F2AF967ED05C82DE3297FF6FDE3CF02F00", - "canonical_extjson": "{\"d\": { \"$numberDecimal\": \"1.234567890123456789012345678901234E-7\" }}" - }, - { - "description": "Scientific - Fractional", - "canonical_bson": "1800000013640064000000000000000000000000002CB000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1.00E-8\"}}" - }, - { - "description": "Scientific - 0 with Exponent", - "canonical_bson": "180000001364000000000000000000000000000000205F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+6000\"}}" - }, - { - "description": "Scientific - 0 with Negative Exponent", - "canonical_bson": "1800000013640000000000000000000000000000007A2B00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E-611\"}}" - }, - { - "description": "Scientific - No Decimal with Signed Exponent", - "canonical_bson": "180000001364000100000000000000000000000000463000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+3\"}}" - }, - { - "description": "Scientific - Trailing Zero", - "canonical_bson": "180000001364001A04000000000000000000000000423000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.050E+4\"}}" - }, - { - "description": "Scientific - With Decimal", - "canonical_bson": "180000001364006900000000000000000000000000423000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.05E+3\"}}" - }, - { - "description": "Scientific - Full", - "canonical_bson": "18000000136400FFFFFFFFFFFFFFFFFFFFFFFFFFFF403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"5192296858534827628530496329220095\"}}" - }, - { - "description": "Scientific - Large", - "canonical_bson": "18000000136400000000000A5BC138938D44C64D31FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000000000000000000000000000000E+6144\"}}" - }, - { - "description": "Scientific - Largest", - "canonical_bson": "18000000136400FFFFFFFF638E8D37C087ADBE09EDFF5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"9.999999999999999999999999999999999E+6144\"}}" - }, - { - "description": "Non-Canonical Parsing - Exponent Normalization", - "canonical_bson": "1800000013640064000000000000000000000000002CB000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-100E-10\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1.00E-8\"}}" - }, - { - "description": "Non-Canonical Parsing - Unsigned Positive Exponent", - "canonical_bson": "180000001364000100000000000000000000000000463000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+3\"}}" - }, - { - "description": "Non-Canonical Parsing - Lowercase Exponent Identifier", - "canonical_bson": "180000001364000100000000000000000000000000463000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1e+3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+3\"}}" - }, - { - "description": "Non-Canonical Parsing - Long Significand with Exponent", - "canonical_bson": "1800000013640079D9E0F9763ADA429D0200000000583000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"12345689012345789012345E+12\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.2345689012345789012345E+34\"}}" - }, - { - "description": "Non-Canonical Parsing - Positive Sign", - "canonical_bson": "18000000136400F2AF967ED05C82DE3297FF6FDE3C403000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"+1234567890123456789012345678901234\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1234567890123456789012345678901234\"}}" - }, - { - "description": "Non-Canonical Parsing - Long Decimal String", - "canonical_bson": "180000001364000100000000000000000000000000722800", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \".000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E-999\"}}" - }, - { - "description": "Non-Canonical Parsing - nan", - "canonical_bson": "180000001364000000000000000000000000000000007C00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"nan\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"NaN\"}}" - }, - { - "description": "Non-Canonical Parsing - nAn", - "canonical_bson": "180000001364000000000000000000000000000000007C00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"nAn\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"NaN\"}}" - }, - { - "description": "Non-Canonical Parsing - +infinity", - "canonical_bson": "180000001364000000000000000000000000000000007800", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"+infinity\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"Infinity\"}}" - }, - { - "description": "Non-Canonical Parsing - infinity", - "canonical_bson": "180000001364000000000000000000000000000000007800", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"infinity\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"Infinity\"}}" - }, - { - "description": "Non-Canonical Parsing - infiniTY", - "canonical_bson": "180000001364000000000000000000000000000000007800", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"infiniTY\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"Infinity\"}}" - }, - { - "description": "Non-Canonical Parsing - inf", - "canonical_bson": "180000001364000000000000000000000000000000007800", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"inf\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"Infinity\"}}" - }, - { - "description": "Non-Canonical Parsing - inF", - "canonical_bson": "180000001364000000000000000000000000000000007800", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"inF\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"Infinity\"}}" - }, - { - "description": "Non-Canonical Parsing - -infinity", - "canonical_bson": "18000000136400000000000000000000000000000000F800", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-infinity\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-Infinity\"}}" - }, - { - "description": "Non-Canonical Parsing - -infiniTy", - "canonical_bson": "18000000136400000000000000000000000000000000F800", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-infiniTy\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-Infinity\"}}" - }, - { - "description": "Non-Canonical Parsing - -Inf", - "canonical_bson": "18000000136400000000000000000000000000000000F800", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-Infinity\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-Infinity\"}}" - }, - { - "description": "Non-Canonical Parsing - -inf", - "canonical_bson": "18000000136400000000000000000000000000000000F800", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-inf\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-Infinity\"}}" - }, - { - "description": "Non-Canonical Parsing - -inF", - "canonical_bson": "18000000136400000000000000000000000000000000F800", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-inF\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-Infinity\"}}" - }, - { - "description": "Rounded Subnormal number", - "canonical_bson": "180000001364000100000000000000000000000000000000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10E-6177\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E-6176\"}}" - }, - { - "description": "Clamped", - "canonical_bson": "180000001364000a00000000000000000000000000fe5f00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E6112\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E+6112\"}}" - }, - { - "description": "Exact rounding", - "canonical_bson": "18000000136400000000000a5bc138938d44c64d31cc3700", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000000000000000000000000000000E+999\"}}" - } - ] -} diff --git a/testdata/bson-corpus/decimal128-2.json b/testdata/bson-corpus/decimal128-2.json deleted file mode 100644 index 316d3b0e61..0000000000 --- a/testdata/bson-corpus/decimal128-2.json +++ /dev/null @@ -1,793 +0,0 @@ -{ - "description": "Decimal128", - "bson_type": "0x13", - "test_key": "d", - "valid": [ - { - "description": "[decq021] Normality", - "canonical_bson": "18000000136400F2AF967ED05C82DE3297FF6FDE3C40B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1234567890123456789012345678901234\"}}" - }, - { - "description": "[decq823] values around [u]int32 edges (zeros done earlier)", - "canonical_bson": "18000000136400010000800000000000000000000040B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-2147483649\"}}" - }, - { - "description": "[decq822] values around [u]int32 edges (zeros done earlier)", - "canonical_bson": "18000000136400000000800000000000000000000040B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-2147483648\"}}" - }, - { - "description": "[decq821] values around [u]int32 edges (zeros done earlier)", - "canonical_bson": "18000000136400FFFFFF7F0000000000000000000040B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-2147483647\"}}" - }, - { - "description": "[decq820] values around [u]int32 edges (zeros done earlier)", - "canonical_bson": "18000000136400FEFFFF7F0000000000000000000040B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-2147483646\"}}" - }, - { - "description": "[decq152] fold-downs (more below)", - "canonical_bson": "18000000136400393000000000000000000000000040B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-12345\"}}" - }, - { - "description": "[decq154] fold-downs (more below)", - "canonical_bson": "18000000136400D20400000000000000000000000040B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1234\"}}" - }, - { - "description": "[decq006] derivative canonical plain strings", - "canonical_bson": "18000000136400EE0200000000000000000000000040B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-750\"}}" - }, - { - "description": "[decq164] fold-downs (more below)", - "canonical_bson": "1800000013640039300000000000000000000000003CB000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-123.45\"}}" - }, - { - "description": "[decq156] fold-downs (more below)", - "canonical_bson": "180000001364007B0000000000000000000000000040B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-123\"}}" - }, - { - "description": "[decq008] derivative canonical plain strings", - "canonical_bson": "18000000136400EE020000000000000000000000003EB000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-75.0\"}}" - }, - { - "description": "[decq158] fold-downs (more below)", - "canonical_bson": "180000001364000C0000000000000000000000000040B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-12\"}}" - }, - { - "description": "[decq122] Nmax and similar", - "canonical_bson": "18000000136400FFFFFFFF638E8D37C087ADBE09EDFFDF00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-9.999999999999999999999999999999999E+6144\"}}" - }, - { - "description": "[decq002] (mostly derived from the Strawman 4 document and examples)", - "canonical_bson": "18000000136400EE020000000000000000000000003CB000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-7.50\"}}" - }, - { - "description": "[decq004] derivative canonical plain strings", - "canonical_bson": "18000000136400EE0200000000000000000000000042B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-7.50E+3\"}}" - }, - { - "description": "[decq018] derivative canonical plain strings", - "canonical_bson": "18000000136400EE020000000000000000000000002EB000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-7.50E-7\"}}" - }, - { - "description": "[decq125] Nmax and similar", - "canonical_bson": "18000000136400F2AF967ED05C82DE3297FF6FDE3CFEDF00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1.234567890123456789012345678901234E+6144\"}}" - }, - { - "description": "[decq131] fold-downs (more below)", - "canonical_bson": "18000000136400000000807F1BCF85B27059C8A43CFEDF00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1.230000000000000000000000000000000E+6144\"}}" - }, - { - "description": "[decq162] fold-downs (more below)", - "canonical_bson": "180000001364007B000000000000000000000000003CB000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1.23\"}}" - }, - { - "description": "[decq176] Nmin and below", - "canonical_bson": "18000000136400010000000A5BC138938D44C64D31008000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1.000000000000000000000000000000001E-6143\"}}" - }, - { - "description": "[decq174] Nmin and below", - "canonical_bson": "18000000136400000000000A5BC138938D44C64D31008000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1.000000000000000000000000000000000E-6143\"}}" - }, - { - "description": "[decq133] fold-downs (more below)", - "canonical_bson": "18000000136400000000000A5BC138938D44C64D31FEDF00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1.000000000000000000000000000000000E+6144\"}}" - }, - { - "description": "[decq160] fold-downs (more below)", - "canonical_bson": "18000000136400010000000000000000000000000040B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1\"}}" - }, - { - "description": "[decq172] Nmin and below", - "canonical_bson": "180000001364000100000000000000000000000000428000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1E-6143\"}}" - }, - { - "description": "[decq010] derivative canonical plain strings", - "canonical_bson": "18000000136400EE020000000000000000000000003AB000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.750\"}}" - }, - { - "description": "[decq012] derivative canonical plain strings", - "canonical_bson": "18000000136400EE0200000000000000000000000038B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.0750\"}}" - }, - { - "description": "[decq014] derivative canonical plain strings", - "canonical_bson": "18000000136400EE0200000000000000000000000034B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.000750\"}}" - }, - { - "description": "[decq016] derivative canonical plain strings", - "canonical_bson": "18000000136400EE0200000000000000000000000030B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.00000750\"}}" - }, - { - "description": "[decq404] zeros", - "canonical_bson": "180000001364000000000000000000000000000000000000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E-6176\"}}" - }, - { - "description": "[decq424] negative zeros", - "canonical_bson": "180000001364000000000000000000000000000000008000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0E-6176\"}}" - }, - { - "description": "[decq407] zeros", - "canonical_bson": "1800000013640000000000000000000000000000003C3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00\"}}" - }, - { - "description": "[decq427] negative zeros", - "canonical_bson": "1800000013640000000000000000000000000000003CB000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.00\"}}" - }, - { - "description": "[decq409] zeros", - "canonical_bson": "180000001364000000000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0\"}}" - }, - { - "description": "[decq428] negative zeros", - "canonical_bson": "18000000136400000000000000000000000000000040B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0\"}}" - }, - { - "description": "[decq700] Selected DPD codes", - "canonical_bson": "180000001364000000000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0\"}}" - }, - { - "description": "[decq406] zeros", - "canonical_bson": "1800000013640000000000000000000000000000003C3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00\"}}" - }, - { - "description": "[decq426] negative zeros", - "canonical_bson": "1800000013640000000000000000000000000000003CB000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.00\"}}" - }, - { - "description": "[decq410] zeros", - "canonical_bson": "180000001364000000000000000000000000000000463000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+3\"}}" - }, - { - "description": "[decq431] negative zeros", - "canonical_bson": "18000000136400000000000000000000000000000046B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0E+3\"}}" - }, - { - "description": "[decq419] clamped zeros...", - "canonical_bson": "180000001364000000000000000000000000000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+6111\"}}" - }, - { - "description": "[decq432] negative zeros", - "canonical_bson": "180000001364000000000000000000000000000000FEDF00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0E+6111\"}}" - }, - { - "description": "[decq405] zeros", - "canonical_bson": "180000001364000000000000000000000000000000000000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E-6176\"}}" - }, - { - "description": "[decq425] negative zeros", - "canonical_bson": "180000001364000000000000000000000000000000008000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0E-6176\"}}" - }, - { - "description": "[decq508] Specials", - "canonical_bson": "180000001364000000000000000000000000000000007800", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"Infinity\"}}" - }, - { - "description": "[decq528] Specials", - "canonical_bson": "18000000136400000000000000000000000000000000F800", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-Infinity\"}}" - }, - { - "description": "[decq541] Specials", - "canonical_bson": "180000001364000000000000000000000000000000007C00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"NaN\"}}" - }, - { - "description": "[decq074] Nmin and below", - "canonical_bson": "18000000136400000000000A5BC138938D44C64D31000000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000000000000000000000000000000E-6143\"}}" - }, - { - "description": "[decq602] fold-down full sequence", - "canonical_bson": "18000000136400000000000A5BC138938D44C64D31FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000000000000000000000000000000E+6144\"}}" - }, - { - "description": "[decq604] fold-down full sequence", - "canonical_bson": "180000001364000000000081EFAC855B416D2DEE04FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00000000000000000000000000000000E+6143\"}}" - }, - { - "description": "[decq606] fold-down full sequence", - "canonical_bson": "1800000013640000000080264B91C02220BE377E00FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0000000000000000000000000000000E+6142\"}}" - }, - { - "description": "[decq608] fold-down full sequence", - "canonical_bson": "1800000013640000000040EAED7446D09C2C9F0C00FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000000000000000000000000000E+6141\"}}" - }, - { - "description": "[decq610] fold-down full sequence", - "canonical_bson": "18000000136400000000A0CA17726DAE0F1E430100FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00000000000000000000000000000E+6140\"}}" - }, - { - "description": "[decq612] fold-down full sequence", - "canonical_bson": "18000000136400000000106102253E5ECE4F200000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0000000000000000000000000000E+6139\"}}" - }, - { - "description": "[decq614] fold-down full sequence", - "canonical_bson": "18000000136400000000E83C80D09F3C2E3B030000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000000000000000000000000E+6138\"}}" - }, - { - "description": "[decq616] fold-down full sequence", - "canonical_bson": "18000000136400000000E4D20CC8DCD2B752000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00000000000000000000000000E+6137\"}}" - }, - { - "description": "[decq618] fold-down full sequence", - "canonical_bson": "180000001364000000004A48011416954508000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0000000000000000000000000E+6136\"}}" - }, - { - "description": "[decq620] fold-down full sequence", - "canonical_bson": "18000000136400000000A1EDCCCE1BC2D300000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000000000000000000000E+6135\"}}" - }, - { - "description": "[decq622] fold-down full sequence", - "canonical_bson": "18000000136400000080F64AE1C7022D1500000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00000000000000000000000E+6134\"}}" - }, - { - "description": "[decq624] fold-down full sequence", - "canonical_bson": "18000000136400000040B2BAC9E0191E0200000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0000000000000000000000E+6133\"}}" - }, - { - "description": "[decq626] fold-down full sequence", - "canonical_bson": "180000001364000000A0DEC5ADC935360000000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000000000000000000E+6132\"}}" - }, - { - "description": "[decq628] fold-down full sequence", - "canonical_bson": "18000000136400000010632D5EC76B050000000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00000000000000000000E+6131\"}}" - }, - { - "description": "[decq630] fold-down full sequence", - "canonical_bson": "180000001364000000E8890423C78A000000000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0000000000000000000E+6130\"}}" - }, - { - "description": "[decq632] fold-down full sequence", - "canonical_bson": "18000000136400000064A7B3B6E00D000000000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000000000000000E+6129\"}}" - }, - { - "description": "[decq634] fold-down full sequence", - "canonical_bson": "1800000013640000008A5D78456301000000000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00000000000000000E+6128\"}}" - }, - { - "description": "[decq636] fold-down full sequence", - "canonical_bson": "180000001364000000C16FF2862300000000000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0000000000000000E+6127\"}}" - }, - { - "description": "[decq638] fold-down full sequence", - "canonical_bson": "180000001364000080C6A47E8D0300000000000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000000000000E+6126\"}}" - }, - { - "description": "[decq640] fold-down full sequence", - "canonical_bson": "1800000013640000407A10F35A0000000000000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00000000000000E+6125\"}}" - }, - { - "description": "[decq642] fold-down full sequence", - "canonical_bson": "1800000013640000A0724E18090000000000000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0000000000000E+6124\"}}" - }, - { - "description": "[decq644] fold-down full sequence", - "canonical_bson": "180000001364000010A5D4E8000000000000000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000000000E+6123\"}}" - }, - { - "description": "[decq646] fold-down full sequence", - "canonical_bson": "1800000013640000E8764817000000000000000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00000000000E+6122\"}}" - }, - { - "description": "[decq648] fold-down full sequence", - "canonical_bson": "1800000013640000E40B5402000000000000000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0000000000E+6121\"}}" - }, - { - "description": "[decq650] fold-down full sequence", - "canonical_bson": "1800000013640000CA9A3B00000000000000000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000000E+6120\"}}" - }, - { - "description": "[decq652] fold-down full sequence", - "canonical_bson": "1800000013640000E1F50500000000000000000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00000000E+6119\"}}" - }, - { - "description": "[decq654] fold-down full sequence", - "canonical_bson": "180000001364008096980000000000000000000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0000000E+6118\"}}" - }, - { - "description": "[decq656] fold-down full sequence", - "canonical_bson": "1800000013640040420F0000000000000000000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000E+6117\"}}" - }, - { - "description": "[decq658] fold-down full sequence", - "canonical_bson": "18000000136400A086010000000000000000000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00000E+6116\"}}" - }, - { - "description": "[decq660] fold-down full sequence", - "canonical_bson": "180000001364001027000000000000000000000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0000E+6115\"}}" - }, - { - "description": "[decq662] fold-down full sequence", - "canonical_bson": "18000000136400E803000000000000000000000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000E+6114\"}}" - }, - { - "description": "[decq664] fold-down full sequence", - "canonical_bson": "180000001364006400000000000000000000000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00E+6113\"}}" - }, - { - "description": "[decq666] fold-down full sequence", - "canonical_bson": "180000001364000A00000000000000000000000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E+6112\"}}" - }, - { - "description": "[decq060] fold-downs (more below)", - "canonical_bson": "180000001364000100000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1\"}}" - }, - { - "description": "[decq670] fold-down full sequence", - "canonical_bson": "180000001364000100000000000000000000000000FC5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6110\"}}" - }, - { - "description": "[decq668] fold-down full sequence", - "canonical_bson": "180000001364000100000000000000000000000000FE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6111\"}}" - }, - { - "description": "[decq072] Nmin and below", - "canonical_bson": "180000001364000100000000000000000000000000420000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E-6143\"}}" - }, - { - "description": "[decq076] Nmin and below", - "canonical_bson": "18000000136400010000000A5BC138938D44C64D31000000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000000000000000000000000000001E-6143\"}}" - }, - { - "description": "[decq036] fold-downs (more below)", - "canonical_bson": "18000000136400000000807F1BCF85B27059C8A43CFE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.230000000000000000000000000000000E+6144\"}}" - }, - { - "description": "[decq062] fold-downs (more below)", - "canonical_bson": "180000001364007B000000000000000000000000003C3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.23\"}}" - }, - { - "description": "[decq034] Nmax and similar", - "canonical_bson": "18000000136400F2AF967ED05C82DE3297FF6FDE3CFE5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.234567890123456789012345678901234E+6144\"}}" - }, - { - "description": "[decq441] exponent lengths", - "canonical_bson": "180000001364000700000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7\"}}" - }, - { - "description": "[decq449] exponent lengths", - "canonical_bson": "1800000013640007000000000000000000000000001E5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E+5999\"}}" - }, - { - "description": "[decq447] exponent lengths", - "canonical_bson": "1800000013640007000000000000000000000000000E3800", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E+999\"}}" - }, - { - "description": "[decq445] exponent lengths", - "canonical_bson": "180000001364000700000000000000000000000000063100", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E+99\"}}" - }, - { - "description": "[decq443] exponent lengths", - "canonical_bson": "180000001364000700000000000000000000000000523000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E+9\"}}" - }, - { - "description": "[decq842] VG testcase", - "canonical_bson": "180000001364000000FED83F4E7C9FE4E269E38A5BCD1700", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7.049000000000010795488000000000000E-3097\"}}" - }, - { - "description": "[decq841] VG testcase", - "canonical_bson": "180000001364000000203B9DB5056F000000000000002400", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"8.000000000000000000E-1550\"}}" - }, - { - "description": "[decq840] VG testcase", - "canonical_bson": "180000001364003C17258419D710C42F0000000000002400", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"8.81125000000001349436E-1548\"}}" - }, - { - "description": "[decq701] Selected DPD codes", - "canonical_bson": "180000001364000900000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"9\"}}" - }, - { - "description": "[decq032] Nmax and similar", - "canonical_bson": "18000000136400FFFFFFFF638E8D37C087ADBE09EDFF5F00", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"9.999999999999999999999999999999999E+6144\"}}" - }, - { - "description": "[decq702] Selected DPD codes", - "canonical_bson": "180000001364000A00000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"10\"}}" - }, - { - "description": "[decq057] fold-downs (more below)", - "canonical_bson": "180000001364000C00000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"12\"}}" - }, - { - "description": "[decq703] Selected DPD codes", - "canonical_bson": "180000001364001300000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"19\"}}" - }, - { - "description": "[decq704] Selected DPD codes", - "canonical_bson": "180000001364001400000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"20\"}}" - }, - { - "description": "[decq705] Selected DPD codes", - "canonical_bson": "180000001364001D00000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"29\"}}" - }, - { - "description": "[decq706] Selected DPD codes", - "canonical_bson": "180000001364001E00000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"30\"}}" - }, - { - "description": "[decq707] Selected DPD codes", - "canonical_bson": "180000001364002700000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"39\"}}" - }, - { - "description": "[decq708] Selected DPD codes", - "canonical_bson": "180000001364002800000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"40\"}}" - }, - { - "description": "[decq709] Selected DPD codes", - "canonical_bson": "180000001364003100000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"49\"}}" - }, - { - "description": "[decq710] Selected DPD codes", - "canonical_bson": "180000001364003200000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"50\"}}" - }, - { - "description": "[decq711] Selected DPD codes", - "canonical_bson": "180000001364003B00000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"59\"}}" - }, - { - "description": "[decq712] Selected DPD codes", - "canonical_bson": "180000001364003C00000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"60\"}}" - }, - { - "description": "[decq713] Selected DPD codes", - "canonical_bson": "180000001364004500000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"69\"}}" - }, - { - "description": "[decq714] Selected DPD codes", - "canonical_bson": "180000001364004600000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"70\"}}" - }, - { - "description": "[decq715] Selected DPD codes", - "canonical_bson": "180000001364004700000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"71\"}}" - }, - { - "description": "[decq716] Selected DPD codes", - "canonical_bson": "180000001364004800000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"72\"}}" - }, - { - "description": "[decq717] Selected DPD codes", - "canonical_bson": "180000001364004900000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"73\"}}" - }, - { - "description": "[decq718] Selected DPD codes", - "canonical_bson": "180000001364004A00000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"74\"}}" - }, - { - "description": "[decq719] Selected DPD codes", - "canonical_bson": "180000001364004B00000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"75\"}}" - }, - { - "description": "[decq720] Selected DPD codes", - "canonical_bson": "180000001364004C00000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"76\"}}" - }, - { - "description": "[decq721] Selected DPD codes", - "canonical_bson": "180000001364004D00000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"77\"}}" - }, - { - "description": "[decq722] Selected DPD codes", - "canonical_bson": "180000001364004E00000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"78\"}}" - }, - { - "description": "[decq723] Selected DPD codes", - "canonical_bson": "180000001364004F00000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"79\"}}" - }, - { - "description": "[decq056] fold-downs (more below)", - "canonical_bson": "180000001364007B00000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"123\"}}" - }, - { - "description": "[decq064] fold-downs (more below)", - "canonical_bson": "1800000013640039300000000000000000000000003C3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"123.45\"}}" - }, - { - "description": "[decq732] Selected DPD codes", - "canonical_bson": "180000001364000802000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"520\"}}" - }, - { - "description": "[decq733] Selected DPD codes", - "canonical_bson": "180000001364000902000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"521\"}}" - }, - { - "description": "[decq740] DPD: one of each of the huffman groups", - "canonical_bson": "180000001364000903000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"777\"}}" - }, - { - "description": "[decq741] DPD: one of each of the huffman groups", - "canonical_bson": "180000001364000A03000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"778\"}}" - }, - { - "description": "[decq742] DPD: one of each of the huffman groups", - "canonical_bson": "180000001364001303000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"787\"}}" - }, - { - "description": "[decq746] DPD: one of each of the huffman groups", - "canonical_bson": "180000001364001F03000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"799\"}}" - }, - { - "description": "[decq743] DPD: one of each of the huffman groups", - "canonical_bson": "180000001364006D03000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"877\"}}" - }, - { - "description": "[decq753] DPD all-highs cases (includes the 24 redundant codes)", - "canonical_bson": "180000001364007803000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"888\"}}" - }, - { - "description": "[decq754] DPD all-highs cases (includes the 24 redundant codes)", - "canonical_bson": "180000001364007903000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"889\"}}" - }, - { - "description": "[decq760] DPD all-highs cases (includes the 24 redundant codes)", - "canonical_bson": "180000001364008203000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"898\"}}" - }, - { - "description": "[decq764] DPD all-highs cases (includes the 24 redundant codes)", - "canonical_bson": "180000001364008303000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"899\"}}" - }, - { - "description": "[decq745] DPD: one of each of the huffman groups", - "canonical_bson": "18000000136400D303000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"979\"}}" - }, - { - "description": "[decq770] DPD all-highs cases (includes the 24 redundant codes)", - "canonical_bson": "18000000136400DC03000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"988\"}}" - }, - { - "description": "[decq774] DPD all-highs cases (includes the 24 redundant codes)", - "canonical_bson": "18000000136400DD03000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"989\"}}" - }, - { - "description": "[decq730] Selected DPD codes", - "canonical_bson": "18000000136400E203000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"994\"}}" - }, - { - "description": "[decq731] Selected DPD codes", - "canonical_bson": "18000000136400E303000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"995\"}}" - }, - { - "description": "[decq744] DPD: one of each of the huffman groups", - "canonical_bson": "18000000136400E503000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"997\"}}" - }, - { - "description": "[decq780] DPD all-highs cases (includes the 24 redundant codes)", - "canonical_bson": "18000000136400E603000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"998\"}}" - }, - { - "description": "[decq787] DPD all-highs cases (includes the 24 redundant codes)", - "canonical_bson": "18000000136400E703000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"999\"}}" - }, - { - "description": "[decq053] fold-downs (more below)", - "canonical_bson": "18000000136400D204000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1234\"}}" - }, - { - "description": "[decq052] fold-downs (more below)", - "canonical_bson": "180000001364003930000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"12345\"}}" - }, - { - "description": "[decq792] Miscellaneous (testers' queries, etc.)", - "canonical_bson": "180000001364003075000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"30000\"}}" - }, - { - "description": "[decq793] Miscellaneous (testers' queries, etc.)", - "canonical_bson": "1800000013640090940D0000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"890000\"}}" - }, - { - "description": "[decq824] values around [u]int32 edges (zeros done earlier)", - "canonical_bson": "18000000136400FEFFFF7F00000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"2147483646\"}}" - }, - { - "description": "[decq825] values around [u]int32 edges (zeros done earlier)", - "canonical_bson": "18000000136400FFFFFF7F00000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"2147483647\"}}" - }, - { - "description": "[decq826] values around [u]int32 edges (zeros done earlier)", - "canonical_bson": "180000001364000000008000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"2147483648\"}}" - }, - { - "description": "[decq827] values around [u]int32 edges (zeros done earlier)", - "canonical_bson": "180000001364000100008000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"2147483649\"}}" - }, - { - "description": "[decq828] values around [u]int32 edges (zeros done earlier)", - "canonical_bson": "18000000136400FEFFFFFF00000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"4294967294\"}}" - }, - { - "description": "[decq829] values around [u]int32 edges (zeros done earlier)", - "canonical_bson": "18000000136400FFFFFFFF00000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"4294967295\"}}" - }, - { - "description": "[decq830] values around [u]int32 edges (zeros done earlier)", - "canonical_bson": "180000001364000000000001000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"4294967296\"}}" - }, - { - "description": "[decq831] values around [u]int32 edges (zeros done earlier)", - "canonical_bson": "180000001364000100000001000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"4294967297\"}}" - }, - { - "description": "[decq022] Normality", - "canonical_bson": "18000000136400C7711CC7B548F377DC80A131C836403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1111111111111111111111111111111111\"}}" - }, - { - "description": "[decq020] Normality", - "canonical_bson": "18000000136400F2AF967ED05C82DE3297FF6FDE3C403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1234567890123456789012345678901234\"}}" - }, - { - "description": "[decq550] Specials", - "canonical_bson": "18000000136400FFFFFFFF638E8D37C087ADBE09ED413000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"9999999999999999999999999999999999\"}}" - } - ] -} - diff --git a/testdata/bson-corpus/decimal128-3.json b/testdata/bson-corpus/decimal128-3.json deleted file mode 100644 index 9b015343ce..0000000000 --- a/testdata/bson-corpus/decimal128-3.json +++ /dev/null @@ -1,1771 +0,0 @@ -{ - "description": "Decimal128", - "bson_type": "0x13", - "test_key": "d", - "valid": [ - { - "description": "[basx066] strings without E cannot generate E in result", - "canonical_bson": "18000000136400185C0ACE0000000000000000000038B000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-00345678.5432\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-345678.5432\"}}" - }, - { - "description": "[basx065] strings without E cannot generate E in result", - "canonical_bson": "18000000136400185C0ACE0000000000000000000038B000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0345678.5432\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-345678.5432\"}}" - }, - { - "description": "[basx064] strings without E cannot generate E in result", - "canonical_bson": "18000000136400185C0ACE0000000000000000000038B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-345678.5432\"}}" - }, - { - "description": "[basx041] strings without E cannot generate E in result", - "canonical_bson": "180000001364004C0000000000000000000000000040B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-76\"}}" - }, - { - "description": "[basx027] conform to rules and exponent will be in permitted range).", - "canonical_bson": "180000001364000F270000000000000000000000003AB000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-9.999\"}}" - }, - { - "description": "[basx026] conform to rules and exponent will be in permitted range).", - "canonical_bson": "180000001364009F230000000000000000000000003AB000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-9.119\"}}" - }, - { - "description": "[basx025] conform to rules and exponent will be in permitted range).", - "canonical_bson": "180000001364008F030000000000000000000000003CB000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-9.11\"}}" - }, - { - "description": "[basx024] conform to rules and exponent will be in permitted range).", - "canonical_bson": "180000001364005B000000000000000000000000003EB000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-9.1\"}}" - }, - { - "description": "[dqbsr531] negatives (Rounded)", - "canonical_bson": "1800000013640099761CC7B548F377DC80A131C836FEAF00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1.1111111111111111111111111111123450\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1.111111111111111111111111111112345\"}}" - }, - { - "description": "[basx022] conform to rules and exponent will be in permitted range).", - "canonical_bson": "180000001364000A000000000000000000000000003EB000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1.0\"}}" - }, - { - "description": "[basx021] conform to rules and exponent will be in permitted range).", - "canonical_bson": "18000000136400010000000000000000000000000040B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1\"}}" - }, - { - "description": "[basx601] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000002E3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.000000000\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E-9\"}}" - }, - { - "description": "[basx622] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000002EB000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.000000000\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0E-9\"}}" - }, - { - "description": "[basx602] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000303000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00000000\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E-8\"}}" - }, - { - "description": "[basx621] Zeros", - "canonical_bson": "18000000136400000000000000000000000000000030B000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.00000000\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0E-8\"}}" - }, - { - "description": "[basx603] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000323000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0000000\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E-7\"}}" - }, - { - "description": "[basx620] Zeros", - "canonical_bson": "18000000136400000000000000000000000000000032B000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.0000000\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0E-7\"}}" - }, - { - "description": "[basx604] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000343000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.000000\"}}" - }, - { - "description": "[basx619] Zeros", - "canonical_bson": "18000000136400000000000000000000000000000034B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.000000\"}}" - }, - { - "description": "[basx605] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000363000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00000\"}}" - }, - { - "description": "[basx618] Zeros", - "canonical_bson": "18000000136400000000000000000000000000000036B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.00000\"}}" - }, - { - "description": "[basx680] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000403000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"000000.\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0\"}}" - }, - { - "description": "[basx606] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000383000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0000\"}}" - }, - { - "description": "[basx617] Zeros", - "canonical_bson": "18000000136400000000000000000000000000000038B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.0000\"}}" - }, - { - "description": "[basx681] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000403000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"00000.\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0\"}}" - }, - { - "description": "[basx686] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000403000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"+00000.\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0\"}}" - }, - { - "description": "[basx687] Zeros", - "canonical_bson": "18000000136400000000000000000000000000000040B000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-00000.\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0\"}}" - }, - { - "description": "[basx019] conform to rules and exponent will be in permitted range).", - "canonical_bson": "1800000013640000000000000000000000000000003CB000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-00.00\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.00\"}}" - }, - { - "description": "[basx607] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000003A3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.000\"}}" - }, - { - "description": "[basx616] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000003AB000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.000\"}}" - }, - { - "description": "[basx682] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000403000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0000.\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0\"}}" - }, - { - "description": "[basx155] Numbers with E", - "canonical_bson": "1800000013640000000000000000000000000000003A3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.000e+0\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.000\"}}" - }, - { - "description": "[basx130] Numbers with E", - "canonical_bson": "180000001364000000000000000000000000000000383000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.000E-1\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0000\"}}" - }, - { - "description": "[basx290] some more negative zeros [systematic tests below]", - "canonical_bson": "18000000136400000000000000000000000000000038B000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.000E-1\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.0000\"}}" - }, - { - "description": "[basx131] Numbers with E", - "canonical_bson": "180000001364000000000000000000000000000000363000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.000E-2\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00000\"}}" - }, - { - "description": "[basx291] some more negative zeros [systematic tests below]", - "canonical_bson": "18000000136400000000000000000000000000000036B000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.000E-2\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.00000\"}}" - }, - { - "description": "[basx132] Numbers with E", - "canonical_bson": "180000001364000000000000000000000000000000343000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.000E-3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.000000\"}}" - }, - { - "description": "[basx292] some more negative zeros [systematic tests below]", - "canonical_bson": "18000000136400000000000000000000000000000034B000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.000E-3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.000000\"}}" - }, - { - "description": "[basx133] Numbers with E", - "canonical_bson": "180000001364000000000000000000000000000000323000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.000E-4\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E-7\"}}" - }, - { - "description": "[basx293] some more negative zeros [systematic tests below]", - "canonical_bson": "18000000136400000000000000000000000000000032B000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.000E-4\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0E-7\"}}" - }, - { - "description": "[basx608] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000003C3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00\"}}" - }, - { - "description": "[basx615] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000003CB000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.00\"}}" - }, - { - "description": "[basx683] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000403000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"000.\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0\"}}" - }, - { - "description": "[basx630] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000003C3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00E+0\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00\"}}" - }, - { - "description": "[basx670] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000003C3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00E-0\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00\"}}" - }, - { - "description": "[basx631] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000003E3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00E+1\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0\"}}" - }, - { - "description": "[basx671] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000003A3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00E-1\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.000\"}}" - }, - { - "description": "[basx134] Numbers with E", - "canonical_bson": "180000001364000000000000000000000000000000383000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00E-2\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0000\"}}" - }, - { - "description": "[basx294] some more negative zeros [systematic tests below]", - "canonical_bson": "18000000136400000000000000000000000000000038B000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.00E-2\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.0000\"}}" - }, - { - "description": "[basx632] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000403000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00E+2\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0\"}}" - }, - { - "description": "[basx672] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000383000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00E-2\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0000\"}}" - }, - { - "description": "[basx135] Numbers with E", - "canonical_bson": "180000001364000000000000000000000000000000363000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00E-3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00000\"}}" - }, - { - "description": "[basx295] some more negative zeros [systematic tests below]", - "canonical_bson": "18000000136400000000000000000000000000000036B000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.00E-3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.00000\"}}" - }, - { - "description": "[basx633] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000423000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00E+3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+1\"}}" - }, - { - "description": "[basx673] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000363000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00E-3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00000\"}}" - }, - { - "description": "[basx136] Numbers with E", - "canonical_bson": "180000001364000000000000000000000000000000343000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00E-4\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.000000\"}}" - }, - { - "description": "[basx674] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000343000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00E-4\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.000000\"}}" - }, - { - "description": "[basx634] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000443000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00E+4\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+2\"}}" - }, - { - "description": "[basx137] Numbers with E", - "canonical_bson": "180000001364000000000000000000000000000000323000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00E-5\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E-7\"}}" - }, - { - "description": "[basx635] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000463000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00E+5\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+3\"}}" - }, - { - "description": "[basx675] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000323000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00E-5\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E-7\"}}" - }, - { - "description": "[basx636] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000483000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00E+6\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+4\"}}" - }, - { - "description": "[basx676] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000303000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00E-6\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E-8\"}}" - }, - { - "description": "[basx637] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000004A3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00E+7\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+5\"}}" - }, - { - "description": "[basx677] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000002E3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00E-7\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E-9\"}}" - }, - { - "description": "[basx638] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000004C3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00E+8\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+6\"}}" - }, - { - "description": "[basx678] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000002C3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00E-8\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E-10\"}}" - }, - { - "description": "[basx149] Numbers with E", - "canonical_bson": "180000001364000000000000000000000000000000523000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"000E+9\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+9\"}}" - }, - { - "description": "[basx639] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000004E3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00E+9\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+7\"}}" - }, - { - "description": "[basx679] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000002A3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00E-9\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E-11\"}}" - }, - { - "description": "[basx063] strings without E cannot generate E in result", - "canonical_bson": "18000000136400185C0ACE00000000000000000000383000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"+00345678.5432\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"345678.5432\"}}" - }, - { - "description": "[basx018] conform to rules and exponent will be in permitted range).", - "canonical_bson": "1800000013640000000000000000000000000000003EB000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.0\"}}" - }, - { - "description": "[basx609] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000003E3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0\"}}" - }, - { - "description": "[basx614] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000003EB000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.0\"}}" - }, - { - "description": "[basx684] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000403000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"00.\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0\"}}" - }, - { - "description": "[basx640] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000003E3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0E+0\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0\"}}" - }, - { - "description": "[basx660] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000003E3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0E-0\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0\"}}" - }, - { - "description": "[basx641] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000403000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0E+1\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0\"}}" - }, - { - "description": "[basx661] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000003C3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0E-1\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00\"}}" - }, - { - "description": "[basx296] some more negative zeros [systematic tests below]", - "canonical_bson": "1800000013640000000000000000000000000000003AB000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.0E-2\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.000\"}}" - }, - { - "description": "[basx642] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000423000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0E+2\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+1\"}}" - }, - { - "description": "[basx662] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000003A3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0E-2\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.000\"}}" - }, - { - "description": "[basx297] some more negative zeros [systematic tests below]", - "canonical_bson": "18000000136400000000000000000000000000000038B000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.0E-3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.0000\"}}" - }, - { - "description": "[basx643] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000443000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0E+3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+2\"}}" - }, - { - "description": "[basx663] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000383000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0E-3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0000\"}}" - }, - { - "description": "[basx644] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000463000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0E+4\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+3\"}}" - }, - { - "description": "[basx664] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000363000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0E-4\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00000\"}}" - }, - { - "description": "[basx645] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000483000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0E+5\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+4\"}}" - }, - { - "description": "[basx665] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000343000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0E-5\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.000000\"}}" - }, - { - "description": "[basx646] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000004A3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0E+6\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+5\"}}" - }, - { - "description": "[basx666] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000323000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0E-6\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E-7\"}}" - }, - { - "description": "[basx647] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000004C3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0E+7\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+6\"}}" - }, - { - "description": "[basx667] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000303000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0E-7\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E-8\"}}" - }, - { - "description": "[basx648] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000004E3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0E+8\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+7\"}}" - }, - { - "description": "[basx668] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000002E3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0E-8\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E-9\"}}" - }, - { - "description": "[basx160] Numbers with E", - "canonical_bson": "180000001364000000000000000000000000000000523000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"00E+9\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+9\"}}" - }, - { - "description": "[basx161] Numbers with E", - "canonical_bson": "1800000013640000000000000000000000000000002E3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"00E-9\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E-9\"}}" - }, - { - "description": "[basx649] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000503000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0E+9\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+8\"}}" - }, - { - "description": "[basx669] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000002C3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0E-9\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E-10\"}}" - }, - { - "description": "[basx062] strings without E cannot generate E in result", - "canonical_bson": "18000000136400185C0ACE00000000000000000000383000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"+0345678.5432\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"345678.5432\"}}" - }, - { - "description": "[basx001] conform to rules and exponent will be in permitted range).", - "canonical_bson": "180000001364000000000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0\"}}" - }, - { - "description": "[basx017] conform to rules and exponent will be in permitted range).", - "canonical_bson": "18000000136400000000000000000000000000000040B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0\"}}" - }, - { - "description": "[basx611] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000403000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0\"}}" - }, - { - "description": "[basx613] Zeros", - "canonical_bson": "18000000136400000000000000000000000000000040B000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0\"}}" - }, - { - "description": "[basx685] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000403000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0\"}}" - }, - { - "description": "[basx688] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000403000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"+0.\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0\"}}" - }, - { - "description": "[basx689] Zeros", - "canonical_bson": "18000000136400000000000000000000000000000040B000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0\"}}" - }, - { - "description": "[basx650] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000403000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+0\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0\"}}" - }, - { - "description": "[basx651] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000423000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+1\"}}" - }, - { - "description": "[basx298] some more negative zeros [systematic tests below]", - "canonical_bson": "1800000013640000000000000000000000000000003CB000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0E-2\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.00\"}}" - }, - { - "description": "[basx652] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000443000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+2\"}}" - }, - { - "description": "[basx299] some more negative zeros [systematic tests below]", - "canonical_bson": "1800000013640000000000000000000000000000003AB000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0E-3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.000\"}}" - }, - { - "description": "[basx653] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000463000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+3\"}}" - }, - { - "description": "[basx654] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000483000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+4\"}}" - }, - { - "description": "[basx655] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000004A3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+5\"}}" - }, - { - "description": "[basx656] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000004C3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+6\"}}" - }, - { - "description": "[basx657] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000004E3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+7\"}}" - }, - { - "description": "[basx658] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000503000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+8\"}}" - }, - { - "description": "[basx138] Numbers with E", - "canonical_bson": "180000001364000000000000000000000000000000523000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"+0E+9\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+9\"}}" - }, - { - "description": "[basx139] Numbers with E", - "canonical_bson": "18000000136400000000000000000000000000000052B000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0E+9\"}}" - }, - { - "description": "[basx144] Numbers with E", - "canonical_bson": "180000001364000000000000000000000000000000523000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+9\"}}" - }, - { - "description": "[basx154] Numbers with E", - "canonical_bson": "180000001364000000000000000000000000000000523000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E9\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+9\"}}" - }, - { - "description": "[basx659] Zeros", - "canonical_bson": "180000001364000000000000000000000000000000523000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+9\"}}" - }, - { - "description": "[basx042] strings without E cannot generate E in result", - "canonical_bson": "18000000136400FC040000000000000000000000003C3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"+12.76\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"12.76\"}}" - }, - { - "description": "[basx143] Numbers with E", - "canonical_bson": "180000001364000100000000000000000000000000523000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"+1E+009\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+9\"}}" - }, - { - "description": "[basx061] strings without E cannot generate E in result", - "canonical_bson": "18000000136400185C0ACE00000000000000000000383000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"+345678.5432\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"345678.5432\"}}" - }, - { - "description": "[basx036] conform to rules and exponent will be in permitted range).", - "canonical_bson": "1800000013640015CD5B0700000000000000000000203000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0000000123456789\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.23456789E-8\"}}" - }, - { - "description": "[basx035] conform to rules and exponent will be in permitted range).", - "canonical_bson": "1800000013640015CD5B0700000000000000000000223000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.000000123456789\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.23456789E-7\"}}" - }, - { - "description": "[basx034] conform to rules and exponent will be in permitted range).", - "canonical_bson": "1800000013640015CD5B0700000000000000000000243000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00000123456789\"}}" - }, - { - "description": "[basx053] strings without E cannot generate E in result", - "canonical_bson": "180000001364003200000000000000000000000000323000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0000050\"}}" - }, - { - "description": "[basx033] conform to rules and exponent will be in permitted range).", - "canonical_bson": "1800000013640015CD5B0700000000000000000000263000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0000123456789\"}}" - }, - { - "description": "[basx016] conform to rules and exponent will be in permitted range).", - "canonical_bson": "180000001364000C000000000000000000000000003A3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.012\"}}" - }, - { - "description": "[basx015] conform to rules and exponent will be in permitted range).", - "canonical_bson": "180000001364007B000000000000000000000000003A3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.123\"}}" - }, - { - "description": "[basx037] conform to rules and exponent will be in permitted range).", - "canonical_bson": "1800000013640078DF0D8648700000000000000000223000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.123456789012344\"}}" - }, - { - "description": "[basx038] conform to rules and exponent will be in permitted range).", - "canonical_bson": "1800000013640079DF0D8648700000000000000000223000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.123456789012345\"}}" - }, - { - "description": "[basx250] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000383000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.1265\"}}" - }, - { - "description": "[basx257] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000383000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.1265E-0\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.1265\"}}" - }, - { - "description": "[basx256] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000363000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.1265E-1\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.01265\"}}" - }, - { - "description": "[basx258] Numbers with E", - "canonical_bson": "18000000136400F1040000000000000000000000003A3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.1265E+1\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265\"}}" - }, - { - "description": "[basx251] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000103000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.1265E-20\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E-21\"}}" - }, - { - "description": "[basx263] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000603000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.1265E+20\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E+19\"}}" - }, - { - "description": "[basx255] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000343000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.1265E-2\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.001265\"}}" - }, - { - "description": "[basx259] Numbers with E", - "canonical_bson": "18000000136400F1040000000000000000000000003C3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.1265E+2\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"12.65\"}}" - }, - { - "description": "[basx254] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000323000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.1265E-3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0001265\"}}" - }, - { - "description": "[basx260] Numbers with E", - "canonical_bson": "18000000136400F1040000000000000000000000003E3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.1265E+3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"126.5\"}}" - }, - { - "description": "[basx253] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000303000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.1265E-4\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00001265\"}}" - }, - { - "description": "[basx261] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000403000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.1265E+4\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1265\"}}" - }, - { - "description": "[basx252] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000283000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.1265E-8\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E-9\"}}" - }, - { - "description": "[basx262] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000483000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.1265E+8\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E+7\"}}" - }, - { - "description": "[basx159] Numbers with E", - "canonical_bson": "1800000013640049000000000000000000000000002E3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.73e-7\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7.3E-8\"}}" - }, - { - "description": "[basx004] conform to rules and exponent will be in permitted range).", - "canonical_bson": "1800000013640064000000000000000000000000003C3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00\"}}" - }, - { - "description": "[basx003] conform to rules and exponent will be in permitted range).", - "canonical_bson": "180000001364000A000000000000000000000000003E3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0\"}}" - }, - { - "description": "[basx002] conform to rules and exponent will be in permitted range).", - "canonical_bson": "180000001364000100000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1\"}}" - }, - { - "description": "[basx148] Numbers with E", - "canonical_bson": "180000001364000100000000000000000000000000523000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+009\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+9\"}}" - }, - { - "description": "[basx153] Numbers with E", - "canonical_bson": "180000001364000100000000000000000000000000523000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E009\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+9\"}}" - }, - { - "description": "[basx141] Numbers with E", - "canonical_bson": "180000001364000100000000000000000000000000523000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1e+09\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+9\"}}" - }, - { - "description": "[basx146] Numbers with E", - "canonical_bson": "180000001364000100000000000000000000000000523000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+09\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+9\"}}" - }, - { - "description": "[basx151] Numbers with E", - "canonical_bson": "180000001364000100000000000000000000000000523000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1e09\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+9\"}}" - }, - { - "description": "[basx142] Numbers with E", - "canonical_bson": "180000001364000100000000000000000000000000F43000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+90\"}}" - }, - { - "description": "[basx147] Numbers with E", - "canonical_bson": "180000001364000100000000000000000000000000F43000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1e+90\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+90\"}}" - }, - { - "description": "[basx152] Numbers with E", - "canonical_bson": "180000001364000100000000000000000000000000F43000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E90\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+90\"}}" - }, - { - "description": "[basx140] Numbers with E", - "canonical_bson": "180000001364000100000000000000000000000000523000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+9\"}}" - }, - { - "description": "[basx150] Numbers with E", - "canonical_bson": "180000001364000100000000000000000000000000523000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E9\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+9\"}}" - }, - { - "description": "[basx014] conform to rules and exponent will be in permitted range).", - "canonical_bson": "18000000136400D2040000000000000000000000003A3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.234\"}}" - }, - { - "description": "[basx170] Numbers with E", - "canonical_bson": "18000000136400F1040000000000000000000000003A3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265\"}}" - }, - { - "description": "[basx177] Numbers with E", - "canonical_bson": "18000000136400F1040000000000000000000000003A3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E-0\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265\"}}" - }, - { - "description": "[basx176] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000383000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E-1\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.1265\"}}" - }, - { - "description": "[basx178] Numbers with E", - "canonical_bson": "18000000136400F1040000000000000000000000003C3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E+1\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"12.65\"}}" - }, - { - "description": "[basx171] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000123000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E-20\"}}" - }, - { - "description": "[basx183] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000623000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E+20\"}}" - }, - { - "description": "[basx175] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000363000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E-2\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.01265\"}}" - }, - { - "description": "[basx179] Numbers with E", - "canonical_bson": "18000000136400F1040000000000000000000000003E3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E+2\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"126.5\"}}" - }, - { - "description": "[basx174] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000343000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E-3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.001265\"}}" - }, - { - "description": "[basx180] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000403000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E+3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1265\"}}" - }, - { - "description": "[basx173] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000323000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E-4\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0001265\"}}" - }, - { - "description": "[basx181] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000423000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E+4\"}}" - }, - { - "description": "[basx172] Numbers with E", - "canonical_bson": "18000000136400F1040000000000000000000000002A3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E-8\"}}" - }, - { - "description": "[basx182] Numbers with E", - "canonical_bson": "18000000136400F1040000000000000000000000004A3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E+8\"}}" - }, - { - "description": "[basx157] Numbers with E", - "canonical_bson": "180000001364000400000000000000000000000000523000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"4E+9\"}}" - }, - { - "description": "[basx067] examples", - "canonical_bson": "180000001364000500000000000000000000000000343000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"5E-6\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.000005\"}}" - }, - { - "description": "[basx069] examples", - "canonical_bson": "180000001364000500000000000000000000000000323000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"5E-7\"}}" - }, - { - "description": "[basx385] Engineering notation tests", - "canonical_bson": "180000001364000700000000000000000000000000403000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E0\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7\"}}" - }, - { - "description": "[basx365] Engineering notation tests", - "canonical_bson": "180000001364000700000000000000000000000000543000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E10\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E+10\"}}" - }, - { - "description": "[basx405] Engineering notation tests", - "canonical_bson": "1800000013640007000000000000000000000000002C3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E-10\"}}" - }, - { - "description": "[basx363] Engineering notation tests", - "canonical_bson": "180000001364000700000000000000000000000000563000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E11\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E+11\"}}" - }, - { - "description": "[basx407] Engineering notation tests", - "canonical_bson": "1800000013640007000000000000000000000000002A3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E-11\"}}" - }, - { - "description": "[basx361] Engineering notation tests", - "canonical_bson": "180000001364000700000000000000000000000000583000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E12\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E+12\"}}" - }, - { - "description": "[basx409] Engineering notation tests", - "canonical_bson": "180000001364000700000000000000000000000000283000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E-12\"}}" - }, - { - "description": "[basx411] Engineering notation tests", - "canonical_bson": "180000001364000700000000000000000000000000263000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E-13\"}}" - }, - { - "description": "[basx383] Engineering notation tests", - "canonical_bson": "180000001364000700000000000000000000000000423000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E1\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E+1\"}}" - }, - { - "description": "[basx387] Engineering notation tests", - "canonical_bson": "1800000013640007000000000000000000000000003E3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E-1\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.7\"}}" - }, - { - "description": "[basx381] Engineering notation tests", - "canonical_bson": "180000001364000700000000000000000000000000443000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E2\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E+2\"}}" - }, - { - "description": "[basx389] Engineering notation tests", - "canonical_bson": "1800000013640007000000000000000000000000003C3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E-2\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.07\"}}" - }, - { - "description": "[basx379] Engineering notation tests", - "canonical_bson": "180000001364000700000000000000000000000000463000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E+3\"}}" - }, - { - "description": "[basx391] Engineering notation tests", - "canonical_bson": "1800000013640007000000000000000000000000003A3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E-3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.007\"}}" - }, - { - "description": "[basx377] Engineering notation tests", - "canonical_bson": "180000001364000700000000000000000000000000483000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E4\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E+4\"}}" - }, - { - "description": "[basx393] Engineering notation tests", - "canonical_bson": "180000001364000700000000000000000000000000383000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E-4\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0007\"}}" - }, - { - "description": "[basx375] Engineering notation tests", - "canonical_bson": "1800000013640007000000000000000000000000004A3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E5\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E+5\"}}" - }, - { - "description": "[basx395] Engineering notation tests", - "canonical_bson": "180000001364000700000000000000000000000000363000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E-5\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00007\"}}" - }, - { - "description": "[basx373] Engineering notation tests", - "canonical_bson": "1800000013640007000000000000000000000000004C3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E6\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E+6\"}}" - }, - { - "description": "[basx397] Engineering notation tests", - "canonical_bson": "180000001364000700000000000000000000000000343000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E-6\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.000007\"}}" - }, - { - "description": "[basx371] Engineering notation tests", - "canonical_bson": "1800000013640007000000000000000000000000004E3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E7\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E+7\"}}" - }, - { - "description": "[basx399] Engineering notation tests", - "canonical_bson": "180000001364000700000000000000000000000000323000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E-7\"}}" - }, - { - "description": "[basx369] Engineering notation tests", - "canonical_bson": "180000001364000700000000000000000000000000503000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E8\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E+8\"}}" - }, - { - "description": "[basx401] Engineering notation tests", - "canonical_bson": "180000001364000700000000000000000000000000303000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E-8\"}}" - }, - { - "description": "[basx367] Engineering notation tests", - "canonical_bson": "180000001364000700000000000000000000000000523000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E9\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E+9\"}}" - }, - { - "description": "[basx403] Engineering notation tests", - "canonical_bson": "1800000013640007000000000000000000000000002E3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"7E-9\"}}" - }, - { - "description": "[basx007] conform to rules and exponent will be in permitted range).", - "canonical_bson": "1800000013640064000000000000000000000000003E3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"10.0\"}}" - }, - { - "description": "[basx005] conform to rules and exponent will be in permitted range).", - "canonical_bson": "180000001364000A00000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"10\"}}" - }, - { - "description": "[basx165] Numbers with E", - "canonical_bson": "180000001364000A00000000000000000000000000523000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10E+009\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E+10\"}}" - }, - { - "description": "[basx163] Numbers with E", - "canonical_bson": "180000001364000A00000000000000000000000000523000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10E+09\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E+10\"}}" - }, - { - "description": "[basx325] Engineering notation tests", - "canonical_bson": "180000001364000A00000000000000000000000000403000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e0\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"10\"}}" - }, - { - "description": "[basx305] Engineering notation tests", - "canonical_bson": "180000001364000A00000000000000000000000000543000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e10\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E+11\"}}" - }, - { - "description": "[basx345] Engineering notation tests", - "canonical_bson": "180000001364000A000000000000000000000000002C3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e-10\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E-9\"}}" - }, - { - "description": "[basx303] Engineering notation tests", - "canonical_bson": "180000001364000A00000000000000000000000000563000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e11\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E+12\"}}" - }, - { - "description": "[basx347] Engineering notation tests", - "canonical_bson": "180000001364000A000000000000000000000000002A3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e-11\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E-10\"}}" - }, - { - "description": "[basx301] Engineering notation tests", - "canonical_bson": "180000001364000A00000000000000000000000000583000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e12\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E+13\"}}" - }, - { - "description": "[basx349] Engineering notation tests", - "canonical_bson": "180000001364000A00000000000000000000000000283000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e-12\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E-11\"}}" - }, - { - "description": "[basx351] Engineering notation tests", - "canonical_bson": "180000001364000A00000000000000000000000000263000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e-13\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E-12\"}}" - }, - { - "description": "[basx323] Engineering notation tests", - "canonical_bson": "180000001364000A00000000000000000000000000423000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e1\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E+2\"}}" - }, - { - "description": "[basx327] Engineering notation tests", - "canonical_bson": "180000001364000A000000000000000000000000003E3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e-1\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0\"}}" - }, - { - "description": "[basx321] Engineering notation tests", - "canonical_bson": "180000001364000A00000000000000000000000000443000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e2\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E+3\"}}" - }, - { - "description": "[basx329] Engineering notation tests", - "canonical_bson": "180000001364000A000000000000000000000000003C3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e-2\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.10\"}}" - }, - { - "description": "[basx319] Engineering notation tests", - "canonical_bson": "180000001364000A00000000000000000000000000463000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E+4\"}}" - }, - { - "description": "[basx331] Engineering notation tests", - "canonical_bson": "180000001364000A000000000000000000000000003A3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e-3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.010\"}}" - }, - { - "description": "[basx317] Engineering notation tests", - "canonical_bson": "180000001364000A00000000000000000000000000483000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e4\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E+5\"}}" - }, - { - "description": "[basx333] Engineering notation tests", - "canonical_bson": "180000001364000A00000000000000000000000000383000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e-4\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0010\"}}" - }, - { - "description": "[basx315] Engineering notation tests", - "canonical_bson": "180000001364000A000000000000000000000000004A3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e5\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E+6\"}}" - }, - { - "description": "[basx335] Engineering notation tests", - "canonical_bson": "180000001364000A00000000000000000000000000363000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e-5\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00010\"}}" - }, - { - "description": "[basx313] Engineering notation tests", - "canonical_bson": "180000001364000A000000000000000000000000004C3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e6\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E+7\"}}" - }, - { - "description": "[basx337] Engineering notation tests", - "canonical_bson": "180000001364000A00000000000000000000000000343000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e-6\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.000010\"}}" - }, - { - "description": "[basx311] Engineering notation tests", - "canonical_bson": "180000001364000A000000000000000000000000004E3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e7\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E+8\"}}" - }, - { - "description": "[basx339] Engineering notation tests", - "canonical_bson": "180000001364000A00000000000000000000000000323000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e-7\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0000010\"}}" - }, - { - "description": "[basx309] Engineering notation tests", - "canonical_bson": "180000001364000A00000000000000000000000000503000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e8\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E+9\"}}" - }, - { - "description": "[basx341] Engineering notation tests", - "canonical_bson": "180000001364000A00000000000000000000000000303000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e-8\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E-7\"}}" - }, - { - "description": "[basx164] Numbers with E", - "canonical_bson": "180000001364000A00000000000000000000000000F43000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e+90\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E+91\"}}" - }, - { - "description": "[basx162] Numbers with E", - "canonical_bson": "180000001364000A00000000000000000000000000523000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10E+9\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E+10\"}}" - }, - { - "description": "[basx307] Engineering notation tests", - "canonical_bson": "180000001364000A00000000000000000000000000523000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e9\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E+10\"}}" - }, - { - "description": "[basx343] Engineering notation tests", - "canonical_bson": "180000001364000A000000000000000000000000002E3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10e-9\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E-8\"}}" - }, - { - "description": "[basx008] conform to rules and exponent will be in permitted range).", - "canonical_bson": "1800000013640065000000000000000000000000003E3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"10.1\"}}" - }, - { - "description": "[basx009] conform to rules and exponent will be in permitted range).", - "canonical_bson": "1800000013640068000000000000000000000000003E3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"10.4\"}}" - }, - { - "description": "[basx010] conform to rules and exponent will be in permitted range).", - "canonical_bson": "1800000013640069000000000000000000000000003E3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"10.5\"}}" - }, - { - "description": "[basx011] conform to rules and exponent will be in permitted range).", - "canonical_bson": "180000001364006A000000000000000000000000003E3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"10.6\"}}" - }, - { - "description": "[basx012] conform to rules and exponent will be in permitted range).", - "canonical_bson": "180000001364006D000000000000000000000000003E3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"10.9\"}}" - }, - { - "description": "[basx013] conform to rules and exponent will be in permitted range).", - "canonical_bson": "180000001364006E000000000000000000000000003E3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"11.0\"}}" - }, - { - "description": "[basx040] strings without E cannot generate E in result", - "canonical_bson": "180000001364000C00000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"12\"}}" - }, - { - "description": "[basx190] Numbers with E", - "canonical_bson": "18000000136400F1040000000000000000000000003C3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"12.65\"}}" - }, - { - "description": "[basx197] Numbers with E", - "canonical_bson": "18000000136400F1040000000000000000000000003C3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"12.65E-0\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"12.65\"}}" - }, - { - "description": "[basx196] Numbers with E", - "canonical_bson": "18000000136400F1040000000000000000000000003A3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"12.65E-1\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265\"}}" - }, - { - "description": "[basx198] Numbers with E", - "canonical_bson": "18000000136400F1040000000000000000000000003E3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"12.65E+1\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"126.5\"}}" - }, - { - "description": "[basx191] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000143000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"12.65E-20\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E-19\"}}" - }, - { - "description": "[basx203] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000643000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"12.65E+20\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E+21\"}}" - }, - { - "description": "[basx195] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000383000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"12.65E-2\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.1265\"}}" - }, - { - "description": "[basx199] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000403000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"12.65E+2\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1265\"}}" - }, - { - "description": "[basx194] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000363000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"12.65E-3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.01265\"}}" - }, - { - "description": "[basx200] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000423000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"12.65E+3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E+4\"}}" - }, - { - "description": "[basx193] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000343000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"12.65E-4\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.001265\"}}" - }, - { - "description": "[basx201] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000443000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"12.65E+4\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E+5\"}}" - }, - { - "description": "[basx192] Numbers with E", - "canonical_bson": "18000000136400F1040000000000000000000000002C3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"12.65E-8\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E-7\"}}" - }, - { - "description": "[basx202] Numbers with E", - "canonical_bson": "18000000136400F1040000000000000000000000004C3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"12.65E+8\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E+9\"}}" - }, - { - "description": "[basx044] strings without E cannot generate E in result", - "canonical_bson": "18000000136400FC040000000000000000000000003C3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"012.76\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"12.76\"}}" - }, - { - "description": "[basx042] strings without E cannot generate E in result", - "canonical_bson": "18000000136400FC040000000000000000000000003C3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"12.76\"}}" - }, - { - "description": "[basx046] strings without E cannot generate E in result", - "canonical_bson": "180000001364001100000000000000000000000000403000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"17.\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"17\"}}" - }, - { - "description": "[basx049] strings without E cannot generate E in result", - "canonical_bson": "180000001364002C00000000000000000000000000403000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0044\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"44\"}}" - }, - { - "description": "[basx048] strings without E cannot generate E in result", - "canonical_bson": "180000001364002C00000000000000000000000000403000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"044\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"44\"}}" - }, - { - "description": "[basx158] Numbers with E", - "canonical_bson": "180000001364002C00000000000000000000000000523000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"44E+9\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"4.4E+10\"}}" - }, - { - "description": "[basx068] examples", - "canonical_bson": "180000001364003200000000000000000000000000323000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"50E-7\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0000050\"}}" - }, - { - "description": "[basx169] Numbers with E", - "canonical_bson": "180000001364006400000000000000000000000000523000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"100e+009\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00E+11\"}}" - }, - { - "description": "[basx167] Numbers with E", - "canonical_bson": "180000001364006400000000000000000000000000523000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"100e+09\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00E+11\"}}" - }, - { - "description": "[basx168] Numbers with E", - "canonical_bson": "180000001364006400000000000000000000000000F43000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"100E+90\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00E+92\"}}" - }, - { - "description": "[basx166] Numbers with E", - "canonical_bson": "180000001364006400000000000000000000000000523000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"100e+9\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00E+11\"}}" - }, - { - "description": "[basx210] Numbers with E", - "canonical_bson": "18000000136400F1040000000000000000000000003E3000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"126.5\"}}" - }, - { - "description": "[basx217] Numbers with E", - "canonical_bson": "18000000136400F1040000000000000000000000003E3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"126.5E-0\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"126.5\"}}" - }, - { - "description": "[basx216] Numbers with E", - "canonical_bson": "18000000136400F1040000000000000000000000003C3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"126.5E-1\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"12.65\"}}" - }, - { - "description": "[basx218] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000403000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"126.5E+1\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1265\"}}" - }, - { - "description": "[basx211] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000163000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"126.5E-20\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E-18\"}}" - }, - { - "description": "[basx223] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000663000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"126.5E+20\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E+22\"}}" - }, - { - "description": "[basx215] Numbers with E", - "canonical_bson": "18000000136400F1040000000000000000000000003A3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"126.5E-2\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265\"}}" - }, - { - "description": "[basx219] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000423000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"126.5E+2\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E+4\"}}" - }, - { - "description": "[basx214] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000383000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"126.5E-3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.1265\"}}" - }, - { - "description": "[basx220] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000443000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"126.5E+3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E+5\"}}" - }, - { - "description": "[basx213] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000363000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"126.5E-4\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.01265\"}}" - }, - { - "description": "[basx221] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000463000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"126.5E+4\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E+6\"}}" - }, - { - "description": "[basx212] Numbers with E", - "canonical_bson": "18000000136400F1040000000000000000000000002E3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"126.5E-8\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.000001265\"}}" - }, - { - "description": "[basx222] Numbers with E", - "canonical_bson": "18000000136400F1040000000000000000000000004E3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"126.5E+8\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E+10\"}}" - }, - { - "description": "[basx006] conform to rules and exponent will be in permitted range).", - "canonical_bson": "18000000136400E803000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1000\"}}" - }, - { - "description": "[basx230] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1265\"}}" - }, - { - "description": "[basx237] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000403000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1265E-0\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1265\"}}" - }, - { - "description": "[basx236] Numbers with E", - "canonical_bson": "18000000136400F1040000000000000000000000003E3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1265E-1\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"126.5\"}}" - }, - { - "description": "[basx238] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000423000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1265E+1\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E+4\"}}" - }, - { - "description": "[basx231] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000183000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1265E-20\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E-17\"}}" - }, - { - "description": "[basx243] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000683000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1265E+20\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E+23\"}}" - }, - { - "description": "[basx235] Numbers with E", - "canonical_bson": "18000000136400F1040000000000000000000000003C3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1265E-2\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"12.65\"}}" - }, - { - "description": "[basx239] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000443000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1265E+2\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E+5\"}}" - }, - { - "description": "[basx234] Numbers with E", - "canonical_bson": "18000000136400F1040000000000000000000000003A3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1265E-3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265\"}}" - }, - { - "description": "[basx240] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000463000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1265E+3\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E+6\"}}" - }, - { - "description": "[basx233] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000383000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1265E-4\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.1265\"}}" - }, - { - "description": "[basx241] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000483000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1265E+4\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E+7\"}}" - }, - { - "description": "[basx232] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000303000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1265E-8\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00001265\"}}" - }, - { - "description": "[basx242] Numbers with E", - "canonical_bson": "18000000136400F104000000000000000000000000503000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1265E+8\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.265E+11\"}}" - }, - { - "description": "[basx060] strings without E cannot generate E in result", - "canonical_bson": "18000000136400185C0ACE00000000000000000000383000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"345678.5432\"}}" - }, - { - "description": "[basx059] strings without E cannot generate E in result", - "canonical_bson": "18000000136400F198670C08000000000000000000363000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0345678.54321\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"345678.54321\"}}" - }, - { - "description": "[basx058] strings without E cannot generate E in result", - "canonical_bson": "180000001364006AF90B7C50000000000000000000343000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"345678.543210\"}}" - }, - { - "description": "[basx057] strings without E cannot generate E in result", - "canonical_bson": "180000001364006A19562522020000000000000000343000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"2345678.543210\"}}" - }, - { - "description": "[basx056] strings without E cannot generate E in result", - "canonical_bson": "180000001364006AB9C8733A0B0000000000000000343000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"12345678.543210\"}}" - }, - { - "description": "[basx031] conform to rules and exponent will be in permitted range).", - "canonical_bson": "1800000013640040AF0D8648700000000000000000343000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"123456789.000000\"}}" - }, - { - "description": "[basx030] conform to rules and exponent will be in permitted range).", - "canonical_bson": "1800000013640080910F8648700000000000000000343000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"123456789.123456\"}}" - }, - { - "description": "[basx032] conform to rules and exponent will be in permitted range).", - "canonical_bson": "1800000013640080910F8648700000000000000000403000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"123456789123456\"}}" - } - ] -} diff --git a/testdata/bson-corpus/decimal128-4.json b/testdata/bson-corpus/decimal128-4.json deleted file mode 100644 index 0957019351..0000000000 --- a/testdata/bson-corpus/decimal128-4.json +++ /dev/null @@ -1,165 +0,0 @@ -{ - "description": "Decimal128", - "bson_type": "0x13", - "test_key": "d", - "valid": [ - { - "description": "[basx023] conform to rules and exponent will be in permitted range).", - "canonical_bson": "1800000013640001000000000000000000000000003EB000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.1\"}}" - }, - - { - "description": "[basx045] strings without E cannot generate E in result", - "canonical_bson": "1800000013640003000000000000000000000000003A3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"+0.003\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.003\"}}" - }, - { - "description": "[basx610] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000003E3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \".0\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0\"}}" - }, - { - "description": "[basx612] Zeros", - "canonical_bson": "1800000013640000000000000000000000000000003EB000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-.0\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.0\"}}" - }, - { - "description": "[basx043] strings without E cannot generate E in result", - "canonical_bson": "18000000136400FC040000000000000000000000003C3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"+12.76\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"12.76\"}}" - }, - { - "description": "[basx055] strings without E cannot generate E in result", - "canonical_bson": "180000001364000500000000000000000000000000303000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00000005\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"5E-8\"}}" - }, - { - "description": "[basx054] strings without E cannot generate E in result", - "canonical_bson": "180000001364000500000000000000000000000000323000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0000005\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"5E-7\"}}" - }, - { - "description": "[basx052] strings without E cannot generate E in result", - "canonical_bson": "180000001364000500000000000000000000000000343000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.000005\"}}" - }, - { - "description": "[basx051] strings without E cannot generate E in result", - "canonical_bson": "180000001364000500000000000000000000000000363000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"00.00005\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00005\"}}" - }, - { - "description": "[basx050] strings without E cannot generate E in result", - "canonical_bson": "180000001364000500000000000000000000000000383000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.0005\"}}" - }, - { - "description": "[basx047] strings without E cannot generate E in result", - "canonical_bson": "1800000013640005000000000000000000000000003E3000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \".5\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.5\"}}" - }, - { - "description": "[dqbsr431] check rounding modes heeded (Rounded)", - "canonical_bson": "1800000013640099761CC7B548F377DC80A131C836FE2F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.1111111111111111111111111111123450\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.111111111111111111111111111112345\"}}" - }, - { - "description": "OK2", - "canonical_bson": "18000000136400000000000A5BC138938D44C64D31FC2F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \".100000000000000000000000000000000000000000000000000000000000\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.1000000000000000000000000000000000\"}}" - } - ], - "parseErrors": [ - { - "description": "[basx564] Near-specials (Conversion_syntax)", - "string": "Infi" - }, - { - "description": "[basx565] Near-specials (Conversion_syntax)", - "string": "Infin" - }, - { - "description": "[basx566] Near-specials (Conversion_syntax)", - "string": "Infini" - }, - { - "description": "[basx567] Near-specials (Conversion_syntax)", - "string": "Infinit" - }, - { - "description": "[basx568] Near-specials (Conversion_syntax)", - "string": "-Infinit" - }, - { - "description": "[basx590] some baddies with dots and Es and dots and specials (Conversion_syntax)", - "string": ".Infinity" - }, - { - "description": "[basx562] Near-specials (Conversion_syntax)", - "string": "NaNq" - }, - { - "description": "[basx563] Near-specials (Conversion_syntax)", - "string": "NaNs" - }, - { - "description": "[dqbas939] overflow results at different rounding modes (Overflow & Inexact & Rounded)", - "string": "-7e10000" - }, - { - "description": "[dqbsr534] negatives (Rounded & Inexact)", - "string": "-1.11111111111111111111111111111234650" - }, - { - "description": "[dqbsr535] negatives (Rounded & Inexact)", - "string": "-1.11111111111111111111111111111234551" - }, - { - "description": "[dqbsr533] negatives (Rounded & Inexact)", - "string": "-1.11111111111111111111111111111234550" - }, - { - "description": "[dqbsr532] negatives (Rounded & Inexact)", - "string": "-1.11111111111111111111111111111234549" - }, - { - "description": "[dqbsr432] check rounding modes heeded (Rounded & Inexact)", - "string": "1.11111111111111111111111111111234549" - }, - { - "description": "[dqbsr433] check rounding modes heeded (Rounded & Inexact)", - "string": "1.11111111111111111111111111111234550" - }, - { - "description": "[dqbsr435] check rounding modes heeded (Rounded & Inexact)", - "string": "1.11111111111111111111111111111234551" - }, - { - "description": "[dqbsr434] check rounding modes heeded (Rounded & Inexact)", - "string": "1.11111111111111111111111111111234650" - }, - { - "description": "[dqbas938] overflow results at different rounding modes (Overflow & Inexact & Rounded)", - "string": "7e10000" - }, - { - "description": "Inexact rounding#1", - "string": "100000000000000000000000000000000000000000000000000000000001" - }, - { - "description": "Inexact rounding#2", - "string": "1E-6177" - } - ] -} diff --git a/testdata/bson-corpus/decimal128-5.json b/testdata/bson-corpus/decimal128-5.json deleted file mode 100644 index e976eae407..0000000000 --- a/testdata/bson-corpus/decimal128-5.json +++ /dev/null @@ -1,402 +0,0 @@ -{ - "description": "Decimal128", - "bson_type": "0x13", - "test_key": "d", - "valid": [ - { - "description": "[decq035] fold-downs (more below) (Clamped)", - "canonical_bson": "18000000136400000000807F1BCF85B27059C8A43CFE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.23E+6144\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.230000000000000000000000000000000E+6144\"}}" - }, - { - "description": "[decq037] fold-downs (more below) (Clamped)", - "canonical_bson": "18000000136400000000000A5BC138938D44C64D31FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6144\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000000000000000000000000000000E+6144\"}}" - }, - { - "description": "[decq077] Nmin and below (Subnormal)", - "canonical_bson": "180000001364000000000081EFAC855B416D2DEE04000000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.100000000000000000000000000000000E-6143\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00000000000000000000000000000000E-6144\"}}" - }, - { - "description": "[decq078] Nmin and below (Subnormal)", - "canonical_bson": "180000001364000000000081EFAC855B416D2DEE04000000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00000000000000000000000000000000E-6144\"}}" - }, - { - "description": "[decq079] Nmin and below (Subnormal)", - "canonical_bson": "180000001364000A00000000000000000000000000000000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.000000000000000000000000000000010E-6143\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E-6175\"}}" - }, - { - "description": "[decq080] Nmin and below (Subnormal)", - "canonical_bson": "180000001364000A00000000000000000000000000000000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E-6175\"}}" - }, - { - "description": "[decq081] Nmin and below (Subnormal)", - "canonical_bson": "180000001364000100000000000000000000000000020000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00000000000000000000000000000001E-6143\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E-6175\"}}" - }, - { - "description": "[decq082] Nmin and below (Subnormal)", - "canonical_bson": "180000001364000100000000000000000000000000020000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E-6175\"}}" - }, - { - "description": "[decq083] Nmin and below (Subnormal)", - "canonical_bson": "180000001364000100000000000000000000000000000000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.000000000000000000000000000000001E-6143\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E-6176\"}}" - }, - { - "description": "[decq084] Nmin and below (Subnormal)", - "canonical_bson": "180000001364000100000000000000000000000000000000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E-6176\"}}" - }, - { - "description": "[decq090] underflows cannot be tested for simple copies, check edge cases (Subnormal)", - "canonical_bson": "180000001364000100000000000000000000000000000000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1e-6176\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E-6176\"}}" - }, - { - "description": "[decq100] underflows cannot be tested for simple copies, check edge cases (Subnormal)", - "canonical_bson": "18000000136400FFFFFFFF095BC138938D44C64D31000000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"999999999999999999999999999999999e-6176\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"9.99999999999999999999999999999999E-6144\"}}" - }, - { - "description": "[decq130] fold-downs (more below) (Clamped)", - "canonical_bson": "18000000136400000000807F1BCF85B27059C8A43CFEDF00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1.23E+6144\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1.230000000000000000000000000000000E+6144\"}}" - }, - { - "description": "[decq132] fold-downs (more below) (Clamped)", - "canonical_bson": "18000000136400000000000A5BC138938D44C64D31FEDF00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1E+6144\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1.000000000000000000000000000000000E+6144\"}}" - }, - { - "description": "[decq177] Nmin and below (Subnormal)", - "canonical_bson": "180000001364000000000081EFAC855B416D2DEE04008000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.100000000000000000000000000000000E-6143\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1.00000000000000000000000000000000E-6144\"}}" - }, - { - "description": "[decq178] Nmin and below (Subnormal)", - "canonical_bson": "180000001364000000000081EFAC855B416D2DEE04008000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1.00000000000000000000000000000000E-6144\"}}" - }, - { - "description": "[decq179] Nmin and below (Subnormal)", - "canonical_bson": "180000001364000A00000000000000000000000000008000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.000000000000000000000000000000010E-6143\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1.0E-6175\"}}" - }, - { - "description": "[decq180] Nmin and below (Subnormal)", - "canonical_bson": "180000001364000A00000000000000000000000000008000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1.0E-6175\"}}" - }, - { - "description": "[decq181] Nmin and below (Subnormal)", - "canonical_bson": "180000001364000100000000000000000000000000028000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.00000000000000000000000000000001E-6143\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1E-6175\"}}" - }, - { - "description": "[decq182] Nmin and below (Subnormal)", - "canonical_bson": "180000001364000100000000000000000000000000028000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1E-6175\"}}" - }, - { - "description": "[decq183] Nmin and below (Subnormal)", - "canonical_bson": "180000001364000100000000000000000000000000008000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.000000000000000000000000000000001E-6143\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1E-6176\"}}" - }, - { - "description": "[decq184] Nmin and below (Subnormal)", - "canonical_bson": "180000001364000100000000000000000000000000008000", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1E-6176\"}}" - }, - { - "description": "[decq190] underflow edge cases (Subnormal)", - "canonical_bson": "180000001364000100000000000000000000000000008000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1e-6176\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1E-6176\"}}" - }, - { - "description": "[decq200] underflow edge cases (Subnormal)", - "canonical_bson": "18000000136400FFFFFFFF095BC138938D44C64D31008000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-999999999999999999999999999999999e-6176\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-9.99999999999999999999999999999999E-6144\"}}" - }, - { - "description": "[decq400] zeros (Clamped)", - "canonical_bson": "180000001364000000000000000000000000000000000000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E-8000\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E-6176\"}}" - }, - { - "description": "[decq401] zeros (Clamped)", - "canonical_bson": "180000001364000000000000000000000000000000000000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E-6177\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E-6176\"}}" - }, - { - "description": "[decq414] clamped zeros... (Clamped)", - "canonical_bson": "180000001364000000000000000000000000000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+6112\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+6111\"}}" - }, - { - "description": "[decq416] clamped zeros... (Clamped)", - "canonical_bson": "180000001364000000000000000000000000000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+6144\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+6111\"}}" - }, - { - "description": "[decq418] clamped zeros... (Clamped)", - "canonical_bson": "180000001364000000000000000000000000000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+8000\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+6111\"}}" - }, - { - "description": "[decq420] negative zeros (Clamped)", - "canonical_bson": "180000001364000000000000000000000000000000008000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0E-8000\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0E-6176\"}}" - }, - { - "description": "[decq421] negative zeros (Clamped)", - "canonical_bson": "180000001364000000000000000000000000000000008000", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0E-6177\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0E-6176\"}}" - }, - { - "description": "[decq434] clamped zeros... (Clamped)", - "canonical_bson": "180000001364000000000000000000000000000000FEDF00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0E+6112\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0E+6111\"}}" - }, - { - "description": "[decq436] clamped zeros... (Clamped)", - "canonical_bson": "180000001364000000000000000000000000000000FEDF00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0E+6144\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0E+6111\"}}" - }, - { - "description": "[decq438] clamped zeros... (Clamped)", - "canonical_bson": "180000001364000000000000000000000000000000FEDF00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0E+8000\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0E+6111\"}}" - }, - { - "description": "[decq601] fold-down full sequence (Clamped)", - "canonical_bson": "18000000136400000000000A5BC138938D44C64D31FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6144\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000000000000000000000000000000E+6144\"}}" - }, - { - "description": "[decq603] fold-down full sequence (Clamped)", - "canonical_bson": "180000001364000000000081EFAC855B416D2DEE04FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6143\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00000000000000000000000000000000E+6143\"}}" - }, - { - "description": "[decq605] fold-down full sequence (Clamped)", - "canonical_bson": "1800000013640000000080264B91C02220BE377E00FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6142\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0000000000000000000000000000000E+6142\"}}" - }, - { - "description": "[decq607] fold-down full sequence (Clamped)", - "canonical_bson": "1800000013640000000040EAED7446D09C2C9F0C00FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6141\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000000000000000000000000000E+6141\"}}" - }, - { - "description": "[decq609] fold-down full sequence (Clamped)", - "canonical_bson": "18000000136400000000A0CA17726DAE0F1E430100FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6140\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00000000000000000000000000000E+6140\"}}" - }, - { - "description": "[decq611] fold-down full sequence (Clamped)", - "canonical_bson": "18000000136400000000106102253E5ECE4F200000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6139\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0000000000000000000000000000E+6139\"}}" - }, - { - "description": "[decq613] fold-down full sequence (Clamped)", - "canonical_bson": "18000000136400000000E83C80D09F3C2E3B030000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6138\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000000000000000000000000E+6138\"}}" - }, - { - "description": "[decq615] fold-down full sequence (Clamped)", - "canonical_bson": "18000000136400000000E4D20CC8DCD2B752000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6137\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00000000000000000000000000E+6137\"}}" - }, - { - "description": "[decq617] fold-down full sequence (Clamped)", - "canonical_bson": "180000001364000000004A48011416954508000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6136\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0000000000000000000000000E+6136\"}}" - }, - { - "description": "[decq619] fold-down full sequence (Clamped)", - "canonical_bson": "18000000136400000000A1EDCCCE1BC2D300000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6135\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000000000000000000000E+6135\"}}" - }, - { - "description": "[decq621] fold-down full sequence (Clamped)", - "canonical_bson": "18000000136400000080F64AE1C7022D1500000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6134\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00000000000000000000000E+6134\"}}" - }, - { - "description": "[decq623] fold-down full sequence (Clamped)", - "canonical_bson": "18000000136400000040B2BAC9E0191E0200000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6133\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0000000000000000000000E+6133\"}}" - }, - { - "description": "[decq625] fold-down full sequence (Clamped)", - "canonical_bson": "180000001364000000A0DEC5ADC935360000000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6132\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000000000000000000E+6132\"}}" - }, - { - "description": "[decq627] fold-down full sequence (Clamped)", - "canonical_bson": "18000000136400000010632D5EC76B050000000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6131\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00000000000000000000E+6131\"}}" - }, - { - "description": "[decq629] fold-down full sequence (Clamped)", - "canonical_bson": "180000001364000000E8890423C78A000000000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6130\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0000000000000000000E+6130\"}}" - }, - { - "description": "[decq631] fold-down full sequence (Clamped)", - "canonical_bson": "18000000136400000064A7B3B6E00D000000000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6129\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000000000000000E+6129\"}}" - }, - { - "description": "[decq633] fold-down full sequence (Clamped)", - "canonical_bson": "1800000013640000008A5D78456301000000000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6128\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00000000000000000E+6128\"}}" - }, - { - "description": "[decq635] fold-down full sequence (Clamped)", - "canonical_bson": "180000001364000000C16FF2862300000000000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6127\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0000000000000000E+6127\"}}" - }, - { - "description": "[decq637] fold-down full sequence (Clamped)", - "canonical_bson": "180000001364000080C6A47E8D0300000000000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6126\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000000000000E+6126\"}}" - }, - { - "description": "[decq639] fold-down full sequence (Clamped)", - "canonical_bson": "1800000013640000407A10F35A0000000000000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6125\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00000000000000E+6125\"}}" - }, - { - "description": "[decq641] fold-down full sequence (Clamped)", - "canonical_bson": "1800000013640000A0724E18090000000000000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6124\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0000000000000E+6124\"}}" - }, - { - "description": "[decq643] fold-down full sequence (Clamped)", - "canonical_bson": "180000001364000010A5D4E8000000000000000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6123\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000000000E+6123\"}}" - }, - { - "description": "[decq645] fold-down full sequence (Clamped)", - "canonical_bson": "1800000013640000E8764817000000000000000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6122\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00000000000E+6122\"}}" - }, - { - "description": "[decq647] fold-down full sequence (Clamped)", - "canonical_bson": "1800000013640000E40B5402000000000000000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6121\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0000000000E+6121\"}}" - }, - { - "description": "[decq649] fold-down full sequence (Clamped)", - "canonical_bson": "1800000013640000CA9A3B00000000000000000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6120\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000000E+6120\"}}" - }, - { - "description": "[decq651] fold-down full sequence (Clamped)", - "canonical_bson": "1800000013640000E1F50500000000000000000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6119\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00000000E+6119\"}}" - }, - { - "description": "[decq653] fold-down full sequence (Clamped)", - "canonical_bson": "180000001364008096980000000000000000000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6118\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0000000E+6118\"}}" - }, - { - "description": "[decq655] fold-down full sequence (Clamped)", - "canonical_bson": "1800000013640040420F0000000000000000000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6117\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000E+6117\"}}" - }, - { - "description": "[decq657] fold-down full sequence (Clamped)", - "canonical_bson": "18000000136400A086010000000000000000000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6116\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00000E+6116\"}}" - }, - { - "description": "[decq659] fold-down full sequence (Clamped)", - "canonical_bson": "180000001364001027000000000000000000000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6115\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0000E+6115\"}}" - }, - { - "description": "[decq661] fold-down full sequence (Clamped)", - "canonical_bson": "18000000136400E803000000000000000000000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6114\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000E+6114\"}}" - }, - { - "description": "[decq663] fold-down full sequence (Clamped)", - "canonical_bson": "180000001364006400000000000000000000000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6113\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.00E+6113\"}}" - }, - { - "description": "[decq665] fold-down full sequence (Clamped)", - "canonical_bson": "180000001364000A00000000000000000000000000FE5F00", - "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+6112\"}}", - "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E+6112\"}}" - } - ] -} - diff --git a/testdata/bson-corpus/decimal128-6.json b/testdata/bson-corpus/decimal128-6.json deleted file mode 100644 index eba6764e85..0000000000 --- a/testdata/bson-corpus/decimal128-6.json +++ /dev/null @@ -1,131 +0,0 @@ -{ - "description": "Decimal128", - "bson_type": "0x13", - "test_key": "d", - "parseErrors": [ - { - "description": "Incomplete Exponent", - "string": "1e" - }, - { - "description": "Exponent at the beginning", - "string": "E01" - }, - { - "description": "Just a decimal place", - "string": "." - }, - { - "description": "2 decimal places", - "string": "..3" - }, - { - "description": "2 decimal places", - "string": ".13.3" - }, - { - "description": "2 decimal places", - "string": "1..3" - }, - { - "description": "2 decimal places", - "string": "1.3.4" - }, - { - "description": "2 decimal places", - "string": "1.34." - }, - { - "description": "Decimal with no digits", - "string": ".e" - }, - { - "description": "2 signs", - "string": "+-32.4" - }, - { - "description": "2 signs", - "string": "-+32.4" - }, - { - "description": "2 negative signs", - "string": "--32.4" - }, - { - "description": "2 negative signs", - "string": "-32.-4" - }, - { - "description": "End in negative sign", - "string": "32.0-" - }, - { - "description": "2 negative signs", - "string": "32.4E--21" - }, - { - "description": "2 negative signs", - "string": "32.4E-2-1" - }, - { - "description": "2 signs", - "string": "32.4E+-21" - }, - { - "description": "Empty string", - "string": "" - }, - { - "description": "leading white space positive number", - "string": " 1" - }, - { - "description": "leading white space negative number", - "string": " -1" - }, - { - "description": "trailing white space", - "string": "1 " - }, - { - "description": "Invalid", - "string": "E" - }, - { - "description": "Invalid", - "string": "invalid" - }, - { - "description": "Invalid", - "string": "i" - }, - { - "description": "Invalid", - "string": "in" - }, - { - "description": "Invalid", - "string": "-in" - }, - { - "description": "Invalid", - "string": "Na" - }, - { - "description": "Invalid", - "string": "-Na" - }, - { - "description": "Invalid", - "string": "1.23abc" - }, - { - "description": "Invalid", - "string": "1.23abcE+02" - }, - { - "description": "Invalid", - "string": "1.23E+0aabs2" - } - ] -} diff --git a/testdata/bson-corpus/decimal128-7.json b/testdata/bson-corpus/decimal128-7.json deleted file mode 100644 index 0b78f1237b..0000000000 --- a/testdata/bson-corpus/decimal128-7.json +++ /dev/null @@ -1,327 +0,0 @@ -{ - "description": "Decimal128", - "bson_type": "0x13", - "test_key": "d", - "parseErrors": [ - { - "description": "[basx572] Near-specials (Conversion_syntax)", - "string": "-9Inf" - }, - { - "description": "[basx516] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "-1-" - }, - { - "description": "[basx533] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "0000.." - }, - { - "description": "[basx534] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": ".0000." - }, - { - "description": "[basx535] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "00..00" - }, - { - "description": "[basx569] Near-specials (Conversion_syntax)", - "string": "0Inf" - }, - { - "description": "[basx571] Near-specials (Conversion_syntax)", - "string": "-0Inf" - }, - { - "description": "[basx575] Near-specials (Conversion_syntax)", - "string": "0sNaN" - }, - { - "description": "[basx503] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "++1" - }, - { - "description": "[basx504] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "--1" - }, - { - "description": "[basx505] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "-+1" - }, - { - "description": "[basx506] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "+-1" - }, - { - "description": "[basx510] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": " +1" - }, - { - "description": "[basx513] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": " + 1" - }, - { - "description": "[basx514] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": " - 1" - }, - { - "description": "[basx501] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "." - }, - { - "description": "[basx502] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": ".." - }, - { - "description": "[basx519] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "" - }, - { - "description": "[basx525] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "e100" - }, - { - "description": "[basx549] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "e+1" - }, - { - "description": "[basx577] some baddies with dots and Es and dots and specials (Conversion_syntax)", - "string": ".e+1" - }, - { - "description": "[basx578] some baddies with dots and Es and dots and specials (Conversion_syntax)", - "string": "+.e+1" - }, - { - "description": "[basx581] some baddies with dots and Es and dots and specials (Conversion_syntax)", - "string": "E+1" - }, - { - "description": "[basx582] some baddies with dots and Es and dots and specials (Conversion_syntax)", - "string": ".E+1" - }, - { - "description": "[basx583] some baddies with dots and Es and dots and specials (Conversion_syntax)", - "string": "+.E+1" - }, - { - "description": "[basx579] some baddies with dots and Es and dots and specials (Conversion_syntax)", - "string": "-.e+" - }, - { - "description": "[basx580] some baddies with dots and Es and dots and specials (Conversion_syntax)", - "string": "-.e" - }, - { - "description": "[basx584] some baddies with dots and Es and dots and specials (Conversion_syntax)", - "string": "-.E+" - }, - { - "description": "[basx585] some baddies with dots and Es and dots and specials (Conversion_syntax)", - "string": "-.E" - }, - { - "description": "[basx589] some baddies with dots and Es and dots and specials (Conversion_syntax)", - "string": "+.Inf" - }, - { - "description": "[basx586] some baddies with dots and Es and dots and specials (Conversion_syntax)", - "string": ".NaN" - }, - { - "description": "[basx587] some baddies with dots and Es and dots and specials (Conversion_syntax)", - "string": "-.NaN" - }, - { - "description": "[basx545] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "ONE" - }, - { - "description": "[basx561] Near-specials (Conversion_syntax)", - "string": "qNaN" - }, - { - "description": "[basx573] Near-specials (Conversion_syntax)", - "string": "-sNa" - }, - { - "description": "[basx588] some baddies with dots and Es and dots and specials (Conversion_syntax)", - "string": "+.sNaN" - }, - { - "description": "[basx544] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "ten" - }, - { - "description": "[basx527] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "u0b65" - }, - { - "description": "[basx526] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "u0e5a" - }, - { - "description": "[basx515] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "x" - }, - { - "description": "[basx574] Near-specials (Conversion_syntax)", - "string": "xNaN" - }, - { - "description": "[basx530] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": ".123.5" - }, - { - "description": "[basx500] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "1..2" - }, - { - "description": "[basx542] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "1e1.0" - }, - { - "description": "[basx553] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "1E+1.2.3" - }, - { - "description": "[basx543] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "1e123e" - }, - { - "description": "[basx552] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "1E+1.2" - }, - { - "description": "[basx546] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "1e.1" - }, - { - "description": "[basx547] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "1e1." - }, - { - "description": "[basx554] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "1E++1" - }, - { - "description": "[basx555] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "1E--1" - }, - { - "description": "[basx556] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "1E+-1" - }, - { - "description": "[basx557] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "1E-+1" - }, - { - "description": "[basx558] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "1E'1" - }, - { - "description": "[basx559] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "1E\"1" - }, - { - "description": "[basx520] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "1e-" - }, - { - "description": "[basx560] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "1E" - }, - { - "description": "[basx548] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "1ee" - }, - { - "description": "[basx551] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "1.2.1" - }, - { - "description": "[basx550] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "1.23.4" - }, - { - "description": "[basx529] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "1.34.5" - }, - { - "description": "[basx531] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "01.35." - }, - { - "description": "[basx532] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "01.35-" - }, - { - "description": "[basx518] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "3+" - }, - { - "description": "[basx521] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "7e99999a" - }, - { - "description": "[basx570] Near-specials (Conversion_syntax)", - "string": "9Inf" - }, - { - "description": "[basx512] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "12 " - }, - { - "description": "[basx517] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "12-" - }, - { - "description": "[basx507] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "12e" - }, - { - "description": "[basx508] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "12e++" - }, - { - "description": "[basx509] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "12f4" - }, - { - "description": "[basx536] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "111e*123" - }, - { - "description": "[basx537] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "111e123-" - }, - { - "description": "[basx540] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "111e1*23" - }, - { - "description": "[basx538] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "111e+12+" - }, - { - "description": "[basx539] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "111e1-3-" - }, - { - "description": "[basx541] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "111E1e+3" - }, - { - "description": "[basx528] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "123,65" - }, - { - "description": "[basx523] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "7e12356789012x" - }, - { - "description": "[basx522] The 'baddies' tests from DiagBigDecimal, plus some new ones (Conversion_syntax)", - "string": "7e123567890x" - } - ] -} diff --git a/testdata/bson-corpus/document.json b/testdata/bson-corpus/document.json deleted file mode 100644 index 698e7ae90a..0000000000 --- a/testdata/bson-corpus/document.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "description": "Document type (sub-documents)", - "bson_type": "0x03", - "test_key": "x", - "valid": [ - { - "description": "Empty subdoc", - "canonical_bson": "0D000000037800050000000000", - "canonical_extjson": "{\"x\" : {}}" - }, - { - "description": "Empty-string key subdoc", - "canonical_bson": "150000000378000D00000002000200000062000000", - "canonical_extjson": "{\"x\" : {\"\" : \"b\"}}" - }, - { - "description": "Single-character key subdoc", - "canonical_bson": "160000000378000E0000000261000200000062000000", - "canonical_extjson": "{\"x\" : {\"a\" : \"b\"}}" - }, - { - "description": "Dollar-prefixed key in sub-document", - "canonical_bson": "170000000378000F000000022461000200000062000000", - "canonical_extjson": "{\"x\" : {\"$a\" : \"b\"}}" - }, - { - "description": "Dollar as key in sub-document", - "canonical_bson": "160000000378000E0000000224000200000061000000", - "canonical_extjson": "{\"x\" : {\"$\" : \"a\"}}" - }, - { - "description": "Dotted key in sub-document", - "canonical_bson": "180000000378001000000002612E62000200000063000000", - "canonical_extjson": "{\"x\" : {\"a.b\" : \"c\"}}" - }, - { - "description": "Dot as key in sub-document", - "canonical_bson": "160000000378000E000000022E000200000061000000", - "canonical_extjson": "{\"x\" : {\".\" : \"a\"}}" - } - ], - "decodeErrors": [ - { - "description": "Subdocument length too long: eats outer terminator", - "bson": "1800000003666F6F000F0000001062617200FFFFFF7F0000" - }, - { - "description": "Subdocument length too short: leaks terminator", - "bson": "1500000003666F6F000A0000000862617200010000" - }, - { - "description": "Invalid subdocument: bad string length in field", - "bson": "1C00000003666F6F001200000002626172000500000062617A000000" - }, - { - "description": "Null byte in sub-document key", - "bson": "150000000378000D00000010610000010000000000" - } - ] -} diff --git a/testdata/bson-corpus/double.json b/testdata/bson-corpus/double.json deleted file mode 100644 index d5b8fb3d7e..0000000000 --- a/testdata/bson-corpus/double.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "description": "Double type", - "bson_type": "0x01", - "test_key": "d", - "valid": [ - { - "description": "+1.0", - "canonical_bson": "10000000016400000000000000F03F00", - "canonical_extjson": "{\"d\" : {\"$numberDouble\": \"1.0\"}}", - "relaxed_extjson": "{\"d\" : 1.0}" - }, - { - "description": "-1.0", - "canonical_bson": "10000000016400000000000000F0BF00", - "canonical_extjson": "{\"d\" : {\"$numberDouble\": \"-1.0\"}}", - "relaxed_extjson": "{\"d\" : -1.0}" - }, - { - "description": "+1.0001220703125", - "canonical_bson": "10000000016400000000008000F03F00", - "canonical_extjson": "{\"d\" : {\"$numberDouble\": \"1.0001220703125\"}}", - "relaxed_extjson": "{\"d\" : 1.0001220703125}" - }, - { - "description": "-1.0001220703125", - "canonical_bson": "10000000016400000000008000F0BF00", - "canonical_extjson": "{\"d\" : {\"$numberDouble\": \"-1.0001220703125\"}}", - "relaxed_extjson": "{\"d\" : -1.0001220703125}" - }, - { - "description": "1.2345678921232E+18", - "canonical_bson": "100000000164002a1bf5f41022b14300", - "canonical_extjson": "{\"d\" : {\"$numberDouble\": \"1.2345678921232E+18\"}}", - "relaxed_extjson": "{\"d\" : 1.2345678921232E+18}" - }, - { - "description": "-1.2345678921232E+18", - "canonical_bson": "100000000164002a1bf5f41022b1c300", - "canonical_extjson": "{\"d\" : {\"$numberDouble\": \"-1.2345678921232E+18\"}}", - "relaxed_extjson": "{\"d\" : -1.2345678921232E+18}" - }, - { - "description": "0.0", - "canonical_bson": "10000000016400000000000000000000", - "canonical_extjson": "{\"d\" : {\"$numberDouble\": \"0.0\"}}", - "relaxed_extjson": "{\"d\" : 0.0}" - }, - { - "description": "-0.0", - "canonical_bson": "10000000016400000000000000008000", - "canonical_extjson": "{\"d\" : {\"$numberDouble\": \"-0.0\"}}", - "relaxed_extjson": "{\"d\" : -0.0}" - }, - { - "description": "NaN", - "canonical_bson": "10000000016400000000000000F87F00", - "canonical_extjson": "{\"d\": {\"$numberDouble\": \"NaN\"}}", - "relaxed_extjson": "{\"d\": {\"$numberDouble\": \"NaN\"}}", - "lossy": true - }, - { - "description": "NaN with payload", - "canonical_bson": "10000000016400120000000000F87F00", - "canonical_extjson": "{\"d\": {\"$numberDouble\": \"NaN\"}}", - "relaxed_extjson": "{\"d\": {\"$numberDouble\": \"NaN\"}}", - "lossy": true - }, - { - "description": "Inf", - "canonical_bson": "10000000016400000000000000F07F00", - "canonical_extjson": "{\"d\": {\"$numberDouble\": \"Infinity\"}}", - "relaxed_extjson": "{\"d\": {\"$numberDouble\": \"Infinity\"}}" - }, - { - "description": "-Inf", - "canonical_bson": "10000000016400000000000000F0FF00", - "canonical_extjson": "{\"d\": {\"$numberDouble\": \"-Infinity\"}}", - "relaxed_extjson": "{\"d\": {\"$numberDouble\": \"-Infinity\"}}" - } - ], - "decodeErrors": [ - { - "description": "double truncated", - "bson": "0B0000000164000000F03F00" - } - ] -} diff --git a/testdata/bson-corpus/int32.json b/testdata/bson-corpus/int32.json deleted file mode 100644 index 1353fc3df8..0000000000 --- a/testdata/bson-corpus/int32.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "description": "Int32 type", - "bson_type": "0x10", - "test_key": "i", - "valid": [ - { - "description": "MinValue", - "canonical_bson": "0C0000001069000000008000", - "canonical_extjson": "{\"i\" : {\"$numberInt\": \"-2147483648\"}}", - "relaxed_extjson": "{\"i\" : -2147483648}" - }, - { - "description": "MaxValue", - "canonical_bson": "0C000000106900FFFFFF7F00", - "canonical_extjson": "{\"i\" : {\"$numberInt\": \"2147483647\"}}", - "relaxed_extjson": "{\"i\" : 2147483647}" - }, - { - "description": "-1", - "canonical_bson": "0C000000106900FFFFFFFF00", - "canonical_extjson": "{\"i\" : {\"$numberInt\": \"-1\"}}", - "relaxed_extjson": "{\"i\" : -1}" - }, - { - "description": "0", - "canonical_bson": "0C0000001069000000000000", - "canonical_extjson": "{\"i\" : {\"$numberInt\": \"0\"}}", - "relaxed_extjson": "{\"i\" : 0}" - }, - { - "description": "1", - "canonical_bson": "0C0000001069000100000000", - "canonical_extjson": "{\"i\" : {\"$numberInt\": \"1\"}}", - "relaxed_extjson": "{\"i\" : 1}" - } - ], - "decodeErrors": [ - { - "description": "Bad int32 field length", - "bson": "090000001061000500" - } - ] -} diff --git a/testdata/bson-corpus/int64.json b/testdata/bson-corpus/int64.json deleted file mode 100644 index 91f4abff95..0000000000 --- a/testdata/bson-corpus/int64.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "description": "Int64 type", - "bson_type": "0x12", - "test_key": "a", - "valid": [ - { - "description": "MinValue", - "canonical_bson": "10000000126100000000000000008000", - "canonical_extjson": "{\"a\" : {\"$numberLong\" : \"-9223372036854775808\"}}", - "relaxed_extjson": "{\"a\" : -9223372036854775808}" - }, - { - "description": "MaxValue", - "canonical_bson": "10000000126100FFFFFFFFFFFFFF7F00", - "canonical_extjson": "{\"a\" : {\"$numberLong\" : \"9223372036854775807\"}}", - "relaxed_extjson": "{\"a\" : 9223372036854775807}" - }, - { - "description": "-1", - "canonical_bson": "10000000126100FFFFFFFFFFFFFFFF00", - "canonical_extjson": "{\"a\" : {\"$numberLong\" : \"-1\"}}", - "relaxed_extjson": "{\"a\" : -1}" - }, - { - "description": "0", - "canonical_bson": "10000000126100000000000000000000", - "canonical_extjson": "{\"a\" : {\"$numberLong\" : \"0\"}}", - "relaxed_extjson": "{\"a\" : 0}" - }, - { - "description": "1", - "canonical_bson": "10000000126100010000000000000000", - "canonical_extjson": "{\"a\" : {\"$numberLong\" : \"1\"}}", - "relaxed_extjson": "{\"a\" : 1}" - } - ], - "decodeErrors": [ - { - "description": "int64 field truncated", - "bson": "0C0000001261001234567800" - } - ] -} diff --git a/testdata/bson-corpus/maxkey.json b/testdata/bson-corpus/maxkey.json deleted file mode 100644 index 67cad6db57..0000000000 --- a/testdata/bson-corpus/maxkey.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "description": "Maxkey type", - "bson_type": "0x7F", - "test_key": "a", - "valid": [ - { - "description": "Maxkey", - "canonical_bson": "080000007F610000", - "canonical_extjson": "{\"a\" : {\"$maxKey\" : 1}}" - } - ] -} diff --git a/testdata/bson-corpus/minkey.json b/testdata/bson-corpus/minkey.json deleted file mode 100644 index 8adee4509a..0000000000 --- a/testdata/bson-corpus/minkey.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "description": "Minkey type", - "bson_type": "0xFF", - "test_key": "a", - "valid": [ - { - "description": "Minkey", - "canonical_bson": "08000000FF610000", - "canonical_extjson": "{\"a\" : {\"$minKey\" : 1}}" - } - ] -} diff --git a/testdata/bson-corpus/multi-type-deprecated.json b/testdata/bson-corpus/multi-type-deprecated.json deleted file mode 100644 index 665f388cd4..0000000000 --- a/testdata/bson-corpus/multi-type-deprecated.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "description": "Multiple types within the same document", - "bson_type": "0x00", - "deprecated": true, - "valid": [ - { - "description": "All BSON types", - "canonical_bson": "38020000075F69640057E193D7A9CC81B4027498B50E53796D626F6C000700000073796D626F6C0002537472696E670007000000737472696E670010496E743332002A00000012496E743634002A0000000000000001446F75626C6500000000000000F0BF0542696E617279001000000003A34C38F7C3ABEDC8A37814A992AB8DB60542696E61727955736572446566696E656400050000008001020304050D436F6465000E00000066756E6374696F6E2829207B7D000F436F64655769746853636F7065001B0000000E00000066756E6374696F6E2829207B7D00050000000003537562646F63756D656E74001200000002666F6F0004000000626172000004417272617900280000001030000100000010310002000000103200030000001033000400000010340005000000001154696D657374616D7000010000002A0000000B5265676578007061747465726E0000094461746574696D6545706F6368000000000000000000094461746574696D65506F73697469766500FFFFFF7F00000000094461746574696D654E656761746976650000000080FFFFFFFF085472756500010846616C736500000C4442506F696E746572000B000000636F6C6C656374696F6E0057E193D7A9CC81B4027498B1034442526566003D0000000224726566000B000000636F6C6C656374696F6E00072469640057FD71E96E32AB4225B723FB02246462000900000064617461626173650000FF4D696E6B6579007F4D61786B6579000A4E756C6C0006556E646566696E65640000", - "converted_bson": "48020000075f69640057e193d7a9cc81b4027498b50253796d626f6c000700000073796d626f6c0002537472696e670007000000737472696e670010496e743332002a00000012496e743634002a0000000000000001446f75626c6500000000000000f0bf0542696e617279001000000003a34c38f7c3abedc8a37814a992ab8db60542696e61727955736572446566696e656400050000008001020304050d436f6465000e00000066756e6374696f6e2829207b7d000f436f64655769746853636f7065001b0000000e00000066756e6374696f6e2829207b7d00050000000003537562646f63756d656e74001200000002666f6f0004000000626172000004417272617900280000001030000100000010310002000000103200030000001033000400000010340005000000001154696d657374616d7000010000002a0000000b5265676578007061747465726e0000094461746574696d6545706f6368000000000000000000094461746574696d65506f73697469766500ffffff7f00000000094461746574696d654e656761746976650000000080ffffffff085472756500010846616c73650000034442506f696e746572002b0000000224726566000b000000636f6c6c656374696f6e00072469640057e193d7a9cc81b4027498b100034442526566003d0000000224726566000b000000636f6c6c656374696f6e00072469640057fd71e96e32ab4225b723fb02246462000900000064617461626173650000ff4d696e6b6579007f4d61786b6579000a4e756c6c000a556e646566696e65640000", - "canonical_extjson": "{\"_id\": {\"$oid\": \"57e193d7a9cc81b4027498b5\"}, \"Symbol\": {\"$symbol\": \"symbol\"}, \"String\": \"string\", \"Int32\": {\"$numberInt\": \"42\"}, \"Int64\": {\"$numberLong\": \"42\"}, \"Double\": {\"$numberDouble\": \"-1.0\"}, \"Binary\": { \"$binary\" : {\"base64\": \"o0w498Or7cijeBSpkquNtg==\", \"subType\": \"03\"}}, \"BinaryUserDefined\": { \"$binary\" : {\"base64\": \"AQIDBAU=\", \"subType\": \"80\"}}, \"Code\": {\"$code\": \"function() {}\"}, \"CodeWithScope\": {\"$code\": \"function() {}\", \"$scope\": {}}, \"Subdocument\": {\"foo\": \"bar\"}, \"Array\": [{\"$numberInt\": \"1\"}, {\"$numberInt\": \"2\"}, {\"$numberInt\": \"3\"}, {\"$numberInt\": \"4\"}, {\"$numberInt\": \"5\"}], \"Timestamp\": {\"$timestamp\": {\"t\": 42, \"i\": 1}}, \"Regex\": {\"$regularExpression\": {\"pattern\": \"pattern\", \"options\": \"\"}}, \"DatetimeEpoch\": {\"$date\": {\"$numberLong\": \"0\"}}, \"DatetimePositive\": {\"$date\": {\"$numberLong\": \"2147483647\"}}, \"DatetimeNegative\": {\"$date\": {\"$numberLong\": \"-2147483648\"}}, \"True\": true, \"False\": false, \"DBPointer\": {\"$dbPointer\": {\"$ref\": \"collection\", \"$id\": {\"$oid\": \"57e193d7a9cc81b4027498b1\"}}}, \"DBRef\": {\"$ref\": \"collection\", \"$id\": {\"$oid\": \"57fd71e96e32ab4225b723fb\"}, \"$db\": \"database\"}, \"Minkey\": {\"$minKey\": 1}, \"Maxkey\": {\"$maxKey\": 1}, \"Null\": null, \"Undefined\": {\"$undefined\": true}}", - "converted_extjson": "{\"_id\": {\"$oid\": \"57e193d7a9cc81b4027498b5\"}, \"Symbol\": \"symbol\", \"String\": \"string\", \"Int32\": {\"$numberInt\": \"42\"}, \"Int64\": {\"$numberLong\": \"42\"}, \"Double\": {\"$numberDouble\": \"-1.0\"}, \"Binary\": { \"$binary\" : {\"base64\": \"o0w498Or7cijeBSpkquNtg==\", \"subType\": \"03\"}}, \"BinaryUserDefined\": { \"$binary\" : {\"base64\": \"AQIDBAU=\", \"subType\": \"80\"}}, \"Code\": {\"$code\": \"function() {}\"}, \"CodeWithScope\": {\"$code\": \"function() {}\", \"$scope\": {}}, \"Subdocument\": {\"foo\": \"bar\"}, \"Array\": [{\"$numberInt\": \"1\"}, {\"$numberInt\": \"2\"}, {\"$numberInt\": \"3\"}, {\"$numberInt\": \"4\"}, {\"$numberInt\": \"5\"}], \"Timestamp\": {\"$timestamp\": {\"t\": 42, \"i\": 1}}, \"Regex\": {\"$regularExpression\": {\"pattern\": \"pattern\", \"options\": \"\"}}, \"DatetimeEpoch\": {\"$date\": {\"$numberLong\": \"0\"}}, \"DatetimePositive\": {\"$date\": {\"$numberLong\": \"2147483647\"}}, \"DatetimeNegative\": {\"$date\": {\"$numberLong\": \"-2147483648\"}}, \"True\": true, \"False\": false, \"DBPointer\": {\"$ref\": \"collection\", \"$id\": {\"$oid\": \"57e193d7a9cc81b4027498b1\"}}, \"DBRef\": {\"$ref\": \"collection\", \"$id\": {\"$oid\": \"57fd71e96e32ab4225b723fb\"}, \"$db\": \"database\"}, \"Minkey\": {\"$minKey\": 1}, \"Maxkey\": {\"$maxKey\": 1}, \"Null\": null, \"Undefined\": null}" - } - ] -} - diff --git a/testdata/bson-corpus/multi-type.json b/testdata/bson-corpus/multi-type.json deleted file mode 100644 index 1e1d557c9b..0000000000 --- a/testdata/bson-corpus/multi-type.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "description": "Multiple types within the same document", - "bson_type": "0x00", - "valid": [ - { - "description": "All BSON types", - "canonical_bson": "F4010000075F69640057E193D7A9CC81B4027498B502537472696E670007000000737472696E670010496E743332002A00000012496E743634002A0000000000000001446F75626C6500000000000000F0BF0542696E617279001000000003A34C38F7C3ABEDC8A37814A992AB8DB60542696E61727955736572446566696E656400050000008001020304050D436F6465000E00000066756E6374696F6E2829207B7D000F436F64655769746853636F7065001B0000000E00000066756E6374696F6E2829207B7D00050000000003537562646F63756D656E74001200000002666F6F0004000000626172000004417272617900280000001030000100000010310002000000103200030000001033000400000010340005000000001154696D657374616D7000010000002A0000000B5265676578007061747465726E0000094461746574696D6545706F6368000000000000000000094461746574696D65506F73697469766500FFFFFF7F00000000094461746574696D654E656761746976650000000080FFFFFFFF085472756500010846616C73650000034442526566003D0000000224726566000B000000636F6C6C656374696F6E00072469640057FD71E96E32AB4225B723FB02246462000900000064617461626173650000FF4D696E6B6579007F4D61786B6579000A4E756C6C0000", - "canonical_extjson": "{\"_id\": {\"$oid\": \"57e193d7a9cc81b4027498b5\"}, \"String\": \"string\", \"Int32\": {\"$numberInt\": \"42\"}, \"Int64\": {\"$numberLong\": \"42\"}, \"Double\": {\"$numberDouble\": \"-1.0\"}, \"Binary\": { \"$binary\" : {\"base64\": \"o0w498Or7cijeBSpkquNtg==\", \"subType\": \"03\"}}, \"BinaryUserDefined\": { \"$binary\" : {\"base64\": \"AQIDBAU=\", \"subType\": \"80\"}}, \"Code\": {\"$code\": \"function() {}\"}, \"CodeWithScope\": {\"$code\": \"function() {}\", \"$scope\": {}}, \"Subdocument\": {\"foo\": \"bar\"}, \"Array\": [{\"$numberInt\": \"1\"}, {\"$numberInt\": \"2\"}, {\"$numberInt\": \"3\"}, {\"$numberInt\": \"4\"}, {\"$numberInt\": \"5\"}], \"Timestamp\": {\"$timestamp\": {\"t\": 42, \"i\": 1}}, \"Regex\": {\"$regularExpression\": {\"pattern\": \"pattern\", \"options\": \"\"}}, \"DatetimeEpoch\": {\"$date\": {\"$numberLong\": \"0\"}}, \"DatetimePositive\": {\"$date\": {\"$numberLong\": \"2147483647\"}}, \"DatetimeNegative\": {\"$date\": {\"$numberLong\": \"-2147483648\"}}, \"True\": true, \"False\": false, \"DBRef\": {\"$ref\": \"collection\", \"$id\": {\"$oid\": \"57fd71e96e32ab4225b723fb\"}, \"$db\": \"database\"}, \"Minkey\": {\"$minKey\": 1}, \"Maxkey\": {\"$maxKey\": 1}, \"Null\": null}" - } - ] -} diff --git a/testdata/bson-corpus/null.json b/testdata/bson-corpus/null.json deleted file mode 100644 index f9b269473e..0000000000 --- a/testdata/bson-corpus/null.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "description": "Null type", - "bson_type": "0x0A", - "test_key": "a", - "valid": [ - { - "description": "Null", - "canonical_bson": "080000000A610000", - "canonical_extjson": "{\"a\" : null}" - } - ] -} diff --git a/testdata/bson-corpus/oid.json b/testdata/bson-corpus/oid.json deleted file mode 100644 index 14e9caf4b4..0000000000 --- a/testdata/bson-corpus/oid.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "description": "ObjectId", - "bson_type": "0x07", - "test_key": "a", - "valid": [ - { - "description": "All zeroes", - "canonical_bson": "1400000007610000000000000000000000000000", - "canonical_extjson": "{\"a\" : {\"$oid\" : \"000000000000000000000000\"}}" - }, - { - "description": "All ones", - "canonical_bson": "14000000076100FFFFFFFFFFFFFFFFFFFFFFFF00", - "canonical_extjson": "{\"a\" : {\"$oid\" : \"ffffffffffffffffffffffff\"}}" - }, - { - "description": "Random", - "canonical_bson": "1400000007610056E1FC72E0C917E9C471416100", - "canonical_extjson": "{\"a\" : {\"$oid\" : \"56e1fc72e0c917e9c4714161\"}}" - } - ], - "decodeErrors": [ - { - "description": "OID truncated", - "bson": "1200000007610056E1FC72E0C917E9C471" - } - ] -} diff --git a/testdata/bson-corpus/regex.json b/testdata/bson-corpus/regex.json deleted file mode 100644 index 223802169d..0000000000 --- a/testdata/bson-corpus/regex.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "description": "Regular Expression type", - "bson_type": "0x0B", - "test_key": "a", - "valid": [ - { - "description": "empty regex with no options", - "canonical_bson": "0A0000000B6100000000", - "canonical_extjson": "{\"a\" : {\"$regularExpression\" : { \"pattern\": \"\", \"options\" : \"\"}}}" - }, - { - "description": "regex without options", - "canonical_bson": "0D0000000B6100616263000000", - "canonical_extjson": "{\"a\" : {\"$regularExpression\" : { \"pattern\": \"abc\", \"options\" : \"\"}}}" - }, - { - "description": "regex with options", - "canonical_bson": "0F0000000B610061626300696D0000", - "canonical_extjson": "{\"a\" : {\"$regularExpression\" : { \"pattern\": \"abc\", \"options\" : \"im\"}}}" - }, - { - "description": "regex with options (keys reversed)", - "canonical_bson": "0F0000000B610061626300696D0000", - "canonical_extjson": "{\"a\" : {\"$regularExpression\" : { \"pattern\": \"abc\", \"options\" : \"im\"}}}", - "degenerate_extjson": "{\"a\" : {\"$regularExpression\" : {\"options\" : \"im\", \"pattern\": \"abc\"}}}" - }, - { - "description": "regex with slash", - "canonical_bson": "110000000B610061622F636400696D0000", - "canonical_extjson": "{\"a\" : {\"$regularExpression\" : { \"pattern\": \"ab/cd\", \"options\" : \"im\"}}}" - }, - { - "description": "flags not alphabetized", - "degenerate_bson": "100000000B6100616263006D69780000", - "canonical_bson": "100000000B610061626300696D780000", - "canonical_extjson": "{\"a\" : {\"$regularExpression\" : { \"pattern\": \"abc\", \"options\" : \"imx\"}}}", - "degenerate_extjson": "{\"a\" : {\"$regularExpression\" : { \"pattern\": \"abc\", \"options\" : \"mix\"}}}" - }, - { - "description" : "Required escapes", - "canonical_bson" : "100000000B610061625C226162000000", - "canonical_extjson": "{\"a\" : {\"$regularExpression\" : { \"pattern\": \"ab\\\\\\\"ab\", \"options\" : \"\"}}}" - }, - { - "description" : "Regular expression as value of $regex query operator", - "canonical_bson" : "180000000B247265676578007061747465726E0069780000", - "canonical_extjson": "{\"$regex\" : {\"$regularExpression\" : { \"pattern\": \"pattern\", \"options\" : \"ix\"}}}" - }, - { - "description" : "Regular expression as value of $regex query operator with $options", - "canonical_bson" : "270000000B247265676578007061747465726E000002246F7074696F6E73000300000069780000", - "canonical_extjson": "{\"$regex\" : {\"$regularExpression\" : { \"pattern\": \"pattern\", \"options\" : \"\"}}, \"$options\" : \"ix\"}" - } - ], - "decodeErrors": [ - { - "description": "Null byte in pattern string", - "bson": "0F0000000B610061006300696D0000" - }, - { - "description": "Null byte in flags string", - "bson": "100000000B61006162630069006D0000" - } - ] -} diff --git a/testdata/bson-corpus/string.json b/testdata/bson-corpus/string.json deleted file mode 100644 index 148334d091..0000000000 --- a/testdata/bson-corpus/string.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "description": "String", - "bson_type": "0x02", - "test_key": "a", - "valid": [ - { - "description": "Empty string", - "canonical_bson": "0D000000026100010000000000", - "canonical_extjson": "{\"a\" : \"\"}" - }, - { - "description": "Single character", - "canonical_bson": "0E00000002610002000000620000", - "canonical_extjson": "{\"a\" : \"b\"}" - }, - { - "description": "Multi-character", - "canonical_bson": "190000000261000D0000006162616261626162616261620000", - "canonical_extjson": "{\"a\" : \"abababababab\"}" - }, - { - "description": "two-byte UTF-8 (\u00e9)", - "canonical_bson": "190000000261000D000000C3A9C3A9C3A9C3A9C3A9C3A90000", - "canonical_extjson": "{\"a\" : \"\\u00e9\\u00e9\\u00e9\\u00e9\\u00e9\\u00e9\"}" - }, - { - "description": "three-byte UTF-8 (\u2606)", - "canonical_bson": "190000000261000D000000E29886E29886E29886E298860000", - "canonical_extjson": "{\"a\" : \"\\u2606\\u2606\\u2606\\u2606\"}" - }, - { - "description": "Embedded nulls", - "canonical_bson": "190000000261000D0000006162006261620062616261620000", - "canonical_extjson": "{\"a\" : \"ab\\u0000bab\\u0000babab\"}" - }, - { - "description": "Required escapes", - "canonical_bson" : "320000000261002600000061625C220102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F61620000", - "canonical_extjson" : "{\"a\":\"ab\\\\\\\"\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001fab\"}" - } - ], - "decodeErrors": [ - { - "description": "bad string length: 0 (but no 0x00 either)", - "bson": "0C0000000261000000000000" - }, - { - "description": "bad string length: -1", - "bson": "0C000000026100FFFFFFFF00" - }, - { - "description": "bad string length: eats terminator", - "bson": "10000000026100050000006200620000" - }, - { - "description": "bad string length: longer than rest of document", - "bson": "120000000200FFFFFF00666F6F6261720000" - }, - { - "description": "string is not null-terminated", - "bson": "1000000002610004000000616263FF00" - }, - { - "description": "empty string, but extra null", - "bson": "0E00000002610001000000000000" - }, - { - "description": "invalid UTF-8", - "bson": "0E00000002610002000000E90000" - } - ] -} diff --git a/testdata/bson-corpus/symbol.json b/testdata/bson-corpus/symbol.json deleted file mode 100644 index 3dd3577ebd..0000000000 --- a/testdata/bson-corpus/symbol.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "description": "Symbol", - "bson_type": "0x0E", - "deprecated": true, - "test_key": "a", - "valid": [ - { - "description": "Empty string", - "canonical_bson": "0D0000000E6100010000000000", - "canonical_extjson": "{\"a\": {\"$symbol\": \"\"}}", - "converted_bson": "0D000000026100010000000000", - "converted_extjson": "{\"a\": \"\"}" - }, - { - "description": "Single character", - "canonical_bson": "0E0000000E610002000000620000", - "canonical_extjson": "{\"a\": {\"$symbol\": \"b\"}}", - "converted_bson": "0E00000002610002000000620000", - "converted_extjson": "{\"a\": \"b\"}" - }, - { - "description": "Multi-character", - "canonical_bson": "190000000E61000D0000006162616261626162616261620000", - "canonical_extjson": "{\"a\": {\"$symbol\": \"abababababab\"}}", - "converted_bson": "190000000261000D0000006162616261626162616261620000", - "converted_extjson": "{\"a\": \"abababababab\"}" - }, - { - "description": "two-byte UTF-8 (\u00e9)", - "canonical_bson": "190000000E61000D000000C3A9C3A9C3A9C3A9C3A9C3A90000", - "canonical_extjson": "{\"a\": {\"$symbol\": \"éééééé\"}}", - "converted_bson": "190000000261000D000000C3A9C3A9C3A9C3A9C3A9C3A90000", - "converted_extjson": "{\"a\": \"éééééé\"}" - }, - { - "description": "three-byte UTF-8 (\u2606)", - "canonical_bson": "190000000E61000D000000E29886E29886E29886E298860000", - "canonical_extjson": "{\"a\": {\"$symbol\": \"☆☆☆☆\"}}", - "converted_bson": "190000000261000D000000E29886E29886E29886E298860000", - "converted_extjson": "{\"a\": \"☆☆☆☆\"}" - }, - { - "description": "Embedded nulls", - "canonical_bson": "190000000E61000D0000006162006261620062616261620000", - "canonical_extjson": "{\"a\": {\"$symbol\": \"ab\\u0000bab\\u0000babab\"}}", - "converted_bson": "190000000261000D0000006162006261620062616261620000", - "converted_extjson": "{\"a\": \"ab\\u0000bab\\u0000babab\"}" - } - ], - "decodeErrors": [ - { - "description": "bad symbol length: 0 (but no 0x00 either)", - "bson": "0C0000000E61000000000000" - }, - { - "description": "bad symbol length: -1", - "bson": "0C0000000E6100FFFFFFFF00" - }, - { - "description": "bad symbol length: eats terminator", - "bson": "100000000E6100050000006200620000" - }, - { - "description": "bad symbol length: longer than rest of document", - "bson": "120000000E00FFFFFF00666F6F6261720000" - }, - { - "description": "symbol is not null-terminated", - "bson": "100000000E610004000000616263FF00" - }, - { - "description": "empty symbol, but extra null", - "bson": "0E0000000E610001000000000000" - }, - { - "description": "invalid UTF-8", - "bson": "0E0000000E610002000000E90000" - } - ] -} diff --git a/testdata/bson-corpus/timestamp.json b/testdata/bson-corpus/timestamp.json deleted file mode 100644 index 6f46564a32..0000000000 --- a/testdata/bson-corpus/timestamp.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "description": "Timestamp type", - "bson_type": "0x11", - "test_key": "a", - "valid": [ - { - "description": "Timestamp: (123456789, 42)", - "canonical_bson": "100000001161002A00000015CD5B0700", - "canonical_extjson": "{\"a\" : {\"$timestamp\" : {\"t\" : 123456789, \"i\" : 42} } }" - }, - { - "description": "Timestamp: (123456789, 42) (keys reversed)", - "canonical_bson": "100000001161002A00000015CD5B0700", - "canonical_extjson": "{\"a\" : {\"$timestamp\" : {\"t\" : 123456789, \"i\" : 42} } }", - "degenerate_extjson": "{\"a\" : {\"$timestamp\" : {\"i\" : 42, \"t\" : 123456789} } }" - }, - { - "description": "Timestamp with high-order bit set on both seconds and increment", - "canonical_bson": "10000000116100FFFFFFFFFFFFFFFF00", - "canonical_extjson": "{\"a\" : {\"$timestamp\" : {\"t\" : 4294967295, \"i\" : 4294967295} } }" - }, - { - "description": "Timestamp with high-order bit set on both seconds and increment (not UINT32_MAX)", - "canonical_bson": "1000000011610000286BEE00286BEE00", - "canonical_extjson": "{\"a\" : {\"$timestamp\" : {\"t\" : 4000000000, \"i\" : 4000000000} } }" - } - ], - "decodeErrors": [ - { - "description": "Truncated timestamp field", - "bson": "0f0000001161002A00000015CD5B00" - } - ] -} diff --git a/testdata/bson-corpus/top.json b/testdata/bson-corpus/top.json deleted file mode 100644 index 9c649b5e3f..0000000000 --- a/testdata/bson-corpus/top.json +++ /dev/null @@ -1,266 +0,0 @@ -{ - "description": "Top-level document validity", - "bson_type": "0x00", - "valid": [ - { - "description": "Dollar-prefixed key in top-level document", - "canonical_bson": "0F00000010246B6579002A00000000", - "canonical_extjson": "{\"$key\": {\"$numberInt\": \"42\"}}" - }, - { - "description": "Dollar as key in top-level document", - "canonical_bson": "0E00000002240002000000610000", - "canonical_extjson": "{\"$\": \"a\"}" - }, - { - "description": "Dotted key in top-level document", - "canonical_bson": "1000000002612E620002000000630000", - "canonical_extjson": "{\"a.b\": \"c\"}" - }, - { - "description": "Dot as key in top-level document", - "canonical_bson": "0E000000022E0002000000610000", - "canonical_extjson": "{\".\": \"a\"}" - } - ], - "decodeErrors": [ - { - "description": "An object size that's too small to even include the object size, but is a well-formed, empty object", - "bson": "0100000000" - }, - { - "description": "An object size that's only enough for the object size, but is a well-formed, empty object", - "bson": "0400000000" - }, - { - "description": "One object, with length shorter than size (missing EOO)", - "bson": "05000000" - }, - { - "description": "One object, sized correctly, with a spot for an EOO, but the EOO is 0x01", - "bson": "0500000001" - }, - { - "description": "One object, sized correctly, with a spot for an EOO, but the EOO is 0xff", - "bson": "05000000FF" - }, - { - "description": "One object, sized correctly, with a spot for an EOO, but the EOO is 0x70", - "bson": "0500000070" - }, - { - "description": "Byte count is zero (with non-zero input length)", - "bson": "00000000000000000000" - }, - { - "description": "Stated length exceeds byte count, with truncated document", - "bson": "1200000002666F6F0004000000626172" - }, - { - "description": "Stated length less than byte count, with garbage after envelope", - "bson": "1200000002666F6F00040000006261720000DEADBEEF" - }, - { - "description": "Stated length exceeds byte count, with valid envelope", - "bson": "1300000002666F6F00040000006261720000" - }, - { - "description": "Stated length less than byte count, with valid envelope", - "bson": "1100000002666F6F00040000006261720000" - }, - { - "description": "Invalid BSON type low range", - "bson": "07000000000000" - }, - { - "description": "Invalid BSON type high range", - "bson": "07000000800000" - }, - { - "description": "Document truncated mid-key", - "bson": "1200000002666F" - }, - { - "description": "Null byte in document key", - "bson": "0D000000107800000100000000" - } - ], - "parseErrors": [ - { - "description" : "Bad $regularExpression (extra field)", - "string" : "{\"a\" : {\"$regularExpression\": {\"pattern\": \"abc\", \"options\": \"\", \"unrelated\": true}}}" - }, - { - "description" : "Bad $regularExpression (missing options field)", - "string" : "{\"a\" : {\"$regularExpression\": {\"pattern\": \"abc\"}}}" - }, - { - "description": "Bad $regularExpression (pattern is number, not string)", - "string": "{\"x\" : {\"$regularExpression\" : { \"pattern\": 42, \"options\" : \"\"}}}" - }, - { - "description": "Bad $regularExpression (options are number, not string)", - "string": "{\"x\" : {\"$regularExpression\" : { \"pattern\": \"a\", \"options\" : 0}}}" - }, - { - "description" : "Bad $regularExpression (missing pattern field)", - "string" : "{\"a\" : {\"$regularExpression\": {\"options\":\"ix\"}}}" - }, - { - "description": "Bad $oid (number, not string)", - "string": "{\"a\" : {\"$oid\" : 42}}" - }, - { - "description": "Bad $oid (extra field)", - "string": "{\"a\" : {\"$oid\" : \"56e1fc72e0c917e9c4714161\", \"unrelated\": true}}" - }, - { - "description": "Bad $numberInt (number, not string)", - "string": "{\"a\" : {\"$numberInt\" : 42}}" - }, - { - "description": "Bad $numberInt (extra field)", - "string": "{\"a\" : {\"$numberInt\" : \"42\", \"unrelated\": true}}" - }, - { - "description": "Bad $numberLong (number, not string)", - "string": "{\"a\" : {\"$numberLong\" : 42}}" - }, - { - "description": "Bad $numberLong (extra field)", - "string": "{\"a\" : {\"$numberLong\" : \"42\", \"unrelated\": true}}" - }, - { - "description": "Bad $numberDouble (number, not string)", - "string": "{\"a\" : {\"$numberDouble\" : 42}}" - }, - { - "description": "Bad $numberDouble (extra field)", - "string": "{\"a\" : {\"$numberDouble\" : \".1\", \"unrelated\": true}}" - }, - { - "description": "Bad $numberDecimal (number, not string)", - "string": "{\"a\" : {\"$numberDecimal\" : 42}}" - }, - { - "description": "Bad $numberDecimal (extra field)", - "string": "{\"a\" : {\"$numberDecimal\" : \".1\", \"unrelated\": true}}" - }, - { - "description": "Bad $binary (binary is number, not string)", - "string": "{\"x\" : {\"$binary\" : {\"base64\" : 0, \"subType\" : \"00\"}}}" - }, - { - "description": "Bad $binary (type is number, not string)", - "string": "{\"x\" : {\"$binary\" : {\"base64\" : \"\", \"subType\" : 0}}}" - }, - { - "description": "Bad $binary (missing $type)", - "string": "{\"x\" : {\"$binary\" : {\"base64\" : \"//8=\"}}}" - }, - { - "description": "Bad $binary (missing $binary)", - "string": "{\"x\" : {\"$binary\" : {\"subType\" : \"00\"}}}" - }, - { - "description": "Bad $binary (extra field)", - "string": "{\"x\" : {\"$binary\" : {\"base64\" : \"//8=\", \"subType\" : 0, \"unrelated\": true}}}" - }, - { - "description": "Bad $code (type is number, not string)", - "string": "{\"a\" : {\"$code\" : 42}}" - }, - { - "description": "Bad $code (type is number, not string) when $scope is also present", - "string": "{\"a\" : {\"$code\" : 42, \"$scope\" : {}}}" - }, - { - "description": "Bad $code (extra field)", - "string": "{\"a\" : {\"$code\" : \"\", \"unrelated\": true}}" - }, - { - "description": "Bad $code with $scope (scope is number, not doc)", - "string": "{\"x\" : {\"$code\" : \"\", \"$scope\" : 42}}" - }, - { - "description": "Bad $timestamp (type is number, not doc)", - "string": "{\"a\" : {\"$timestamp\" : 42} }" - }, - { - "description": "Bad $timestamp ('t' type is string, not number)", - "string": "{\"a\" : {\"$timestamp\" : {\"t\" : \"123456789\", \"i\" : 42} } }" - }, - { - "description": "Bad $timestamp ('i' type is string, not number)", - "string": "{\"a\" : {\"$timestamp\" : {\"t\" : 123456789, \"i\" : \"42\"} } }" - }, - { - "description": "Bad $timestamp (extra field at same level as $timestamp)", - "string": "{\"a\" : {\"$timestamp\" : {\"t\" : \"123456789\", \"i\" : \"42\"}, \"unrelated\": true } }" - }, - { - "description": "Bad $timestamp (extra field at same level as t and i)", - "string": "{\"a\" : {\"$timestamp\" : {\"t\" : \"123456789\", \"i\" : \"42\", \"unrelated\": true} } }" - }, - { - "description": "Bad $timestamp (missing t)", - "string": "{\"a\" : {\"$timestamp\" : {\"i\" : \"42\"} } }" - }, - { - "description": "Bad $timestamp (missing i)", - "string": "{\"a\" : {\"$timestamp\" : {\"t\" : \"123456789\"} } }" - }, - { - "description": "Bad $date (number, not string or hash)", - "string": "{\"a\" : {\"$date\" : 42}}" - }, - { - "description": "Bad $date (extra field)", - "string": "{\"a\" : {\"$date\" : {\"$numberLong\" : \"1356351330501\"}, \"unrelated\": true}}" - }, - { - "description": "Bad $minKey (boolean, not integer)", - "string": "{\"a\" : {\"$minKey\" : true}}" - }, - { - "description": "Bad $minKey (wrong integer)", - "string": "{\"a\" : {\"$minKey\" : 0}}" - }, - { - "description": "Bad $minKey (extra field)", - "string": "{\"a\" : {\"$minKey\" : 1, \"unrelated\": true}}" - }, - { - "description": "Bad $maxKey (boolean, not integer)", - "string": "{\"a\" : {\"$maxKey\" : true}}" - }, - { - "description": "Bad $maxKey (wrong integer)", - "string": "{\"a\" : {\"$maxKey\" : 0}}" - }, - { - "description": "Bad $maxKey (extra field)", - "string": "{\"a\" : {\"$maxKey\" : 1, \"unrelated\": true}}" - }, - { - "description": "Bad DBpointer (extra field)", - "string": "{\"a\": {\"$dbPointer\": {\"a\": {\"$numberInt\": \"1\"}, \"$id\": {\"$oid\": \"56e1fc72e0c917e9c4714161\"}, \"c\": {\"$numberInt\": \"2\"}, \"$ref\": \"b\"}}}" - }, - { - "description" : "Null byte in document key", - "string" : "{\"a\\u0000\": 1 }" - }, - { - "description" : "Null byte in sub-document key", - "string" : "{\"a\" : {\"b\\u0000\": 1 }}" - }, - { - "description": "Null byte in $regularExpression pattern", - "string": "{\"a\" : {\"$regularExpression\" : { \"pattern\": \"b\\u0000\", \"options\" : \"i\"}}}" - }, - { - "description": "Null byte in $regularExpression options", - "string": "{\"a\" : {\"$regularExpression\" : { \"pattern\": \"b\", \"options\" : \"i\\u0000\"}}}" - } - ] -} diff --git a/testdata/bson-corpus/undefined.json b/testdata/bson-corpus/undefined.json deleted file mode 100644 index 285f068258..0000000000 --- a/testdata/bson-corpus/undefined.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "description": "Undefined type (deprecated)", - "bson_type": "0x06", - "deprecated": true, - "test_key": "a", - "valid": [ - { - "description": "Undefined", - "canonical_bson": "0800000006610000", - "canonical_extjson": "{\"a\" : {\"$undefined\" : true}}", - "converted_bson": "080000000A610000", - "converted_extjson": "{\"a\" : null}" - } - ] -} diff --git a/testdata/change-streams/change-streams-clusterTime.json b/testdata/change-streams/change-streams-clusterTime.json deleted file mode 100644 index 2b09e548f1..0000000000 --- a/testdata/change-streams/change-streams-clusterTime.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "description": "change-streams-clusterTime", - "schemaVersion": "1.4", - "createEntities": [ - { - "client": { - "id": "client0", - "useMultipleMongoses": false - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "database0" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "collection0" - } - } - ], - "runOnRequirements": [ - { - "minServerVersion": "4.0.0", - "topologies": [ - "replicaset", - "load-balanced", - "sharded" - ], - "serverless": "forbid" - } - ], - "initialData": [ - { - "collectionName": "collection0", - "databaseName": "database0", - "documents": [] - } - ], - "tests": [ - { - "description": "clusterTime is present", - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "ns": { - "db": "database0", - "coll": "collection0" - }, - "clusterTime": { - "$$exists": true - } - } - } - ] - } - ] -} diff --git a/testdata/change-streams/change-streams-clusterTime.yml b/testdata/change-streams/change-streams-clusterTime.yml deleted file mode 100644 index b1d9f20e01..0000000000 --- a/testdata/change-streams/change-streams-clusterTime.yml +++ /dev/null @@ -1,41 +0,0 @@ -description: "change-streams-clusterTime" -schemaVersion: "1.4" -createEntities: - - client: - id: &client0 client0 - useMultipleMongoses: false - - database: - id: &database0 database0 - client: *client0 - databaseName: *database0 - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: *collection0 - -runOnRequirements: - - minServerVersion: "4.0.0" - topologies: [ replicaset, load-balanced, sharded ] - serverless: forbid - -initialData: - - collectionName: *collection0 - databaseName: *database0 - documents: [] - -tests: - - description: "clusterTime is present" - operations: - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *collection0 - arguments: - document: { _id: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - ns: { db: *database0, coll: *collection0 } - clusterTime: { $$exists: true } diff --git a/testdata/change-streams/change-streams-disambiguatedPaths.json b/testdata/change-streams/change-streams-disambiguatedPaths.json deleted file mode 100644 index e6cc5ef66e..0000000000 --- a/testdata/change-streams/change-streams-disambiguatedPaths.json +++ /dev/null @@ -1,251 +0,0 @@ -{ - "description": "disambiguatedPaths", - "schemaVersion": "1.4", - "createEntities": [ - { - "client": { - "id": "client0", - "useMultipleMongoses": false - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "database0" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "collection0" - } - } - ], - "runOnRequirements": [ - { - "minServerVersion": "6.1.0", - "topologies": [ - "replicaset", - "load-balanced", - "sharded" - ], - "serverless": "forbid" - } - ], - "initialData": [ - { - "collectionName": "collection0", - "databaseName": "database0", - "documents": [] - } - ], - "tests": [ - { - "description": "disambiguatedPaths is not present when showExpandedEvents is false/unset", - "operations": [ - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 1, - "a": { - "1": 1 - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$set": { - "a.1": 2 - } - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "update", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "updateDescription": { - "updatedFields": { - "$$exists": true - }, - "removedFields": { - "$$exists": true - }, - "truncatedArrays": { - "$$exists": true - }, - "disambiguatedPaths": { - "$$exists": false - } - } - } - } - ] - }, - { - "description": "disambiguatedPaths is present on updateDescription when an ambiguous path is present", - "operations": [ - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 1, - "a": { - "1": 1 - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [], - "showExpandedEvents": true - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$set": { - "a.1": 2 - } - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "update", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "updateDescription": { - "updatedFields": { - "$$exists": true - }, - "removedFields": { - "$$exists": true - }, - "truncatedArrays": { - "$$exists": true - }, - "disambiguatedPaths": { - "a.1": [ - "a", - "1" - ] - } - } - } - } - ] - }, - { - "description": "disambiguatedPaths returns array indices as integers", - "operations": [ - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 1, - "a": [ - { - "1": 1 - } - ] - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [], - "showExpandedEvents": true - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$set": { - "a.0.1": 2 - } - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "update", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "updateDescription": { - "updatedFields": { - "$$exists": true - }, - "removedFields": { - "$$exists": true - }, - "truncatedArrays": { - "$$exists": true - }, - "disambiguatedPaths": { - "a.0.1": [ - "a", - { - "$$type": "int" - }, - "1" - ] - } - } - } - } - ] - } - ] -} diff --git a/testdata/change-streams/change-streams-disambiguatedPaths.yml b/testdata/change-streams/change-streams-disambiguatedPaths.yml deleted file mode 100644 index 9ca9abf2e3..0000000000 --- a/testdata/change-streams/change-streams-disambiguatedPaths.yml +++ /dev/null @@ -1,103 +0,0 @@ -description: "disambiguatedPaths" -schemaVersion: "1.4" -createEntities: - - client: - id: &client0 client0 - useMultipleMongoses: false - - database: - id: &database0 database0 - client: *client0 - databaseName: *database0 - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: *collection0 - -runOnRequirements: - - minServerVersion: "6.1.0" - topologies: [ replicaset, load-balanced, sharded ] - serverless: forbid - -initialData: - - collectionName: *collection0 - databaseName: *database0 - documents: [] - -tests: - - description: "disambiguatedPaths is not present when showExpandedEvents is false/unset" - operations: - - name: insertOne - object: *collection0 - arguments: - document: { _id: 1, 'a': { '1': 1 } } - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: updateOne - object: *collection0 - arguments: - filter: { _id: 1 } - update: { $set: { 'a.1': 2 } } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: "update" - ns: { db: *database0, coll: *collection0 } - updateDescription: - updatedFields: { $$exists: true } - removedFields: { $$exists: true } - truncatedArrays: { $$exists: true } - disambiguatedPaths: { $$exists: false } - - - description: "disambiguatedPaths is present on updateDescription when an ambiguous path is present" - operations: - - name: insertOne - object: *collection0 - arguments: - document: { _id: 1, 'a': { '1': 1 } } - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [], showExpandedEvents: true } - saveResultAsEntity: &changeStream0 changeStream0 - - name: updateOne - object: *collection0 - arguments: - filter: { _id: 1 } - update: { $set: { 'a.1': 2 } } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: "update" - ns: { db: *database0, coll: *collection0 } - updateDescription: - updatedFields: { $$exists: true } - removedFields: { $$exists: true } - truncatedArrays: { $$exists: true } - disambiguatedPaths: { 'a.1': ['a', '1'] } - - - description: "disambiguatedPaths returns array indices as integers" - operations: - - name: insertOne - object: *collection0 - arguments: - document: { _id: 1, 'a': [{'1': 1 }] } - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [], showExpandedEvents: true } - saveResultAsEntity: &changeStream0 changeStream0 - - name: updateOne - object: *collection0 - arguments: - filter: { _id: 1 } - update: { $set: { 'a.0.1': 2 } } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: "update" - ns: { db: *database0, coll: *collection0 } - updateDescription: - updatedFields: { $$exists: true } - removedFields: { $$exists: true } - truncatedArrays: { $$exists: true } - disambiguatedPaths: { 'a.0.1': ['a', { $$type: 'int' }, '1'] } diff --git a/testdata/change-streams/change-streams-errors.json b/testdata/change-streams/change-streams-errors.json deleted file mode 100644 index 65e99e541e..0000000000 --- a/testdata/change-streams/change-streams-errors.json +++ /dev/null @@ -1,246 +0,0 @@ -{ - "description": "change-streams-errors", - "schemaVersion": "1.7", - "runOnRequirements": [ - { - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ], - "useMultipleMongoses": false - } - }, - { - "client": { - "id": "globalClient", - "useMultipleMongoses": false - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "database0" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "collection0" - } - }, - { - "database": { - "id": "globalDatabase0", - "client": "globalClient", - "databaseName": "database0" - } - }, - { - "collection": { - "id": "globalCollection0", - "database": "globalDatabase0", - "collectionName": "collection0" - } - } - ], - "initialData": [ - { - "collectionName": "collection0", - "databaseName": "database0", - "documents": [] - } - ], - "tests": [ - { - "description": "The watch helper must not throw a custom exception when executed against a single server topology, but instead depend on a server error", - "runOnRequirements": [ - { - "minServerVersion": "3.6.0", - "topologies": [ - "single" - ] - } - ], - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "expectError": { - "errorCode": 40573 - } - } - ] - }, - { - "description": "Change Stream should error when an invalid aggregation stage is passed in", - "runOnRequirements": [ - { - "minServerVersion": "3.6.0", - "topologies": [ - "replicaset" - ] - } - ], - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [ - { - "$unsupported": "foo" - } - ] - }, - "expectError": { - "errorCode": 40324 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - }, - { - "$unsupported": "foo" - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "Change Stream should error when _id is projected out", - "runOnRequirements": [ - { - "minServerVersion": "4.1.11", - "topologies": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [ - { - "$project": { - "_id": 0 - } - } - ] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "z": 3 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectError": { - "errorCode": 280 - } - } - ] - }, - { - "description": "change stream errors on ElectionInProgress", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "topologies": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "getMore" - ], - "errorCode": 216, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "z": 3 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectError": { - "errorCode": 216 - } - } - ] - } - ] -} diff --git a/testdata/change-streams/change-streams-errors.yml b/testdata/change-streams/change-streams-errors.yml deleted file mode 100644 index 85133dae0a..0000000000 --- a/testdata/change-streams/change-streams-errors.yml +++ /dev/null @@ -1,120 +0,0 @@ -description: "change-streams-errors" - -schemaVersion: "1.7" - -runOnRequirements: - - serverless: forbid - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - ignoreCommandMonitoringEvents: [ killCursors ] - useMultipleMongoses: false - - client: - id: &globalClient globalClient - useMultipleMongoses: false - - database: - id: &database0 database0 - client: *client0 - databaseName: *database0 - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: *collection0 - - database: - id: &globalDatabase0 globalDatabase0 - client: *globalClient - databaseName: *database0 - - collection: - id: &globalCollection0 globalCollection0 - database: *globalDatabase0 - collectionName: *collection0 - -initialData: - - collectionName: *collection0 - databaseName: *database0 - documents: [] - -tests: - - description: "The watch helper must not throw a custom exception when executed against a single server topology, but instead depend on a server error" - runOnRequirements: - - minServerVersion: "3.6.0" - topologies: [ single ] - operations: - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - expectError: { errorCode: 40573 } - - - description: Change Stream should error when an invalid aggregation stage is passed in - runOnRequirements: - - minServerVersion: "3.6.0" - topologies: [ replicaset ] - operations: - - name: createChangeStream - object: *collection0 - arguments: - pipeline: [ { $unsupported: foo } ] - expectError: { errorCode: 40324 } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: {} - - $unsupported: foo - commandName: aggregate - databaseName: *database0 - - - description: Change Stream should error when _id is projected out - runOnRequirements: - - minServerVersion: "4.1.11" - topologies: [ replicaset, sharded, load-balanced ] - operations: - - name: createChangeStream - object: *collection0 - arguments: - pipeline: - - $project: { _id: 0 } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { z: 3 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectError: { errorCode: 280 } - - - description: change stream errors on ElectionInProgress - runOnRequirements: - - minServerVersion: "4.2" - topologies: [ replicaset, sharded, load-balanced ] - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ getMore ] - errorCode: 216 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: - pipeline: [] - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { z: 3 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectError: { errorCode: 216 } diff --git a/testdata/change-streams/change-streams-pre_and_post_images.json b/testdata/change-streams/change-streams-pre_and_post_images.json deleted file mode 100644 index e62fc03459..0000000000 --- a/testdata/change-streams/change-streams-pre_and_post_images.json +++ /dev/null @@ -1,827 +0,0 @@ -{ - "description": "change-streams-pre_and_post_images", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "6.0.0", - "topologies": [ - "replicaset", - "sharded", - "load-balanced" - ], - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "collMod", - "insert", - "update", - "getMore", - "killCursors" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "change-stream-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test" - } - } - ], - "initialData": [ - { - "collectionName": "test", - "databaseName": "change-stream-tests", - "documents": [ - { - "_id": 1 - } - ] - } - ], - "tests": [ - { - "description": "fullDocument:whenAvailable with changeStreamPreAndPostImages enabled", - "operations": [ - { - "name": "runCommand", - "object": "database0", - "arguments": { - "commandName": "collMod", - "command": { - "collMod": "test", - "changeStreamPreAndPostImages": { - "enabled": true - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [], - "fullDocument": "whenAvailable" - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$set": { - "x": 1 - } - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "update", - "ns": { - "db": "change-stream-tests", - "coll": "test" - }, - "updateDescription": { - "$$type": "object" - }, - "fullDocument": { - "_id": 1, - "x": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "test", - "pipeline": [ - { - "$changeStream": { - "fullDocument": "whenAvailable" - } - } - ] - } - } - } - ] - } - ] - }, - { - "description": "fullDocument:whenAvailable with changeStreamPreAndPostImages disabled", - "operations": [ - { - "name": "runCommand", - "object": "database0", - "arguments": { - "commandName": "collMod", - "command": { - "collMod": "test", - "changeStreamPreAndPostImages": { - "enabled": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [], - "fullDocument": "whenAvailable" - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$set": { - "x": 1 - } - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "update", - "ns": { - "db": "change-stream-tests", - "coll": "test" - }, - "updateDescription": { - "$$type": "object" - }, - "fullDocument": null - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "test", - "pipeline": [ - { - "$changeStream": { - "fullDocument": "whenAvailable" - } - } - ] - } - } - } - ] - } - ] - }, - { - "description": "fullDocument:required with changeStreamPreAndPostImages enabled", - "operations": [ - { - "name": "runCommand", - "object": "database0", - "arguments": { - "commandName": "collMod", - "command": { - "collMod": "test", - "changeStreamPreAndPostImages": { - "enabled": true - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [], - "fullDocument": "required" - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$set": { - "x": 1 - } - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "update", - "ns": { - "db": "change-stream-tests", - "coll": "test" - }, - "updateDescription": { - "$$type": "object" - }, - "fullDocument": { - "_id": 1, - "x": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "test", - "pipeline": [ - { - "$changeStream": { - "fullDocument": "required" - } - } - ] - } - } - } - ] - } - ] - }, - { - "description": "fullDocument:required with changeStreamPreAndPostImages disabled", - "operations": [ - { - "name": "runCommand", - "object": "database0", - "arguments": { - "commandName": "collMod", - "command": { - "collMod": "test", - "changeStreamPreAndPostImages": { - "enabled": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [], - "fullDocument": "required" - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$set": { - "x": 1 - } - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "test", - "pipeline": [ - { - "$changeStream": { - "fullDocument": "required" - } - } - ] - } - } - } - ] - } - ] - }, - { - "description": "fullDocumentBeforeChange:whenAvailable with changeStreamPreAndPostImages enabled", - "operations": [ - { - "name": "runCommand", - "object": "database0", - "arguments": { - "commandName": "collMod", - "command": { - "collMod": "test", - "changeStreamPreAndPostImages": { - "enabled": true - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [], - "fullDocumentBeforeChange": "whenAvailable" - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$set": { - "x": 1 - } - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "update", - "ns": { - "db": "change-stream-tests", - "coll": "test" - }, - "updateDescription": { - "$$type": "object" - }, - "fullDocumentBeforeChange": { - "_id": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "test", - "pipeline": [ - { - "$changeStream": { - "fullDocumentBeforeChange": "whenAvailable" - } - } - ] - } - } - } - ] - } - ] - }, - { - "description": "fullDocumentBeforeChange:whenAvailable with changeStreamPreAndPostImages disabled", - "operations": [ - { - "name": "runCommand", - "object": "database0", - "arguments": { - "commandName": "collMod", - "command": { - "collMod": "test", - "changeStreamPreAndPostImages": { - "enabled": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [], - "fullDocumentBeforeChange": "whenAvailable" - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$set": { - "x": 1 - } - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "update", - "ns": { - "db": "change-stream-tests", - "coll": "test" - }, - "updateDescription": { - "$$type": "object" - }, - "fullDocumentBeforeChange": null - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "test", - "pipeline": [ - { - "$changeStream": { - "fullDocumentBeforeChange": "whenAvailable" - } - } - ] - } - } - } - ] - } - ] - }, - { - "description": "fullDocumentBeforeChange:required with changeStreamPreAndPostImages enabled", - "operations": [ - { - "name": "runCommand", - "object": "database0", - "arguments": { - "commandName": "collMod", - "command": { - "collMod": "test", - "changeStreamPreAndPostImages": { - "enabled": true - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [], - "fullDocumentBeforeChange": "required" - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$set": { - "x": 1 - } - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "update", - "ns": { - "db": "change-stream-tests", - "coll": "test" - }, - "updateDescription": { - "$$type": "object" - }, - "fullDocumentBeforeChange": { - "_id": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "test", - "pipeline": [ - { - "$changeStream": { - "fullDocumentBeforeChange": "required" - } - } - ] - } - } - } - ] - } - ] - }, - { - "description": "fullDocumentBeforeChange:required with changeStreamPreAndPostImages disabled", - "operations": [ - { - "name": "runCommand", - "object": "database0", - "arguments": { - "commandName": "collMod", - "command": { - "collMod": "test", - "changeStreamPreAndPostImages": { - "enabled": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [], - "fullDocumentBeforeChange": "required" - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$set": { - "x": 1 - } - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "test", - "pipeline": [ - { - "$changeStream": { - "fullDocumentBeforeChange": "required" - } - } - ] - } - } - } - ] - } - ] - }, - { - "description": "fullDocumentBeforeChange:off with changeStreamPreAndPostImages enabled", - "operations": [ - { - "name": "runCommand", - "object": "database0", - "arguments": { - "commandName": "collMod", - "command": { - "collMod": "test", - "changeStreamPreAndPostImages": { - "enabled": true - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [], - "fullDocumentBeforeChange": "off" - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$set": { - "x": 1 - } - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "update", - "ns": { - "db": "change-stream-tests", - "coll": "test" - }, - "updateDescription": { - "$$type": "object" - }, - "fullDocumentBeforeChange": { - "$$exists": false - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "test", - "pipeline": [ - { - "$changeStream": { - "fullDocumentBeforeChange": "off" - } - } - ] - } - } - } - ] - } - ] - }, - { - "description": "fullDocumentBeforeChange:off with changeStreamPreAndPostImages disabled", - "operations": [ - { - "name": "runCommand", - "object": "database0", - "arguments": { - "commandName": "collMod", - "command": { - "collMod": "test", - "changeStreamPreAndPostImages": { - "enabled": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [], - "fullDocumentBeforeChange": "off" - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$set": { - "x": 1 - } - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "update", - "ns": { - "db": "change-stream-tests", - "coll": "test" - }, - "updateDescription": { - "$$type": "object" - }, - "fullDocumentBeforeChange": { - "$$exists": false - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "test", - "pipeline": [ - { - "$changeStream": { - "fullDocumentBeforeChange": "off" - } - } - ] - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/change-streams/change-streams-pre_and_post_images.yml b/testdata/change-streams/change-streams-pre_and_post_images.yml deleted file mode 100644 index 6bc58eaf2d..0000000000 --- a/testdata/change-streams/change-streams-pre_and_post_images.yml +++ /dev/null @@ -1,351 +0,0 @@ -description: "change-streams-pre_and_post_images" - -schemaVersion: "1.4" - -runOnRequirements: - - minServerVersion: "6.0.0" - topologies: [ replicaset, sharded, load-balanced ] - serverless: forbid - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - ignoreCommandMonitoringEvents: [ collMod, insert, update, getMore, killCursors ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name change-stream-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name test - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - -tests: - - description: "fullDocument:whenAvailable with changeStreamPreAndPostImages enabled" - operations: - - name: runCommand - object: *database0 - arguments: &enablePreAndPostImages - commandName: collMod - command: - collMod: *collection0Name - changeStreamPreAndPostImages: { enabled: true } - - name: createChangeStream - object: *collection0 - arguments: - pipeline: [] - fullDocument: "whenAvailable" - saveResultAsEntity: &changeStream0 changeStream0 - - name: updateOne - object: *collection0 - arguments: - filter: { _id: 1 } - update: { $set: { x: 1 }} - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: "update" - ns: { db: *database0Name, coll: *collection0Name } - updateDescription: { $$type: "object" } - fullDocument: { _id: 1, x: 1 } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: - - $changeStream: { fullDocument: "whenAvailable" } - - - description: "fullDocument:whenAvailable with changeStreamPreAndPostImages disabled" - operations: - - name: runCommand - object: *database0 - arguments: &disablePreAndPostImages - commandName: collMod - command: - collMod: *collection0Name - changeStreamPreAndPostImages: { enabled: false } - - name: createChangeStream - object: *collection0 - arguments: - pipeline: [] - fullDocument: "whenAvailable" - saveResultAsEntity: &changeStream0 changeStream0 - - name: updateOne - object: *collection0 - arguments: - filter: { _id: 1 } - update: { $set: { x: 1 }} - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: "update" - ns: { db: *database0Name, coll: *collection0Name } - updateDescription: { $$type: "object" } - fullDocument: null - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: - - $changeStream: { fullDocument: "whenAvailable" } - - - description: "fullDocument:required with changeStreamPreAndPostImages enabled" - operations: - - name: runCommand - object: *database0 - arguments: *enablePreAndPostImages - - name: createChangeStream - object: *collection0 - arguments: - pipeline: [] - fullDocument: "required" - saveResultAsEntity: &changeStream0 changeStream0 - - name: updateOne - object: *collection0 - arguments: - filter: { _id: 1 } - update: { $set: { x: 1 }} - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: "update" - ns: { db: *database0Name, coll: *collection0Name } - updateDescription: { $$type: "object" } - fullDocument: { _id: 1, x: 1 } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: - - $changeStream: { fullDocument: "required" } - - - description: "fullDocument:required with changeStreamPreAndPostImages disabled" - operations: - - name: runCommand - object: *database0 - arguments: *disablePreAndPostImages - - name: createChangeStream - object: *collection0 - arguments: - pipeline: [] - fullDocument: "required" - saveResultAsEntity: &changeStream0 changeStream0 - - name: updateOne - object: *collection0 - arguments: - filter: { _id: 1 } - update: { $set: { x: 1 }} - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectError: - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: - - $changeStream: { fullDocument: "required" } - - - description: "fullDocumentBeforeChange:whenAvailable with changeStreamPreAndPostImages enabled" - operations: - - name: runCommand - object: *database0 - arguments: *enablePreAndPostImages - - name: createChangeStream - object: *collection0 - arguments: - pipeline: [] - fullDocumentBeforeChange: "whenAvailable" - saveResultAsEntity: &changeStream0 changeStream0 - - name: updateOne - object: *collection0 - arguments: - filter: { _id: 1 } - update: { $set: { x: 1 }} - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: "update" - ns: { db: *database0Name, coll: *collection0Name } - updateDescription: { $$type: "object" } - fullDocumentBeforeChange: { _id: 1 } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: - - $changeStream: { fullDocumentBeforeChange: "whenAvailable" } - - - description: "fullDocumentBeforeChange:whenAvailable with changeStreamPreAndPostImages disabled" - operations: - - name: runCommand - object: *database0 - arguments: *disablePreAndPostImages - - name: createChangeStream - object: *collection0 - arguments: - pipeline: [] - fullDocumentBeforeChange: "whenAvailable" - saveResultAsEntity: &changeStream0 changeStream0 - - name: updateOne - object: *collection0 - arguments: - filter: { _id: 1 } - update: { $set: { x: 1 }} - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: "update" - ns: { db: *database0Name, coll: *collection0Name } - updateDescription: { $$type: "object" } - fullDocumentBeforeChange: null - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: - - $changeStream: { fullDocumentBeforeChange: "whenAvailable" } - - - description: "fullDocumentBeforeChange:required with changeStreamPreAndPostImages enabled" - operations: - - name: runCommand - object: *database0 - arguments: *enablePreAndPostImages - - name: createChangeStream - object: *collection0 - arguments: - pipeline: [] - fullDocumentBeforeChange: "required" - saveResultAsEntity: &changeStream0 changeStream0 - - name: updateOne - object: *collection0 - arguments: - filter: { _id: 1 } - update: { $set: { x: 1 }} - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: "update" - ns: { db: *database0Name, coll: *collection0Name } - updateDescription: { $$type: "object" } - fullDocumentBeforeChange: { _id: 1 } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: - - $changeStream: { fullDocumentBeforeChange: "required" } - - - description: "fullDocumentBeforeChange:required with changeStreamPreAndPostImages disabled" - operations: - - name: runCommand - object: *database0 - arguments: *disablePreAndPostImages - - name: createChangeStream - object: *collection0 - arguments: - pipeline: [] - fullDocumentBeforeChange: "required" - saveResultAsEntity: &changeStream0 changeStream0 - - name: updateOne - object: *collection0 - arguments: - filter: { _id: 1 } - update: { $set: { x: 1 }} - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectError: - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: - - $changeStream: { fullDocumentBeforeChange: "required" } - - - description: "fullDocumentBeforeChange:off with changeStreamPreAndPostImages enabled" - operations: - - name: runCommand - object: *database0 - arguments: *enablePreAndPostImages - - name: createChangeStream - object: *collection0 - arguments: - pipeline: [] - fullDocumentBeforeChange: "off" - saveResultAsEntity: &changeStream0 changeStream0 - - name: updateOne - object: *collection0 - arguments: - filter: { _id: 1 } - update: { $set: { x: 1 }} - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: "update" - ns: { db: *database0Name, coll: *collection0Name } - updateDescription: { $$type: "object" } - fullDocumentBeforeChange: { $$exists: false } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: - - $changeStream: { fullDocumentBeforeChange: "off" } - - - description: "fullDocumentBeforeChange:off with changeStreamPreAndPostImages disabled" - operations: - - name: runCommand - object: *database0 - arguments: *disablePreAndPostImages - - name: createChangeStream - object: *collection0 - arguments: - pipeline: [] - fullDocumentBeforeChange: "off" - saveResultAsEntity: &changeStream0 changeStream0 - - name: updateOne - object: *collection0 - arguments: - filter: { _id: 1 } - update: { $set: { x: 1 }} - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: "update" - ns: { db: *database0Name, coll: *collection0Name } - updateDescription: { $$type: "object" } - fullDocumentBeforeChange: { $$exists: false } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: - - $changeStream: { fullDocumentBeforeChange: "off" } diff --git a/testdata/change-streams/change-streams-resume-allowlist.json b/testdata/change-streams/change-streams-resume-allowlist.json deleted file mode 100644 index 1ec72b432b..0000000000 --- a/testdata/change-streams/change-streams-resume-allowlist.json +++ /dev/null @@ -1,2348 +0,0 @@ -{ - "description": "change-streams-resume-allowlist", - "schemaVersion": "1.7", - "runOnRequirements": [ - { - "minServerVersion": "3.6", - "topologies": [ - "replicaset", - "sharded", - "load-balanced" - ], - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ], - "useMultipleMongoses": false - } - }, - { - "client": { - "id": "globalClient", - "useMultipleMongoses": false - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "database0" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "collection0" - } - }, - { - "database": { - "id": "globalDatabase0", - "client": "globalClient", - "databaseName": "database0" - } - }, - { - "collection": { - "id": "globalCollection0", - "database": "globalDatabase0", - "collectionName": "collection0" - } - } - ], - "tests": [ - { - "description": "change stream resumes after a network error", - "runOnRequirements": [ - { - "minServerVersion": "4.2" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "getMore" - ], - "closeConnection": true - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after HostUnreachable", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "getMore" - ], - "errorCode": 6, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after HostNotFound", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "getMore" - ], - "errorCode": 7, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after NetworkTimeout", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "getMore" - ], - "errorCode": 89, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after ShutdownInProgress", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "getMore" - ], - "errorCode": 91, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after PrimarySteppedDown", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "getMore" - ], - "errorCode": 189, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after ExceededTimeLimit", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "getMore" - ], - "errorCode": 262, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after SocketException", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "getMore" - ], - "errorCode": 9001, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after NotWritablePrimary", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "getMore" - ], - "errorCode": 10107, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after InterruptedAtShutdown", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "getMore" - ], - "errorCode": 11600, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after InterruptedDueToReplStateChange", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "getMore" - ], - "errorCode": 11602, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after NotPrimaryNoSecondaryOk", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "getMore" - ], - "errorCode": 13435, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after NotPrimaryOrSecondary", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "getMore" - ], - "errorCode": 13436, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after StaleShardVersion", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "getMore" - ], - "errorCode": 63, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after StaleEpoch", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "getMore" - ], - "errorCode": 150, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after RetryChangeStream", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "getMore" - ], - "errorCode": 234, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after FailedToSatisfyReadPreference", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "getMore" - ], - "errorCode": 133, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after CursorNotFound", - "runOnRequirements": [ - { - "minServerVersion": "4.2" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "getMore" - ], - "errorCode": 43, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/change-streams/change-streams-resume-allowlist.yml b/testdata/change-streams/change-streams-resume-allowlist.yml deleted file mode 100644 index c5b7a874d3..0000000000 --- a/testdata/change-streams/change-streams-resume-allowlist.yml +++ /dev/null @@ -1,1169 +0,0 @@ -# Tests for resume behavior on server versions that do not support the ResumableChangeStreamError label -description: "change-streams-resume-allowlist" - -schemaVersion: "1.7" - -runOnRequirements: - - minServerVersion: "3.6" - topologies: [ replicaset, sharded, load-balanced ] - serverless: forbid - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - ignoreCommandMonitoringEvents: [ killCursors ] - useMultipleMongoses: false - - client: - id: &globalClient globalClient - useMultipleMongoses: false - - database: - id: &database0 database0 - client: *client0 - databaseName: *database0 - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: *collection0 - - database: - id: &globalDatabase0 globalDatabase0 - client: *globalClient - databaseName: *database0 - - collection: - id: &globalCollection0 globalCollection0 - database: *globalDatabase0 - collectionName: *collection0 - -tests: - - description: change stream resumes after a network error - runOnRequirements: - - minServerVersion: "4.2" - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ getMore ] - closeConnection: true - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after HostUnreachable - runOnRequirements: - - minServerVersion: "4.2" - maxServerVersion: "4.2.99" - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ getMore ] - errorCode: 6 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after HostNotFound - runOnRequirements: - - minServerVersion: "4.2" - maxServerVersion: "4.2.99" - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ getMore ] - errorCode: 7 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after NetworkTimeout - runOnRequirements: - - minServerVersion: "4.2" - maxServerVersion: "4.2.99" - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ getMore ] - errorCode: 89 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after ShutdownInProgress - runOnRequirements: - - minServerVersion: "4.2" - maxServerVersion: "4.2.99" - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ getMore ] - errorCode: 91 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after PrimarySteppedDown - runOnRequirements: - - minServerVersion: "4.2" - maxServerVersion: "4.2.99" - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ getMore ] - errorCode: 189 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after ExceededTimeLimit - runOnRequirements: - - minServerVersion: "4.2" - maxServerVersion: "4.2.99" - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ getMore ] - errorCode: 262 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after SocketException - runOnRequirements: - - minServerVersion: "4.2" - maxServerVersion: "4.2.99" - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ getMore ] - errorCode: 9001 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after NotWritablePrimary - runOnRequirements: - - minServerVersion: "4.2" - maxServerVersion: "4.2.99" - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ getMore ] - errorCode: 10107 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after InterruptedAtShutdown - runOnRequirements: - - minServerVersion: "4.2" - maxServerVersion: "4.2.99" - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ getMore ] - errorCode: 11600 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after InterruptedDueToReplStateChange - runOnRequirements: - - minServerVersion: "4.2" - maxServerVersion: "4.2.99" - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ getMore ] - errorCode: 11602 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after NotPrimaryNoSecondaryOk - runOnRequirements: - - minServerVersion: "4.2" - maxServerVersion: "4.2.99" - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ getMore ] - errorCode: 13435 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after NotPrimaryOrSecondary - runOnRequirements: - - minServerVersion: "4.2" - maxServerVersion: "4.2.99" - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ getMore ] - errorCode: 13436 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after StaleShardVersion - runOnRequirements: - - minServerVersion: "4.2" - maxServerVersion: "4.2.99" - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ getMore ] - errorCode: 63 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after StaleEpoch - runOnRequirements: - - minServerVersion: "4.2" - maxServerVersion: "4.2.99" - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ getMore ] - errorCode: 150 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after RetryChangeStream - runOnRequirements: - - minServerVersion: "4.2" - maxServerVersion: "4.2.99" - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ getMore ] - errorCode: 234 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after FailedToSatisfyReadPreference - runOnRequirements: - - minServerVersion: "4.2" - maxServerVersion: "4.2.99" - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ getMore ] - errorCode: 133 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - # CursorNotFound is special-cased to be resumable regardless of server versions or error labels, so this test has - # no maxWireVersion. - - description: change stream resumes after CursorNotFound - runOnRequirements: - - minServerVersion: "4.2" - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ getMore ] - errorCode: 43 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 diff --git a/testdata/change-streams/change-streams-resume-errorLabels.json b/testdata/change-streams/change-streams-resume-errorLabels.json deleted file mode 100644 index 7fd70108f0..0000000000 --- a/testdata/change-streams/change-streams-resume-errorLabels.json +++ /dev/null @@ -1,2130 +0,0 @@ -{ - "description": "change-streams-resume-errorlabels", - "schemaVersion": "1.7", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1", - "topologies": [ - "replicaset", - "sharded", - "load-balanced" - ], - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ], - "useMultipleMongoses": false - } - }, - { - "client": { - "id": "globalClient", - "useMultipleMongoses": false - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "database0" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "collection0" - } - }, - { - "database": { - "id": "globalDatabase0", - "client": "globalClient", - "databaseName": "database0" - } - }, - { - "collection": { - "id": "globalCollection0", - "database": "globalDatabase0", - "collectionName": "collection0" - } - } - ], - "tests": [ - { - "description": "change stream resumes after HostUnreachable", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failGetMoreAfterCursorCheckout", - "mode": { - "times": 1 - }, - "data": { - "errorCode": 6, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after HostNotFound", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failGetMoreAfterCursorCheckout", - "mode": { - "times": 1 - }, - "data": { - "errorCode": 7, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after NetworkTimeout", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failGetMoreAfterCursorCheckout", - "mode": { - "times": 1 - }, - "data": { - "errorCode": 89, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after ShutdownInProgress", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failGetMoreAfterCursorCheckout", - "mode": { - "times": 1 - }, - "data": { - "errorCode": 91, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after PrimarySteppedDown", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failGetMoreAfterCursorCheckout", - "mode": { - "times": 1 - }, - "data": { - "errorCode": 189, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after ExceededTimeLimit", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failGetMoreAfterCursorCheckout", - "mode": { - "times": 1 - }, - "data": { - "errorCode": 262, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after SocketException", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failGetMoreAfterCursorCheckout", - "mode": { - "times": 1 - }, - "data": { - "errorCode": 9001, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after NotWritablePrimary", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failGetMoreAfterCursorCheckout", - "mode": { - "times": 1 - }, - "data": { - "errorCode": 10107, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after InterruptedAtShutdown", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failGetMoreAfterCursorCheckout", - "mode": { - "times": 1 - }, - "data": { - "errorCode": 11600, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after InterruptedDueToReplStateChange", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failGetMoreAfterCursorCheckout", - "mode": { - "times": 1 - }, - "data": { - "errorCode": 11602, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after NotPrimaryNoSecondaryOk", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failGetMoreAfterCursorCheckout", - "mode": { - "times": 1 - }, - "data": { - "errorCode": 13435, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after NotPrimaryOrSecondary", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failGetMoreAfterCursorCheckout", - "mode": { - "times": 1 - }, - "data": { - "errorCode": 13436, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after StaleShardVersion", - "runOnRequirements": [ - { - "maxServerVersion": "6.0.99" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failGetMoreAfterCursorCheckout", - "mode": { - "times": 1 - }, - "data": { - "errorCode": 63, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after StaleEpoch", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failGetMoreAfterCursorCheckout", - "mode": { - "times": 1 - }, - "data": { - "errorCode": 150, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after RetryChangeStream", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failGetMoreAfterCursorCheckout", - "mode": { - "times": 1 - }, - "data": { - "errorCode": 234, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes after FailedToSatisfyReadPreference", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failGetMoreAfterCursorCheckout", - "mode": { - "times": 1 - }, - "data": { - "errorCode": 133, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream resumes if error contains ResumableChangeStreamError", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "getMore" - ], - "errorCode": 50, - "closeConnection": false, - "errorLabels": [ - "ResumableChangeStreamError" - ] - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$exists": true - }, - "collection": "collection0" - }, - "commandName": "getMore", - "databaseName": "database0" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "resumeAfter": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "change stream does not resume if error does not contain ResumableChangeStreamError", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "getMore" - ], - "errorCode": 6, - "closeConnection": false - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectError": { - "errorCode": 6 - } - } - ] - } - ] -} diff --git a/testdata/change-streams/change-streams-resume-errorLabels.yml b/testdata/change-streams/change-streams-resume-errorLabels.yml deleted file mode 100644 index 5cc6d423a4..0000000000 --- a/testdata/change-streams/change-streams-resume-errorLabels.yml +++ /dev/null @@ -1,1069 +0,0 @@ -# Tests for resume behavior on server versions that support the ResumableChangeStreamError label -description: "change-streams-resume-errorlabels" - -schemaVersion: "1.7" - -runOnRequirements: - - minServerVersion: "4.3.1" - topologies: [ replicaset, sharded, load-balanced ] - serverless: forbid - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - ignoreCommandMonitoringEvents: [ killCursors ] - useMultipleMongoses: false - - client: - id: &globalClient globalClient - useMultipleMongoses: false - - database: - id: &database0 database0 - client: *client0 - databaseName: *database0 - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: *collection0 - - database: - id: &globalDatabase0 globalDatabase0 - client: *globalClient - databaseName: *database0 - - collection: - id: &globalCollection0 globalCollection0 - database: *globalDatabase0 - collectionName: *collection0 - -tests: - - description: change stream resumes after HostUnreachable - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failGetMoreAfterCursorCheckout # SERVER-46091 explains why a new failpoint was needed - mode: { times: 1 } - data: - errorCode: 6 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after HostNotFound - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failGetMoreAfterCursorCheckout - mode: { times: 1 } - data: - errorCode: 7 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after NetworkTimeout - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failGetMoreAfterCursorCheckout - mode: { times: 1 } - data: - errorCode: 89 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - - - description: change stream resumes after ShutdownInProgress - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failGetMoreAfterCursorCheckout - mode: { times: 1 } - data: - errorCode: 91 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after PrimarySteppedDown - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failGetMoreAfterCursorCheckout - mode: { times: 1 } - data: - errorCode: 189 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after ExceededTimeLimit - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failGetMoreAfterCursorCheckout - mode: { times: 1 } - data: - errorCode: 262 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after SocketException - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failGetMoreAfterCursorCheckout - mode: { times: 1 } - data: - errorCode: 9001 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after NotWritablePrimary - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failGetMoreAfterCursorCheckout - mode: { times: 1 } - data: - errorCode: 10107 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after InterruptedAtShutdown - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failGetMoreAfterCursorCheckout - mode: { times: 1 } - data: - errorCode: 11600 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after InterruptedDueToReplStateChange - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failGetMoreAfterCursorCheckout - mode: { times: 1 } - data: - errorCode: 11602 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after NotPrimaryNoSecondaryOk - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failGetMoreAfterCursorCheckout - mode: { times: 1 } - data: - errorCode: 13435 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after NotPrimaryOrSecondary - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failGetMoreAfterCursorCheckout - mode: { times: 1 } - data: - errorCode: 13436 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after StaleShardVersion - runOnRequirements: - # StaleShardVersion is obsolete as of 6.1 and is no longer marked as resumable. - - maxServerVersion: "6.0.99" - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failGetMoreAfterCursorCheckout - mode: { times: 1 } - data: - errorCode: 63 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after StaleEpoch - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failGetMoreAfterCursorCheckout - mode: { times: 1 } - data: - errorCode: 150 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after RetryChangeStream - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failGetMoreAfterCursorCheckout - mode: { times: 1 } - data: - errorCode: 234 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream resumes after FailedToSatisfyReadPreference - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failGetMoreAfterCursorCheckout - mode: { times: 1 } - data: - errorCode: 133 - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - # The next two tests ensure that the driver only uses the error label, not the allow list. - - description: change stream resumes if error contains ResumableChangeStreamError - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ getMore ] - errorCode: 50 # Use an error code that does not have the allow list label by default - closeConnection: false - errorLabels: [ ResumableChangeStreamError ] - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - commandStartedEvent: - command: - getMore: { $$exists: true } - collection: *collection0 - commandName: getMore - databaseName: *database0 - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - resumeAfter: { $$unsetOrMatches: { $$exists: true } } - commandName: aggregate - databaseName: *database0 - - - description: change stream does not resume if error does not contain ResumableChangeStreamError - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failCommand # failCommand will not add the allow list error label - mode: { times: 1 } - data: - failCommands: [ getMore ] - errorCode: 6 # Use an error code that is on the allow list - closeConnection: false - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectError: { errorCode: 6 } diff --git a/testdata/change-streams/change-streams-showExpandedEvents.json b/testdata/change-streams/change-streams-showExpandedEvents.json deleted file mode 100644 index b9594e0c1e..0000000000 --- a/testdata/change-streams/change-streams-showExpandedEvents.json +++ /dev/null @@ -1,516 +0,0 @@ -{ - "description": "change-streams-showExpandedEvents", - "schemaVersion": "1.7", - "runOnRequirements": [ - { - "minServerVersion": "6.0.0", - "topologies": [ - "replicaset", - "sharded" - ], - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ], - "useMultipleMongoses": false - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "database0" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "collection0" - } - }, - { - "database": { - "id": "database1", - "client": "client0", - "databaseName": "database1" - } - }, - { - "collection": { - "id": "collection1", - "database": "database1", - "collectionName": "collection1" - } - }, - { - "database": { - "id": "shardedDb", - "client": "client0", - "databaseName": "shardedDb" - } - }, - { - "database": { - "id": "adminDb", - "client": "client0", - "databaseName": "admin" - } - }, - { - "collection": { - "id": "shardedCollection", - "database": "shardedDb", - "collectionName": "shardedCollection" - } - } - ], - "initialData": [ - { - "collectionName": "collection0", - "databaseName": "database0", - "documents": [] - } - ], - "tests": [ - { - "description": "when provided, showExpandedEvents is sent as a part of the aggregate command", - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [], - "showExpandedEvents": true - }, - "saveResultAsEntity": "changeStream0" - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "showExpandedEvents": true - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "when omitted, showExpandedEvents is not sent as a part of the aggregate command", - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "showExpandedEvents": { - "$$exists": false - } - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "when showExpandedEvents is true, new fields on change stream events are handled appropriately", - "operations": [ - { - "name": "dropCollection", - "object": "database0", - "arguments": { - "collection": "foo" - } - }, - { - "name": "createCollection", - "object": "database0", - "arguments": { - "collection": "foo" - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [], - "showExpandedEvents": true - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "a": 1 - } - } - }, - { - "name": "createIndex", - "object": "collection0", - "arguments": { - "keys": { - "x": 1 - }, - "name": "x_1" - } - }, - { - "name": "rename", - "object": "collection0", - "arguments": { - "to": "foo", - "dropTarget": true - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "collectionUUID": { - "$$exists": true - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "createIndexes", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "operationDescription": { - "$$exists": true - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "rename", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "to": { - "db": "database0", - "coll": "foo" - }, - "operationDescription": { - "dropTarget": { - "$$exists": true - }, - "to": { - "db": "database0", - "coll": "foo" - } - } - } - } - ] - }, - { - "description": "when showExpandedEvents is true, createIndex events are reported", - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [ - { - "$match": { - "operationType": { - "$ne": "create" - } - } - } - ], - "showExpandedEvents": true - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "createIndex", - "object": "collection0", - "arguments": { - "keys": { - "x": 1 - }, - "name": "x_1" - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "createIndexes" - } - } - ] - }, - { - "description": "when showExpandedEvents is true, dropIndexes events are reported", - "operations": [ - { - "name": "createIndex", - "object": "collection0", - "arguments": { - "keys": { - "x": 1 - }, - "name": "x_1" - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [], - "showExpandedEvents": true - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "dropIndex", - "object": "collection0", - "arguments": { - "name": "x_1" - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "dropIndexes" - } - } - ] - }, - { - "description": "when showExpandedEvents is true, create events are reported", - "operations": [ - { - "name": "dropCollection", - "object": "database0", - "arguments": { - "collection": "foo" - } - }, - { - "name": "createChangeStream", - "object": "database0", - "arguments": { - "pipeline": [], - "showExpandedEvents": true - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "createCollection", - "object": "database0", - "arguments": { - "collection": "foo" - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "create" - } - } - ] - }, - { - "description": "when showExpandedEvents is true, create events on views are reported", - "operations": [ - { - "name": "dropCollection", - "object": "database0", - "arguments": { - "collection": "foo" - } - }, - { - "name": "createChangeStream", - "object": "database0", - "arguments": { - "pipeline": [], - "showExpandedEvents": true - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "createCollection", - "object": "database0", - "arguments": { - "collection": "foo", - "viewOn": "testName" - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "create" - } - } - ] - }, - { - "description": "when showExpandedEvents is true, modify events are reported", - "operations": [ - { - "name": "createIndex", - "object": "collection0", - "arguments": { - "keys": { - "x": 1 - }, - "name": "x_2" - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [], - "showExpandedEvents": true - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "runCommand", - "object": "database0", - "arguments": { - "command": { - "collMod": "collection0" - }, - "commandName": "collMod" - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "modify" - } - } - ] - }, - { - "description": "when showExpandedEvents is true, shardCollection events are reported", - "runOnRequirements": [ - { - "topologies": [ - "sharded" - ] - } - ], - "operations": [ - { - "name": "dropCollection", - "object": "shardedDb", - "arguments": { - "collection": "shardedCollection" - } - }, - { - "name": "createCollection", - "object": "shardedDb", - "arguments": { - "collection": "shardedCollection" - } - }, - { - "name": "createChangeStream", - "object": "shardedCollection", - "arguments": { - "pipeline": [], - "showExpandedEvents": true - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "runCommand", - "object": "adminDb", - "arguments": { - "command": { - "shardCollection": "shardedDb.shardedCollection", - "key": { - "_id": 1 - } - }, - "commandName": "shardCollection" - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "shardCollection" - } - } - ] - } - ] -} diff --git a/testdata/change-streams/change-streams-showExpandedEvents.yml b/testdata/change-streams/change-streams-showExpandedEvents.yml deleted file mode 100644 index e6289047bf..0000000000 --- a/testdata/change-streams/change-streams-showExpandedEvents.yml +++ /dev/null @@ -1,307 +0,0 @@ -description: "change-streams-showExpandedEvents" -schemaVersion: "1.7" -runOnRequirements: - - minServerVersion: "6.0.0" - topologies: [ replicaset, sharded ] - serverless: forbid -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - ignoreCommandMonitoringEvents: [ killCursors ] - useMultipleMongoses: false - - database: - id: &database0 database0 - client: *client0 - databaseName: *database0 - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: *collection0 - - database: - id: &database1 database1 - client: *client0 - databaseName: *database1 - - collection: - id: &collection1 collection1 - database: *database1 - collectionName: *collection1 - - database: - id: &shardedDb shardedDb - client: *client0 - databaseName: *shardedDb - - database: - id: &adminDb adminDb - client: *client0 - databaseName: admin - - collection: - id: &shardedCollection shardedCollection - database: *shardedDb - collectionName: *shardedCollection - -initialData: - - collectionName: *collection0 - databaseName: *database0 - documents: [] - -tests: - - description: "when provided, showExpandedEvents is sent as a part of the aggregate command" - operations: - - name: createChangeStream - object: *collection0 - arguments: - pipeline: [] - showExpandedEvents: true - saveResultAsEntity: &changeStream0 changeStream0 - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - showExpandedEvents: true - commandName: aggregate - databaseName: *database0 - - - description: "when omitted, showExpandedEvents is not sent as a part of the aggregate command" - operations: - - name: createChangeStream - object: *collection0 - arguments: - pipeline: [] - saveResultAsEntity: &changeStream0 changeStream0 - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: - showExpandedEvents: - $$exists: false - commandName: aggregate - databaseName: *database0 - - - description: "when showExpandedEvents is true, new fields on change stream events are handled appropriately" - operations: - - name: dropCollection - object: *database0 - arguments: - collection: &existing-collection foo - - name: createCollection - object: *database0 - arguments: - collection: *existing-collection - - name: createChangeStream - object: *collection0 - arguments: - pipeline: [] - showExpandedEvents: true - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *collection0 - arguments: - document: - a: 1 - - name: createIndex - object: *collection0 - arguments: - keys: - x: 1 - name: x_1 - - name: rename - object: *collection0 - arguments: - to: *existing-collection - dropTarget: true - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: insert - ns: - db: *database0 - coll: *collection0 - collectionUUID: - $$exists: true - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: createIndexes - ns: - db: *database0 - coll: *collection0 - operationDescription: - $$exists: true - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: rename - ns: - db: *database0 - coll: *collection0 - to: - db: *database0 - coll: *existing-collection - operationDescription: - dropTarget: - $$exists: true - to: - db: *database0 - coll: *existing-collection - - - description: "when showExpandedEvents is true, createIndex events are reported" - operations: - - name: createChangeStream - object: *collection0 - arguments: - pipeline: - # On sharded clusters, the create command run when loading initial - # data sometimes is still reported in the change stream. To avoid - # this, we exclude the create command when creating the change - # stream, but specifically don't exclude other events to still catch - # driver errors. - - $match: - operationType: - $ne: create - showExpandedEvents: true - saveResultAsEntity: &changeStream0 changeStream0 - - name: createIndex - object: *collection0 - arguments: - keys: - x: 1 - name: x_1 - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: createIndexes - - - description: "when showExpandedEvents is true, dropIndexes events are reported" - operations: - - name: createIndex - object: *collection0 - arguments: - keys: - x: 1 - name: &index1 x_1 - - name: createChangeStream - object: *collection0 - arguments: - pipeline: [] - showExpandedEvents: true - saveResultAsEntity: &changeStream0 changeStream0 - - name: dropIndex - object: *collection0 - arguments: - name: *index1 - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: dropIndexes - - - description: "when showExpandedEvents is true, create events are reported" - operations: - - name: dropCollection - object: *database0 - arguments: - collection: &collection1 foo - - name: createChangeStream - object: *database0 - arguments: - pipeline: [] - showExpandedEvents: true - saveResultAsEntity: &changeStream0 changeStream0 - - name: createCollection - object: *database0 - arguments: - collection: *collection1 - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: create - - - description: "when showExpandedEvents is true, create events on views are reported" - operations: - - name: dropCollection - object: *database0 - arguments: - collection: &collection1 foo - - name: createChangeStream - object: *database0 - arguments: - pipeline: [] - showExpandedEvents: true - saveResultAsEntity: &changeStream0 changeStream0 - - name: createCollection - object: *database0 - arguments: - collection: *collection1 - viewOn: testName - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: create - - - description: "when showExpandedEvents is true, modify events are reported" - operations: - - name: createIndex - object: *collection0 - arguments: - keys: - x: 1 - name: &index2 x_2 - - name: createChangeStream - object: *collection0 - arguments: - pipeline: [] - showExpandedEvents: true - saveResultAsEntity: &changeStream0 changeStream0 - - name: runCommand - object: *database0 - arguments: - command: - collMod: *collection0 - commandName: collMod - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: modify - - - description: "when showExpandedEvents is true, shardCollection events are reported" - runOnRequirements: - # Note: minServerVersion is specified in top-level runOnRequirements - - topologies: [ sharded ] - operations: - - name: dropCollection - object: *shardedDb - arguments: - collection: *shardedCollection - - name: createCollection - object: *shardedDb - arguments: - collection: *shardedCollection - - name: createChangeStream - object: *shardedCollection - arguments: - pipeline: [] - showExpandedEvents: true - saveResultAsEntity: &changeStream0 changeStream0 - - name: runCommand - object: *adminDb - arguments: - command: - shardCollection: shardedDb.shardedCollection - key: - _id: 1 - commandName: shardCollection - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: shardCollection diff --git a/testdata/change-streams/change-streams.json b/testdata/change-streams/change-streams.json deleted file mode 100644 index c8b60ed4e2..0000000000 --- a/testdata/change-streams/change-streams.json +++ /dev/null @@ -1,1795 +0,0 @@ -{ - "description": "change-streams", - "schemaVersion": "1.7", - "runOnRequirements": [ - { - "minServerVersion": "3.6", - "topologies": [ - "replicaset" - ], - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ], - "useMultipleMongoses": false - } - }, - { - "client": { - "id": "globalClient", - "useMultipleMongoses": false - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "database0" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "collection0" - } - }, - { - "database": { - "id": "database1", - "client": "client0", - "databaseName": "database1" - } - }, - { - "collection": { - "id": "collection1", - "database": "database1", - "collectionName": "collection1" - } - }, - { - "database": { - "id": "globalDatabase0", - "client": "globalClient", - "databaseName": "database0" - } - }, - { - "collection": { - "id": "globalCollection0", - "database": "globalDatabase0", - "collectionName": "collection0" - } - }, - { - "database": { - "id": "globalDatabase1", - "client": "globalClient", - "databaseName": "database1" - } - }, - { - "collection": { - "id": "globalCollection1", - "database": "globalDatabase1", - "collectionName": "collection1" - } - }, - { - "collection": { - "id": "globalDb1Collection0", - "database": "globalDatabase1", - "collectionName": "collection0" - } - }, - { - "collection": { - "id": "globalDb0Collection1", - "database": "globalDatabase0", - "collectionName": "collection1" - } - } - ], - "initialData": [ - { - "collectionName": "collection0", - "databaseName": "database0", - "documents": [] - } - ], - "tests": [ - { - "description": "Test array truncation", - "runOnRequirements": [ - { - "minServerVersion": "4.7" - } - ], - "operations": [ - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 1, - "a": 1, - "array": [ - "foo", - { - "a": "bar" - }, - 1, - 2, - 3 - ] - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$set": { - "array": [ - "foo", - { - "a": "bar" - } - ] - } - } - ] - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "update", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "updateDescription": { - "updatedFields": {}, - "removedFields": [], - "truncatedArrays": [ - { - "field": "array", - "newSize": 2 - } - ] - } - } - } - ] - }, - { - "description": "Test with document comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [], - "comment": { - "name": "test1" - } - }, - "saveResultAsEntity": "changeStream0" - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "pipeline": [ - { - "$changeStream": {} - } - ], - "comment": { - "name": "test1" - } - } - } - } - ] - } - ] - }, - { - "description": "Test with document comment - pre 4.4", - "runOnRequirements": [ - { - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [], - "comment": { - "name": "test1" - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "pipeline": [ - { - "$changeStream": {} - } - ], - "comment": { - "name": "test1" - } - } - } - } - ] - } - ] - }, - { - "description": "Test with string comment", - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [], - "comment": "comment" - }, - "saveResultAsEntity": "changeStream0" - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "pipeline": [ - { - "$changeStream": {} - } - ], - "comment": "comment" - } - } - } - ] - } - ] - }, - { - "description": "Test that comment is set on getMore", - "runOnRequirements": [ - { - "minServerVersion": "4.4.0" - } - ], - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [], - "comment": { - "key": "value" - } - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 1, - "a": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0" - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "pipeline": [ - { - "$changeStream": {} - } - ], - "comment": { - "key": "value" - } - } - } - }, - { - "commandStartedEvent": { - "command": { - "insert": "collection0", - "documents": [ - { - "_id": 1, - "a": 1 - } - ] - } - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "collection0", - "comment": { - "key": "value" - } - }, - "commandName": "getMore", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "Test that comment is not set on getMore - pre 4.4", - "runOnRequirements": [ - { - "maxServerVersion": "4.3.99" - } - ], - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [], - "comment": "comment" - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 1, - "a": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0" - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "pipeline": [ - { - "$changeStream": {} - } - ], - "comment": "comment" - } - } - }, - { - "commandStartedEvent": { - "command": { - "insert": "collection0", - "documents": [ - { - "_id": 1, - "a": 1 - } - ] - } - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "collection0", - "comment": { - "$$exists": false - } - }, - "commandName": "getMore", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "to field is set in a rename change event", - "runOnRequirements": [ - { - "minServerVersion": "4.0.1" - } - ], - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "dropCollection", - "object": "database0", - "arguments": { - "collection": "collection1" - } - }, - { - "name": "rename", - "object": "collection0", - "arguments": { - "to": "collection1" - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "rename", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "to": { - "db": "database0", - "coll": "collection1" - } - } - } - ] - }, - { - "description": "Test unknown operationType MUST NOT err", - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [ - { - "$project": { - "operationType": "addedInFutureMongoDBVersion", - "ns": 1 - } - } - ] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 1, - "a": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "addedInFutureMongoDBVersion", - "ns": { - "db": "database0", - "coll": "collection0" - } - } - } - ] - }, - { - "description": "Test newField added in response MUST NOT err", - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [ - { - "$project": { - "operationType": 1, - "ns": 1, - "newField": "newFieldValue" - } - } - ] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 1, - "a": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "newField": "newFieldValue" - } - } - ] - }, - { - "description": "Test new structure in ns document MUST NOT err", - "runOnRequirements": [ - { - "minServerVersion": "3.6", - "maxServerVersion": "5.2.99" - }, - { - "minServerVersion": "6.0" - } - ], - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [ - { - "$project": { - "operationType": "insert", - "ns.viewOn": "db.coll" - } - } - ] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 1, - "a": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "insert", - "ns": { - "viewOn": "db.coll" - } - } - } - ] - }, - { - "description": "Test modified structure in ns document MUST NOT err", - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [ - { - "$project": { - "operationType": "insert", - "ns": { - "db": "$ns.db", - "coll": "$ns.coll", - "viewOn": "db.coll" - } - } - } - ] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 1, - "a": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0", - "viewOn": "db.coll" - } - } - } - ] - }, - { - "description": "Test server error on projecting out _id", - "runOnRequirements": [ - { - "minServerVersion": "4.2" - } - ], - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [ - { - "$project": { - "_id": 0 - } - } - ] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 1, - "a": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectError": { - "errorCode": 280, - "errorCodeName": "ChangeStreamFatalError", - "errorLabelsContain": [ - "NonResumableChangeStreamError" - ] - } - } - ] - }, - { - "description": "Test projection in change stream returns expected fields", - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [ - { - "$project": { - "optype": "$operationType", - "ns": 1, - "newField": "value" - } - } - ] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 1, - "a": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "optype": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "newField": "value" - } - } - ] - }, - { - "description": "$changeStream must be the first stage in a change stream pipeline sent to the server", - "runOnRequirements": [ - { - "minServerVersion": "3.6.0" - } - ], - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "The server returns change stream responses in the specified server response format", - "runOnRequirements": [ - { - "minServerVersion": "3.6.0" - } - ], - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "_id": { - "$$exists": true - }, - "documentKey": { - "$$exists": true - }, - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - } - ] - }, - { - "description": "Executing a watch helper on a Collection results in notifications for changes to the specified collection", - "runOnRequirements": [ - { - "minServerVersion": "3.6.0" - } - ], - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalDb0Collection1", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "insertOne", - "object": "globalDb1Collection0", - "arguments": { - "document": { - "y": 2 - } - } - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "z": 3 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "z": 3, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "Change Stream should allow valid aggregate pipeline stages", - "runOnRequirements": [ - { - "minServerVersion": "3.6.0" - } - ], - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [ - { - "$match": { - "fullDocument.z": 3 - } - } - ] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "y": 2 - } - } - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "z": 3 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "z": 3, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - }, - { - "$match": { - "fullDocument.z": 3 - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "Executing a watch helper on a Database results in notifications for changes to all collections in the specified database.", - "runOnRequirements": [ - { - "minServerVersion": "3.8.0" - } - ], - "operations": [ - { - "name": "createChangeStream", - "object": "database0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalDb0Collection1", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "insertOne", - "object": "globalDb1Collection0", - "arguments": { - "document": { - "y": 2 - } - } - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "z": 3 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection1" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "z": 3, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "Executing a watch helper on a MongoClient results in notifications for changes to all collections in all databases in the cluster.", - "runOnRequirements": [ - { - "minServerVersion": "3.8.0" - } - ], - "operations": [ - { - "name": "createChangeStream", - "object": "client0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalDb0Collection1", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "insertOne", - "object": "globalDb1Collection0", - "arguments": { - "document": { - "y": 2 - } - } - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "z": 3 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection1" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "insert", - "ns": { - "db": "database1", - "coll": "collection0" - }, - "fullDocument": { - "y": 2, - "_id": { - "$$exists": true - } - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "z": 3, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "commandName": "aggregate", - "databaseName": "admin" - } - } - ] - } - ] - }, - { - "description": "Test insert, update, replace, and delete event types", - "runOnRequirements": [ - { - "minServerVersion": "3.6.0" - } - ], - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "updateOne", - "object": "globalCollection0", - "arguments": { - "filter": { - "x": 1 - }, - "update": { - "$set": { - "x": 2 - } - } - } - }, - { - "name": "replaceOne", - "object": "globalCollection0", - "arguments": { - "filter": { - "x": 2 - }, - "replacement": { - "x": 3 - } - } - }, - { - "name": "deleteOne", - "object": "globalCollection0", - "arguments": { - "filter": { - "x": 3 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "update", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "updateDescription": { - "updatedFields": { - "x": 2 - }, - "removedFields": [], - "truncatedArrays": { - "$$unsetOrMatches": { - "$$exists": true - } - } - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "replace", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 3, - "_id": { - "$$exists": true - } - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "delete", - "ns": { - "db": "database0", - "coll": "collection0" - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "Test rename and invalidate event types", - "runOnRequirements": [ - { - "minServerVersion": "4.0.1" - } - ], - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "dropCollection", - "object": "database0", - "arguments": { - "collection": "collection1" - } - }, - { - "name": "rename", - "object": "globalCollection0", - "arguments": { - "to": "collection1" - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "rename", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "to": { - "db": "database0", - "coll": "collection1" - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "invalidate" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "Test drop and invalidate event types", - "runOnRequirements": [ - { - "minServerVersion": "4.0.1" - } - ], - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "dropCollection", - "object": "database0", - "arguments": { - "collection": "collection0" - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "drop", - "ns": { - "db": "database0", - "coll": "collection0" - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "invalidate" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "Test consecutive resume", - "runOnRequirements": [ - { - "minServerVersion": "4.1.7" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "globalClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "getMore" - ], - "closeConnection": true - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [], - "batchSize": 1 - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 2 - } - } - }, - { - "name": "insertOne", - "object": "globalCollection0", - "arguments": { - "document": { - "x": 3 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 1, - "_id": { - "$$exists": true - } - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 2, - "_id": { - "$$exists": true - } - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "fullDocument": { - "x": 3, - "_id": { - "$$exists": true - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "cursor": { - "batchSize": 1 - }, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "commandName": "aggregate", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "Test wallTime field is set in a change event", - "runOnRequirements": [ - { - "minServerVersion": "6.0.0" - } - ], - "operations": [ - { - "name": "createChangeStream", - "object": "collection0", - "arguments": { - "pipeline": [] - }, - "saveResultAsEntity": "changeStream0" - }, - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 1, - "a": 1 - } - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "changeStream0", - "expectResult": { - "operationType": "insert", - "ns": { - "db": "database0", - "coll": "collection0" - }, - "wallTime": { - "$$exists": true - } - } - } - ] - } - ] -} diff --git a/testdata/change-streams/change-streams.yml b/testdata/change-streams/change-streams.yml deleted file mode 100644 index 3235533b5d..0000000000 --- a/testdata/change-streams/change-streams.yml +++ /dev/null @@ -1,927 +0,0 @@ -description: "change-streams" - -schemaVersion: "1.7" - -runOnRequirements: - - minServerVersion: "3.6" - # TODO(DRIVERS-2323): Run all possible tests against sharded clusters once we know the - # cause of unexpected command monitoring events. - topologies: [ replicaset ] - serverless: forbid - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - ignoreCommandMonitoringEvents: [ killCursors ] - useMultipleMongoses: false - - client: - id: &globalClient globalClient - useMultipleMongoses: false - - database: - id: &database0 database0 - client: *client0 - databaseName: *database0 - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: *collection0 - - database: - id: &database1 database1 - client: *client0 - databaseName: *database1 - - collection: - id: &collection1 collection1 - database: *database1 - collectionName: *collection1 - - database: - id: &globalDatabase0 globalDatabase0 - client: *globalClient - databaseName: *database0 - - collection: - id: &globalCollection0 globalCollection0 - database: *globalDatabase0 - collectionName: *collection0 - - database: - id: &globalDatabase1 globalDatabase1 - client: *globalClient - databaseName: *database1 - - collection: - id: &globalCollection1 globalCollection1 - database: *globalDatabase1 - collectionName: *collection1 - # Some tests run operations against db1.coll0 or db0.coll1 - - collection: - id: &globalDb1Collection0 globalDb1Collection0 - database: *globalDatabase1 - collectionName: *collection0 - - collection: - id: &globalDb0Collection1 globalDb0Collection1 - database: *globalDatabase0 - collectionName: *collection1 - -initialData: - - collectionName: *collection0 - databaseName: *database0 - documents: [] - -tests: - - description: "Test array truncation" - runOnRequirements: - - minServerVersion: "4.7" - operations: - - name: insertOne - object: *collection0 - arguments: - document: { - "_id": 1, - "a": 1, - "array": ["foo", {"a": "bar"}, 1, 2, 3] - } - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: updateOne - object: *collection0 - arguments: - filter: { - "_id": 1 - } - update: [ - { - "$set": { - "array": ["foo", {"a": "bar"}] - } - } - ] - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: { - "operationType": "update", - "ns": { - "db": "database0", - "coll": "collection0" - }, - # It is up to the MongoDB server to decide how to report a change. - # This expectation is based on the current MongoDB server behavior. - # Alternatively, we could have used a set of possible expectations of which only one - # must be satisfied, but the unified test format does not support this. - "updateDescription": { - "updatedFields": {}, - "removedFields": [], - "truncatedArrays": [ - { - "field": "array", - "newSize": 2 - } - ] - } - } - - - description: "Test with document comment" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: createChangeStream - object: *collection0 - arguments: - pipeline: [] - comment: &comment0 { name: "test1" } - saveResultAsEntity: &changeStream0 changeStream0 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0 - pipeline: - - $changeStream: {} - comment: *comment0 - - - description: "Test with document comment - pre 4.4" - runOnRequirements: - - maxServerVersion: "4.2.99" - operations: - - name: createChangeStream - object: *collection0 - arguments: - pipeline: [] - comment: &comment0 { name: "test1" } - expectError: - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0 - pipeline: - - $changeStream: {} - comment: *comment0 - - - description: "Test with string comment" - operations: - - name: createChangeStream - object: *collection0 - arguments: - pipeline: [] - comment: "comment" - saveResultAsEntity: &changeStream0 changeStream0 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0 - pipeline: - - $changeStream: {} - comment: "comment" - - - description: "Test that comment is set on getMore" - runOnRequirements: - - minServerVersion: "4.4.0" - operations: - - name: createChangeStream - object: *collection0 - arguments: - pipeline: [] - comment: &commentDoc - key: "value" - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *collection0 - arguments: - document: &new_document - _id: 1 - a: 1 - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0 - pipeline: - - $changeStream: {} - comment: *commentDoc - - commandStartedEvent: - command: - insert: *collection0 - documents: - - *new_document - - commandStartedEvent: - command: - getMore: { $$type: [ int, long ] } - collection: *collection0 - comment: *commentDoc - commandName: getMore - databaseName: *database0 - - - description: "Test that comment is not set on getMore - pre 4.4" - runOnRequirements: - - maxServerVersion: "4.3.99" - operations: - - name: createChangeStream - object: *collection0 - arguments: - pipeline: [] - comment: "comment" - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *collection0 - arguments: - document: &new_document - _id: 1 - a: 1 - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0 - pipeline: - - $changeStream: {} - comment: "comment" - - commandStartedEvent: - command: - insert: *collection0 - documents: - - *new_document - - commandStartedEvent: - command: - getMore: { $$type: [ int, long ] } - collection: *collection0 - comment: { $$exists: false } - commandName: getMore - databaseName: *database0 - - - description: "to field is set in a rename change event" - runOnRequirements: - - minServerVersion: "4.0.1" - operations: - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: dropCollection - object: *database0 - arguments: - collection: &collection1 collection1 - - name: rename - object: *collection0 - arguments: - to: *collection1 - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: rename - ns: - db: *database0 - coll: *collection0 - to: - db: *database0 - coll: *collection1 - - - description: "Test unknown operationType MUST NOT err" - operations: - - name: createChangeStream - object: *collection0 - arguments: - # using $project to simulate future changes to ChangeStreamDocument structure - pipeline: [ { $project: { operationType: "addedInFutureMongoDBVersion", ns: 1 } } ] - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *collection0 - arguments: - document: { "_id": 1, "a": 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: "addedInFutureMongoDBVersion" - ns: - db: *database0 - coll: *collection0 - - - description: "Test newField added in response MUST NOT err" - operations: - - name: createChangeStream - object: *collection0 - arguments: - # using $project to simulate future changes to ChangeStreamDocument structure - pipeline: [ { $project: { operationType: 1, ns: 1, newField: "newFieldValue" } } ] - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *collection0 - arguments: - document: { "_id": 1, "a": 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: "insert" - ns: - db: *database0 - coll: *collection0 - newField: "newFieldValue" - - - description: "Test new structure in ns document MUST NOT err" - runOnRequirements: - - minServerVersion: "3.6" - maxServerVersion: "5.2.99" - - minServerVersion: "6.0" - operations: - - name: createChangeStream - object: *collection0 - arguments: - # using $project to simulate future changes to ChangeStreamDocument structure - pipeline: [ { $project: { operationType: "insert", "ns.viewOn": "db.coll" } } ] - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *collection0 - arguments: - document: { "_id": 1, "a": 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: "insert" - ns: - viewOn: "db.coll" - - - description: "Test modified structure in ns document MUST NOT err" - operations: - - name: createChangeStream - object: *collection0 - arguments: - # using $project to simulate future changes to ChangeStreamDocument structure - pipeline: [ { $project: { operationType: "insert", ns: { db: "$ns.db", coll: "$ns.coll", viewOn: "db.coll" } } } ] - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *collection0 - arguments: - document: { "_id": 1, "a": 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: "insert" - ns: - db: *database0 - coll: *collection0 - viewOn: "db.coll" - - - description: "Test server error on projecting out _id" - runOnRequirements: - - minServerVersion: "4.2" - # Server returns an error if _id is modified on versions 4.2 and higher - operations: - - name: createChangeStream - object: *collection0 - arguments: - pipeline: [ { $project: { _id: 0 } } ] - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *collection0 - arguments: - document: { "_id": 1, "a": 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectError: - errorCode: 280 - errorCodeName: "ChangeStreamFatalError" - errorLabelsContain: [ "NonResumableChangeStreamError" ] - - - description: "Test projection in change stream returns expected fields" - operations: - - name: createChangeStream - object: *collection0 - arguments: - pipeline: [ { $project: { optype: "$operationType", ns: 1, newField: "value" } } ] - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *collection0 - arguments: - document: { "_id": 1, "a": 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - optype: "insert" - ns: - db: *database0 - coll: *collection0 - newField: "value" - - - description: $changeStream must be the first stage in a change stream pipeline sent to the server - runOnRequirements: - - minServerVersion: "3.6.0" - operations: - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - - description: The server returns change stream responses in the specified server response format - runOnRequirements: - - minServerVersion: "3.6.0" - operations: - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - _id: { $$exists: true } - documentKey: { $$exists: true } - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - - - description: Executing a watch helper on a Collection results in notifications for changes to the specified collection - runOnRequirements: - - minServerVersion: "3.6.0" - operations: - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalDb0Collection1 - arguments: - document: { x: 1 } - - name: insertOne - object: *globalDb1Collection0 - arguments: - document: { y: 2 } - - name: insertOne - object: *globalCollection0 - arguments: - document: { z: 3 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - z: 3 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - - description: Change Stream should allow valid aggregate pipeline stages - runOnRequirements: - - minServerVersion: "3.6.0" - operations: - - name: createChangeStream - object: *collection0 - arguments: - pipeline: - - $match: - fullDocument.z: 3 - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { y: 2 } - - name: insertOne - object: *globalCollection0 - arguments: - document: { z: 3 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - z: 3 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: - - $changeStream: {} - - $match: - fullDocument.z: 3 - commandName: aggregate - databaseName: *database0 - - - description: Executing a watch helper on a Database results in notifications for changes to all collections in the specified database. - runOnRequirements: - - minServerVersion: "3.8.0" - operations: - - name: createChangeStream - object: *database0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalDb0Collection1 - arguments: - document: { x: 1 } - - name: insertOne - object: *globalDb1Collection0 - arguments: - document: { y: 2 } - - name: insertOne - object: *globalCollection0 - arguments: - document: { z: 3 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: insert - ns: - db: *database0 - coll: *collection1 - fullDocument: - x: 1 - _id: { $$exists: true } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - z: 3 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: 1 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - - description: Executing a watch helper on a MongoClient results in notifications for changes to all collections in all databases in the cluster. - runOnRequirements: - - minServerVersion: "3.8.0" - operations: - - name: createChangeStream - object: *client0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalDb0Collection1 - arguments: - document: { x: 1 } - - name: insertOne - object: *globalDb1Collection0 - arguments: - document: { y: 2 } - - name: insertOne - object: *globalCollection0 - arguments: - document: { z: 3 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: insert - ns: - db: *database0 - coll: *collection1 - fullDocument: - x: 1 - _id: { $$exists: true } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: insert - ns: - db: *database1 - coll: *collection0 - fullDocument: - y: 2 - _id: { $$exists: true } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - z: 3 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: 1 - cursor: {} - pipeline: - - $changeStream: { allChangesForCluster: true } - commandName: aggregate - databaseName: admin - - - description: "Test insert, update, replace, and delete event types" - runOnRequirements: - - minServerVersion: "3.6.0" - operations: - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: updateOne - object: *globalCollection0 - arguments: - filter: { x: 1 } - update: - $set: { x: 2 } - - name: replaceOne - object: *globalCollection0 - arguments: - filter: { x: 2 } - replacement: { x: 3 } - - name: deleteOne - object: *globalCollection0 - arguments: - filter: { x: 3 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: update - ns: - db: *database0 - coll: *collection0 - updateDescription: - updatedFields: { x: 2 } - removedFields: [] - truncatedArrays: { $$unsetOrMatches: { $$exists: true } } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: replace - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 3 - _id: { $$exists: true } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: delete - ns: - db: *database0 - coll: *collection0 - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - - description: Test rename and invalidate event types - runOnRequirements: - - minServerVersion: "4.0.1" - operations: - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: dropCollection - object: *database0 - arguments: - collection: *collection1 - - name: rename - object: *globalCollection0 - arguments: - to: *collection1 - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: rename - ns: - db: *database0 - coll: *collection0 - to: - db: *database0 - coll: *collection1 - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: invalidate - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - - description: Test drop and invalidate event types - runOnRequirements: - - minServerVersion: "4.0.1" - operations: - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: dropCollection - object: *database0 - arguments: - collection: *collection0 - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: drop - ns: - db: *database0 - coll: *collection0 - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: invalidate - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: {} - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - # Test that resume logic works correctly even after consecutive retryable failures of a getMore command, - # with no intervening events. This is ensured by setting the batch size of the change stream to 1, - - description: Test consecutive resume - runOnRequirements: - - minServerVersion: "4.1.7" - operations: - - name: failPoint - object: testRunner - arguments: - client: *globalClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: [ getMore ] - closeConnection: true - - name: createChangeStream - object: *collection0 - arguments: - pipeline: [] - batchSize: 1 - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 1 } - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 2 } - - name: insertOne - object: *globalCollection0 - arguments: - document: { x: 3 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 1 - _id: { $$exists: true } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 2 - _id: { $$exists: true } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: insert - ns: - db: *database0 - coll: *collection0 - fullDocument: - x: 3 - _id: { $$exists: true } - expectEvents: - - client: *client0 - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - aggregate: *collection0 - cursor: - batchSize: 1 - pipeline: [ { $changeStream: {} } ] - commandName: aggregate - databaseName: *database0 - - - description: "Test wallTime field is set in a change event" - runOnRequirements: - - minServerVersion: "6.0.0" - operations: - - name: createChangeStream - object: *collection0 - arguments: { pipeline: [] } - saveResultAsEntity: &changeStream0 changeStream0 - - name: insertOne - object: *collection0 - arguments: - document: { "_id": 1, "a": 1 } - - name: iterateUntilDocumentOrError - object: *changeStream0 - expectResult: - operationType: "insert" - ns: - db: *database0 - coll: *collection0 - wallTime: { $$exists: true } diff --git a/testdata/client-side-encryption-prose/change-streams-test.json b/testdata/client-side-encryption-prose/change-streams-test.json deleted file mode 100644 index 235400a435..0000000000 --- a/testdata/client-side-encryption-prose/change-streams-test.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "json_schema": { - "properties": { - "encrypted_string": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - } - }, - "bsonType": "object" - }, - "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" - ] - } - ], - "encrypted_document": { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - }, - "decrytped_document": { - "_id": 1, - "encrypted_string": "string0" - } -} \ No newline at end of file diff --git a/testdata/client-side-encryption-prose/corpus-encrypted.json b/testdata/client-side-encryption-prose/corpus-encrypted.json deleted file mode 100644 index a11682688a..0000000000 --- a/testdata/client-side-encryption-prose/corpus-encrypted.json +++ /dev/null @@ -1,7685 +0,0 @@ -{ - "_id": "client_side_encryption_corpus", - "altname_aws": "aws", - "altname_local": "local", - "aws_double_rand_auto_id": { - "kms": "aws", - "type": "double", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAABchrWPF5OPeuFpk4tUV325TmoNpGW+L5iPSXcLQIr319WJFIp3EDy5QiAHBfz2rThI7imU4eLXndIUrsjM0S/vg==", - "subType": "06" - } - } - }, - "aws_double_rand_auto_altname": { - "kms": "aws", - "type": "double", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAABga5hXFiFvH/wOr0wOHSHFWRZ4pEs/UCC1XJWf46Dod3GY9Ry5j1ZyzeHueJxc4Ym5M8UHKSmJuXmNo9m9ZnkiA==", - "subType": "06" - } - } - }, - "aws_double_rand_explicit_id": { - "kms": "aws", - "type": "double", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAABjTYZbsro/YxLWBb88qPXEIDQdzY7UZyK4UaZZ8h62OTxp43Zp9j6WvOEzKhXt4oJPMxlAxyTdqO6MllX5bsDrw==", - "subType": "06" - } - } - }, - "aws_double_rand_explicit_altname": { - "kms": "aws", - "type": "double", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAABqkyXdeS3aWH2tRFoKxsIIL3ZH05gkiAEbutrjrdfw0b110iPhuCCOb0gP/nX/NRNCg1kCFZ543Vu0xZ0BRXlvQ==", - "subType": "06" - } - } - }, - "aws_double_det_explicit_id": { - "kms": "aws", - "type": "double", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { "$numberDouble": "1.234" } - }, - "aws_double_det_explicit_altname": { - "kms": "aws", - "type": "double", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { "$numberDouble": "1.234" } - }, - "aws_string_rand_auto_id": { - "kms": "aws", - "type": "string", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAACAsI5E0rVT8TpIONY3TnbRvIxUjKsiy9ynVd/fE7U1lndE7KR6dTzs8QWK13kdKxO+njKPeC2ObBX904QmJ65Sw==", - "subType": "06" - } - } - }, - "aws_string_rand_auto_altname": { - "kms": "aws", - "type": "string", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAACgBE6J6MRxPSDe+gfJPL8nBvuEIRBYxNS/73LqBTDJYyN/lsHQ6UlFDT5B4EkIPmHPTe+UBMOhZQ1bsP+DK8Aog==", - "subType": "06" - } - } - }, - "aws_string_rand_explicit_id": { - "kms": "aws", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAACbdTVDBWn35M5caKZgLFoiSVeFGKRj5K/QtupKNc8/dPIyCE+/a4PU51G/YIzFpYmp91nLpyq7lD/eJ/V0q66Zw==", - "subType": "06" - } - } - }, - "aws_string_rand_explicit_altname": { - "kms": "aws", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAACa4O+kE2BaqM0E+yiBrbCuE0YEGTrZ7L/+SuWm9gN3UupxwAQpRfxXAuUCTc9u1CXnvL+ga+VJMcWD2bawnn/Rg==", - "subType": "06" - } - } - }, - "aws_string_det_auto_id": { - "kms": "aws", - "type": "string", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAACyvOW8NcqRkZYzujivwVmYptJkic27PWr3Nq3Yv5Njz8cJdoyesVaQan6mn+U3wdfGEH8zbUUISdCx5qgvXEpvw==", - "subType": "06" - } - } - }, - "aws_string_det_explicit_id": { - "kms": "aws", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAACyvOW8NcqRkZYzujivwVmYptJkic27PWr3Nq3Yv5Njz8cJdoyesVaQan6mn+U3wdfGEH8zbUUISdCx5qgvXEpvw==", - "subType": "06" - } - } - }, - "aws_string_det_explicit_altname": { - "kms": "aws", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAACyvOW8NcqRkZYzujivwVmYptJkic27PWr3Nq3Yv5Njz8cJdoyesVaQan6mn+U3wdfGEH8zbUUISdCx5qgvXEpvw==", - "subType": "06" - } - } - }, - "aws_object_rand_auto_id": { - "kms": "aws", - "type": "object", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAADI+/afY6Eka8j1VNThWIeGkDZ7vo4/l66a01Z+lVUFFnVLeUV/nz9kM6uTTplNRUa+RXmNmwkoR/BHRnGc7wRNA==", - "subType": "06" - } - } - }, - "aws_object_rand_auto_altname": { - "kms": "aws", - "type": "object", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAADzN4hVXWXKerhggRRtwWnDu2W2wQ5KIWb/X1WCZJKTjQSQ5LNHVasabBCa4U1q46PQ5pDDM1PkVjW6o+zzl/4xw==", - "subType": "06" - } - } - }, - "aws_object_rand_explicit_id": { - "kms": "aws", - "type": "object", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAADhSs5zKFMuuux3fqFFuPito3N+bp5TgmkUtJtFXjmA/EnLuexGARvEeGUsMJ/n0VzKbbsiE8+AsUNY3o9YXutqQ==", - "subType": "06" - } - } - }, - "aws_object_rand_explicit_altname": { - "kms": "aws", - "type": "object", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAADpj8MSov16h26bFDrHepsNkW+tOLOjRP7oj1Tnj75qZ+uqxxVkQ5B/t/Ihk5fikHTJGAcRBR5Vv6kJ/ulMaDnvQ==", - "subType": "06" - } - } - }, - "aws_object_det_explicit_id": { - "kms": "aws", - "type": "object", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { "x": { "$numberInt": "1" } } - }, - "aws_object_det_explicit_altname": { - "kms": "aws", - "type": "object", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { "x": { "$numberInt": "1" } } - }, - "aws_array_rand_auto_id": { - "kms": "aws", - "type": "array", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAETWDOZ6zV39H2+W+BkwZIoxI3BNF6phKoiBZ9+i4T9uEoyU3TmoTPjuI0YNwR1v/p5/9rlVCG0KLZd16eeMb3zxZXjqh6IAJqfhsBQ7bzBYI=", - "subType": "06" - } - } - }, - "aws_array_rand_auto_altname": { - "kms": "aws", - "type": "array", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAE1xeHbld2JjUiPB1k+xMZuIzNSai7mv1iusCswxKEfYCZ7YtR0GDQTxN4676CwhcodSDiysjgOxSFIGlptKCvl0k46LNq0EGypP9yWBLvdjQ=", - "subType": "06" - } - } - }, - "aws_array_rand_explicit_id": { - "kms": "aws", - "type": "array", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAEFVa4U2uW65MGihhdOmpZFgnwGTs3VeN5TXXbXJ5cfm0CwXF3EPlzAVjy5WO/+lbvFufpQnIiLH59/kVygmwn+2P9zPNJnSGIJW9gaV8Vye8=", - "subType": "06" - } - } - }, - "aws_array_rand_explicit_altname": { - "kms": "aws", - "type": "array", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAE11VXbfg7DJQ5/CB9XdBO0hCrxOkK3RrEjPGJ0FXlUo76IMna1uo+NVmDnM63CRlGE3/TEbZPpp0w0jn4vZLKvBmGr7o7WQusRY4jnRf5oH4=", - "subType": "06" - } - } - }, - "aws_array_det_explicit_id": { - "kms": "aws", - "type": "array", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": [ - { "$numberInt": "1" }, - { "$numberInt": "2" }, - { "$numberInt": "3" } - ] - }, - "aws_array_det_explicit_altname": { - "kms": "aws", - "type": "array", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": [ - { "$numberInt": "1" }, - { "$numberInt": "2" }, - { "$numberInt": "3" } - ] - }, - "aws_binData=00_rand_auto_id": { - "kms": "aws", - "type": "binData=00", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAFpZYSktIHzGLZ6mcBFxywICqxdurqLVJcQR34ngix5YIOOulCYEhBSDzzSEyixEPCuU6cEzeuafpZRHX4qgcr9Q==", - "subType": "06" - } - } - }, - "aws_binData=00_rand_auto_altname": { - "kms": "aws", - "type": "binData=00", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAFshzESR9SyR++9r2yeaEjJYScMDez414s8pZkB3C8ihDa+rsyaxNy4yrF7qNEWjFrdFaH7zD2LdlPx+TKZgROlg==", - "subType": "06" - } - } - }, - "aws_binData=00_rand_explicit_id": { - "kms": "aws", - "type": "binData=00", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAFpYwZRPDom7qyAe5WW/QNSq97/OYgRT8xUEaaR5pkbQEFd/Cwtl8Aib/3Bs1CT3MVaHVWna2u5Gcc4s/v18zLhg==", - "subType": "06" - } - } - }, - "aws_binData=00_rand_explicit_altname": { - "kms": "aws", - "type": "binData=00", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAFBq1RIU1YGHKAS1SAtS42fKtQBHQ/BCQzRutirNdvWlrXxF81LSaS7QgQyycZ2ePiOLsSm2vZS4xaQETeCgRC4g==", - "subType": "06" - } - } - }, - "aws_binData=00_det_auto_id": { - "kms": "aws", - "type": "binData=00", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAAF6SJGmfD3hLVc4tLPm4v2zFuHoRxUDLumBR8Q0AlKK2nQPyvuHEPVBD3vQdDi+Q7PwFxmovJsHccr59VnzvpJeg==", - "subType": "06" - } - } - }, - "aws_binData=00_det_explicit_id": { - "kms": "aws", - "type": "binData=00", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAAF6SJGmfD3hLVc4tLPm4v2zFuHoRxUDLumBR8Q0AlKK2nQPyvuHEPVBD3vQdDi+Q7PwFxmovJsHccr59VnzvpJeg==", - "subType": "06" - } - } - }, - "aws_binData=00_det_explicit_altname": { - "kms": "aws", - "type": "binData=00", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAAF6SJGmfD3hLVc4tLPm4v2zFuHoRxUDLumBR8Q0AlKK2nQPyvuHEPVBD3vQdDi+Q7PwFxmovJsHccr59VnzvpJeg==", - "subType": "06" - } - } - }, - "aws_binData=04_rand_auto_id": { - "kms": "aws", - "type": "binData=04", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAFM5685zqlM8pc3xubtCFuf724g/bWXsebpNzw5E5HrxUqSBBVOvjs3IJH74+Supe169qejY358nOG41mLZvO2wJByvT14qmgUGpgBaLaxPR0=", - "subType": "06" - } - } - }, - "aws_binData=04_rand_auto_altname": { - "kms": "aws", - "type": "binData=04", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAFfLqOzpfjz/XYHDLnliUAA5ehi6s+OIjvrLa59ubqEf8DuoCEWlO13Dl8X42IBB4hoSsO2RUeWtc9MeH4SdIUh/xJN3qS7qzjh/H+GvZRdAM=", - "subType": "06" - } - } - }, - "aws_binData=04_rand_explicit_id": { - "kms": "aws", - "type": "binData=04", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAFkmKfKAbz9tqVaiM9MRhYttiY3vgDwXpdYLQ4uUgWX89KRayLADWortYL+Oq+roFhO3oiwB9vjeWGIdgbj5wSh/50JT/2Gs85TXFe1GFjfWs=", - "subType": "06" - } - } - }, - "aws_binData=04_rand_explicit_altname": { - "kms": "aws", - "type": "binData=04", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAFKbufv83ddN+07Q5Ocq0VxUEV+BesSrVM7Bol3cMlWjHi7P+MrdwhNEa94xlxlDwU3b+RD6kW+AuNEQ2byA3CX2JjZE1gHwN7l0ukXuqpD0A=", - "subType": "06" - } - } - }, - "aws_binData=04_det_auto_id": { - "kms": "aws", - "type": "binData=04", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAAFlg7ceq9w/JMhHcNzQks6UrKYAffpUyeWuBIpcuLoB7YbFO61Dphseh77pzZbk3OvmveUq6EtCP2pmsq7hA+QV4hkv6BTn4m6wnXw6ss/qfE=", - "subType": "06" - } - } - }, - "aws_binData=04_det_explicit_id": { - "kms": "aws", - "type": "binData=04", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAAFlg7ceq9w/JMhHcNzQks6UrKYAffpUyeWuBIpcuLoB7YbFO61Dphseh77pzZbk3OvmveUq6EtCP2pmsq7hA+QV4hkv6BTn4m6wnXw6ss/qfE=", - "subType": "06" - } - } - }, - "aws_binData=04_det_explicit_altname": { - "kms": "aws", - "type": "binData=04", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAAFlg7ceq9w/JMhHcNzQks6UrKYAffpUyeWuBIpcuLoB7YbFO61Dphseh77pzZbk3OvmveUq6EtCP2pmsq7hA+QV4hkv6BTn4m6wnXw6ss/qfE=", - "subType": "06" - } - } - }, - "aws_undefined_rand_explicit_id": { - "kms": "aws", - "type": "undefined", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { "$undefined": true } - }, - "aws_undefined_rand_explicit_altname": { - "kms": "aws", - "type": "undefined", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { "$undefined": true } - }, - "aws_undefined_det_explicit_id": { - "kms": "aws", - "type": "undefined", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { "$undefined": true } - }, - "aws_undefined_det_explicit_altname": { - "kms": "aws", - "type": "undefined", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { "$undefined": true } - }, - "aws_objectId_rand_auto_id": { - "kms": "aws", - "type": "objectId", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAHASE+V+LlkmwgF9QNjBK8QBvC973NaTMk6wbd57VB2EpQzrgxMtR5gYzVeqq4xaaHqrncyZCOIxDJkFlaim2NqA==", - "subType": "06" - } - } - }, - "aws_objectId_rand_auto_altname": { - "kms": "aws", - "type": "objectId", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAHf/+9Qj/ozcDoUb8RNBnajU1d9hJ/6fE17IEZnw+ma6v5yH8LqZk9w3dtm6Sfw1unMhcMKrmIgs6kxqRWhNREJg==", - "subType": "06" - } - } - }, - "aws_objectId_rand_explicit_id": { - "kms": "aws", - "type": "objectId", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAHzX8ejVLhoarQ5xgWsJitU/9eBm/Hlt2IIbZtS0SBc80qzkkWTaP9Zl9wrILH/Hwwx8RFnts855eKII3NJFa3BA==", - "subType": "06" - } - } - }, - "aws_objectId_rand_explicit_altname": { - "kms": "aws", - "type": "objectId", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAHG5l6nUCY8f/6xO6TsPDrZHcdPRyMe3muMlY2DxHwv9GJNDR5Ne5VEAzUjnbgoy+B29SX4oY8cXJ6XhVz8mt3Eg==", - "subType": "06" - } - } - }, - "aws_objectId_det_auto_id": { - "kms": "aws", - "type": "objectId", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAAHTMY2l+gY8glm4HeSsGfCSfOsTVTzYU8qnQV8iqEFHrO5SBJac59gv3N/jukMwAnt0j6vIIQrROkVetU24YY7sQ==", - "subType": "06" - } - } - }, - "aws_objectId_det_explicit_id": { - "kms": "aws", - "type": "objectId", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAAHTMY2l+gY8glm4HeSsGfCSfOsTVTzYU8qnQV8iqEFHrO5SBJac59gv3N/jukMwAnt0j6vIIQrROkVetU24YY7sQ==", - "subType": "06" - } - } - }, - "aws_objectId_det_explicit_altname": { - "kms": "aws", - "type": "objectId", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAAHTMY2l+gY8glm4HeSsGfCSfOsTVTzYU8qnQV8iqEFHrO5SBJac59gv3N/jukMwAnt0j6vIIQrROkVetU24YY7sQ==", - "subType": "06" - } - } - }, - "aws_bool_rand_auto_id": { - "kms": "aws", - "type": "bool", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAISm4UFt1HC2j0ObpTBg7SvF2Dq31i9To2ED4F3JcTihhq0fVzaSCsUz9VTJ0ziHmeNPNdfPPZO6qA/CDEZBO4jg==", - "subType": "06" - } - } - }, - "aws_bool_rand_auto_altname": { - "kms": "aws", - "type": "bool", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAIj93KeAa96DmZXdB8boFvW19jhJSMmtSs5ag5FDSkH8MdKG2d2VoBOdUlBrL+LHYELqeDHCszY7qCirvb5mIgZg==", - "subType": "06" - } - } - }, - "aws_bool_rand_explicit_id": { - "kms": "aws", - "type": "bool", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAIMbDFEuHIl5MNEsWnYLIand1vpK6EMv7Mso6qxrN4wHSVVwmxK+GCPgrKoUQsNuTssFWNCu0IhwrXOagDEfmlxw==", - "subType": "06" - } - } - }, - "aws_bool_rand_explicit_altname": { - "kms": "aws", - "type": "bool", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAIkIaWfmPdxgAV5Rtb6on6T0NGt9GPFDScQD5I/Ch0ngiTCCKceJOjU0ljd3YTgfWRA1p/MlMIV0I5YAWZXKTHlg==", - "subType": "06" - } - } - }, - "aws_bool_det_explicit_id": { - "kms": "aws", - "type": "bool", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": true - }, - "aws_bool_det_explicit_altname": { - "kms": "aws", - "type": "bool", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": true - }, - "aws_date_rand_auto_id": { - "kms": "aws", - "type": "date", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAJz1VG4+QnQXEE+TGu/pzfPugGMVTiC1xnenG1ByRdPvsERVw9WComWl1tb9tt9oblD7H/q0y1+y8HevkDqohB2Q==", - "subType": "06" - } - } - }, - "aws_date_rand_auto_altname": { - "kms": "aws", - "type": "date", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAJa1kI2mIIYWjf7zjf5dD9+psvAQpjZ3nnsoXA5upcIwEtZaC8bxKKHVpOLOP3rTbvT5EV6vLhXkferGoyaqd/8w==", - "subType": "06" - } - } - }, - "aws_date_rand_explicit_id": { - "kms": "aws", - "type": "date", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAJ9Q5Xe4UuOLQTUwosk47A6xx40XJcNoICCNtKrHqsUYy0QLCFRc5v4nA0160BVghURizbUtX8iuIp11pnsDyRtA==", - "subType": "06" - } - } - }, - "aws_date_rand_explicit_altname": { - "kms": "aws", - "type": "date", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAJkHOdUc/4U82wxWJZ0SYABkJjQqNApkH2Iy/5S+PoatPgynoeSFTU9FmAbuWV/gbtIfBiaCOIjlsdonl/gf9+5w==", - "subType": "06" - } - } - }, - "aws_date_det_auto_id": { - "kms": "aws", - "type": "date", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAAJEEpQNsiqMWPqD4lhMkiOJHGE8FxOeYrKPiiAp/bZTrLKyCSS0ZL1WT9H3cGzxWPm5veihCjKqWhjatC/pjtzbQ==", - "subType": "06" - } - } - }, - "aws_date_det_explicit_id": { - "kms": "aws", - "type": "date", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAAJEEpQNsiqMWPqD4lhMkiOJHGE8FxOeYrKPiiAp/bZTrLKyCSS0ZL1WT9H3cGzxWPm5veihCjKqWhjatC/pjtzbQ==", - "subType": "06" - } - } - }, - "aws_date_det_explicit_altname": { - "kms": "aws", - "type": "date", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAAJEEpQNsiqMWPqD4lhMkiOJHGE8FxOeYrKPiiAp/bZTrLKyCSS0ZL1WT9H3cGzxWPm5veihCjKqWhjatC/pjtzbQ==", - "subType": "06" - } - } - }, - "aws_null_rand_explicit_id": { - "kms": "aws", - "type": "null", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": null - }, - "aws_null_rand_explicit_altname": { - "kms": "aws", - "type": "null", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": null - }, - "aws_null_det_explicit_id": { - "kms": "aws", - "type": "null", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": null - }, - "aws_null_det_explicit_altname": { - "kms": "aws", - "type": "null", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": null - }, - "aws_regex_rand_auto_id": { - "kms": "aws", - "type": "regex", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAALnhViSt3HqTDzyLN4mWO9srBU8TjRvPWsAJYfj/5sgI/yFuWdrggMs3Aq6G+K3tRrX3Yb+osy5CLiFCxq9WIvAA==", - "subType": "06" - } - } - }, - "aws_regex_rand_auto_altname": { - "kms": "aws", - "type": "regex", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAALbL2RS2tGQLBZ+6LtXLKAWFKcoKui+u4+gMIlFemLgpdO2eLqrMJB53ccqZImX8ons9UgAwDkiD68hWy8e7KHfg==", - "subType": "06" - } - } - }, - "aws_regex_rand_explicit_id": { - "kms": "aws", - "type": "regex", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAALa0+ftF6W/0Ul4J9VT/3chXFktE1o+OK4S14h2kyOqDVNA8yMKuyCK5nWl1yZvjJ76TuhEABte23oxcBP5QwalQ==", - "subType": "06" - } - } - }, - "aws_regex_rand_explicit_altname": { - "kms": "aws", - "type": "regex", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAALS4Yo9Fwk6OTx2CWdnObFT2L4rHngeIbdCyT4/YMJYd+jLU3mph14M1ptZZg+TBIgSPHq+BkvpRDifbMmOVr/Hg==", - "subType": "06" - } - } - }, - "aws_regex_det_auto_id": { - "kms": "aws", - "type": "regex", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAALpwNlokiTCUtTa2Kx9NVGvXR/aKPGhR5iaCT7nHEk4BOiZ9Kr4cRHdPCeZ7A+gjG4cKoT62sm3Fj1FwSOl8J8aQ==", - "subType": "06" - } - } - }, - "aws_regex_det_explicit_id": { - "kms": "aws", - "type": "regex", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAALpwNlokiTCUtTa2Kx9NVGvXR/aKPGhR5iaCT7nHEk4BOiZ9Kr4cRHdPCeZ7A+gjG4cKoT62sm3Fj1FwSOl8J8aQ==", - "subType": "06" - } - } - }, - "aws_regex_det_explicit_altname": { - "kms": "aws", - "type": "regex", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAALpwNlokiTCUtTa2Kx9NVGvXR/aKPGhR5iaCT7nHEk4BOiZ9Kr4cRHdPCeZ7A+gjG4cKoT62sm3Fj1FwSOl8J8aQ==", - "subType": "06" - } - } - }, - "aws_dbPointer_rand_auto_id": { - "kms": "aws", - "type": "dbPointer", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAMfCVAnMNbRGsThnoVGb2KDsCIU2ehcPtebk/TFG4GZvEmculscLLih813lEz5NHS2sAXBn721EzUS7d0TKAPbmEYFwUBnijIQIPvUoUO8AQM=", - "subType": "06" - } - } - }, - "aws_dbPointer_rand_auto_altname": { - "kms": "aws", - "type": "dbPointer", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAMvYJ5BtaMLVXV+qj85q5WqKRlzlHOBIIxZfUE/BBXUwqSTpJLdQQD++DDh6F2dtorBeYa3oUv2ef3ImASk5j23joU35Pm3Zt9Ci1pMNGodWs=", - "subType": "06" - } - } - }, - "aws_dbPointer_rand_explicit_id": { - "kms": "aws", - "type": "dbPointer", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAMdsmYtPDw8kKjfB2kWfx5W1oNEkWWct1lRpesN303pUWsawDJpfBx40lg18So2X/g4yGIwpY3qfEKQZA4vCJeT+MTjhRXFjXA7eS/mxv8f3E=", - "subType": "06" - } - } - }, - "aws_dbPointer_rand_explicit_altname": { - "kms": "aws", - "type": "dbPointer", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAM0hcvS5zmY3mlTp0SfME/rINlflF/sx2KvP0eJTdH+Uk0WHuTkFIJAza+bXvV/gB7iNC350qyzUX3M6NHx/9s/5yBpY8MawTZTZ7WCQIA+ZI=", - "subType": "06" - } - } - }, - "aws_dbPointer_det_auto_id": { - "kms": "aws", - "type": "dbPointer", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAAMp4QxbaEOij66L+RtaMekrDSm6QbfJBTQ8lQFhxfq9n7SVuQ9Zwdy14Ja8tyI3cGgQzQ/73rHUJ3CKA4+OYr63skYUkkkdlHxUrIMd5j5woc=", - "subType": "06" - } - } - }, - "aws_dbPointer_det_explicit_id": { - "kms": "aws", - "type": "dbPointer", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAAMp4QxbaEOij66L+RtaMekrDSm6QbfJBTQ8lQFhxfq9n7SVuQ9Zwdy14Ja8tyI3cGgQzQ/73rHUJ3CKA4+OYr63skYUkkkdlHxUrIMd5j5woc=", - "subType": "06" - } - } - }, - "aws_dbPointer_det_explicit_altname": { - "kms": "aws", - "type": "dbPointer", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAAMp4QxbaEOij66L+RtaMekrDSm6QbfJBTQ8lQFhxfq9n7SVuQ9Zwdy14Ja8tyI3cGgQzQ/73rHUJ3CKA4+OYr63skYUkkkdlHxUrIMd5j5woc=", - "subType": "06" - } - } - }, - "aws_javascript_rand_auto_id": { - "kms": "aws", - "type": "javascript", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAN3HzAC9BTD7Jgi0PR4RS/Z6L6QtAQ7VhbKRbX+1smmnYniH6jVBM6zyxMDM8h9YjMPNs8EJrGDnisuf33w5KI/A==", - "subType": "06" - } - } - }, - "aws_javascript_rand_auto_altname": { - "kms": "aws", - "type": "javascript", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAANJpw+znlu3ecSiNyZ0EerVsow4aDRF2auI3Wy69EVexJkQlHO753PjRn8hG/x2kY8ROy5IUU43jaugP5AN1bwNQ==", - "subType": "06" - } - } - }, - "aws_javascript_rand_explicit_id": { - "kms": "aws", - "type": "javascript", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAANzoDiq8uI0+l8COY8YdM9S3rpLvPOHOWmJqJNtOyS0ZXUx1SB5paRJ4W3Eg8KuXEeoFwvBDe9cW9YT66CzkjlBw==", - "subType": "06" - } - } - }, - "aws_javascript_rand_explicit_altname": { - "kms": "aws", - "type": "javascript", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAN/JhtRongJweLC5SdrXHhsFz3p82q3cwXf8Sru21DK6S39S997y3uhVLn0xlX5d94PxK1XVYSjz1oVuMxZouZ7Q==", - "subType": "06" - } - } - }, - "aws_javascript_det_auto_id": { - "kms": "aws", - "type": "javascript", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAANE39aEGiuUZ1WyakVEBgkGzLp5whkIjJ4uiaFLXniRszJL70FRkcf+aFXlA5Y4So9/ODKF76qbSsH4Jk6L+3mog==", - "subType": "06" - } - } - }, - "aws_javascript_det_explicit_id": { - "kms": "aws", - "type": "javascript", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAANE39aEGiuUZ1WyakVEBgkGzLp5whkIjJ4uiaFLXniRszJL70FRkcf+aFXlA5Y4So9/ODKF76qbSsH4Jk6L+3mog==", - "subType": "06" - } - } - }, - "aws_javascript_det_explicit_altname": { - "kms": "aws", - "type": "javascript", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAANE39aEGiuUZ1WyakVEBgkGzLp5whkIjJ4uiaFLXniRszJL70FRkcf+aFXlA5Y4So9/ODKF76qbSsH4Jk6L+3mog==", - "subType": "06" - } - } - }, - "aws_symbol_rand_auto_id": { - "kms": "aws", - "type": "symbol", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAOBv1T9tleM0xwNe7efg/MlShyzvXe3Pmg1GzPl3gjFRHZGWXR578KqX+8oiz65eXGzNuyOFvcpnR2gYCs3NeKeQfctO5plEiIva6nzCI5SK8=", - "subType": "06" - } - } - }, - "aws_symbol_rand_auto_altname": { - "kms": "aws", - "type": "symbol", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAOwLgGws8CMh+GgkEJFAx8tDIflyjsgG+/1FmZZobKAg8NOKqfXjtbnNCbvR28OCk6g/8SqBm8m53G6JciwvthJ0DirdfEexiUqu7IPtaeeyw=", - "subType": "06" - } - } - }, - "aws_symbol_rand_explicit_id": { - "kms": "aws", - "type": "symbol", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAORQi3dNkXzZeruWu19kEhDu6fFD/h47ILzk+OVKQMoriAQC5YFyVRp1yAkIaWsrsPcyCHlfZ99FySSQeqSYbZZNj5FqyonWvDuPTduHDy3CI=", - "subType": "06" - } - } - }, - "aws_symbol_rand_explicit_altname": { - "kms": "aws", - "type": "symbol", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAOj+Yl1pQPiJ6mESOISOyUYsKN/VIvC8f0derhxIPakXkwn57U0sxv+geUkrl3JZDxY3+cX5M1JZmY+PfjaYQhbTorf9RZaVC2Wwo2lMftWi0=", - "subType": "06" - } - } - }, - "aws_symbol_det_auto_id": { - "kms": "aws", - "type": "symbol", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAAO5IHripygBGEsVK8RFWZ1rIIVUap8KVDuqOspZpERaj+5ZEfqIcyrP/WK9KdvwOfdOWXfP/mOwuImYgNdbaQe+ejkYe4W0Y0uneCuw88k95Q=", - "subType": "06" - } - } - }, - "aws_symbol_det_explicit_id": { - "kms": "aws", - "type": "symbol", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAAO5IHripygBGEsVK8RFWZ1rIIVUap8KVDuqOspZpERaj+5ZEfqIcyrP/WK9KdvwOfdOWXfP/mOwuImYgNdbaQe+ejkYe4W0Y0uneCuw88k95Q=", - "subType": "06" - } - } - }, - "aws_symbol_det_explicit_altname": { - "kms": "aws", - "type": "symbol", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAAO5IHripygBGEsVK8RFWZ1rIIVUap8KVDuqOspZpERaj+5ZEfqIcyrP/WK9KdvwOfdOWXfP/mOwuImYgNdbaQe+ejkYe4W0Y0uneCuw88k95Q=", - "subType": "06" - } - } - }, - "aws_javascriptWithScope_rand_auto_id": { - "kms": "aws", - "type": "javascriptWithScope", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAPT31GSNkY1RM43miv1XPYtDX1vU/xORiM3U0pumjqA+JLU/HMhH++75OcMhcAQqMjm2nZtZScxdGJsJJPEEzqjbFNMJgYc9sqR5uLnzk+2dg=", - "subType": "06" - } - } - }, - "aws_javascriptWithScope_rand_auto_altname": { - "kms": "aws", - "type": "javascriptWithScope", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAPUxgaKAxSQ1uzOZtzsbtrxtDT2P/zWY6lYsbChXuRUooqvyjXSkNDqKBBA7Gp5BdGiVB/JLR47Tihpbcw1s1yGhwQRvnqeDvPrf91nvElXRY=", - "subType": "06" - } - } - }, - "aws_javascriptWithScope_rand_explicit_id": { - "kms": "aws", - "type": "javascriptWithScope", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAPv8W0ZtquFCLTG0TqvRjdzKa/4mvqT2FuEGQ0mXG2k2BZh2LY5APr/kgW0tP4eLjHzVld6OLiM9ZKAvENCZ6/fKOvqSwpIfkdLWUIeB4REQg=", - "subType": "06" - } - } - }, - "aws_javascriptWithScope_rand_explicit_altname": { - "kms": "aws", - "type": "javascriptWithScope", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAPMVhWjaxLffdAOkVgIJpjgNIldMS451NQs3C1jb+pzopHp3DlfZ+AHQpK9reMVVKjaqanhWBpL25q+feA60XVgZPCUDroiRYqMFqU//y0amw=", - "subType": "06" - } - } - }, - "aws_javascriptWithScope_det_explicit_id": { - "kms": "aws", - "type": "javascriptWithScope", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { "$code": "x=1", "$scope": {} } - }, - "aws_javascriptWithScope_det_explicit_altname": { - "kms": "aws", - "type": "javascriptWithScope", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { "$code": "x=1", "$scope": {} } - }, - "aws_int_rand_auto_id": { - "kms": "aws", - "type": "int", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAQFV5b3vsoZe+MT4z8soetpmrWJpm7be41FNu/rdEqHWTG32jCym6762PCNYH5+vA7ldCWQkdt+ncneHsxzPrm9w==", - "subType": "06" - } - } - }, - "aws_int_rand_auto_altname": { - "kms": "aws", - "type": "int", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAQY9+QenvU1Tk/dEGZP11uOZJLHAJ9hWHbEhxbtxItt1LsdU/8gOZfypilIO5BUkLT/15PUuXV28GISNh6yIuWhw==", - "subType": "06" - } - } - }, - "aws_int_rand_explicit_id": { - "kms": "aws", - "type": "int", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAQruCugbneumhcinuXm89WW1PXVuSOewttp9cpsPPsCRVqe/uAkZOdJnZ2KaEZ9zki2GeqaJTs1qDmaJofc6GMEA==", - "subType": "06" - } - } - }, - "aws_int_rand_explicit_altname": { - "kms": "aws", - "type": "int", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAQb15qXl/tejk4pmgkc4pUxzt4eJrv/cetgzgcPVaROAQSzd8ptbgCjaV8vP46uqozRoaDFZbQ06t65c3f0x/Ucw==", - "subType": "06" - } - } - }, - "aws_int_det_auto_id": { - "kms": "aws", - "type": "int", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAAQCXo6ieWvfoqkG+rP7J2BV013AVf/oNMmmGWe44VEHahF+qZHzW5I/F2qIA+xgKkk172pFq0iTSOpe+K2WHMKFw==", - "subType": "06" - } - } - }, - "aws_int_det_explicit_id": { - "kms": "aws", - "type": "int", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAAQCXo6ieWvfoqkG+rP7J2BV013AVf/oNMmmGWe44VEHahF+qZHzW5I/F2qIA+xgKkk172pFq0iTSOpe+K2WHMKFw==", - "subType": "06" - } - } - }, - "aws_int_det_explicit_altname": { - "kms": "aws", - "type": "int", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAAQCXo6ieWvfoqkG+rP7J2BV013AVf/oNMmmGWe44VEHahF+qZHzW5I/F2qIA+xgKkk172pFq0iTSOpe+K2WHMKFw==", - "subType": "06" - } - } - }, - "aws_timestamp_rand_auto_id": { - "kms": "aws", - "type": "timestamp", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAR63xXG8mrlixkQzD5VBIPE6NHicaWcS5CBhiIJDcZ0x8D9c5TgRJUfCeWhKvWFD4o0DoxcBQ2opPormFDpvmq/g==", - "subType": "06" - } - } - }, - "aws_timestamp_rand_auto_altname": { - "kms": "aws", - "type": "timestamp", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAARAgY9LsUxP6gP4gYRvvzZ4iaHVQRNbycATiVag1YNSiDmEr4LYserYuBscdrIy4v3zgGaulFM9KV86bx0ItycZA==", - "subType": "06" - } - } - }, - "aws_timestamp_rand_explicit_id": { - "kms": "aws", - "type": "timestamp", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAARLneAZqPcHdzGGnXz2Ne5E7HP9cDC1+yoIwcA8OSF/IlzEjrrMAi3z6Izol6gWDlD7VOh7QYL3sASJOXyzF1hPQ==", - "subType": "06" - } - } - }, - "aws_timestamp_rand_explicit_altname": { - "kms": "aws", - "type": "timestamp", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAARH2bU7KNo5SHxiO8JFEcT9wryuHNXyM7ADop1oPcESyay1Nc0WHPD3nr0yMAK481NxOkE3qXyaslu7bcP/744WA==", - "subType": "06" - } - } - }, - "aws_timestamp_det_auto_id": { - "kms": "aws", - "type": "timestamp", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAARG7kGfx0ky+d4Hl/fRBu8oUR1Mph26Dkv3J7fxGYanpzOFMiHIfVO0uwYMvsfzG54y0DDNlS3FmmS13DzepbzGQ==", - "subType": "06" - } - } - }, - "aws_timestamp_det_explicit_id": { - "kms": "aws", - "type": "timestamp", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAARG7kGfx0ky+d4Hl/fRBu8oUR1Mph26Dkv3J7fxGYanpzOFMiHIfVO0uwYMvsfzG54y0DDNlS3FmmS13DzepbzGQ==", - "subType": "06" - } - } - }, - "aws_timestamp_det_explicit_altname": { - "kms": "aws", - "type": "timestamp", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAARG7kGfx0ky+d4Hl/fRBu8oUR1Mph26Dkv3J7fxGYanpzOFMiHIfVO0uwYMvsfzG54y0DDNlS3FmmS13DzepbzGQ==", - "subType": "06" - } - } - }, - "aws_long_rand_auto_id": { - "kms": "aws", - "type": "long", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAASZbes2EdR78crt2pXVElW2YwAQh8HEBapYYeav2VQeg2syXaV/qZuD8ofnAVn4v/DydTTMVMmK+sVU/TlnAu2eA==", - "subType": "06" - } - } - }, - "aws_long_rand_auto_altname": { - "kms": "aws", - "type": "long", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAASt+7fmMYH+fLHgybc+sng8/UmKP3YPUEPCz1SXVQljQp6orsCILSgtgGPsdeGnN5NSxh3XzerHs6zlR92fWpZCw==", - "subType": "06" - } - } - }, - "aws_long_rand_explicit_id": { - "kms": "aws", - "type": "long", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAS01fF1uo6zYDToJnOT/EbDipzk7YZ6I+IspZF+avjU3XYfpRxT9NdAgKr0euWJwyAsdpWqqCwFummfrPeZOy04A==", - "subType": "06" - } - } - }, - "aws_long_rand_explicit_altname": { - "kms": "aws", - "type": "long", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAS6tpH796bqy58mXf38rJvVtA1uBcxBE5yIGQ4RN44oypc/pvw0ouhFI1dkoneKMtAFU/5RygZV+RvQhRtgKn76A==", - "subType": "06" - } - } - }, - "aws_long_det_auto_id": { - "kms": "aws", - "type": "long", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAASC7O/8JeB4WTqQFPuMpFRsAuonPS3yu7IAPZeRPIr03CmM6HNndYIKMoFM13eELNZTdJSgg9u9ItGqRw+/XMHzQ==", - "subType": "06" - } - } - }, - "aws_long_det_explicit_id": { - "kms": "aws", - "type": "long", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAASC7O/8JeB4WTqQFPuMpFRsAuonPS3yu7IAPZeRPIr03CmM6HNndYIKMoFM13eELNZTdJSgg9u9ItGqRw+/XMHzQ==", - "subType": "06" - } - } - }, - "aws_long_det_explicit_altname": { - "kms": "aws", - "type": "long", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQFkgAAAAAAAAAAAAAAAAAASC7O/8JeB4WTqQFPuMpFRsAuonPS3yu7IAPZeRPIr03CmM6HNndYIKMoFM13eELNZTdJSgg9u9ItGqRw+/XMHzQ==", - "subType": "06" - } - } - }, - "aws_decimal_rand_auto_id": { - "kms": "aws", - "type": "decimal", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAATgf5zW9EgnWHPxj4HAGt472eN9UXP41TaF8V2J7S2zqSpiBZGKDuOIjw2FBSqaNp53vvfl9HpwAuQBJZhrwkBCKRkKV/AAR3/pTpuoqhSKaM=", - "subType": "06" - } - } - }, - "aws_decimal_rand_auto_altname": { - "kms": "aws", - "type": "decimal", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAATPRfvZWdupE2N0W1DXUx7X8Zz7g43jawJL7PbQtTYetI78xRETkMdygwSEHgs+cvnUBBtYIeKRVkOGZQkwf568OclhDiPxUeD38cR5blBq/U=", - "subType": "06" - } - } - }, - "aws_decimal_rand_explicit_id": { - "kms": "aws", - "type": "decimal", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAAT+ZnCg2lSMIohZ9RJ4CNs3LZ0g+nV04cYAmrxTSrTSBPGlZ7Ywh5A2rCss7AUijYZiKiYyZbuAzukbOuVRhdCtm+xo9+DyLAwTezF18okk6Y=", - "subType": "06" - } - } - }, - "aws_decimal_rand_explicit_altname": { - "kms": "aws", - "type": "decimal", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgFkgAAAAAAAAAAAAAAAAAATlnQYASsTZRRHzFjcbCClXartcXBVRrYv7JImMkDmAj6EAjf/ZqpjeykkS/wohMhXaNwyZBdREr+n+GDV7imYoL4WRBOLnqB6hrYidlWqNzE=", - "subType": "06" - } - } - }, - "aws_decimal_det_explicit_id": { - "kms": "aws", - "type": "decimal", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { "$numberDecimal": "1.234" } - }, - "aws_decimal_det_explicit_altname": { - "kms": "aws", - "type": "decimal", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { "$numberDecimal": "1.234" } - }, - "aws_minKey_rand_explicit_id": { - "kms": "aws", - "type": "minKey", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { "$minKey": 1 } - }, - "aws_minKey_rand_explicit_altname": { - "kms": "aws", - "type": "minKey", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { "$minKey": 1 } - }, - "aws_minKey_det_explicit_id": { - "kms": "aws", - "type": "minKey", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { "$minKey": 1 } - }, - "aws_minKey_det_explicit_altname": { - "kms": "aws", - "type": "minKey", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { "$minKey": 1 } - }, - "aws_maxKey_rand_explicit_id": { - "kms": "aws", - "type": "maxKey", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { "$maxKey": 1 } - }, - "aws_maxKey_rand_explicit_altname": { - "kms": "aws", - "type": "maxKey", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { "$maxKey": 1 } - }, - "aws_maxKey_det_explicit_id": { - "kms": "aws", - "type": "maxKey", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { "$maxKey": 1 } - }, - "aws_maxKey_det_explicit_altname": { - "kms": "aws", - "type": "maxKey", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { "$maxKey": 1 } - }, - "local_double_rand_auto_id": { - "kms": "local", - "type": "double", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAABGF195CB8nRmK9+KxYO7T96MeXucC/ILQtEEQAS4zrwj3Qz7YEQrf/apvbKTCkn3siN2XSDLQ/7dmddZa9xa9yQ==", - "subType": "06" - } - } - }, - "local_double_rand_auto_altname": { - "kms": "local", - "type": "double", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAABY8g18z6ZOjGtfNxaAmU95tXMdoM6qbtDMpB72paqiHZTW1UGB22HPXiEnVz05JTBzzX4fc6tOldX6aJel812Zg==", - "subType": "06" - } - } - }, - "local_double_rand_explicit_id": { - "kms": "local", - "type": "double", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAABDlHwN8hYyScEhhx64TdJ2Qp2rmKRg8983zdqIL1914tyPwRQq7ySCOhmFif2S7v4KT+r0uOfimYvKD1n9rKHlg==", - "subType": "06" - } - } - }, - "local_double_rand_explicit_altname": { - "kms": "local", - "type": "double", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAB2VnTFlaCRzAZZTQiMWQORFNgXIuAJlHJXIHiYow2eO6JbVghWTpH+MsdafBNPVnc0zKuZBL0Qs2Nuk1xiQaqhA==", - "subType": "06" - } - } - }, - "local_double_det_explicit_id": { - "kms": "local", - "type": "double", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { "$numberDouble": "1.234" } - }, - "local_double_det_explicit_altname": { - "kms": "local", - "type": "double", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { "$numberDouble": "1.234" } - }, - "local_string_rand_auto_id": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAC5NBAPM8q2n9fnkwQfE9so/XcO51plPBNs5VlBRbDw68k9T6/uZ2TWsAvTYtVooY59zHHr2QS3usKbGQB6J61rA==", - "subType": "06" - } - } - }, - "local_string_rand_auto_altname": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAACM/EjGMrkYHvSZra26m74upuvLkfKXTs+tTWquGzrgWYLnLt8I6XBIwx1VymS9EybrCU/ewmtgjLUNUFQacIeXA==", - "subType": "06" - } - } - }, - "local_string_rand_explicit_id": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAACn4tD26UG8lO9gTZaxen6yXzHo/a2lokeY1ClxHMtJODoJr2JZzIDHP3A9aZ8L4+Vu+nyqphaWyGaGONKu8gpcQ==", - "subType": "06" - } - } - }, - "local_string_rand_explicit_altname": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAACZfoO2LjY+IB31FZ1Tq7pHr0DCFKGJqWcXcOrnZ7bV9Euc9f101motJc31sp8nF5CTCfd83VQE0319eQrxDDaSw==", - "subType": "06" - } - } - }, - "local_string_det_auto_id": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAACW0cZMYWOY3eoqQQkSdBtS9iHC4CSQA27dy6XJGcmTV8EDuhGNnPmbx0EKFTDb0PCSyCjMyuE4nsgmNYgjTaSuw==", - "subType": "06" - } - } - }, - "local_string_det_explicit_id": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAACW0cZMYWOY3eoqQQkSdBtS9iHC4CSQA27dy6XJGcmTV8EDuhGNnPmbx0EKFTDb0PCSyCjMyuE4nsgmNYgjTaSuw==", - "subType": "06" - } - } - }, - "local_string_det_explicit_altname": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAACW0cZMYWOY3eoqQQkSdBtS9iHC4CSQA27dy6XJGcmTV8EDuhGNnPmbx0EKFTDb0PCSyCjMyuE4nsgmNYgjTaSuw==", - "subType": "06" - } - } - }, - "local_object_rand_auto_id": { - "kms": "local", - "type": "object", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAADlekcUsETAkkKTjCVx5EISJN+sftrQax/VhaWXLyRgRz97adXXmwZkMyt+035SHZsF91i2LaXziMA4RHoP+nKFw==", - "subType": "06" - } - } - }, - "local_object_rand_auto_altname": { - "kms": "local", - "type": "object", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAADpaQmy5r6q9gLqEm+FIi/OyQgcuUnrICCP9rC4S3wR6qUHd82IW/3dFQUzwTkaXxgStjopamQMuZ4ESRj0xx0bA==", - "subType": "06" - } - } - }, - "local_object_rand_explicit_id": { - "kms": "local", - "type": "object", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAADCHRJCINzWY0u4gZPWEmHg/JoQ8IW4yMfUyzYJCQrEMp4rUeupIuxqSuq2QyLBYZBBv0r7t3lNH49I5qDeav2vA==", - "subType": "06" - } - } - }, - "local_object_rand_explicit_altname": { - "kms": "local", - "type": "object", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAADrHQQUnLF1jdNmFY/V266cS28XAB4nOKetHAcSbwkeUxNzgZT1g+XMQaYfcNMMv/ywypKU1KpgLMsEOpm4qcPkQ==", - "subType": "06" - } - } - }, - "local_object_det_explicit_id": { - "kms": "local", - "type": "object", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { "x": { "$numberInt": "1" } } - }, - "local_object_det_explicit_altname": { - "kms": "local", - "type": "object", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { "x": { "$numberInt": "1" } } - }, - "local_array_rand_auto_id": { - "kms": "local", - "type": "array", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAEXa7bQ5vGPNsLdklM/H+sop8aCL4vlDiVUoVjTAGjTngn2WLcdKLWxaNSyMdJpsI/NsxQJ58YrcwP+yHzi9rZVtRdbg7m8p+CYcq1vUm6UoQ=", - "subType": "06" - } - } - }, - "local_array_rand_auto_altname": { - "kms": "local", - "type": "array", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAEVlZlOvtRmGIhcYi/qPl3HKi/qf0yRQrkbVo9rScYkxDCBN9wA55pAWHDQ/5Sjy4d0DwL57k+M1G9e7xSIrv8xXKwoIuuabhSWaIX2eJHroY=", - "subType": "06" - } - } - }, - "local_array_rand_explicit_id": { - "kms": "local", - "type": "array", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAEYBLSYHHt2rohezMF4lMjNdqy9CY33EHf+pgRbJwVXZScLDgn9CcqeRsdU8bW5h2qgNpQvoSMBB7pW+Dgp1RauTHZSOd4PcZpAGjwoFDWSSM=", - "subType": "06" - } - } - }, - "local_array_rand_explicit_altname": { - "kms": "local", - "type": "array", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAES1IJ8S2NxWekolQockxLJvzFSGfKQ9Xbi55vO8LyWo0sIG9ZgPQXtVQkZ301CsdFduvx9A0vDqQ0MGYc4plxNnpUTizJPRUDyez5dOgZ9tI=", - "subType": "06" - } - } - }, - "local_array_det_explicit_id": { - "kms": "local", - "type": "array", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": [ - { "$numberInt": "1" }, - { "$numberInt": "2" }, - { "$numberInt": "3" } - ] - }, - "local_array_det_explicit_altname": { - "kms": "local", - "type": "array", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": [ - { "$numberInt": "1" }, - { "$numberInt": "2" }, - { "$numberInt": "3" } - ] - }, - "local_binData=00_rand_auto_id": { - "kms": "local", - "type": "binData=00", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAF+hgWs4ZCo9GnmhSM9SDSWzWX4E7Tlp4TwlEy3zfO/rrMREECGB4u8LD8Ju9b8YP+xcZhMI1tcz/vrQS87NffUg==", - "subType": "06" - } - } - }, - "local_binData=00_rand_auto_altname": { - "kms": "local", - "type": "binData=00", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAFtEvaXWpGfXC1GlKu0AeRDaeBKHryGoS0tAUr48vfYk7umCr+fJKyXCY9vSv7wCiQxWLe8V/EZWkHsu0zqhJw9w==", - "subType": "06" - } - } - }, - "local_binData=00_rand_explicit_id": { - "kms": "local", - "type": "binData=00", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAF/1L5bvmMX3Bk2nAw8KvvRd/7nZ82XHVasT0jrlPhSiJU7ehJMeUCOb7HCHU6KgCzZB9C2W3NoVhLKIhE9ZnYdg==", - "subType": "06" - } - } - }, - "local_binData=00_rand_explicit_altname": { - "kms": "local", - "type": "binData=00", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAFK0W5IWKzggR4UU+fhwA2p8YCHLfmx5y1OEtHc/9be9eEYTORACDmWY6207Vd4LhBJCedd+Q5qMm7NRZjjhyLEQ==", - "subType": "06" - } - } - }, - "local_binData=00_det_auto_id": { - "kms": "local", - "type": "binData=00", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAF1ofBnK9+ERP29P/i14GQ/y3muic6tNKY532zCkzQkJSktYCOeXS8DdY1DdaOP/asZWzPTdgwby6/iZcAxJU+xQ==", - "subType": "06" - } - } - }, - "local_binData=00_det_explicit_id": { - "kms": "local", - "type": "binData=00", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAF1ofBnK9+ERP29P/i14GQ/y3muic6tNKY532zCkzQkJSktYCOeXS8DdY1DdaOP/asZWzPTdgwby6/iZcAxJU+xQ==", - "subType": "06" - } - } - }, - "local_binData=00_det_explicit_altname": { - "kms": "local", - "type": "binData=00", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAF1ofBnK9+ERP29P/i14GQ/y3muic6tNKY532zCkzQkJSktYCOeXS8DdY1DdaOP/asZWzPTdgwby6/iZcAxJU+xQ==", - "subType": "06" - } - } - }, - "local_binData=04_rand_auto_id": { - "kms": "local", - "type": "binData=04", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAFxq38aA4k/tYHPwJFRK0pahlo/3zjCe3VHJRqURRA+04lbJCvdkQTawxWlf8o+3Pcetl1UcPTQigdYp5KbIkstuPstLbT+TZXHVD1os9LTRw=", - "subType": "06" - } - } - }, - "local_binData=04_rand_auto_altname": { - "kms": "local", - "type": "binData=04", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAFTXNWchCPmCSY0+AL22/kCBmAoDJDX5T18jpJHLdvZtHs0zwD64b9hLvfRK268BlNu4P37KDFE6LT0QzjG7brqzFJf3ZaadDCKeIw1q7DWQs=", - "subType": "06" - } - } - }, - "local_binData=04_rand_explicit_id": { - "kms": "local", - "type": "binData=04", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAF7XgMgKjQmWYWmobrYWKiGYCKsy5kTgVweFBuzvFISaZjFsq2hrZB2DwUaOeT6XUPH/Onrdjc3fNElf3FdQDHif4rt+1lh9jEX+nMbRw9i3s=", - "subType": "06" - } - } - }, - "local_binData=04_rand_explicit_altname": { - "kms": "local", - "type": "binData=04", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAFGoA/1H0waFLor6LbkUCLC2Wm9j/ZT7yifPbf0G7WvO0+gBLlffr3aJIQ9ik5vxPbmDDMCoYlbEYgb8i9I5tKC17WPhjVH2N2+4l9y7aEmS4=", - "subType": "06" - } - } - }, - "local_binData=04_det_auto_id": { - "kms": "local", - "type": "binData=04", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAFwO3hsD8ee/uwgUiHWem8fGe54LsTJWqgbRCacIe6sxrsyLT6EsVIqg4Sn7Ou+FC3WJbFld5kx8euLe/MHa8FGYjxD97z5j+rUx5tt3T6YbA=", - "subType": "06" - } - } - }, - "local_binData=04_det_explicit_id": { - "kms": "local", - "type": "binData=04", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAFwO3hsD8ee/uwgUiHWem8fGe54LsTJWqgbRCacIe6sxrsyLT6EsVIqg4Sn7Ou+FC3WJbFld5kx8euLe/MHa8FGYjxD97z5j+rUx5tt3T6YbA=", - "subType": "06" - } - } - }, - "local_binData=04_det_explicit_altname": { - "kms": "local", - "type": "binData=04", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAFwO3hsD8ee/uwgUiHWem8fGe54LsTJWqgbRCacIe6sxrsyLT6EsVIqg4Sn7Ou+FC3WJbFld5kx8euLe/MHa8FGYjxD97z5j+rUx5tt3T6YbA=", - "subType": "06" - } - } - }, - "local_undefined_rand_explicit_id": { - "kms": "local", - "type": "undefined", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { "$undefined": true } - }, - "local_undefined_rand_explicit_altname": { - "kms": "local", - "type": "undefined", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { "$undefined": true } - }, - "local_undefined_det_explicit_id": { - "kms": "local", - "type": "undefined", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { "$undefined": true } - }, - "local_undefined_det_explicit_altname": { - "kms": "local", - "type": "undefined", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { "$undefined": true } - }, - "local_objectId_rand_auto_id": { - "kms": "local", - "type": "objectId", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAHfvxWRZOzfao3faE3RglL0IcDpBcNwqiGL5KgSokmRxWjjWeiel88Mbo5Plo0SswwNQ2H7C5GVG21L+UbvcW63g==", - "subType": "06" - } - } - }, - "local_objectId_rand_auto_altname": { - "kms": "local", - "type": "objectId", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAHhd9lSOO7bHE7PM+Uxa2v3X1FF66IwyEr0wqnyTaOM+cHQLmec/RlEaRIQ1x2AiW7LwmmVgZ0xBMK9CMh0Lhbyw==", - "subType": "06" - } - } - }, - "local_objectId_rand_explicit_id": { - "kms": "local", - "type": "objectId", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAHETwT9bo+JtboBVW/8GzzMQCpn22iiNJnlxYfyO45jvYJQRs29RRIouCsnFkmC7cfAO3GlVxv113euYjIO7AlAg==", - "subType": "06" - } - } - }, - "local_objectId_rand_explicit_altname": { - "kms": "local", - "type": "objectId", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAHhsguAMBzQUFBAitpJDzKEaMDGUGfvCzmUUhf4rnp8xeall/p91TUudaSMcU11XEgJ0Mym4IbYRd8+TfUai0nvw==", - "subType": "06" - } - } - }, - "local_objectId_det_auto_id": { - "kms": "local", - "type": "objectId", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAH4ElF4AvQ+kkGfhadgKNy3GcYrDZPN6RpzaMYIhcCGDvC9W+cIS9dH1aJbPU7vTPmEZnnynPTDWjw3rAj2+9mOA==", - "subType": "06" - } - } - }, - "local_objectId_det_explicit_id": { - "kms": "local", - "type": "objectId", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAH4ElF4AvQ+kkGfhadgKNy3GcYrDZPN6RpzaMYIhcCGDvC9W+cIS9dH1aJbPU7vTPmEZnnynPTDWjw3rAj2+9mOA==", - "subType": "06" - } - } - }, - "local_objectId_det_explicit_altname": { - "kms": "local", - "type": "objectId", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAH4ElF4AvQ+kkGfhadgKNy3GcYrDZPN6RpzaMYIhcCGDvC9W+cIS9dH1aJbPU7vTPmEZnnynPTDWjw3rAj2+9mOA==", - "subType": "06" - } - } - }, - "local_bool_rand_auto_id": { - "kms": "local", - "type": "bool", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAIxGld4J/2vSWg5tjQulpkm9C6WeUcLbv2yfKRXPAbmLpv3u4Yrmr5qisJtqmDPTcb993WosvCYAh0UGW+zpsdEg==", - "subType": "06" - } - } - }, - "local_bool_rand_auto_altname": { - "kms": "local", - "type": "bool", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAIpUFPiS2uoW1Aqs0WQkBa201OBmsuJ8WUKcv5aBPASkcwfaw9qSWs3QrbEDR2GyoU4SeYOByCAQMzXCPoIYAFdQ==", - "subType": "06" - } - } - }, - "local_bool_rand_explicit_id": { - "kms": "local", - "type": "bool", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAIJuzu1a60meYlU3LMjw/7G4Vh/lqKopxdpGWoLXEmY/NoHgX6Fkv9iTwxv/Nv8rZwtawpFV+mQUG/6A1IHMBASQ==", - "subType": "06" - } - } - }, - "local_bool_rand_explicit_altname": { - "kms": "local", - "type": "bool", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAIn9VjxL5TdGgJLckNHRrIaL32L31q5OERRZG2M5OYKk66TnrlfEs+ykcDvGwMGKpr/PYjY5kBHDc/oELGJJbWRQ==", - "subType": "06" - } - } - }, - "local_bool_det_explicit_id": { - "kms": "local", - "type": "bool", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": true - }, - "local_bool_det_explicit_altname": { - "kms": "local", - "type": "bool", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": true - }, - "local_date_rand_auto_id": { - "kms": "local", - "type": "date", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAJPPv4MC5xzt2uxPGBHH9g2z03o9SQjjmuxt97Ub1UcKCCHsGED3bx6YSrocuEMiFFI4d5Fqgl8HNeS4j0PR0tYA==", - "subType": "06" - } - } - }, - "local_date_rand_auto_altname": { - "kms": "local", - "type": "date", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAJ6i2A9Hi4xWlOMjFMGpwaRctR1VFnb4El166n18RvjKic46V+WoadvLHS32RhPOvkLVYwIeU4C+vrO5isBNoUdw==", - "subType": "06" - } - } - }, - "local_date_rand_explicit_id": { - "kms": "local", - "type": "date", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAJHcniV7Q0C8ZTWrE0hp5i5bUPlrrRdNLZckfODw8XNVtVPDjbznglccQmI7w1t8kOVp65eKzVzUOXN0YkqA+1QA==", - "subType": "06" - } - } - }, - "local_date_rand_explicit_altname": { - "kms": "local", - "type": "date", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAJKCUCjC3hsmEKKYwGP3ceh3zR+ArE8LYFOQfN87aEsTr60VrzHXmsE8PvizRhhMnrp07ljzQkuat39L+0QSR2qQ==", - "subType": "06" - } - } - }, - "local_date_det_auto_id": { - "kms": "local", - "type": "date", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAJ1GMYQTruoKr6fv9XCbcVkx/3yivymPSMEkPCRDYxQv45w4TqBKMDfpRd1TOLOv1qvcb+gjH+z5IfVBMp2IpG/Q==", - "subType": "06" - } - } - }, - "local_date_det_explicit_id": { - "kms": "local", - "type": "date", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAJ1GMYQTruoKr6fv9XCbcVkx/3yivymPSMEkPCRDYxQv45w4TqBKMDfpRd1TOLOv1qvcb+gjH+z5IfVBMp2IpG/Q==", - "subType": "06" - } - } - }, - "local_date_det_explicit_altname": { - "kms": "local", - "type": "date", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAJ1GMYQTruoKr6fv9XCbcVkx/3yivymPSMEkPCRDYxQv45w4TqBKMDfpRd1TOLOv1qvcb+gjH+z5IfVBMp2IpG/Q==", - "subType": "06" - } - } - }, - "local_null_rand_explicit_id": { - "kms": "local", - "type": "null", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": null - }, - "local_null_rand_explicit_altname": { - "kms": "local", - "type": "null", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": null - }, - "local_null_det_explicit_id": { - "kms": "local", - "type": "null", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": null - }, - "local_null_det_explicit_altname": { - "kms": "local", - "type": "null", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": null - }, - "local_regex_rand_auto_id": { - "kms": "local", - "type": "regex", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAALXKw7zSgqQj1AKoWO0MoMxsBuu0cMB6KdJQCRKdupoLV/Y22owwsVpDDMv5sgUpkG5YIV+Fz7taHodXE07qHopw==", - "subType": "06" - } - } - }, - "local_regex_rand_auto_altname": { - "kms": "local", - "type": "regex", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAALntOLXq7VW1+jwba/dSbidMo2bewNo7AtK9A1CPwk9XrjUQaEOQxfRpho3BYQEo2U67fQdsY/tyhaj4jduHn9JQ==", - "subType": "06" - } - } - }, - "local_regex_rand_explicit_id": { - "kms": "local", - "type": "regex", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAALlMMG2iS/gEOEsVKR7sxBJP2IUzZ+aRbozDSkqADncresBvaPBSE17lng5NG7H1JRCAcP1rH/Te+0CrMd7JpRAQ==", - "subType": "06" - } - } - }, - "local_regex_rand_explicit_altname": { - "kms": "local", - "type": "regex", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAL1YNnlVu5+njDLxh1LMhIPOH19RykAXhxrUbCy6TI5MLQsAOSgAJbXOTXeKr0D8/Ff0phToWOKl193gOOIp8yZQ==", - "subType": "06" - } - } - }, - "local_regex_det_auto_id": { - "kms": "local", - "type": "regex", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAALiZbL5nFIZl7cSLH5E3wK3jJeAeFc7hLHNITtLAu+o10raEs5i/UCihMHmkf8KHZxghs056pfm5BjPzlL9x7IHQ==", - "subType": "06" - } - } - }, - "local_regex_det_explicit_id": { - "kms": "local", - "type": "regex", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAALiZbL5nFIZl7cSLH5E3wK3jJeAeFc7hLHNITtLAu+o10raEs5i/UCihMHmkf8KHZxghs056pfm5BjPzlL9x7IHQ==", - "subType": "06" - } - } - }, - "local_regex_det_explicit_altname": { - "kms": "local", - "type": "regex", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAALiZbL5nFIZl7cSLH5E3wK3jJeAeFc7hLHNITtLAu+o10raEs5i/UCihMHmkf8KHZxghs056pfm5BjPzlL9x7IHQ==", - "subType": "06" - } - } - }, - "local_dbPointer_rand_auto_id": { - "kms": "local", - "type": "dbPointer", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAMUdAA9uOSk1tXJVe/CG3Ps6avYTEF1eHj1wSlCHkFxqlMtTO+rIQpikpjH0MrcXvEEdAO8g5hFZ01I7DWyK5AAxTxDqVF+kOaQ2VfKs6hyuo=", - "subType": "06" - } - } - }, - "local_dbPointer_rand_auto_altname": { - "kms": "local", - "type": "dbPointer", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAMiNqvqLwZrPnsF235z+Obl1K9iEXdJ5GucMGpJdRG4lRvRE0Oy1vh6ztNTpYPY/tXyUFTBWlzl/lITalSEm/dT1Bnlh0iPAFrAiNySf662og=", - "subType": "06" - } - } - }, - "local_dbPointer_rand_explicit_id": { - "kms": "local", - "type": "dbPointer", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAM+Tn31YcKiowBTJWRYCYAEO7UARDE2/jTVGEKXCpiwEqqP3JSAS0b80zYt8dxo5mVhUo2a02ClKrB8vs+B6sU1kXrahSaVSEHZlRSGN9fWgo=", - "subType": "06" - } - } - }, - "local_dbPointer_rand_explicit_altname": { - "kms": "local", - "type": "dbPointer", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAMdOZZUvpJIqG9qiOLy5x4BdftyHipPDZn/eeLEc7ir3v4jJsY3dsv6fQERo5U9lMynNGA9PJePVzq5tWsIMX0EcCQcMfGmosfkYDzN1OX99A=", - "subType": "06" - } - } - }, - "local_dbPointer_det_auto_id": { - "kms": "local", - "type": "dbPointer", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAMQWace2C1w3yqtmo/rgz3YtIDnx1Ia/oDsoHnnMZlEy5RoK3uosi1hvNAZCSg3Sen0H7MH3XVhGGMCL4cS69uJ0ENSvh+K6fiZzAXCKUPfvM=", - "subType": "06" - } - } - }, - "local_dbPointer_det_explicit_id": { - "kms": "local", - "type": "dbPointer", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAMQWace2C1w3yqtmo/rgz3YtIDnx1Ia/oDsoHnnMZlEy5RoK3uosi1hvNAZCSg3Sen0H7MH3XVhGGMCL4cS69uJ0ENSvh+K6fiZzAXCKUPfvM=", - "subType": "06" - } - } - }, - "local_dbPointer_det_explicit_altname": { - "kms": "local", - "type": "dbPointer", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAMQWace2C1w3yqtmo/rgz3YtIDnx1Ia/oDsoHnnMZlEy5RoK3uosi1hvNAZCSg3Sen0H7MH3XVhGGMCL4cS69uJ0ENSvh+K6fiZzAXCKUPfvM=", - "subType": "06" - } - } - }, - "local_javascript_rand_auto_id": { - "kms": "local", - "type": "javascript", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAANNL2AMKwTDyMIvxLKhBxZKx50C0tBdkLwuXmuMcrUqZeH8bsvjtttoM9LWkkileMyeTWgxblJ1b+uQ+V+4VT6fA==", - "subType": "06" - } - } - }, - "local_javascript_rand_auto_altname": { - "kms": "local", - "type": "javascript", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAANBjBlHGw3K3TWQHpvfa1z0bKhNnVFC/lZArIexo3wjdGq3MdkGA5cuBIp87HHmOIv6o/pvQ9K74v48RQl+JH44A==", - "subType": "06" - } - } - }, - "local_javascript_rand_explicit_id": { - "kms": "local", - "type": "javascript", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAANjvM7u3vNVyKpyI7g5kbzBpHPzXzOQToDSng5/c9yjMG+qi4TPtOyassobJOnMmDYBLyqRXCl/GsDLprbg5jxuA==", - "subType": "06" - } - } - }, - "local_javascript_rand_explicit_altname": { - "kms": "local", - "type": "javascript", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAANMtO7KneuVx4gSOjX4MQjKL80zJhnt+efDBylkpNsqKyxBXB60nkiredGzwaK3/4QhIfGJrC1fQpwUwu/v1L17g==", - "subType": "06" - } - } - }, - "local_javascript_det_auto_id": { - "kms": "local", - "type": "javascript", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAANmQsg9E/BzGJVNVhSNyunS/TH0332oVFdPS6gjX0Cp/JC0YhB97DLz3N4e/q8ECaz7tTdQt9JacNUgxo+YCULUA==", - "subType": "06" - } - } - }, - "local_javascript_det_explicit_id": { - "kms": "local", - "type": "javascript", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAANmQsg9E/BzGJVNVhSNyunS/TH0332oVFdPS6gjX0Cp/JC0YhB97DLz3N4e/q8ECaz7tTdQt9JacNUgxo+YCULUA==", - "subType": "06" - } - } - }, - "local_javascript_det_explicit_altname": { - "kms": "local", - "type": "javascript", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAANmQsg9E/BzGJVNVhSNyunS/TH0332oVFdPS6gjX0Cp/JC0YhB97DLz3N4e/q8ECaz7tTdQt9JacNUgxo+YCULUA==", - "subType": "06" - } - } - }, - "local_symbol_rand_auto_id": { - "kms": "local", - "type": "symbol", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAOOuO2b23mekwI8b6gWeEgRy1lLOCsNyBKvdmizK7/oOVKCvd+3kwUn9a6TxygooiVAN/Aohr1cjb8jRlMPWpkP0iO0+Tt6+vkizgFsQW4iio=", - "subType": "06" - } - } - }, - "local_symbol_rand_auto_altname": { - "kms": "local", - "type": "symbol", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAOhN4QPOcmGnFKGvTfhz6TQleDA02X6oWULLHTnOUJYfE3OUSyf2ULEQh1yhdKdwXMuYVgGl28pMosiwkBShrXYe5ZlMjiZCIMZWSdUMV0tXk=", - "subType": "06" - } - } - }, - "local_symbol_rand_explicit_id": { - "kms": "local", - "type": "symbol", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAO9aWi9RliwQHdXHoJME9VyN6XgyGd95Eclx+ZFYfLxBGAuUnPNjSfVuNZwYdyKC8JX79+mYhk7IXmcGV4z+4486sxyLk3idi4Kmpz2ESqV5g=", - "subType": "06" - } - } - }, - "local_symbol_rand_explicit_altname": { - "kms": "local", - "type": "symbol", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAO/qev3DPfpkQoSW9aHOyalwfI/VYDQVN5VMINx4kw2vEqHiI1HRdZRPOz3q74TlQEy3TMNMTYdCvh5bpN/PptRZCTQbzP6ugz9dTp79w5/Ok=", - "subType": "06" - } - } - }, - "local_symbol_det_auto_id": { - "kms": "local", - "type": "symbol", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAOsg5cs6VpZWoTOFg4ztZmpj8kSTeCArVcI1Zz2pOnmMqNv/vcKQGhKSBbfniMripr7iuiYtlgkHGsdO2FqUp6Jb8NEWm5uWqdNU21zR9SRkE=", - "subType": "06" - } - } - }, - "local_symbol_det_explicit_id": { - "kms": "local", - "type": "symbol", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAOsg5cs6VpZWoTOFg4ztZmpj8kSTeCArVcI1Zz2pOnmMqNv/vcKQGhKSBbfniMripr7iuiYtlgkHGsdO2FqUp6Jb8NEWm5uWqdNU21zR9SRkE=", - "subType": "06" - } - } - }, - "local_symbol_det_explicit_altname": { - "kms": "local", - "type": "symbol", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAOsg5cs6VpZWoTOFg4ztZmpj8kSTeCArVcI1Zz2pOnmMqNv/vcKQGhKSBbfniMripr7iuiYtlgkHGsdO2FqUp6Jb8NEWm5uWqdNU21zR9SRkE=", - "subType": "06" - } - } - }, - "local_javascriptWithScope_rand_auto_id": { - "kms": "local", - "type": "javascriptWithScope", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAP5gLMvLOAc6vGAvC7bGmEC4eweptAiX3A7L0iCoHps/wm0FBLkfpF6F4pCjVYiY1lTID38wliRLPyhntCj+cfvlMfKSjouNgXMIWyQ8GKZ2c=", - "subType": "06" - } - } - }, - "local_javascriptWithScope_rand_auto_altname": { - "kms": "local", - "type": "javascriptWithScope", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAPVsw9Opn/P5SAdJhX4MTxIcsmaG8isIN4NKPi9k1u/Vj7AVkcxYqwurAghaJpmfoAgMruvzi1hcKvd05yHd9Nk0vkvODwDgnjJB6QO+qUce8=", - "subType": "06" - } - } - }, - "local_javascriptWithScope_rand_explicit_id": { - "kms": "local", - "type": "javascriptWithScope", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAPLUa+nsrqiHkVdE5K1xl/ZsiZqQznG2yVXyA3b3loBylbcL2NEBp1JUeGnPZ0y5ZK4AmoL6NMH2Io313rW3V8FTArs/OOQWPRJSe6h0M3wXk=", - "subType": "06" - } - } - }, - "local_javascriptWithScope_rand_explicit_altname": { - "kms": "local", - "type": "javascriptWithScope", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAPzUKaXCH0JImSlY73HVop9g9c0YssNEiA7Dy7Vji61avxvnuJJfghDchdwwaY7Vc8+0bymoanUWcErRctLzjm+1uKeMnFQokR8wFtnS3PgpQ=", - "subType": "06" - } - } - }, - "local_javascriptWithScope_det_explicit_id": { - "kms": "local", - "type": "javascriptWithScope", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { "$code": "x=1", "$scope": {} } - }, - "local_javascriptWithScope_det_explicit_altname": { - "kms": "local", - "type": "javascriptWithScope", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { "$code": "x=1", "$scope": {} } - }, - "local_int_rand_auto_id": { - "kms": "local", - "type": "int", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAQHXpXb3KlHA2KFTBgl0VoLCu0CUf1ae4DckkwDorbredVSqxvA5e+NvVudY5yuea6bC9F57JlbjI8NWYAUw4q0Q==", - "subType": "06" - } - } - }, - "local_int_rand_auto_altname": { - "kms": "local", - "type": "int", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAQSxXMF4+TKV+a3lcxXky8VepEqdg5wI/jg+C4CAUgNurq2XhgrxyqiMjkU8z07tfyoLYyX6P+dTrwj6nzvvchCw==", - "subType": "06" - } - } - }, - "local_int_rand_explicit_id": { - "kms": "local", - "type": "int", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAQmzteYnshCI8HBGd7UYUKvcg4xl6M8PRyi1xX/WHbjyQkAJXxczS8hO91wuqStE3tBNSmulUejz9S691ufTd6ZA==", - "subType": "06" - } - } - }, - "local_int_rand_explicit_altname": { - "kms": "local", - "type": "int", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAQLCHLru//++QSoWVEyw2v6TUfCnlrPJXrpLLezWf16vK85jTfm8vJbb2X2UzX04wGzVL9tCFFsWX6Z5gHXhgSBg==", - "subType": "06" - } - } - }, - "local_int_det_auto_id": { - "kms": "local", - "type": "int", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAQIxWjLBromNUgiOoeoZ4RUJUYIfhfOmab0sa4qYlS9bgYI41FU6BtzaOevR16O9i+uACbiHL0X6FMXKjOmiRAug==", - "subType": "06" - } - } - }, - "local_int_det_explicit_id": { - "kms": "local", - "type": "int", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAQIxWjLBromNUgiOoeoZ4RUJUYIfhfOmab0sa4qYlS9bgYI41FU6BtzaOevR16O9i+uACbiHL0X6FMXKjOmiRAug==", - "subType": "06" - } - } - }, - "local_int_det_explicit_altname": { - "kms": "local", - "type": "int", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAQIxWjLBromNUgiOoeoZ4RUJUYIfhfOmab0sa4qYlS9bgYI41FU6BtzaOevR16O9i+uACbiHL0X6FMXKjOmiRAug==", - "subType": "06" - } - } - }, - "local_timestamp_rand_auto_id": { - "kms": "local", - "type": "timestamp", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAARntIycg0Xkd16GEa//VSJI4Rkl7dT6MpRa+D3MiTEeio5Yy8zGK0u2BtEP/9MCRQw2hJDYj5znVqwhdduM0OTiA==", - "subType": "06" - } - } - }, - "local_timestamp_rand_auto_altname": { - "kms": "local", - "type": "timestamp", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAARWA9Ox5ejDPeWxfjbRgcGCtF/G5yrPMbBJD9ESDFc0NaVe0sdNNTisEVxsSkn7M/S4FCibKh+C8femr7xhu1iTw==", - "subType": "06" - } - } - }, - "local_timestamp_rand_explicit_id": { - "kms": "local", - "type": "timestamp", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAARrEfOL4+4Qh7IkhHnHcBEANGfMF8n2wUDnsZ0lXEb0fACKzaN5OKaxMIQBs/3pFBw721qRfCHY+ByKeaQuABbzg==", - "subType": "06" - } - } - }, - "local_timestamp_rand_explicit_altname": { - "kms": "local", - "type": "timestamp", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAARW8nwmnBt+LFIAcFWvOzX8llrGcveQKFhyYUIth9d7wtpTyc9myFp8GBQCnjDpKzA6lPmbqVYeLU0L9q0h6SHGQ==", - "subType": "06" - } - } - }, - "local_timestamp_det_auto_id": { - "kms": "local", - "type": "timestamp", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAR6uMylGytMq8QDr5Yz3w9HlW2MkGt6yIgUKcXYSaXru8eer+EkLv66/vy5rHqTfV0+8ryoi+d+PWO5U6b3Ng5Gg==", - "subType": "06" - } - } - }, - "local_timestamp_det_explicit_id": { - "kms": "local", - "type": "timestamp", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAR6uMylGytMq8QDr5Yz3w9HlW2MkGt6yIgUKcXYSaXru8eer+EkLv66/vy5rHqTfV0+8ryoi+d+PWO5U6b3Ng5Gg==", - "subType": "06" - } - } - }, - "local_timestamp_det_explicit_altname": { - "kms": "local", - "type": "timestamp", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAR6uMylGytMq8QDr5Yz3w9HlW2MkGt6yIgUKcXYSaXru8eer+EkLv66/vy5rHqTfV0+8ryoi+d+PWO5U6b3Ng5Gg==", - "subType": "06" - } - } - }, - "local_long_rand_auto_id": { - "kms": "local", - "type": "long", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAASrinKUOpHIB7MNRmCAPWcP4CjZwfr5JaRT3G/GqY9B/6csj3+N9jmo1fYvM8uHcnmf5hzDDOamaE2FF1jDKkrHw==", - "subType": "06" - } - } - }, - "local_long_rand_auto_altname": { - "kms": "local", - "type": "long", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAShWMPYDkCpTC2XLYyykPJMihASLKn6HHcB2Eh7jFwQb/8D1HCQoPmOHMyXaN4AtIKm1oqEfma6FSnEPENQoledQ==", - "subType": "06" - } - } - }, - "local_long_rand_explicit_id": { - "kms": "local", - "type": "long", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAASd2h34ZLib+GiYayrm/FIZ/weg8wF41T0PfF8NCLTJCoT7gIkdpNRz2zkkQgZMR31efNKtsM8Bs4wgZbkrXsXWg==", - "subType": "06" - } - } - }, - "local_long_rand_explicit_altname": { - "kms": "local", - "type": "long", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAASPAvdjz+a3FvXqDSjazaGqwZxrfXlfFB5/VjQFXQB0gpodCEaz1qaLSKfCWBg83ftrYKa/1sa44gU5NBthDfDwQ==", - "subType": "06" - } - } - }, - "local_long_det_auto_id": { - "kms": "local", - "type": "long", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAASQk372m/hW3WX82/GH+ikPv3QUwK7Hh/RBpAguiNxMdNhkgA/y2gznVNm17t6djyub7+d5zN4P5PLS/EOm2kjtw==", - "subType": "06" - } - } - }, - "local_long_det_explicit_id": { - "kms": "local", - "type": "long", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAASQk372m/hW3WX82/GH+ikPv3QUwK7Hh/RBpAguiNxMdNhkgA/y2gznVNm17t6djyub7+d5zN4P5PLS/EOm2kjtw==", - "subType": "06" - } - } - }, - "local_long_det_explicit_altname": { - "kms": "local", - "type": "long", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAASQk372m/hW3WX82/GH+ikPv3QUwK7Hh/RBpAguiNxMdNhkgA/y2gznVNm17t6djyub7+d5zN4P5PLS/EOm2kjtw==", - "subType": "06" - } - } - }, - "local_decimal_rand_auto_id": { - "kms": "local", - "type": "decimal", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAATLnMMDZhnGSn5F5xHhsJXxiTGXd61Eq6fgppOlxUNVlsZNYyr5tZ3owfTTqRuD9yRg97x65WiHewBBnJJSeirCTAy9zZxWPVlJSiC0gO7rbM=", - "subType": "06" - } - } - }, - "local_decimal_rand_auto_altname": { - "kms": "local", - "type": "decimal", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAATenMh7NKQioGjpuEojIrYKFaJhbuGxUgu2yTTbe3TndhgHryhW9GXiUqo8WTpnXqpC5E/z03ZYLWfCbe7qGdL6T7bbrTpaTaWZnnAm3XaCqY=", - "subType": "06" - } - } - }, - "local_decimal_rand_explicit_id": { - "kms": "local", - "type": "decimal", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAT9vqXuKRh+2HxeCMr+pQYdhYNw7xrTdU4dySWz0X6tCK7LZO5AV72utmRJxID7Bqv1ZlXAk00V92oDLyKG9kHeG5+S34QE/aLCPsAWcppfxY=", - "subType": "06" - } - } - }, - "local_decimal_rand_explicit_altname": { - "kms": "local", - "type": "decimal", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAATtqOCFMbOkls3LikQNXlnlkRr5gJns1+5Kvbt7P7texMa/QlXkYSHhtwESyfOcCQ2sw1T0eZ9DDuNaznpdK2KIqZBkVEC9iMoxqIqXF7Nab0=", - "subType": "06" - } - } - }, - "local_decimal_det_explicit_id": { - "kms": "local", - "type": "decimal", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { "$numberDecimal": "1.234" } - }, - "local_decimal_det_explicit_altname": { - "kms": "local", - "type": "decimal", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { "$numberDecimal": "1.234" } - }, - "local_minKey_rand_explicit_id": { - "kms": "local", - "type": "minKey", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { "$minKey": 1 } - }, - "local_minKey_rand_explicit_altname": { - "kms": "local", - "type": "minKey", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { "$minKey": 1 } - }, - "local_minKey_det_explicit_id": { - "kms": "local", - "type": "minKey", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { "$minKey": 1 } - }, - "local_minKey_det_explicit_altname": { - "kms": "local", - "type": "minKey", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { "$minKey": 1 } - }, - "local_maxKey_rand_explicit_id": { - "kms": "local", - "type": "maxKey", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { "$maxKey": 1 } - }, - "local_maxKey_rand_explicit_altname": { - "kms": "local", - "type": "maxKey", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { "$maxKey": 1 } - }, - "local_maxKey_det_explicit_id": { - "kms": "local", - "type": "maxKey", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { "$maxKey": 1 } - }, - "local_maxKey_det_explicit_altname": { - "kms": "local", - "type": "maxKey", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { "$maxKey": 1 } - }, - "payload=0,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAACcsBdT93ivCyvtkfQz9qb1A9Ll+I6hnGE0kFy3rmVG6xAvipmRJSoVq3iv7iUEDvaqmPXfjeH8h8cPYT86v3XSg==", - "subType": "06" - } - } - }, - "payload=1,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAACQOzpNBEGSrANr3Wl8uYpqeIc7pjc8e2LS2FaSrb8tM9F3mR1FqGgfJtn3eD+HZf3Y3WEDGK8975a/1BufkMqIQ==", - "subType": "06" - } - } - }, - "payload=2,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAACyGJEcuN1pG5oSEyxuKFwqddGHVU5Untbib7LkmtoJe9HngTofkOpeHZH/hV6Z3CFxLu6WFliJoySsFFbnFy9ag==", - "subType": "06" - } - } - }, - "payload=3,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAACLbp4w6mx45lR1vvgmeRja/y8U+WnR2oH4IpfrDi4lKM+JPVnJweiN3/1wAy+sXSy0S1Yh9yxmhh9ISoTkAuVxw==", - "subType": "06" - } - } - }, - "payload=4,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAACG0qMY/GPZ/2CR61cxbuizywefyMZVdeTCn5KFjqwejgxeBwX0JmGNHKKWbQIDQykRFv0q0WHUgsRmRhaotNCyQ==", - "subType": "06" - } - } - }, - "payload=5,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAACJI1onNpQfZhaYWrPEzHvNaJRqUDZK2xoyonB5E473BPgp3zvn0Jmz1deL8GzS+HlkjCrx39OvHyVt3+3S0kYYw==", - "subType": "06" - } - } - }, - "payload=6,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAClyKY9tZBjl7SewSXr3MdoWRDUNgLaXDUjENpjyYvi/54EQ9a+J/LAAh1892i+mLpYxEUAmcftPyfX3VhbCgUQw==", - "subType": "06" - } - } - }, - "payload=7,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAACAMbEA+kNvnVV7B//ds2/QoVot061kbazoMwB/psB5eFdLVB5qApAXEWgQEMwkNnsTUYbtSduQz6uGwdagtNBRw==", - "subType": "06" - } - } - }, - "payload=8,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAACzdSK/d7Ni6D8qUgNopnEU5ia1K5llhBGk3O1Tf71t4ThnQjYW9eI/rIohWmev5CGWLHhwuvvKUtFcTAe+NMQww==", - "subType": "06" - } - } - }, - "payload=9,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAACzQcEa+ktF2EZf35TtyatnSGGaIVvFhZNuo5P3VwQvoONJrK2cSad7PBDAv3xDAB+VPZAigXAGQvd051sHooOHg==", - "subType": "06" - } - } - }, - "payload=10,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAACpfoDmApsR5xOD3TDhcHeD7Jco3kPFuuWjDpHtMepMOJ3S0c+ngGGhzPGZtEz2xuD/E7AQn1ryp/WAQ+WwkaJkQ==", - "subType": "06" - } - } - }, - "payload=11,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAACICMRXmx3oKqYv0IpmzkSMBIGT4Li3MPBF4Lw1s5F69WvZApD58glIKB6b7koIrF5qc2Wrb1/Nw+stRv0zvQ8Y9CcFV4OHm6WoEw+XDlWXJ4=", - "subType": "06" - } - } - }, - "payload=12,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAACTArUn0WUTojQC4fSvq3TwJVTsZNhWAK2WB057u2EnkUzMC0xsbU6611W6Okx6idZ7pMudXpBC34fRDrJPXOu3BxK+ZLCOWS2FqsvWq3HeTY=", - "subType": "06" - } - } - }, - "payload=13,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAACU1Ojn7EM2i+5KK2Beh1gPLhryK3Y7PtaZ/v4JvstxuAV4OHOR9yROP7pwenHXxczkWXvcyMY9OCdmHO8pkQkXO21798IPkDDN/ejJUFI0Uw=", - "subType": "06" - } - } - }, - "payload=14,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAAC0ZLwSliCbcr/e1uiYWk6gRuD/5qiyulQ7IUNWjhpBR6SLUfX2+yExLzps9hoOp53j9zRSKIzyleZ8yGLTLeN+Lz9BUe2ZT+sV8NiqZz3pkA=", - "subType": "06" - } - } - }, - "payload=15,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAACQ9pmlQeFDr+jEhFwjL/eGVxdv70JdnkLaKdJ3/jkvCX1VPU5HmQIi+JWY3Rrw844E/6sBR6zIODn5aM0WfyP8a2zKRAWaVQZ7n+QE9hDN/8=", - "subType": "06" - } - } - }, - "payload=16,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AizggCwAAAAAAAAAAAAAAAACiOcItInDGHqvkH0I3udp5nnX32XzDeqya/3KDjgZPT5GHek1vFTZ4924JVxFqFQz+No9rOVmyxm8O2fxjTK2vsjtADzKGnMTtFYZqghYCuc=", - "subType": "06" - } - } - }, - "payload=0,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAACijFptWQy7a1Y0rpXEvamXWI9v9dnx0Qj84/mKUsVpc3agkQ0B04uPYeROdt2MeEeiZoEKVWV0NjBocAQCEz7dw==", - "subType": "06" - } - } - }, - "payload=1,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAChR90taVWsZk+++sgibX6CnFeQQHNoB8V+n2gmDe3CIT/t+WvhMf9D+mQipbAlrUyHgGihKMHcvAZ5RZ/spaH4Q==", - "subType": "06" - } - } - }, - "payload=2,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAC67wemDv1Xdu7+EMR9LMBTOxfyAqsGaxQibwamZItzplslL/Dp3t9g9vPuNzq0dWwhnfxQ9GBe8OA3dtRaifYCA==", - "subType": "06" - } - } - }, - "payload=3,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAACVLxch+uC7weXrbtylCo1m4HYZmh0sd9JCrlTECO2M56JK1X9a30i2BDUdhPuoTvvODv74CGXkZKdist3o0mGAQ==", - "subType": "06" - } - } - }, - "payload=4,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAACexfIZGkOYaCGktOUc6cgAYg7Bd/C5ZYmdb7b8+rd5BKWbthW6N6CxhDIyh/DHvkPAeIzfTYA2/9w6tsjfD/TPQ==", - "subType": "06" - } - } - }, - "payload=5,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAACjUH/dPW4egOvFMJJnpWK8v27MeLkbXC4GFl1j+wPqTsIEeIWkzEmcXjHLTQGE2GplHHc/zxwRwD2dXdbzvsCDw==", - "subType": "06" - } - } - }, - "payload=6,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAACzvS+QkGlvb05pNn+vBMml09yKmE8yM6lwccNIST5uZSsUxXf2hrxPtO7Ylc4lmBAJt/9bcM59JIeT9fpYMc75w==", - "subType": "06" - } - } - }, - "payload=7,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAACSf2RxHJpRuh4j8nS1dfonUtsJEwgqfWrwOsfuT/tAGXgDN0ObUpzL2K7G2vmePjP4dwycCSIL3+2j34bqBJK1Q==", - "subType": "06" - } - } - }, - "payload=8,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAACu96YYeLXXoYdEZYNU9UAZjSd6G4fOE1edrA6/RjZKVGWKxftmvj5g1VAOiom0XuTZUe1ihbnwhvKexeoa3Vc8Q==", - "subType": "06" - } - } - }, - "payload=9,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAACX+UjBKo9+N0Z+mbyqZqkQv2ETMSn6aPTONWgJtw5nWklcxKjUSSLI+8LW/6M6Xf9a7177GsqmV2f/yCRF58Xtw==", - "subType": "06" - } - } - }, - "payload=10,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAACL6TVscFzIJ9+Zj6LsCZ9xhaZuTZdvz1nJe4l69nKyj9hCjnyuiV6Ve4AXwQ5W1wiPfkJ0fCZS33NwiHw7QQ/vg==", - "subType": "06" - } - } - }, - "payload=11,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAACPLq7IcWhTVwkKmy0flN7opoQzx7tTe1eD9JIc25FC9B6KGQkdcRDglDDR7/m6+kBtTnq88y63vBgomTxA8ZxQE+3pB7zCiBhX0QznuXvP44=", - "subType": "06" - } - } - }, - "payload=12,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAACxv7v4pKtom5z1g9FUuyjEWAbdzJ3ytPNZlOfVr6KZnUPhIH7PfCz3/lTdYYWBTj01+SUZiC/7ruof9QDhsSiNWP7nUyHpQ/C3joI/BBjtDA=", - "subType": "06" - } - } - }, - "payload=13,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAACZhiElQ/MvyVMwMkZPu8pT54Ap6TlpVSEbE4nIQzzeU3XKVuspMdI5IXvvgfULXKXc+AOu6oQXZ+wAJ1tErVOsb48HF1g0wbXbBA31C5qLEM=", - "subType": "06" - } - } - }, - "payload=14,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAACdp8mDOeDuDLhE0LzTOT2p0CMaUsAQrGCzmiK6Ab9xvaIcPPcejUcpdO3XXAS/pPab4+TUwO5GbI5pDJ29zwaOiOz2H3OJ2m2p5BHQp9mCys=", - "subType": "06" - } - } - }, - "payload=15,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAACmtLohoP/gotuon2IvnGeLEfCWHRMhG9Wp4tPu/vbJJkJkbQTP35HRG9VrMV7KKrEQbOsJ2Y6UDBra4tyjn0fIkwwc/0X9i+xaP+TrwpNabE=", - "subType": "06" - } - } - }, - "payload=16,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ASzggCwAAAAAAAAAAAAAAAAC6s9eUtSneKWj3/A7S+bPZLj3t1WtUh7ltW80b8jCRzA+kOI26j1MEb1tt68HgcnH1IJ3YQ/+UHlV95OgwSnIxlib/HJn3U0s8mpuCWe1Auo=", - "subType": "06" - } - } - }, - "azure_double_rand_auto_id": { - "kms": "azure", - "type": "double", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAB0S2kOZe54q6iZqeTLndkX+kehTKtb30jTP7FS+Zx+cxhFs626OrGY+jrH41cLfroCccacyNHUZFRinfqZPNOyw==", - "subType": "06" - } - } - }, - "azure_double_rand_auto_altname": { - "kms": "azure", - "type": "double", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAABYViH7PLjCIdmTibW9dGCJADwXx2dRSMYxEmulPu89clAoeLDa8pwJ7YxLFQCcTGmZRfmp58dDDAzV8tyyE8QMg==", - "subType": "06" - } - } - }, - "azure_double_rand_explicit_id": { - "kms": "azure", - "type": "double", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAABeRahSj4pniBp0rLIEZE8MdeyiIKcYuTZiuGzGiXbFbntEPow88DFHIBSxbMGR7p/8jCpPL+GqBwFkPkafXbMzg==", - "subType": "06" - } - } - }, - "azure_double_rand_explicit_altname": { - "kms": "azure", - "type": "double", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAABdaa3vKtO4cAEUjYJfOPl1KbbgeWtphfUuJd6MxR9VReNSf1jc+kONwmkPVQs2WyZ1n+TSQMGRoBp1nHRttDdTg==", - "subType": "06" - } - } - }, - "azure_double_det_explicit_id": { - "kms": "azure", - "type": "double", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$numberDouble": "1.2339999999999999858" - } - }, - "azure_double_det_explicit_altname": { - "kms": "azure", - "type": "double", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$numberDouble": "1.2339999999999999858" - } - }, - "azure_string_rand_auto_id": { - "kms": "azure", - "type": "string", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAACeoztcDg9oZ7ixHinReWQTrAumpsfyb0E1s3BGOFHgBCi1tW79CEXfqN8riFRc1YeRTlN4k5ShgHaBWBlax+XoQ==", - "subType": "06" - } - } - }, - "azure_string_rand_auto_altname": { - "kms": "azure", - "type": "string", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAACov9cXQvDHeKOS5Gxcxa8vdAcTsTXDYgUucGzsCyh4TnTWKGQEVk3DHndUXX569TKCjq5QsC//oWEwweCn1nZ4g==", - "subType": "06" - } - } - }, - "azure_string_rand_explicit_id": { - "kms": "azure", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAACKU5qTdMdO0buQ/37ZRANUAAafcsoNMOTxJsDOfkqUb+/kRgM1ePlwVvk4EJiAGhJ/4SEmEOpwv05TT3PxGur2Q==", - "subType": "06" - } - } - }, - "azure_string_rand_explicit_altname": { - "kms": "azure", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAACX/ODKGHUyAKxoJ/c/3lEDBTc+eP/VS8OHrLhYoP96McpnFSgYi5jfUwvrFYa715fkass4N0nAHE6TzoGTYyk6Q==", - "subType": "06" - } - } - }, - "azure_string_det_auto_id": { - "kms": "azure", - "type": "string", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAACmVI7YK4JLOzutEdQ79he817Vk5EDP/3hXwOlGmERZCtp8J8HcqClhV+pyvRLGbwmlh12fbSs9nEp7mrobQm9wA==", - "subType": "06" - } - } - }, - "azure_string_det_explicit_id": { - "kms": "azure", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAACmVI7YK4JLOzutEdQ79he817Vk5EDP/3hXwOlGmERZCtp8J8HcqClhV+pyvRLGbwmlh12fbSs9nEp7mrobQm9wA==", - "subType": "06" - } - } - }, - "azure_string_det_explicit_altname": { - "kms": "azure", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAACmVI7YK4JLOzutEdQ79he817Vk5EDP/3hXwOlGmERZCtp8J8HcqClhV+pyvRLGbwmlh12fbSs9nEp7mrobQm9wA==", - "subType": "06" - } - } - }, - "azure_object_rand_auto_id": { - "kms": "azure", - "type": "object", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAADWkZMsfCo4dOPMH1RXC7GkZFt1RCjJf0vaLDA09ih1Jl47SOetZELQ7B1TQjRQitktzrfD43jk8Fn4J5ZYZu1qQ==", - "subType": "06" - } - } - }, - "azure_object_rand_auto_altname": { - "kms": "azure", - "type": "object", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAADJFMymfstltZP1oAqj4bgbCk8uLGtCd12eLqvSq0ZO+JDvls7PAovwmoWwigHunP8BBXT8sLydK+jn1sHfnhrlw==", - "subType": "06" - } - } - }, - "azure_object_rand_explicit_id": { - "kms": "azure", - "type": "object", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAADCen+XrLYKg7gIVubVfdbQwuJ0mFHxhSUUyyBWj4RCeLeLUYXckboPGixXWB9XdwcOnInfF9u6qvktY67GtYASQ==", - "subType": "06" - } - } - }, - "azure_object_rand_explicit_altname": { - "kms": "azure", - "type": "object", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAADnUyp/7eLmxxxOdsP+mNuJABK4PQoKFWDAY7lDrH6MYa03ryASOihPZWYZWXZLrbAf7cQQhElEkKqKwY8+NXgqg==", - "subType": "06" - } - } - }, - "azure_object_det_explicit_id": { - "kms": "azure", - "type": "object", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "azure_object_det_explicit_altname": { - "kms": "azure", - "type": "object", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "azure_array_rand_auto_id": { - "kms": "azure", - "type": "array", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAEtk14WyoatZcNPlg3y/XJNsBt6neFJeQwR06B9rMGV58oIsmeE5zMtUOBYTgzlnwyKpqI/XVAg8s1VxvsrvGCyLVPwGVyDztwtMgVSW6QM3s=", - "subType": "06" - } - } - }, - "azure_array_rand_auto_altname": { - "kms": "azure", - "type": "array", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAERTO63J4Nj1BpFlqVduA2IrAiGoV4jEOH3FnFgx7ZP7da/YBmLX/bc1EqdpC8v4faHxp74iU0xAB0yW4WgySDX7rriL5cw9sMpqgLRaBxGug=", - "subType": "06" - } - } - }, - "azure_array_rand_explicit_id": { - "kms": "azure", - "type": "array", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAEs09qQdNVwh+KFqKPREQkw0XFdRNHAvjYJzs5MDE9+QxvtKlmVKSK3wkxDdCrcH4r7ePV2nCy2h1IHYqaDnnt4s5dSawI2l88iTT+bBcCSrU=", - "subType": "06" - } - } - }, - "azure_array_rand_explicit_altname": { - "kms": "azure", - "type": "array", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAEaQ/YL50up4YIMJuVJSiAP06IQ+YjdKLIfkN/prbOZMiXErcD1Vq1hwGhfGdpEsLVu8E7IhJb4wakVC/2dLZoRP95az6HqRRauNNZAIQMKfY=", - "subType": "06" - } - } - }, - "azure_array_det_explicit_id": { - "kms": "azure", - "type": "array", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "azure_array_det_explicit_altname": { - "kms": "azure", - "type": "array", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "azure_binData=00_rand_auto_id": { - "kms": "azure", - "type": "binData=00", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAFl/leuLAHf1p6aRKHdFyN9FM6MW2XzBemql2xQgqkwJ6YOQXW6Pu/aI1scXVOrvrSu3+wBvByjHu++1AqFgzZRQ==", - "subType": "06" - } - } - }, - "azure_binData=00_rand_auto_altname": { - "kms": "azure", - "type": "binData=00", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAF4Nq/LwyufT/mx0LtFSkupNHTuyjbr4yUy1N5/37XhkpqZ1e4sWCHGNaTDEm5+cvdnbqZ/MMkBv855dc8N7vnGA==", - "subType": "06" - } - } - }, - "azure_binData=00_rand_explicit_id": { - "kms": "azure", - "type": "binData=00", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAFv1Kbv54uXJ76Ih63vtmszQtzkXqDlv8LDCFO3sjzu70+tgRXOhLm3J8uZpwoiNkgM6oNLn0en7tnEekYB9++CA==", - "subType": "06" - } - } - }, - "azure_binData=00_rand_explicit_altname": { - "kms": "azure", - "type": "binData=00", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAFgcYC1n7cGGXpv0qf1Kb8t9y/6kbhscGt2QJkQpAiqadFPPYDU/wwaKdDz94NpAHMZizUbhf9tvZ3UXl1bozhDA==", - "subType": "06" - } - } - }, - "azure_binData=00_det_auto_id": { - "kms": "azure", - "type": "binData=00", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAAFvswfP3+jgia6rAyrypvbso3Xm4d7MEgJRUCWFYzA+9ov++vmeirgoTp/rFavTNOPb+61fvl1WKbVwrgODusaMg==", - "subType": "06" - } - } - }, - "azure_binData=00_det_explicit_id": { - "kms": "azure", - "type": "binData=00", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAAFvswfP3+jgia6rAyrypvbso3Xm4d7MEgJRUCWFYzA+9ov++vmeirgoTp/rFavTNOPb+61fvl1WKbVwrgODusaMg==", - "subType": "06" - } - } - }, - "azure_binData=00_det_explicit_altname": { - "kms": "azure", - "type": "binData=00", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAAFvswfP3+jgia6rAyrypvbso3Xm4d7MEgJRUCWFYzA+9ov++vmeirgoTp/rFavTNOPb+61fvl1WKbVwrgODusaMg==", - "subType": "06" - } - } - }, - "azure_binData=04_rand_auto_id": { - "kms": "azure", - "type": "binData=04", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAFMzMC3BLn/zWE9dxpcD8G0h4aifSY0zSHS9xTVJXgq21s2WU++Ov2UvHatVozmtZltsUN9JvSWqOBQRkFsrXvI7bc4lYfOoOmfpTHFcRDA/c=", - "subType": "06" - } - } - }, - "azure_binData=04_rand_auto_altname": { - "kms": "azure", - "type": "binData=04", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAFDlBN5hUTcjamOg/sgyeG0S52kphsjUgvlpuqHYz6VVdLtZ69cGHOVqqyml3x2rVqWUZJjd4ZodOhlwWq9p+i5IYNot2QaBvi8NZSaiThTc0=", - "subType": "06" - } - } - }, - "azure_binData=04_rand_explicit_id": { - "kms": "azure", - "type": "binData=04", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAFjvS2ozJuAL3rCvyBpraVtgL91OMdiskmgYnyfKlzd8EhYLd1cL4yxnTUjRXx+W+p8uN0/QZo+mynhcWnwcq83raY+I1HftSTx+S6rZ0qyDM=", - "subType": "06" - } - } - }, - "azure_binData=04_rand_explicit_altname": { - "kms": "azure", - "type": "binData=04", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAFqUMd/I0yOdy5W4THvFc6yrgSzB6arkRs/06b0M9Ii+QtAY6vbz+/aJ0Iy3Jm8TahC1wOZVmTj5luQpr+PHZMCEAFadv+0K/Nsx6xVhAh9gg=", - "subType": "06" - } - } - }, - "azure_binData=04_det_auto_id": { - "kms": "azure", - "type": "binData=04", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAAFmN+KMrERGmfmue8/hG4D+ZcGzxC2HntdYBLjEolzvS9FV5JH/adxyUAnMpyL8FNznARL51rbv/G1nXPn9mPabsQ4BtWEAQbHx9TiXd+xbB0=", - "subType": "06" - } - } - }, - "azure_binData=04_det_explicit_id": { - "kms": "azure", - "type": "binData=04", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAAFmN+KMrERGmfmue8/hG4D+ZcGzxC2HntdYBLjEolzvS9FV5JH/adxyUAnMpyL8FNznARL51rbv/G1nXPn9mPabsQ4BtWEAQbHx9TiXd+xbB0=", - "subType": "06" - } - } - }, - "azure_binData=04_det_explicit_altname": { - "kms": "azure", - "type": "binData=04", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAAFmN+KMrERGmfmue8/hG4D+ZcGzxC2HntdYBLjEolzvS9FV5JH/adxyUAnMpyL8FNznARL51rbv/G1nXPn9mPabsQ4BtWEAQbHx9TiXd+xbB0=", - "subType": "06" - } - } - }, - "azure_undefined_rand_explicit_id": { - "kms": "azure", - "type": "undefined", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$undefined": true - } - }, - "azure_undefined_rand_explicit_altname": { - "kms": "azure", - "type": "undefined", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$undefined": true - } - }, - "azure_undefined_det_explicit_id": { - "kms": "azure", - "type": "undefined", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$undefined": true - } - }, - "azure_undefined_det_explicit_altname": { - "kms": "azure", - "type": "undefined", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$undefined": true - } - }, - "azure_objectId_rand_auto_id": { - "kms": "azure", - "type": "objectId", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAH3sYVJpCKi310YxndMwm5ltEbbiRO1RwZxxeEkzI8tptbNXC8t7RkrT8VSJZ43wbGYCiqH5RZy9v8pYwtUm4STw==", - "subType": "06" - } - } - }, - "azure_objectId_rand_auto_altname": { - "kms": "azure", - "type": "objectId", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAHD7agzVEc0JwesHHhkpGYIDAHQ+3Hc691kqic6YmVvK2N45fD5aRKftaZNs5OxSj3tNHSo7lQ+DVtPj8uSSpsVg==", - "subType": "06" - } - } - }, - "azure_objectId_rand_explicit_id": { - "kms": "azure", - "type": "objectId", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAHEgKgy2mpMLpfeEWqbvQOaRZAy+cEGXGon3e53/JoH6dZneEyyt4ZrcrK6uRqyUPWX0q104JbCYxfbtHtdzWgPQ==", - "subType": "06" - } - } - }, - "azure_objectId_rand_explicit_altname": { - "kms": "azure", - "type": "objectId", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAHqSv6Nruw3TIi7y0FPRjSfnJmWSdv5XMhAtnHNkT8MVuHeM32ayo0yc8dTA1wlkRtAI5JrGxTfERCXYuCojvvXg==", - "subType": "06" - } - } - }, - "azure_objectId_det_auto_id": { - "kms": "azure", - "type": "objectId", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAAHcPRjIOyLDUJCDcdWkUySKCFS2AFkIa1OQyQAfC3Zh5HwJ1O7j2o+iYKRerhbni8lBiZH7EUMm1JcxM99lLC5jQ==", - "subType": "06" - } - } - }, - "azure_objectId_det_explicit_id": { - "kms": "azure", - "type": "objectId", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAAHcPRjIOyLDUJCDcdWkUySKCFS2AFkIa1OQyQAfC3Zh5HwJ1O7j2o+iYKRerhbni8lBiZH7EUMm1JcxM99lLC5jQ==", - "subType": "06" - } - } - }, - "azure_objectId_det_explicit_altname": { - "kms": "azure", - "type": "objectId", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAAHcPRjIOyLDUJCDcdWkUySKCFS2AFkIa1OQyQAfC3Zh5HwJ1O7j2o+iYKRerhbni8lBiZH7EUMm1JcxM99lLC5jQ==", - "subType": "06" - } - } - }, - "azure_bool_rand_auto_id": { - "kms": "azure", - "type": "bool", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAIYVWPvzSmiCs9LwRlv/AoQWhaS5mzoKX4W26M5eg/gPjOZbEVYOV80pWMxCcZWRAyV/NDWDUmKtRQDMU9b8lCJw==", - "subType": "06" - } - } - }, - "azure_bool_rand_auto_altname": { - "kms": "azure", - "type": "bool", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAIsAB01Ugqtw4T9SkuJBQN1y/ewpRAyz0vjFPdKI+jmPMmaXpMlXDJU8ZbTKm/nh6sjJCFcY5oZJ83ylbp2gHc6w==", - "subType": "06" - } - } - }, - "azure_bool_rand_explicit_id": { - "kms": "azure", - "type": "bool", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAIr8/qFd564X1mqHEhB0y7bzGFdrHuw+Gk45nXla3VvGHzeIJy6j2Wdl0uziWslMmBvNp8WweW+jQ6E2Fu7SiojQ==", - "subType": "06" - } - } - }, - "azure_bool_rand_explicit_altname": { - "kms": "azure", - "type": "bool", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAIWsca5FAnS2zhHnmKmexvvXMTgsZZ7uAFHnjQassUcay6mvIWH4hOnGiRxt5Zm0wO4S6cZq+PZrmEH5/n9rJcJQ==", - "subType": "06" - } - } - }, - "azure_bool_det_explicit_id": { - "kms": "azure", - "type": "bool", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": true - }, - "azure_bool_det_explicit_altname": { - "kms": "azure", - "type": "bool", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": true - }, - "azure_date_rand_auto_id": { - "kms": "azure", - "type": "date", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAJwKo7XW5daIFlwY1mDAnJdHlcUgF+74oViL28hQGhde63pkPyyS6lPkYrc1gcCK5DL7PwsSX4Vb9SsNAG9860xw==", - "subType": "06" - } - } - }, - "azure_date_rand_auto_altname": { - "kms": "azure", - "type": "date", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAJYZdWIqvqTztGKJkSASMEOjyrUFKnYql8fMIEzfEZWx2BYsIkxxOUUUCASg/Jsn09fTLVQ7yLD+LwycuI2uaXsw==", - "subType": "06" - } - } - }, - "azure_date_rand_explicit_id": { - "kms": "azure", - "type": "date", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAJuWzKqi3KV8GbGGnT7i9N4BACUuNjt5AgKsjWIfrWRXK1+jRQFq0bYlVWaliT9CNIygL2aTF0H4eHl55PAI84MQ==", - "subType": "06" - } - } - }, - "azure_date_rand_explicit_altname": { - "kms": "azure", - "type": "date", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAJ5JTtTuP4zTnEbaVlS/W59SrZ08LOC4ZIl+h+H4RnfHUfBXDwUou+APolVaYko+VZMKecrikdPeewgzWaqazJ1g==", - "subType": "06" - } - } - }, - "azure_date_det_auto_id": { - "kms": "azure", - "type": "date", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAAJCREIp/SPolAZcVU1iOmaJaN2tFId5HhrjNmhp6xhA1AIPLnN+U7TAqesxFN7iebR9fXI5fZxYNgyWqQC1rqUJw==", - "subType": "06" - } - } - }, - "azure_date_det_explicit_id": { - "kms": "azure", - "type": "date", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAAJCREIp/SPolAZcVU1iOmaJaN2tFId5HhrjNmhp6xhA1AIPLnN+U7TAqesxFN7iebR9fXI5fZxYNgyWqQC1rqUJw==", - "subType": "06" - } - } - }, - "azure_date_det_explicit_altname": { - "kms": "azure", - "type": "date", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAAJCREIp/SPolAZcVU1iOmaJaN2tFId5HhrjNmhp6xhA1AIPLnN+U7TAqesxFN7iebR9fXI5fZxYNgyWqQC1rqUJw==", - "subType": "06" - } - } - }, - "azure_null_rand_explicit_id": { - "kms": "azure", - "type": "null", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": null - }, - "azure_null_rand_explicit_altname": { - "kms": "azure", - "type": "null", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": null - }, - "azure_null_det_explicit_id": { - "kms": "azure", - "type": "null", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": null - }, - "azure_null_det_explicit_altname": { - "kms": "azure", - "type": "null", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": null - }, - "azure_regex_rand_auto_id": { - "kms": "azure", - "type": "regex", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAALsMm3W2ogEiI6m0l8dS5Xhqnw+vMBvN1EesOTqAZOk4tQleX6fWARwUUnjFxbuejU7ISb50fc/Ul+ntL9z/2nHQ==", - "subType": "06" - } - } - }, - "azure_regex_rand_auto_altname": { - "kms": "azure", - "type": "regex", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAALITQNQI0hfCeMTxH0Hce1Cf5tinQG+Bq8EolUACvxUUQcDqIXfFXn19tV/Qyj4lIdnnwh/18hiswgEpJRK7uLGw==", - "subType": "06" - } - } - }, - "azure_regex_rand_explicit_id": { - "kms": "azure", - "type": "regex", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAALw/1QI/bKeiGUrrtC+yXOTvxZ2mJjSelPPGOm1mge0ws8DsX0DPHmo6MjhnRO4u0c/LWiE3hwHG2rYjAFlFXZ5A==", - "subType": "06" - } - } - }, - "azure_regex_rand_explicit_altname": { - "kms": "azure", - "type": "regex", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAL6Sl58UfFCHCZzWIB4r19/ZjeSRAoWeTFCFedKiwyR8/xnL+8jzXK/9+vTIspP6j35lFapr+f4iBNB9WjdpYNKA==", - "subType": "06" - } - } - }, - "azure_regex_det_auto_id": { - "kms": "azure", - "type": "regex", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAALxshM91Tsql/8kPe3dC16oP36XSUIN6godiRVIJLJ+NAwYtEkThthQsln7CrkIxIx6npN6A/hw1CBJERS/cqWhw==", - "subType": "06" - } - } - }, - "azure_regex_det_explicit_id": { - "kms": "azure", - "type": "regex", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAALxshM91Tsql/8kPe3dC16oP36XSUIN6godiRVIJLJ+NAwYtEkThthQsln7CrkIxIx6npN6A/hw1CBJERS/cqWhw==", - "subType": "06" - } - } - }, - "azure_regex_det_explicit_altname": { - "kms": "azure", - "type": "regex", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAALxshM91Tsql/8kPe3dC16oP36XSUIN6godiRVIJLJ+NAwYtEkThthQsln7CrkIxIx6npN6A/hw1CBJERS/cqWhw==", - "subType": "06" - } - } - }, - "azure_dbPointer_rand_auto_id": { - "kms": "azure", - "type": "dbPointer", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAMaAd1v/XCYM2Kzi/f4utR6aHOFORmzZ17EepEjkn5IeKshktUpPWjI/dBwSunn5Qxx2zI3nm06c3SDvp6tw8qb7u4qXjLQYhlsQ0bHvvm+vE=", - "subType": "06" - } - } - }, - "azure_dbPointer_rand_auto_altname": { - "kms": "azure", - "type": "dbPointer", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAM6VNjkN9bMIzfC7AX0ZhOEXPpyPE0nzYq3c5TNHrgeGWdZDR9GVdbO9t55zQrQJJ2Mmevh8c0WaAUV+YODv7ty6TDBsPbaKWWqMzu/v9RXHo=", - "subType": "06" - } - } - }, - "azure_dbPointer_rand_explicit_id": { - "kms": "azure", - "type": "dbPointer", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAM66tywuMhwdyUjxfl7EOdKHNCLeIPnct3PgKrAKlOQFjiNQUIA2ShVy0qYpJcvvFsuQ5e8Bjr0IqeBc8mC7n4euRSM1UXpLqI5XHgXMMaYpI=", - "subType": "06" - } - } - }, - "azure_dbPointer_rand_explicit_altname": { - "kms": "azure", - "type": "dbPointer", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAMtPQEbZ4gWoSYjVZLd5X6j0XxutWY1Ecrys2ErKRgZaxP0uGe8uw0cnr2Z5PYylaYmsSicLwD1PwWY42PKmaGBDraHmdfqDOPvrNxhBrfU/E=", - "subType": "06" - } - } - }, - "azure_dbPointer_det_auto_id": { - "kms": "azure", - "type": "dbPointer", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAAMxUcVqq6RpAUCv08qGkmjuwVAIgLeYyh7xZnMeCYVGmhJKIP1Zdt1SvRGRV0jzwCQmXgxNd04adRwJnG/PRQIsL9aH3ilJgEnUbOo1nqR7yw=", - "subType": "06" - } - } - }, - "azure_dbPointer_det_explicit_id": { - "kms": "azure", - "type": "dbPointer", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAAMxUcVqq6RpAUCv08qGkmjuwVAIgLeYyh7xZnMeCYVGmhJKIP1Zdt1SvRGRV0jzwCQmXgxNd04adRwJnG/PRQIsL9aH3ilJgEnUbOo1nqR7yw=", - "subType": "06" - } - } - }, - "azure_dbPointer_det_explicit_altname": { - "kms": "azure", - "type": "dbPointer", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAAMxUcVqq6RpAUCv08qGkmjuwVAIgLeYyh7xZnMeCYVGmhJKIP1Zdt1SvRGRV0jzwCQmXgxNd04adRwJnG/PRQIsL9aH3ilJgEnUbOo1nqR7yw=", - "subType": "06" - } - } - }, - "azure_javascript_rand_auto_id": { - "kms": "azure", - "type": "javascript", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAANWXPb5z3a0S7F26vkmBF3fV+oXYUj15OEtnSlXlUrc+gbhbPDxSvCPnTBEy5sNu4ndkvEZZxYgZInkF2q4rhlfQ==", - "subType": "06" - } - } - }, - "azure_javascript_rand_auto_altname": { - "kms": "azure", - "type": "javascript", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAANN4mcwLz/J4eOUknhVsy6kdF1ThDP8cx6dNpOwJWAiyPHEsn+i6JmMTlfQMBrUp9HB/u3R+jLO5yz4XgLUKE8Tw==", - "subType": "06" - } - } - }, - "azure_javascript_rand_explicit_id": { - "kms": "azure", - "type": "javascript", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAANJ+t5Z8hSQaoNzszzkWndAo4A0avDf9bKFa7euznz8ZYInnl9RUVqWMyxjSuIotAvTyYSJzxh+w2hKCgVf+MjEA==", - "subType": "06" - } - } - }, - "azure_javascript_rand_explicit_altname": { - "kms": "azure", - "type": "javascript", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAANRLOQFpmkEg/KdWMmaurkNtUhy45rgtoipc9kQz6olgDWiMim81XC0AW5cOvjbHXL3w7Du28Kwdsp4j0PTTXHUQ==", - "subType": "06" - } - } - }, - "azure_javascript_det_auto_id": { - "kms": "azure", - "type": "javascript", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAANUrNUS/7/dmKVWBd+2JKGEn1hxbFSyu3p5sDNatukG2m16t4WwxzmYAg8PuQbAxekprs7iaLA+7D2Kn3ZuMSQOw==", - "subType": "06" - } - } - }, - "azure_javascript_det_explicit_id": { - "kms": "azure", - "type": "javascript", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAANUrNUS/7/dmKVWBd+2JKGEn1hxbFSyu3p5sDNatukG2m16t4WwxzmYAg8PuQbAxekprs7iaLA+7D2Kn3ZuMSQOw==", - "subType": "06" - } - } - }, - "azure_javascript_det_explicit_altname": { - "kms": "azure", - "type": "javascript", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAANUrNUS/7/dmKVWBd+2JKGEn1hxbFSyu3p5sDNatukG2m16t4WwxzmYAg8PuQbAxekprs7iaLA+7D2Kn3ZuMSQOw==", - "subType": "06" - } - } - }, - "azure_symbol_rand_auto_id": { - "kms": "azure", - "type": "symbol", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAORMcgtQSU+/2Qlq57neRrVuAFSeSwkqdo+z1fh6IKjyEzhCy+u5bTzSzTopyKJQTCUZA2mSpRezWkM87oiGfhMFkBRVreMcE62eH+BLlgUaM=", - "subType": "06" - } - } - }, - "azure_symbol_rand_auto_altname": { - "kms": "azure", - "type": "symbol", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAOIKlAw/A3nwHn0tO2cYtJx0azB8MGmXtt+bRptzn8yHlUSpMpYaiU0ssBBiLkmMLAITYebLqDk3NHESyP7PvbSfX1E2XVn2Nf694ZqPWMec8=", - "subType": "06" - } - } - }, - "azure_symbol_rand_explicit_id": { - "kms": "azure", - "type": "symbol", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAO8SXW76AEr/6D6zyP1RYwmwdVM2AINaXZn3Ipy+fynWTUV6XIPIRR7xMTttNo2zlh7fgXDZ28PmjooGlQzn0q0JVQmXPCIPM3aqAmMcgyuqg=", - "subType": "06" - } - } - }, - "azure_symbol_rand_explicit_altname": { - "kms": "azure", - "type": "symbol", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAOtoJWm2Ucre0foHIiOutsX1WIyub7t3Lby3/F8zRXn+l6ixlTjAPgWFwpRnYg96Lt2ACDDQ9CO51ejr9qk0b8LDBwG3qU5Cuibsp7vo1VsdI=", - "subType": "06" - } - } - }, - "azure_symbol_det_auto_id": { - "kms": "azure", - "type": "symbol", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAAOvp/FMMmWVMkiuN51uFMFBiRQAcc9jftlNsHsLoNtohZaGni26kgX94b+/EI8pdWF5xA/73JlGlij0Rt+vC9s/zTDItRpn0bJL54WPphDcmA=", - "subType": "06" - } - } - }, - "azure_symbol_det_explicit_id": { - "kms": "azure", - "type": "symbol", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAAOvp/FMMmWVMkiuN51uFMFBiRQAcc9jftlNsHsLoNtohZaGni26kgX94b+/EI8pdWF5xA/73JlGlij0Rt+vC9s/zTDItRpn0bJL54WPphDcmA=", - "subType": "06" - } - } - }, - "azure_symbol_det_explicit_altname": { - "kms": "azure", - "type": "symbol", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAAOvp/FMMmWVMkiuN51uFMFBiRQAcc9jftlNsHsLoNtohZaGni26kgX94b+/EI8pdWF5xA/73JlGlij0Rt+vC9s/zTDItRpn0bJL54WPphDcmA=", - "subType": "06" - } - } - }, - "azure_javascriptWithScope_rand_auto_id": { - "kms": "azure", - "type": "javascriptWithScope", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAPCw9NnvJyuTYIgZxr1w1UiG85PGZ4rO62DWWDF98HwVM/Y6u7hNdNjkaWjYFsPMl38ioHw/pS8GFR62QmH2RAw/BV0wI7pNy2evANr3i3gKg=", - "subType": "06" - } - } - }, - "azure_javascriptWithScope_rand_auto_altname": { - "kms": "azure", - "type": "javascriptWithScope", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAPXQzqnQ2UWkIYof8/OfadNMa7iVKAbOaiu7YGm8iVrx+W6uxKLPFugVqHtQ29hYXXf33xr8rqGNxDlAe7/x1OeYEif71f7LUkmKF9WxJV9Ko=", - "subType": "06" - } - } - }, - "azure_javascriptWithScope_rand_explicit_id": { - "kms": "azure", - "type": "javascriptWithScope", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAP0nxlppgPyjLx0eBempbOlL21G6KbABSrE6+YuNDcsjJjxCQuLR9+aoAwa+yCDEC7GZ1E3oP489edKUuNpE4Ts26jy4aRegu4DmyECUeBwAg=", - "subType": "06" - } - } - }, - "azure_javascriptWithScope_rand_explicit_altname": { - "kms": "azure", - "type": "javascriptWithScope", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAPO89afu9Sb+cK9wwM1cO1DPjvu5UNyObjjTScy1hy9PzllJGfj7b84f0Ah74jPYsMPwI0Eslu/IYF3+5jmquq5Qp/VUQESlxqRqRK0xIeMfs=", - "subType": "06" - } - } - }, - "azure_javascriptWithScope_det_explicit_id": { - "kms": "azure", - "type": "javascriptWithScope", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "azure_javascriptWithScope_det_explicit_altname": { - "kms": "azure", - "type": "javascriptWithScope", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "azure_int_rand_auto_id": { - "kms": "azure", - "type": "int", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAQUyy4uWmWdzypsK81q9egREg4s80X3L2hzxJzC+fL08Xzy1z9grpPPCfJrluUVKMMGmmZR8gJPJ70igN3unJbzg==", - "subType": "06" - } - } - }, - "azure_int_rand_auto_altname": { - "kms": "azure", - "type": "int", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAQr4gyoHKpGsSJo8CMsYSJk/KilFMJhsDCmxrha7yfNW1uR5sjyZj4B4s6uTXGw76x7aR/AvecDlY3QFJb8L1mjg==", - "subType": "06" - } - } - }, - "azure_int_rand_explicit_id": { - "kms": "azure", - "type": "int", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAQ0zgXYPV1MuEFksmDpVDoWkoZQelm3+rYrMiT64KYywO//75799W8TbR3a7O6Q/ErjKQOin2OCp8EWwZqTDdz5w==", - "subType": "06" - } - } - }, - "azure_int_rand_explicit_altname": { - "kms": "azure", - "type": "int", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAQG+qz00yizREbP3tla1elMiwf8TKLbUU2XWUP+E0vey/wvbjTTIzqwUlz/b9St77CHJhavypP3hMrngXR9GapbQ==", - "subType": "06" - } - } - }, - "azure_int_det_auto_id": { - "kms": "azure", - "type": "int", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAAQCkJH+CataLqp/xBjO77QBprC2xPV+rE+goSZ3C6aqwXIeTYHTOqEbeaFb5iZcqYH5nWvNvnfbZSIMyvSfrPjhw==", - "subType": "06" - } - } - }, - "azure_int_det_explicit_id": { - "kms": "azure", - "type": "int", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAAQCkJH+CataLqp/xBjO77QBprC2xPV+rE+goSZ3C6aqwXIeTYHTOqEbeaFb5iZcqYH5nWvNvnfbZSIMyvSfrPjhw==", - "subType": "06" - } - } - }, - "azure_int_det_explicit_altname": { - "kms": "azure", - "type": "int", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAAQCkJH+CataLqp/xBjO77QBprC2xPV+rE+goSZ3C6aqwXIeTYHTOqEbeaFb5iZcqYH5nWvNvnfbZSIMyvSfrPjhw==", - "subType": "06" - } - } - }, - "azure_timestamp_rand_auto_id": { - "kms": "azure", - "type": "timestamp", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAARwcXYtx+A7g/zGkjGdkyVxZGCO9Nzj3D70NIpl2TeH2j9qYGP4DenwL1xSgrL2Ez+X58d2BvNhKrjA9y2w1Z8kA==", - "subType": "06" - } - } - }, - "azure_timestamp_rand_auto_altname": { - "kms": "azure", - "type": "timestamp", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAARQ0Pjx3l92Aqhn2e1hot2M9rQ6aLPE2Iw8AVhm5AD8FWywWih12Fn2p9+kiE33yKPOCyrTWQHKPtB4yYhqnJgGg==", - "subType": "06" - } - } - }, - "azure_timestamp_rand_explicit_id": { - "kms": "azure", - "type": "timestamp", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAARvFMlIzh2IjpHkTJ8buqTOqBA0+CxVDsZacUhSHVMgJLN+0DJsJy8OfkmKMu9Lk5hULY00Udoja87x+79mYfmeQ==", - "subType": "06" - } - } - }, - "azure_timestamp_rand_explicit_altname": { - "kms": "azure", - "type": "timestamp", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAAR+2SCd7V5ukAkh7CYpNPIatzTL8osNoA4Mb5jjjbos8eMamImw0fbH8YA+Rdm4CgGdQQ9VDX7MtMWlArkj0Jpew==", - "subType": "06" - } - } - }, - "azure_timestamp_det_auto_id": { - "kms": "azure", - "type": "timestamp", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAARe72T/oC09QGE1vuljb6ZEHa6llEwMLT+C4s9u1fREkOKndpmrOlGE8zOey4teizY1ypOMkIZ8GDQJJ4kLSpNkQ==", - "subType": "06" - } - } - }, - "azure_timestamp_det_explicit_id": { - "kms": "azure", - "type": "timestamp", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAARe72T/oC09QGE1vuljb6ZEHa6llEwMLT+C4s9u1fREkOKndpmrOlGE8zOey4teizY1ypOMkIZ8GDQJJ4kLSpNkQ==", - "subType": "06" - } - } - }, - "azure_timestamp_det_explicit_altname": { - "kms": "azure", - "type": "timestamp", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAARe72T/oC09QGE1vuljb6ZEHa6llEwMLT+C4s9u1fREkOKndpmrOlGE8zOey4teizY1ypOMkIZ8GDQJJ4kLSpNkQ==", - "subType": "06" - } - } - }, - "azure_long_rand_auto_id": { - "kms": "azure", - "type": "long", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAASSSgX7k8iw0xFe0AiIzOu0e0P7Ujyfsk/Cdl0fR5X8V3QLVER+1Qa47Qpb8iWL2VLBSh+55HvIEtvhWn8SwXaog==", - "subType": "06" - } - } - }, - "azure_long_rand_auto_altname": { - "kms": "azure", - "type": "long", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAASUhKr5K7ulGTeFbhIvJ2DDE10gRAFn5+2zqnsIFSY8lYV2PBYcENdeNBXZs6kyIAYhJdQyuOChVCerTI5jmQWDw==", - "subType": "06" - } - } - }, - "azure_long_rand_explicit_id": { - "kms": "azure", - "type": "long", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAASHxawpjTHdXYRWQSZ7Qi7gFC+o4dW2mPH8s5nQkPFY/EubcJbdAZ5HFp66NfPaDJ/NSH6Vy+TkpX3683RC+bjSQ==", - "subType": "06" - } - } - }, - "azure_long_rand_explicit_altname": { - "kms": "azure", - "type": "long", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAASVaMAv6UjuBOUZMJ9qz+58TQWmgaMpS9xrJziJY80ml9aRlDTtRubP7U40CgbDvrtY1QgHbkF/di1XDCB6iXMMg==", - "subType": "06" - } - } - }, - "azure_long_det_auto_id": { - "kms": "azure", - "type": "long", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAAS06L8oEPeMvVlA32VlobdOWG24OoyMbv9PyYsHLsbT0bHFwU7lYUSQG9EkYVRNPEDzvXpciE1jT7KT8CRY8XT/g==", - "subType": "06" - } - } - }, - "azure_long_det_explicit_id": { - "kms": "azure", - "type": "long", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAAS06L8oEPeMvVlA32VlobdOWG24OoyMbv9PyYsHLsbT0bHFwU7lYUSQG9EkYVRNPEDzvXpciE1jT7KT8CRY8XT/g==", - "subType": "06" - } - } - }, - "azure_long_det_explicit_altname": { - "kms": "azure", - "type": "long", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQGVERAAAAAAAAAAAAAAAAAS06L8oEPeMvVlA32VlobdOWG24OoyMbv9PyYsHLsbT0bHFwU7lYUSQG9EkYVRNPEDzvXpciE1jT7KT8CRY8XT/g==", - "subType": "06" - } - } - }, - "azure_decimal_rand_auto_id": { - "kms": "azure", - "type": "decimal", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAATJ6LZgPu9F+rPtYsMuvwOx62+g1dAk858BUtE9FjC/300DnbDiolhkHNcyoFs07NYUNgLthW2rISb/ejmsDCt/oqnf8zWYf9vrJEfHaS/Ocw=", - "subType": "06" - } - } - }, - "azure_decimal_rand_auto_altname": { - "kms": "azure", - "type": "decimal", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAATX8eD6qFYWKwIGvXtQG79fXKuPW9hkIV0OwrmNNIqRltw6gPHl+/1X8Q6rgmjCxqvhB05AxTj7xz64gP+ILkPQY8e8VGuCOvOdwDo2IPwy18=", - "subType": "06" - } - } - }, - "azure_decimal_rand_explicit_id": { - "kms": "azure", - "type": "decimal", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAATBjQ9E5wDdTS/iI1XDqGmDBC5aLbPB4nSyrjRLfv1zEoPRjmcHlQmMRJA0mori2VQv6EBFNHeczFCenJaSAkuh77czeXM2vH3T6qwEIDs4dw=", - "subType": "06" - } - } - }, - "azure_decimal_rand_explicit_altname": { - "kms": "azure", - "type": "decimal", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AgGVERAAAAAAAAAAAAAAAAATtkjbhdve7MNuLaTm6qvaewuVUxeC1DMz1fd4RC4jeiBFMd5uZUVJTiOIerwQ6P5G5lkMlezKDWgKl2FUvZH6c7V3JknhsaWcV5iLWGUL6Zc=", - "subType": "06" - } - } - }, - "azure_decimal_det_explicit_id": { - "kms": "azure", - "type": "decimal", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$numberDecimal": "1.234" - } - }, - "azure_decimal_det_explicit_altname": { - "kms": "azure", - "type": "decimal", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$numberDecimal": "1.234" - } - }, - "azure_minKey_rand_explicit_id": { - "kms": "azure", - "type": "minKey", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "azure_minKey_rand_explicit_altname": { - "kms": "azure", - "type": "minKey", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "azure_minKey_det_explicit_id": { - "kms": "azure", - "type": "minKey", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "azure_minKey_det_explicit_altname": { - "kms": "azure", - "type": "minKey", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "azure_maxKey_rand_explicit_id": { - "kms": "azure", - "type": "maxKey", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "azure_maxKey_rand_explicit_altname": { - "kms": "azure", - "type": "maxKey", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "azure_maxKey_det_explicit_id": { - "kms": "azure", - "type": "maxKey", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "azure_maxKey_det_explicit_altname": { - "kms": "azure", - "type": "maxKey", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "gcp_double_rand_auto_id": { - "kms": "gcp", - "type": "double", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAABFoHQxnh1XSC0k1B01uFFg7rE9sZVBn4PXo26JX8gx9tuxu+4l9Avb23H9BfOzuWiEc43iw87K/W2y0VfKp5CCg==", - "subType": "06" - } - } - }, - "gcp_double_rand_auto_altname": { - "kms": "gcp", - "type": "double", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAABRkZkEtQEFB/r268cNfYRQbN4u5Cxjl9Uh+8wq9TFWLQH2E/9wj2vTLlxQ2cQsM7Qd+XxR5idjfBf9CKAfvUa/A==", - "subType": "06" - } - } - }, - "gcp_double_rand_explicit_id": { - "kms": "gcp", - "type": "double", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAABDSUZ+0BbDDEZxCXA+J2T6Js8Uor2dfXSf7s/hpLrg6dxcW2chpht9XLiLOXG5w83TzCAI5pF8cQgBpBpYjR8RQ==", - "subType": "06" - } - } - }, - "gcp_double_rand_explicit_altname": { - "kms": "gcp", - "type": "double", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAABCYxugs7L+4S+1rr0VILSbtBm79JPTLuzluQAv0+8hbu5Z6zReOL6Ta1vQH1oA+pSPGYA4euye3zNl1X6ZewbPw==", - "subType": "06" - } - } - }, - "gcp_double_det_explicit_id": { - "kms": "gcp", - "type": "double", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$numberDouble": "1.2339999999999999858" - } - }, - "gcp_double_det_explicit_altname": { - "kms": "gcp", - "type": "double", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$numberDouble": "1.2339999999999999858" - } - }, - "gcp_string_rand_auto_id": { - "kms": "gcp", - "type": "string", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAACx3wSslJEiD80YLTH0n4Bbs4yWVPQl15AU8pZMLLQePqEtI+BJy3t2bqNP1098jS0CGSf+LQmQvXhJn1aNFeMTw==", - "subType": "06" - } - } - }, - "gcp_string_rand_auto_altname": { - "kms": "gcp", - "type": "string", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAC5BTe5KP5UxSIk6dJlkz8aaZ/9fg44XPWHafiiL/48lcv3AWbu2gcBo1EDuc1sJQu6XMrtDCRQ7PCHsL7sEQMGQ==", - "subType": "06" - } - } - }, - "gcp_string_rand_explicit_id": { - "kms": "gcp", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAACyJN55OcyXXJ71x8VphTaIuIg6kQtGgVKPhWx0LSdYc6JOjB6LTdA7SEWiSlSWWFZE26UmKcPbkbLDAYf4IVrzQ==", - "subType": "06" - } - } - }, - "gcp_string_rand_explicit_altname": { - "kms": "gcp", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAACoa0d9gqfPP5s3+GoruwzxoQFgli8SmjpTVRLAOcFxqGdfrwSbpYffSw/OR45sZPxXCL6T2MtUvZsl7ukv0jBnw==", - "subType": "06" - } - } - }, - "gcp_string_det_auto_id": { - "kms": "gcp", - "type": "string", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAACTCkyETcWayIZ9YEoQEBVIF3i7iXEe6M3KjYYaSVCYdqSbSHBzlwKWYbP+Xj/MMYBYTLZ1aiRQWCMK4gWPYppZw==", - "subType": "06" - } - } - }, - "gcp_string_det_explicit_id": { - "kms": "gcp", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAACTCkyETcWayIZ9YEoQEBVIF3i7iXEe6M3KjYYaSVCYdqSbSHBzlwKWYbP+Xj/MMYBYTLZ1aiRQWCMK4gWPYppZw==", - "subType": "06" - } - } - }, - "gcp_string_det_explicit_altname": { - "kms": "gcp", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAACTCkyETcWayIZ9YEoQEBVIF3i7iXEe6M3KjYYaSVCYdqSbSHBzlwKWYbP+Xj/MMYBYTLZ1aiRQWCMK4gWPYppZw==", - "subType": "06" - } - } - }, - "gcp_object_rand_auto_id": { - "kms": "gcp", - "type": "object", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAADy+8fkyeNYdIK001YogXfKc25zRXS1VGIFVWR6jRfrexy9C8LBBfX3iDwGNPbP2pkC3Tq16OoziQB6iNGf7s7yg==", - "subType": "06" - } - } - }, - "gcp_object_rand_auto_altname": { - "kms": "gcp", - "type": "object", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAADixoDdvm57gH8ooOaKI57WyZD5uaPmuYgmrgAFuV8I+oaalqYctnNSYlzQKCMQX/mIcTxvW3oOWY7+IzAz7npvw==", - "subType": "06" - } - } - }, - "gcp_object_rand_explicit_id": { - "kms": "gcp", - "type": "object", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAADvq0OAoijgHaVMhsoNMdfWFLyISDo6Y13sYM0CoBXS/oXJNIJJvhgKPbFSV/h4IgiDLy4qNYOTJQvpqt094RPgQ==", - "subType": "06" - } - } - }, - "gcp_object_rand_explicit_altname": { - "kms": "gcp", - "type": "object", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAADuTZF7/uqGjFbjzBYspPkxGWvvVAEN/ib8bfPOQrEobtTWuU+ju9H3TlT9DMuFy7RdUZnPB0D3HkM8+zky5xeBw==", - "subType": "06" - } - } - }, - "gcp_object_det_explicit_id": { - "kms": "gcp", - "type": "object", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "gcp_object_det_explicit_altname": { - "kms": "gcp", - "type": "object", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "gcp_array_rand_auto_id": { - "kms": "gcp", - "type": "array", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAE085kJIBX6S93D94bcRjkOegEKsksi2R1cxoVDoOpSdHh3S6bZAOh50W405wvnOKf3KTP9SICDUehQKQZSC026Y5dwVQ2GiM7PtpSedthKJs=", - "subType": "06" - } - } - }, - "gcp_array_rand_auto_altname": { - "kms": "gcp", - "type": "array", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAEk/FAXsaqyVr6I+MY5L0axeLhskcEfLZeB8whLMKbjLDLa8Iep+IdrFVSfKo03Zr/7Ah8Js01aT6+Vt4EDMJK0mGKZJOjsrAf3b6RS+Mzebg=", - "subType": "06" - } - } - }, - "gcp_array_rand_explicit_id": { - "kms": "gcp", - "type": "array", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAEDY7J9JGiurctYr7ytakNjcryVm42fkubcVpQpUYEkpK/G9NLGjrJuFgNW5ZVjYiPKEBbDB7vEtJqGux0BU++hrvVHNJ3wUT2mbDE18NE4KE=", - "subType": "06" - } - } - }, - "gcp_array_rand_explicit_altname": { - "kms": "gcp", - "type": "array", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAErFFlw8W9J2y+751RnYLw0TSK9ThD6sP3i4zPbZtiuhc90RFoJhScvqM9i4sDKuYePZZRLBxdX4EZhZClOmswCGDLCIWsQlSvCwgDcIsRR/w=", - "subType": "06" - } - } - }, - "gcp_array_det_explicit_id": { - "kms": "gcp", - "type": "array", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "gcp_array_det_explicit_altname": { - "kms": "gcp", - "type": "array", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "gcp_binData=00_rand_auto_id": { - "kms": "gcp", - "type": "binData=00", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAF0R5BNkQKfm6wx/tob8nVGDEYV/pvy9UeCqc9gFNuB5d9KxCkgyxryV65rbB90OriqvWFO2jcxzchRYgRI3fQ+A==", - "subType": "06" - } - } - }, - "gcp_binData=00_rand_auto_altname": { - "kms": "gcp", - "type": "binData=00", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAF4wcT8XGc3xNdKYDX5/cbUwPDdnkIXlWWCCYeSXSk2oWPxMZnPsVQ44nXKJJsKitoE3r/hL1sSG5239WzCWyx9g==", - "subType": "06" - } - } - }, - "gcp_binData=00_rand_explicit_id": { - "kms": "gcp", - "type": "binData=00", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAF07OFs5mlx0AB6QBanaybLuhuFbG+19KxSqHlSgELcz6TQKI6equX97OZdaWSWf2SSeiYm5E6+Y3lgA5l4KxC2A==", - "subType": "06" - } - } - }, - "gcp_binData=00_rand_explicit_altname": { - "kms": "gcp", - "type": "binData=00", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAFZ74Q7JMm7y2i3wRmjIRKefhmdnrhP1NXJgploi+44eQ2eRraZsW7peGPYyIfsXEbhgV5+aLmiYgvemBywfdogQ==", - "subType": "06" - } - } - }, - "gcp_binData=00_det_auto_id": { - "kms": "gcp", - "type": "binData=00", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAAFhwJkocj36WXoY3mg2GWUrJ5IQTo9MvkwEwRFKdkcxm9pX2PZPK7bN5ZWw3IFcQ/0GfaW6V4LYr8WarZdLF0p5g==", - "subType": "06" - } - } - }, - "gcp_binData=00_det_explicit_id": { - "kms": "gcp", - "type": "binData=00", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAAFhwJkocj36WXoY3mg2GWUrJ5IQTo9MvkwEwRFKdkcxm9pX2PZPK7bN5ZWw3IFcQ/0GfaW6V4LYr8WarZdLF0p5g==", - "subType": "06" - } - } - }, - "gcp_binData=00_det_explicit_altname": { - "kms": "gcp", - "type": "binData=00", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAAFhwJkocj36WXoY3mg2GWUrJ5IQTo9MvkwEwRFKdkcxm9pX2PZPK7bN5ZWw3IFcQ/0GfaW6V4LYr8WarZdLF0p5g==", - "subType": "06" - } - } - }, - "gcp_binData=04_rand_auto_id": { - "kms": "gcp", - "type": "binData=04", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAFmDO47RTVXzm8D4hfhLICILrQJg3yOwG3HYfCdz7yaanPow2Y6bMxvXxk+kDS29aS8pJKDqJQQoMGc1ZFD3yYKsLQHRi/8rW6TNDQd4sCQ00=", - "subType": "06" - } - } - }, - "gcp_binData=04_rand_auto_altname": { - "kms": "gcp", - "type": "binData=04", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAFpiu9Q3LTuPmgdWBqo5Kw0vGF9xU1rMyE4xwR8GccZ7ZMrUcR4AnZnAP7ah5Oz8e7qonNYX4d09obesYSLlIjyK7J7qg+GWiEURgbvmOngaA=", - "subType": "06" - } - } - }, - "gcp_binData=04_rand_explicit_id": { - "kms": "gcp", - "type": "binData=04", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAFHRy8dveGuMng9WMmadIp39jD7iEfl3bEjKmzyNoAc0wIcSJZo9kdGbNEwZ4p+A1gz273fmAt/AJwAxwvqdlanLWBr4wiSKz1Mu9VaBcTlyY=", - "subType": "06" - } - } - }, - "gcp_binData=04_rand_explicit_altname": { - "kms": "gcp", - "type": "binData=04", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAFiqO+sKodqXuVox0zTbKuY4Ng0QE1If2hDLWXljAEZdYABPk20UJyL/CHR49WP2Cwvi4evJCf8sEfKpR+ugPiyxWzP3iVe6qqTzP93BBjqoc=", - "subType": "06" - } - } - }, - "gcp_binData=04_det_auto_id": { - "kms": "gcp", - "type": "binData=04", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAAFEp5Gut6iENHUqDMVdBm4cxQy35gnslTf7vSWW9InFh323BvaTTiubxbxTiMKIa/u47MfMprL9HNQSwgpAQc4lped+YnlRW8RYvTcG4frFtA=", - "subType": "06" - } - } - }, - "gcp_binData=04_det_explicit_id": { - "kms": "gcp", - "type": "binData=04", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAAFEp5Gut6iENHUqDMVdBm4cxQy35gnslTf7vSWW9InFh323BvaTTiubxbxTiMKIa/u47MfMprL9HNQSwgpAQc4lped+YnlRW8RYvTcG4frFtA=", - "subType": "06" - } - } - }, - "gcp_binData=04_det_explicit_altname": { - "kms": "gcp", - "type": "binData=04", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAAFEp5Gut6iENHUqDMVdBm4cxQy35gnslTf7vSWW9InFh323BvaTTiubxbxTiMKIa/u47MfMprL9HNQSwgpAQc4lped+YnlRW8RYvTcG4frFtA=", - "subType": "06" - } - } - }, - "gcp_undefined_rand_explicit_id": { - "kms": "gcp", - "type": "undefined", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$undefined": true - } - }, - "gcp_undefined_rand_explicit_altname": { - "kms": "gcp", - "type": "undefined", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$undefined": true - } - }, - "gcp_undefined_det_explicit_id": { - "kms": "gcp", - "type": "undefined", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$undefined": true - } - }, - "gcp_undefined_det_explicit_altname": { - "kms": "gcp", - "type": "undefined", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$undefined": true - } - }, - "gcp_objectId_rand_auto_id": { - "kms": "gcp", - "type": "objectId", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAH8Kt6coc8bPI4QIwS1tIdk6pPA05xlZvrOyAQgvoqaozMtWzG15OunQLDdS3yJ5WRiV7kO6CIKqRrvL2RykB5sw==", - "subType": "06" - } - } - }, - "gcp_objectId_rand_auto_altname": { - "kms": "gcp", - "type": "objectId", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAHU5Yzmz2mbgNQrGSvglgVuv14nQWzipBkZUVSO4eYZ7wLrj/9t0fnizsu7Isgg5oA9fV0Snh/A9pDnHZWoccXUw==", - "subType": "06" - } - } - }, - "gcp_objectId_rand_explicit_id": { - "kms": "gcp", - "type": "objectId", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAHsdq5/FLqbjMDiNzf+6k9yxUtFVjS/xSqErqaboOl21934pAzgkOzBGodpKKFuK0Ta4f3h21XS+84wlIYPMlTtw==", - "subType": "06" - } - } - }, - "gcp_objectId_rand_explicit_altname": { - "kms": "gcp", - "type": "objectId", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAHokIdXxNQ/NBMdMAVNxyVuz/J5pMMdtfxxJxr7PbsRJ3FoD2QNjTgE1Wsz0G4o09Wv9UWD+/mIqPVlLgx1sRtPw==", - "subType": "06" - } - } - }, - "gcp_objectId_det_auto_id": { - "kms": "gcp", - "type": "objectId", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAAHkcbaj3Hy3b4HkjRkMgiw5h6jBW7Sc56QSJmAPmVSc2T4B8d79A49dW0RyEiInZJcnVRjrYzUTRtgRaG4/FRd8g==", - "subType": "06" - } - } - }, - "gcp_objectId_det_explicit_id": { - "kms": "gcp", - "type": "objectId", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAAHkcbaj3Hy3b4HkjRkMgiw5h6jBW7Sc56QSJmAPmVSc2T4B8d79A49dW0RyEiInZJcnVRjrYzUTRtgRaG4/FRd8g==", - "subType": "06" - } - } - }, - "gcp_objectId_det_explicit_altname": { - "kms": "gcp", - "type": "objectId", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAAHkcbaj3Hy3b4HkjRkMgiw5h6jBW7Sc56QSJmAPmVSc2T4B8d79A49dW0RyEiInZJcnVRjrYzUTRtgRaG4/FRd8g==", - "subType": "06" - } - } - }, - "gcp_bool_rand_auto_id": { - "kms": "gcp", - "type": "bool", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAIf7vUYS5XFrEU4g03lzj9dk8a2MkaQdlH8nE/507D2Gm5XKQLi2jCENZ9UaQm3MQtVr4Uqrgz2GZiQHt9mXcG3w==", - "subType": "06" - } - } - }, - "gcp_bool_rand_auto_altname": { - "kms": "gcp", - "type": "bool", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAIdOC4Tx/TaVLRtOL/Qh8RUFIzHFB6nSegZoITwZeDethd8V3+R+aIAgzfN3pvmZzagHyVCm2nbNYJNdjOJhuDrg==", - "subType": "06" - } - } - }, - "gcp_bool_rand_explicit_id": { - "kms": "gcp", - "type": "bool", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAIzB14mX2vaZdiW9kGc+wYEgTCXA0FB5AVEyuERD00+K7U5Otlc6ZUwMtb9nGUu+M7PnnfxiDFHCrUWrTkAZzSUw==", - "subType": "06" - } - } - }, - "gcp_bool_rand_explicit_altname": { - "kms": "gcp", - "type": "bool", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAIhRLg79ACCMfeERBgG1wirirrZXZzbK11RxHkAbf14Fji2L3sdMBdLBU5I028+rmtDdC7khcNMt11V6XGKpAjnA==", - "subType": "06" - } - } - }, - "gcp_bool_det_explicit_id": { - "kms": "gcp", - "type": "bool", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": true - }, - "gcp_bool_det_explicit_altname": { - "kms": "gcp", - "type": "bool", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": true - }, - "gcp_date_rand_auto_id": { - "kms": "gcp", - "type": "date", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAJL+mjI8xBmSahOOi3XkGRGxjhGNdJb445KZtRAaUdCV0vMKbrefuiDHJDPCYo7mLYNhRSIhQfs63IFYMrlKP26A==", - "subType": "06" - } - } - }, - "gcp_date_rand_auto_altname": { - "kms": "gcp", - "type": "date", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAJbeyqO5FRmqvPYyOb0tdKtK6JOg8QKbCl37/iFeEm7N0T0Pjb8Io4U0ndB3O6fjokc3kDQrZcQkV+OFWIMuKFjw==", - "subType": "06" - } - } - }, - "gcp_date_rand_explicit_id": { - "kms": "gcp", - "type": "date", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAJVz3rSYIcoYtM0tZ8pB2Ytgh8RvYPeZvW7aUVJfZkZlIhfUHOHEf5kHqxzt8E1l2n3lmK/7ZVCFUuCCmr8cZyWw==", - "subType": "06" - } - } - }, - "gcp_date_rand_explicit_altname": { - "kms": "gcp", - "type": "date", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAJAiQqNyUcpuDEpFt7skp2NSHFCux2XObrIIFgXReYgtWoapL/n4zksJXl89PGavzNPBZbzgEa8uwwAe+S+Y6TLg==", - "subType": "06" - } - } - }, - "gcp_date_det_auto_id": { - "kms": "gcp", - "type": "date", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAAJmATV2A1P5DmrS8uES6AMD9y+EU3x7u4K4J0p296iSkCEgIdZZORhPIEnuJK3FHw1II6IEShW2nd7sOJRZSGKcg==", - "subType": "06" - } - } - }, - "gcp_date_det_explicit_id": { - "kms": "gcp", - "type": "date", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAAJmATV2A1P5DmrS8uES6AMD9y+EU3x7u4K4J0p296iSkCEgIdZZORhPIEnuJK3FHw1II6IEShW2nd7sOJRZSGKcg==", - "subType": "06" - } - } - }, - "gcp_date_det_explicit_altname": { - "kms": "gcp", - "type": "date", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAAJmATV2A1P5DmrS8uES6AMD9y+EU3x7u4K4J0p296iSkCEgIdZZORhPIEnuJK3FHw1II6IEShW2nd7sOJRZSGKcg==", - "subType": "06" - } - } - }, - "gcp_null_rand_explicit_id": { - "kms": "gcp", - "type": "null", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": null - }, - "gcp_null_rand_explicit_altname": { - "kms": "gcp", - "type": "null", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": null - }, - "gcp_null_det_explicit_id": { - "kms": "gcp", - "type": "null", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": null - }, - "gcp_null_det_explicit_altname": { - "kms": "gcp", - "type": "null", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": null - }, - "gcp_regex_rand_auto_id": { - "kms": "gcp", - "type": "regex", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAALiebb3hWwJRqlgVEhLYKKvo6cnlU7BFnZnvlZ8GuIr11fUvcnS9Tg2m7vPmfL7WVyuNrXlR48x28Es49YuaxuIg==", - "subType": "06" - } - } - }, - "gcp_regex_rand_auto_altname": { - "kms": "gcp", - "type": "regex", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAALouDFNLVgBXqhJvBRj9DKacuD1AQ2NAVDW93P9NpZDFFwGOFxmKUcklbPj8KkHqvma8ovVUBTLLUDR+tKFRvC2Q==", - "subType": "06" - } - } - }, - "gcp_regex_rand_explicit_id": { - "kms": "gcp", - "type": "regex", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAALtdcT9+3R1he4eniT+1opqs/YtujFlqzBXssv+hCKhJQVY/IXde32nNpQ1WTgUc7jfIJl/v9HvuA9cDHPtDWWTg==", - "subType": "06" - } - } - }, - "gcp_regex_rand_explicit_altname": { - "kms": "gcp", - "type": "regex", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAALAwlRAlj4Zpn+wu9eOcs5CsNgrkVwrgmu1tc4wyQp0Lt+3UcplYsXQMrMPcTx3yB0JcI4Kh65n/DrAaA+G/a6iw==", - "subType": "06" - } - } - }, - "gcp_regex_det_auto_id": { - "kms": "gcp", - "type": "regex", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAALbCutQ7D94gk0djewcQiEdMFVVa21+Dn5enQf/mqPi3o7vPy7OejDBk9fiZRffsioRMhlx2cxqa8T3+AkeN96yg==", - "subType": "06" - } - } - }, - "gcp_regex_det_explicit_id": { - "kms": "gcp", - "type": "regex", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAALbCutQ7D94gk0djewcQiEdMFVVa21+Dn5enQf/mqPi3o7vPy7OejDBk9fiZRffsioRMhlx2cxqa8T3+AkeN96yg==", - "subType": "06" - } - } - }, - "gcp_regex_det_explicit_altname": { - "kms": "gcp", - "type": "regex", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAALbCutQ7D94gk0djewcQiEdMFVVa21+Dn5enQf/mqPi3o7vPy7OejDBk9fiZRffsioRMhlx2cxqa8T3+AkeN96yg==", - "subType": "06" - } - } - }, - "gcp_dbPointer_rand_auto_id": { - "kms": "gcp", - "type": "dbPointer", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAMG8P+Y2YNIgknxE0/yPDCHASBvCU1IJwsEyaJPuOjn03enxEN7z/wbjVMN0lGUptDP3SVL+OIZtQ35VRP84MtnbdhcfZWqMhLjzrCjmtHUEg=", - "subType": "06" - } - } - }, - "gcp_dbPointer_rand_auto_altname": { - "kms": "gcp", - "type": "dbPointer", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAMKCLFUN6ApB5fSVEWazRddhKTEwgqI/mxfe0BBxht69pZQYhTjhOJP0YcIrtr+RCeHOa4FIJgQod1CFOellIzO5YH5CuV4wPxCAlOdbJcBK8=", - "subType": "06" - } - } - }, - "gcp_dbPointer_rand_explicit_id": { - "kms": "gcp", - "type": "dbPointer", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAM7ULEA6uKKv4Pu4Sa3aAt7dXtEwfQC98aJoLBapHT+xXtn5GWPynOZQNtV3lGaYExQjiGdYbzOcav3SVy/sYTe3ktgkQnuZfe0tk0zyvKIMM=", - "subType": "06" - } - } - }, - "gcp_dbPointer_rand_explicit_altname": { - "kms": "gcp", - "type": "dbPointer", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAMoMveHO1MadAKuT498xiKWWBUKRbH7k7P2YETDg/BufVw0swos07rk6WJa1vqyF61QEmACjy4pmlK/5P0VfKJBAIvif51YqHPQkobJVS3nVA=", - "subType": "06" - } - } - }, - "gcp_dbPointer_det_auto_id": { - "kms": "gcp", - "type": "dbPointer", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAAMz+9m1bE+Th9YeyPmJdtJPO0F5QYsGYtU/Eom/LSoYjDmTmV2ehkKx/cevIxJfZUc+Mvv/uGoeuubGl8tiX4l+f6yLrSIS6QBtIHYKXk+JNE=", - "subType": "06" - } - } - }, - "gcp_dbPointer_det_explicit_id": { - "kms": "gcp", - "type": "dbPointer", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAAMz+9m1bE+Th9YeyPmJdtJPO0F5QYsGYtU/Eom/LSoYjDmTmV2ehkKx/cevIxJfZUc+Mvv/uGoeuubGl8tiX4l+f6yLrSIS6QBtIHYKXk+JNE=", - "subType": "06" - } - } - }, - "gcp_dbPointer_det_explicit_altname": { - "kms": "gcp", - "type": "dbPointer", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAAMz+9m1bE+Th9YeyPmJdtJPO0F5QYsGYtU/Eom/LSoYjDmTmV2ehkKx/cevIxJfZUc+Mvv/uGoeuubGl8tiX4l+f6yLrSIS6QBtIHYKXk+JNE=", - "subType": "06" - } - } - }, - "gcp_javascript_rand_auto_id": { - "kms": "gcp", - "type": "javascript", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAANqBD0ITMn4BaFnDp7BX7vXbRBkFwmjQRVUeBbwsQtv5WVlJMAd/2+w7tyH8Wc44x0/9U/DA5GVhpTrtdDyPBI3w==", - "subType": "06" - } - } - }, - "gcp_javascript_rand_auto_altname": { - "kms": "gcp", - "type": "javascript", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAANtA0q4mbkAaKX4x1xk0/094Mln0wnh2bYnI6s6dh+l2WLDH7A9JMZxCl6kc4uOsEfbOvjP/PLIYtdMGs14EjM5A==", - "subType": "06" - } - } - }, - "gcp_javascript_rand_explicit_id": { - "kms": "gcp", - "type": "javascript", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAANfrW3pmeiFdBFt5tJS6Auq9Wo/J4r/vMRiueLWxig5S1zYuf9kFPJMK/nN9HqQPIcBIJIC2i/uEPgeepaNXACCw==", - "subType": "06" - } - } - }, - "gcp_javascript_rand_explicit_altname": { - "kms": "gcp", - "type": "javascript", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAANL7UZNzpwfwhRn/HflWIE9CSxGYNwLSo9d86HsOJ42rrZKq6HQqm/hiEAg0lyqCxVIVFxYEc2BUWSaq4/+SSyZw==", - "subType": "06" - } - } - }, - "gcp_javascript_det_auto_id": { - "kms": "gcp", - "type": "javascript", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAANB2d97R8nUJqnG0JPsWzyFe5pct5jvUljdkPnlZvLN1ZH+wSu4WmLfjri6IzzYP//f8tywn4Il+R4lZ0Kr/RAeA==", - "subType": "06" - } - } - }, - "gcp_javascript_det_explicit_id": { - "kms": "gcp", - "type": "javascript", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAANB2d97R8nUJqnG0JPsWzyFe5pct5jvUljdkPnlZvLN1ZH+wSu4WmLfjri6IzzYP//f8tywn4Il+R4lZ0Kr/RAeA==", - "subType": "06" - } - } - }, - "gcp_javascript_det_explicit_altname": { - "kms": "gcp", - "type": "javascript", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAANB2d97R8nUJqnG0JPsWzyFe5pct5jvUljdkPnlZvLN1ZH+wSu4WmLfjri6IzzYP//f8tywn4Il+R4lZ0Kr/RAeA==", - "subType": "06" - } - } - }, - "gcp_symbol_rand_auto_id": { - "kms": "gcp", - "type": "symbol", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAOsGdnr6EKcBdOAvYrP0o1pWbhhJbYsqfVwwwS1zq6ZkBayOss2J3TuYwBGXhJFlq3iIiWLdxGQ883XIvuAECnqUNuvpK2rOLwtDg8xJLiH24=", - "subType": "06" - } - } - }, - "gcp_symbol_rand_auto_altname": { - "kms": "gcp", - "type": "symbol", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAOpfa6CUSnJBvnWdd7pSZ2pXAbYm68Yka6xa/fuyhVx/Tc926/JpqmOmQtXqbOj8dZra0rQ3/yxHySwgD7s9Qr+xvyL7LvAguGkGmEV5H4Xz4=", - "subType": "06" - } - } - }, - "gcp_symbol_rand_explicit_id": { - "kms": "gcp", - "type": "symbol", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAO085iqYGFdtjiFWHcNqE0HuKMNHmk49DVh+pX8Pb4p3ehB57JL1nRqaXqHPqhFenxSEInT/te9HQRr+ADcHADvUGsScfm/n85v85nq6X+5y4=", - "subType": "06" - } - } - }, - "gcp_symbol_rand_explicit_altname": { - "kms": "gcp", - "type": "symbol", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAOiidb+2TsbAb2wc7MtDzb/UYsjgVNSw410Sz9pm+Uy7aZROE5SURKXdLjrCH2ZM2a+XCAl3o9yAoNgmAjEvYVxjmyzLK00EVjT42MBOrdA+k=", - "subType": "06" - } - } - }, - "gcp_symbol_det_auto_id": { - "kms": "gcp", - "type": "symbol", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAAOFBGo77joqvZl7QQMB9ebMsAI3uro8ILQTJsTUgAqNzSh1mNzqihGHZYe84xtgMrVxNuwcjkidkRbNnLXWLuarOx4tgmOLx5A5G1eYEe3s7Q=", - "subType": "06" - } - } - }, - "gcp_symbol_det_explicit_id": { - "kms": "gcp", - "type": "symbol", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAAOFBGo77joqvZl7QQMB9ebMsAI3uro8ILQTJsTUgAqNzSh1mNzqihGHZYe84xtgMrVxNuwcjkidkRbNnLXWLuarOx4tgmOLx5A5G1eYEe3s7Q=", - "subType": "06" - } - } - }, - "gcp_symbol_det_explicit_altname": { - "kms": "gcp", - "type": "symbol", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAAOFBGo77joqvZl7QQMB9ebMsAI3uro8ILQTJsTUgAqNzSh1mNzqihGHZYe84xtgMrVxNuwcjkidkRbNnLXWLuarOx4tgmOLx5A5G1eYEe3s7Q=", - "subType": "06" - } - } - }, - "gcp_javascriptWithScope_rand_auto_id": { - "kms": "gcp", - "type": "javascriptWithScope", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAPUsQHeXWhdmyfQ2Sq1ev1HMuMhBTc/FZFKO9tMMcI9qzjr+z4IdCOFCcx24/T/6NCsDpMiOGNnCdaBCCNRwNM0CTIkpHNLO+RSZORDgAsm9Q=", - "subType": "06" - } - } - }, - "gcp_javascriptWithScope_rand_auto_altname": { - "kms": "gcp", - "type": "javascriptWithScope", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAPRZawtuu0gErebyFqiQw0LxniWhdeujGzaqfAXriGo/2fU7PalzTlWQa8wsv0y7Q/i1K4JbQwCEFpJWLppmtZshCGbVWjpPljB2BH4NNrLPE=", - "subType": "06" - } - } - }, - "gcp_javascriptWithScope_rand_explicit_id": { - "kms": "gcp", - "type": "javascriptWithScope", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAP0qkQjuKmKIqdrsrR9djxt+1jFlEL7K9bP1oz7QWuY38dZJOoGwa6G1bP4wDzjsucJLCEgU2IY+t7BHraBFXvR/Aar8ID5eXcvJ7iOPIyqUw=", - "subType": "06" - } - } - }, - "gcp_javascriptWithScope_rand_explicit_altname": { - "kms": "gcp", - "type": "javascriptWithScope", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAP6L41iuBWGLg3hQZuhXp4MupTQvIT07+/+CRY292sC02mehk5BkuSOEVrehlvyvBJFKia4Bqd/UWvY8PnUPLqFKTLnokONWbAuh36y3gjStw=", - "subType": "06" - } - } - }, - "gcp_javascriptWithScope_det_explicit_id": { - "kms": "gcp", - "type": "javascriptWithScope", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "gcp_javascriptWithScope_det_explicit_altname": { - "kms": "gcp", - "type": "javascriptWithScope", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "gcp_int_rand_auto_id": { - "kms": "gcp", - "type": "int", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAQ+6oRKWMSvC+3UGrHSyGeVlR9bFnZtFTmYlUoGn04k6ndtCl8rsmBVUV6dMMYd7znnZtTSIGPI8q6jwf/NJjdIw==", - "subType": "06" - } - } - }, - "gcp_int_rand_auto_altname": { - "kms": "gcp", - "type": "int", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAQnz5jAbrrdutTPFA4m3MvlVJr3bpurTKY5xjwO5k8DZpeWTJzr+kVEJjG6M8/RgC/0UFNgBBrDbDhYa8PZHRijw==", - "subType": "06" - } - } - }, - "gcp_int_rand_explicit_id": { - "kms": "gcp", - "type": "int", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAQfRFoxUgjrv8up/eZ/fLlr/z++d/jFm30nYvKqsnQT7vkmmujJWc8yAtthR9OI6W5biBgAkounqRHhvatLZC6gA==", - "subType": "06" - } - } - }, - "gcp_int_rand_explicit_altname": { - "kms": "gcp", - "type": "int", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAQY/ePk59RY6vLejx9a5ITwkT9000KAubVSqMoQwv7lNXO+GKZfZoLHG6k1MA/IxTvl1Zbz1Tw1bTctmj0HPEGNA==", - "subType": "06" - } - } - }, - "gcp_int_det_auto_id": { - "kms": "gcp", - "type": "int", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAAQE9RVV9pOuysUUEGKq0u6ztFM0gTpoOHcHsTFQstA7+L9XTvxWEgL3RgNeq5KtKdODlxl62niV8dnQwlSoDSSWw==", - "subType": "06" - } - } - }, - "gcp_int_det_explicit_id": { - "kms": "gcp", - "type": "int", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAAQE9RVV9pOuysUUEGKq0u6ztFM0gTpoOHcHsTFQstA7+L9XTvxWEgL3RgNeq5KtKdODlxl62niV8dnQwlSoDSSWw==", - "subType": "06" - } - } - }, - "gcp_int_det_explicit_altname": { - "kms": "gcp", - "type": "int", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAAQE9RVV9pOuysUUEGKq0u6ztFM0gTpoOHcHsTFQstA7+L9XTvxWEgL3RgNeq5KtKdODlxl62niV8dnQwlSoDSSWw==", - "subType": "06" - } - } - }, - "gcp_timestamp_rand_auto_id": { - "kms": "gcp", - "type": "timestamp", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAARLnk1LpJIriKr6iiY1yBDGnfkRaHNwWcQyL+mORtYC4+AQ6oMv0qpGrJxS2QCbYY1tGmAISqZHCIExCG+TIv4bw==", - "subType": "06" - } - } - }, - "gcp_timestamp_rand_auto_altname": { - "kms": "gcp", - "type": "timestamp", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAARaqYXh9AVZI6gvRZrBwbprE5P3K5Qf4PIK1ca+mLRNOof0EExyAhtku7mYXusLeq0ww/tV6Zt1cA36KsT8a0Nog==", - "subType": "06" - } - } - }, - "gcp_timestamp_rand_explicit_id": { - "kms": "gcp", - "type": "timestamp", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAARLXzBjkCN8BpfXDIrb94kuZCD07Uo/DMBfMIWQtAb1++tTheUoY2ClQz33Luh4g8NXwuMJ7h8ufE70N2+b1yrUg==", - "subType": "06" - } - } - }, - "gcp_timestamp_rand_explicit_altname": { - "kms": "gcp", - "type": "timestamp", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAARe44QH9ZvTAuHsWhEMoue8eHod+cJpBm+Kl/Xtw7NI/6UTOOHC5Kkg20EvX3+GwXdAGk0bUSCFiTZb/yPox1OlA==", - "subType": "06" - } - } - }, - "gcp_timestamp_det_auto_id": { - "kms": "gcp", - "type": "timestamp", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAARzXjP6d6j/iQxiz1/TC/m+IfAGLFH9wY2ksS//i9x15QttlhcRrT3XmPvxaP5OjTHac4Gq3m2aXiJH56lETyl8A==", - "subType": "06" - } - } - }, - "gcp_timestamp_det_explicit_id": { - "kms": "gcp", - "type": "timestamp", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAARzXjP6d6j/iQxiz1/TC/m+IfAGLFH9wY2ksS//i9x15QttlhcRrT3XmPvxaP5OjTHac4Gq3m2aXiJH56lETyl8A==", - "subType": "06" - } - } - }, - "gcp_timestamp_det_explicit_altname": { - "kms": "gcp", - "type": "timestamp", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAARzXjP6d6j/iQxiz1/TC/m+IfAGLFH9wY2ksS//i9x15QttlhcRrT3XmPvxaP5OjTHac4Gq3m2aXiJH56lETyl8A==", - "subType": "06" - } - } - }, - "gcp_long_rand_auto_id": { - "kms": "gcp", - "type": "long", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAASuGZs48eEyVBJ9vvM6cvRySfuR0WM4kL7lx52rSGXBKtkZywyP5rJwNtRn9WTBMDqc1O/4jUgYXpqHx39SLhUPA==", - "subType": "06" - } - } - }, - "gcp_long_rand_auto_altname": { - "kms": "gcp", - "type": "long", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAS/62F71oKTX1GlvOP89uNhXpIyLZ5OdnuLeM/hvL5HWyOudSb06cG3+xnPg3QgppAYFK5X2PGgrEcrA87AykLPg==", - "subType": "06" - } - } - }, - "gcp_long_rand_explicit_id": { - "kms": "gcp", - "type": "long", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAASSgx+p4YzTvjZ+GCZCFHEKHNXJUSloPnLRHE4iJ515Epb8Tox7h8/aIAkB3ulnDS9BiT5UKdye2TWf8OBEwkXzg==", - "subType": "06" - } - } - }, - "gcp_long_rand_explicit_altname": { - "kms": "gcp", - "type": "long", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAAStqszyEfltpgd3aYeoyqaJX27OX861o06VhNX/N2fdSfKx0NQq/hWlWTkX6hK3hjCijiTtHmhFQR6QLkHD/6THw==", - "subType": "06" - } - } - }, - "gcp_long_det_auto_id": { - "kms": "gcp", - "type": "long", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAAS0wJHtZKnxJlWnlSu0xuq7bZR25UdwcbdCRSaXBC0EXEFuqlzrZSn1lcwKPKGZQO8EQ6SdQDqK95alMLmM8eQrQ==", - "subType": "06" - } - } - }, - "gcp_long_det_explicit_id": { - "kms": "gcp", - "type": "long", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAAS0wJHtZKnxJlWnlSu0xuq7bZR25UdwcbdCRSaXBC0EXEFuqlzrZSn1lcwKPKGZQO8EQ6SdQDqK95alMLmM8eQrQ==", - "subType": "06" - } - } - }, - "gcp_long_det_explicit_altname": { - "kms": "gcp", - "type": "long", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "ARgjwAAAAAAAAAAAAAAAAAAS0wJHtZKnxJlWnlSu0xuq7bZR25UdwcbdCRSaXBC0EXEFuqlzrZSn1lcwKPKGZQO8EQ6SdQDqK95alMLmM8eQrQ==", - "subType": "06" - } - } - }, - "gcp_decimal_rand_auto_id": { - "kms": "gcp", - "type": "decimal", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAATg4U3nbHBX/Az3ie2yurEIJO6cFryQWKiCpBbx1z0NF7RXd7kFC1XzaY6zcBjfl2AfRO8FFmgjTmFXb6gTRSSF0iAZJZTslfe3n6YFtwSKDI=", - "subType": "06" - } - } - }, - "gcp_decimal_rand_auto_altname": { - "kms": "gcp", - "type": "decimal", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAATdSSyp0ewboV5zI3T3TV/FOrdx0UQbFHhqcH+yqpotoWPSw5dxE+BEoihYLeaPKuVU/rUIY4TUv05Egj7Ovg62Kpk3cPscxsGtE/T2Ppbt6o=", - "subType": "06" - } - } - }, - "gcp_decimal_rand_explicit_id": { - "kms": "gcp", - "type": "decimal", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAATl7k20T22pf5Y9knVwIDyOIlbHyZBJqyi3Mai8APEZIYjpSKDKs8QNAH69CIjupyge8Izw4Cuch0bRrvMbp6YFfrUgk1JIQ4iLKkqqzHpBTY=", - "subType": "06" - } - } - }, - "gcp_decimal_rand_explicit_altname": { - "kms": "gcp", - "type": "decimal", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AhgjwAAAAAAAAAAAAAAAAAATF7YLkhkuLhXdxrQk2fJTs128tRNYHeodkqw7ha/TxW3Czr5gE272gnkdzfNoS7uu9XwOr1yjrC6y/8gHALAWn77WvGrAlBktLQbIIinsuds=", - "subType": "06" - } - } - }, - "gcp_decimal_det_explicit_id": { - "kms": "gcp", - "type": "decimal", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$numberDecimal": "1.234" - } - }, - "gcp_decimal_det_explicit_altname": { - "kms": "gcp", - "type": "decimal", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$numberDecimal": "1.234" - } - }, - "gcp_minKey_rand_explicit_id": { - "kms": "gcp", - "type": "minKey", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "gcp_minKey_rand_explicit_altname": { - "kms": "gcp", - "type": "minKey", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "gcp_minKey_det_explicit_id": { - "kms": "gcp", - "type": "minKey", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "gcp_minKey_det_explicit_altname": { - "kms": "gcp", - "type": "minKey", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "gcp_maxKey_rand_explicit_id": { - "kms": "gcp", - "type": "maxKey", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "gcp_maxKey_rand_explicit_altname": { - "kms": "gcp", - "type": "maxKey", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "gcp_maxKey_det_explicit_id": { - "kms": "gcp", - "type": "maxKey", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "gcp_maxKey_det_explicit_altname": { - "kms": "gcp", - "type": "maxKey", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$maxKey": 1 - } - } -} \ No newline at end of file diff --git a/testdata/client-side-encryption-prose/corpus-key-aws.json b/testdata/client-side-encryption-prose/corpus-key-aws.json deleted file mode 100644 index eca6cf912e..0000000000 --- a/testdata/client-side-encryption-prose/corpus-key-aws.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "status": { - "$numberInt": "1" - }, - "_id": { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - }, - "masterKey": { - "region": "us-east-1", - "key": "arn:aws:kms:us-east-1:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0", - "provider": "aws" - }, - "updateDate": { - "$date": { - "$numberLong": "1557827033449" - } - }, - "keyMaterial": { - "$binary": { - "base64": "AQICAHhQNmWG2CzOm1dq3kWLM+iDUZhEqnhJwH9wZVpuZ94A8gEqnsxXlR51T5EbEVezUqqKAAAAwjCBvwYJKoZIhvcNAQcGoIGxMIGuAgEAMIGoBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDHa4jo6yp0Z18KgbUgIBEIB74sKxWtV8/YHje5lv5THTl0HIbhSwM6EqRlmBiFFatmEWaeMk4tO4xBX65eq670I5TWPSLMzpp8ncGHMmvHqRajNBnmFtbYxN3E3/WjxmdbOOe+OXpnGJPcGsftc7cB2shRfA4lICPnE26+oVNXT6p0Lo20nY5XC7jyCO", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1557827033449" - } - }, - "keyAltNames": ["aws"] -} \ No newline at end of file diff --git a/testdata/client-side-encryption-prose/corpus-key-azure.json b/testdata/client-side-encryption-prose/corpus-key-azure.json deleted file mode 100644 index 31a564edb8..0000000000 --- a/testdata/client-side-encryption-prose/corpus-key-azure.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "_id": { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "n+HWZ0ZSVOYA3cvQgP7inN4JSXfOH85IngmeQxRpQHjCCcqT3IFqEWNlrsVHiz3AELimHhX4HKqOLWMUeSIT6emUDDoQX9BAv8DR1+E1w4nGs/NyEneac78EYFkK3JysrFDOgl2ypCCTKAypkn9CkAx1if4cfgQE93LW4kczcyHdGiH36CIxrCDGv1UzAvERN5Qa47DVwsM6a+hWsF2AAAJVnF0wYLLJU07TuRHdMrrphPWXZsFgyV+lRqJ7DDpReKNO8nMPLV/mHqHBHGPGQiRdb9NoJo8CvokGz4+KE8oLwzKf6V24dtwZmRkrsDV4iOhvROAzz+Euo1ypSkL3mw==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1601573901680" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1601573901680" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "azure", - "keyVaultEndpoint": "key-vault-csfle.vault.azure.net", - "keyName": "key-name-csfle" - }, - "keyAltNames": ["azure"] -} \ No newline at end of file diff --git a/testdata/client-side-encryption-prose/corpus-key-gcp.json b/testdata/client-side-encryption-prose/corpus-key-gcp.json deleted file mode 100644 index 79d6999b08..0000000000 --- a/testdata/client-side-encryption-prose/corpus-key-gcp.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "_id": { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "CiQAIgLj0WyktnB4dfYHo5SLZ41K4ASQrjJUaSzl5vvVH0G12G0SiQEAjlV8XPlbnHDEDFbdTO4QIe8ER2/172U1ouLazG0ysDtFFIlSvWX5ZnZUrRMmp/R2aJkzLXEt/zf8Mn4Lfm+itnjgo5R9K4pmPNvvPKNZX5C16lrPT+aA+rd+zXFSmlMg3i5jnxvTdLHhg3G7Q/Uv1ZIJskKt95bzLoe0tUVzRWMYXLIEcohnQg==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1601574333107" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1601574333107" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "gcp", - "projectId": "devprod-drivers", - "location": "global", - "keyRing": "key-ring-csfle", - "keyName": "key-name-csfle" - }, - "keyAltNames": ["gcp"] -} \ No newline at end of file diff --git a/testdata/client-side-encryption-prose/corpus-key-kmip.json b/testdata/client-side-encryption-prose/corpus-key-kmip.json deleted file mode 100644 index 7c7069700e..0000000000 --- a/testdata/client-side-encryption-prose/corpus-key-kmip.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "_id": { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "eUYDyB0HuWb+lQgUwO+6qJQyTTDTY2gp9FbemL7ZFo0pvr0x6rm6Ff9OVUTGH6HyMKipaeHdiIJU1dzsLwvqKvi7Beh+U4iaIWX/K0oEg1GOsJc0+Z/in8gNHbGUYLmycHViM3LES3kdt7FdFSUl5rEBHrM71yoNEXImz17QJWMGOuT4x6yoi2pvnaRJwfrI4DjpmnnTrDMac92jgZehbg==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1634220190041" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1634220190041" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "kmip", - "keyId": "1" - }, - "keyAltNames": ["kmip"] -} \ No newline at end of file diff --git a/testdata/client-side-encryption-prose/corpus-key-local.json b/testdata/client-side-encryption-prose/corpus-key-local.json deleted file mode 100644 index b3fe0723b0..0000000000 --- a/testdata/client-side-encryption-prose/corpus-key-local.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "status": { - "$numberInt": "1" - }, - "_id": { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - }, - "masterKey": { - "provider": "local" - }, - "updateDate": { - "$date": { - "$numberLong": "1557827033449" - } - }, - "keyMaterial": { - "$binary": { - "base64": "Ce9HSz/HKKGkIt4uyy+jDuKGA+rLC2cycykMo6vc8jXxqa1UVDYHWq1r+vZKbnnSRBfB981akzRKZCFpC05CTyFqDhXv6OnMjpG97OZEREGIsHEYiJkBW0jJJvfLLgeLsEpBzsro9FztGGXASxyxFRZFhXvHxyiLOKrdWfs7X1O/iK3pEoHMx6uSNSfUOgbebLfIqW7TO++iQS5g1xovXA==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1557827033449" - } - }, - "keyAltNames": [ "local" ] -} \ No newline at end of file diff --git a/testdata/client-side-encryption-prose/corpus-schema.json b/testdata/client-side-encryption-prose/corpus-schema.json deleted file mode 100644 index e74bc914f5..0000000000 --- a/testdata/client-side-encryption-prose/corpus-schema.json +++ /dev/null @@ -1,6335 +0,0 @@ -{ - "bsonType": "object", - "properties": { - "aws_double_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "double" - } - } - } - }, - "aws_double_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_aws", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "double" - } - } - } - }, - "aws_double_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_double_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_string_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "string" - } - } - } - }, - "aws_string_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_aws", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "string" - } - } - } - }, - "aws_string_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_string_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_string_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "string" - } - } - } - }, - "aws_string_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_string_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_object_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "object" - } - } - } - }, - "aws_object_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_aws", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "object" - } - } - } - }, - "aws_object_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_object_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_array_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "array" - } - } - } - }, - "aws_array_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_aws", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "array" - } - } - } - }, - "aws_array_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_array_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_binData=00_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "binData" - } - } - } - }, - "aws_binData=00_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_aws", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "binData" - } - } - } - }, - "aws_binData=00_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_binData=00_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_binData=00_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "binData" - } - } - } - }, - "aws_binData=00_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_binData=00_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_binData=04_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "binData" - } - } - } - }, - "aws_binData=04_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_aws", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "binData" - } - } - } - }, - "aws_binData=04_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_binData=04_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_binData=04_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "binData" - } - } - } - }, - "aws_binData=04_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_binData=04_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_objectId_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "objectId" - } - } - } - }, - "aws_objectId_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_aws", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "objectId" - } - } - } - }, - "aws_objectId_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_objectId_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_objectId_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "objectId" - } - } - } - }, - "aws_objectId_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_objectId_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_bool_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "bool" - } - } - } - }, - "aws_bool_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_aws", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "bool" - } - } - } - }, - "aws_bool_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_bool_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_date_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "date" - } - } - } - }, - "aws_date_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_aws", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "date" - } - } - } - }, - "aws_date_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_date_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_date_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "date" - } - } - } - }, - "aws_date_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_date_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_regex_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "regex" - } - } - } - }, - "aws_regex_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_aws", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "regex" - } - } - } - }, - "aws_regex_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_regex_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_regex_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "regex" - } - } - } - }, - "aws_regex_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_regex_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_dbPointer_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "dbPointer" - } - } - } - }, - "aws_dbPointer_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_aws", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "dbPointer" - } - } - } - }, - "aws_dbPointer_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_dbPointer_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_dbPointer_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "dbPointer" - } - } - } - }, - "aws_dbPointer_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_dbPointer_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_javascript_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "javascript" - } - } - } - }, - "aws_javascript_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_aws", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "javascript" - } - } - } - }, - "aws_javascript_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_javascript_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_javascript_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "javascript" - } - } - } - }, - "aws_javascript_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_javascript_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_symbol_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "symbol" - } - } - } - }, - "aws_symbol_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_aws", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "symbol" - } - } - } - }, - "aws_symbol_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_symbol_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_symbol_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "symbol" - } - } - } - }, - "aws_symbol_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_symbol_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_javascriptWithScope_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "javascriptWithScope" - } - } - } - }, - "aws_javascriptWithScope_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_aws", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "javascriptWithScope" - } - } - } - }, - "aws_javascriptWithScope_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_javascriptWithScope_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_int_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "int" - } - } - } - }, - "aws_int_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_aws", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "int" - } - } - } - }, - "aws_int_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_int_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_int_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "int" - } - } - } - }, - "aws_int_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_int_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_timestamp_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "timestamp" - } - } - } - }, - "aws_timestamp_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_aws", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "timestamp" - } - } - } - }, - "aws_timestamp_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_timestamp_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_timestamp_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "timestamp" - } - } - } - }, - "aws_timestamp_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_timestamp_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_long_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "long" - } - } - } - }, - "aws_long_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_aws", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "long" - } - } - } - }, - "aws_long_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_long_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_long_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "long" - } - } - } - }, - "aws_long_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_long_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_decimal_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AWSAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "decimal" - } - } - } - }, - "aws_decimal_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_aws", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "decimal" - } - } - } - }, - "aws_decimal_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "aws_decimal_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_double_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "double" - } - } - } - }, - "local_double_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_local", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "double" - } - } - } - }, - "local_double_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_double_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_string_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "string" - } - } - } - }, - "local_string_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_local", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "string" - } - } - } - }, - "local_string_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_string_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_string_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "string" - } - } - } - }, - "local_string_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_string_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_object_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "object" - } - } - } - }, - "local_object_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_local", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "object" - } - } - } - }, - "local_object_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_object_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_array_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "array" - } - } - } - }, - "local_array_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_local", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "array" - } - } - } - }, - "local_array_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_array_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_binData=00_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "binData" - } - } - } - }, - "local_binData=00_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_local", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "binData" - } - } - } - }, - "local_binData=00_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_binData=00_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_binData=00_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "binData" - } - } - } - }, - "local_binData=00_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_binData=00_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_binData=04_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "binData" - } - } - } - }, - "local_binData=04_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_local", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "binData" - } - } - } - }, - "local_binData=04_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_binData=04_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_binData=04_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "binData" - } - } - } - }, - "local_binData=04_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_binData=04_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_objectId_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "objectId" - } - } - } - }, - "local_objectId_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_local", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "objectId" - } - } - } - }, - "local_objectId_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_objectId_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_objectId_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "objectId" - } - } - } - }, - "local_objectId_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_objectId_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_bool_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "bool" - } - } - } - }, - "local_bool_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_local", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "bool" - } - } - } - }, - "local_bool_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_bool_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_date_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "date" - } - } - } - }, - "local_date_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_local", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "date" - } - } - } - }, - "local_date_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_date_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_date_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "date" - } - } - } - }, - "local_date_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_date_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_regex_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "regex" - } - } - } - }, - "local_regex_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_local", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "regex" - } - } - } - }, - "local_regex_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_regex_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_regex_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "regex" - } - } - } - }, - "local_regex_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_regex_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_dbPointer_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "dbPointer" - } - } - } - }, - "local_dbPointer_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_local", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "dbPointer" - } - } - } - }, - "local_dbPointer_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_dbPointer_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_dbPointer_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "dbPointer" - } - } - } - }, - "local_dbPointer_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_dbPointer_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_javascript_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "javascript" - } - } - } - }, - "local_javascript_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_local", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "javascript" - } - } - } - }, - "local_javascript_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_javascript_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_javascript_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "javascript" - } - } - } - }, - "local_javascript_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_javascript_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_symbol_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "symbol" - } - } - } - }, - "local_symbol_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_local", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "symbol" - } - } - } - }, - "local_symbol_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_symbol_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_symbol_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "symbol" - } - } - } - }, - "local_symbol_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_symbol_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_javascriptWithScope_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "javascriptWithScope" - } - } - } - }, - "local_javascriptWithScope_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_local", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "javascriptWithScope" - } - } - } - }, - "local_javascriptWithScope_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_javascriptWithScope_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_int_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "int" - } - } - } - }, - "local_int_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_local", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "int" - } - } - } - }, - "local_int_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_int_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_int_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "int" - } - } - } - }, - "local_int_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_int_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_timestamp_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "timestamp" - } - } - } - }, - "local_timestamp_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_local", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "timestamp" - } - } - } - }, - "local_timestamp_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_timestamp_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_timestamp_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "timestamp" - } - } - } - }, - "local_timestamp_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_timestamp_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_long_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "long" - } - } - } - }, - "local_long_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_local", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "long" - } - } - } - }, - "local_long_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_long_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_long_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "long" - } - } - } - }, - "local_long_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_long_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_decimal_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "decimal" - } - } - } - }, - "local_decimal_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_local", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "decimal" - } - } - } - }, - "local_decimal_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "local_decimal_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_double_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "double" - } - } - } - }, - "azure_double_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_azure", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "double" - } - } - } - }, - "azure_double_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_double_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_string_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "string" - } - } - } - }, - "azure_string_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_azure", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "string" - } - } - } - }, - "azure_string_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_string_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_string_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "string" - } - } - } - }, - "azure_string_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_string_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_object_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "object" - } - } - } - }, - "azure_object_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_azure", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "object" - } - } - } - }, - "azure_object_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_object_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_array_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "array" - } - } - } - }, - "azure_array_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_azure", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "array" - } - } - } - }, - "azure_array_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_array_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_binData=00_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "binData" - } - } - } - }, - "azure_binData=00_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_azure", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "binData" - } - } - } - }, - "azure_binData=00_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_binData=00_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_binData=00_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "binData" - } - } - } - }, - "azure_binData=00_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_binData=00_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_binData=04_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "binData" - } - } - } - }, - "azure_binData=04_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_azure", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "binData" - } - } - } - }, - "azure_binData=04_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_binData=04_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_binData=04_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "binData" - } - } - } - }, - "azure_binData=04_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_binData=04_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_objectId_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "objectId" - } - } - } - }, - "azure_objectId_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_azure", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "objectId" - } - } - } - }, - "azure_objectId_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_objectId_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_objectId_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "objectId" - } - } - } - }, - "azure_objectId_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_objectId_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_bool_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "bool" - } - } - } - }, - "azure_bool_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_azure", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "bool" - } - } - } - }, - "azure_bool_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_bool_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_date_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "date" - } - } - } - }, - "azure_date_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_azure", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "date" - } - } - } - }, - "azure_date_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_date_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_date_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "date" - } - } - } - }, - "azure_date_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_date_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_regex_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "regex" - } - } - } - }, - "azure_regex_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_azure", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "regex" - } - } - } - }, - "azure_regex_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_regex_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_regex_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "regex" - } - } - } - }, - "azure_regex_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_regex_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_dbPointer_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "dbPointer" - } - } - } - }, - "azure_dbPointer_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_azure", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "dbPointer" - } - } - } - }, - "azure_dbPointer_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_dbPointer_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_dbPointer_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "dbPointer" - } - } - } - }, - "azure_dbPointer_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_dbPointer_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_javascript_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "javascript" - } - } - } - }, - "azure_javascript_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_azure", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "javascript" - } - } - } - }, - "azure_javascript_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_javascript_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_javascript_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "javascript" - } - } - } - }, - "azure_javascript_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_javascript_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_symbol_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "symbol" - } - } - } - }, - "azure_symbol_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_azure", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "symbol" - } - } - } - }, - "azure_symbol_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_symbol_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_symbol_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "symbol" - } - } - } - }, - "azure_symbol_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_symbol_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_javascriptWithScope_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "javascriptWithScope" - } - } - } - }, - "azure_javascriptWithScope_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_azure", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "javascriptWithScope" - } - } - } - }, - "azure_javascriptWithScope_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_javascriptWithScope_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_int_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "int" - } - } - } - }, - "azure_int_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_azure", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "int" - } - } - } - }, - "azure_int_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_int_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_int_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "int" - } - } - } - }, - "azure_int_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_int_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_timestamp_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "timestamp" - } - } - } - }, - "azure_timestamp_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_azure", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "timestamp" - } - } - } - }, - "azure_timestamp_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_timestamp_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_timestamp_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "timestamp" - } - } - } - }, - "azure_timestamp_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_timestamp_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_long_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "long" - } - } - } - }, - "azure_long_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_azure", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "long" - } - } - } - }, - "azure_long_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_long_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_long_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "long" - } - } - } - }, - "azure_long_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_long_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_decimal_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZUREAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "decimal" - } - } - } - }, - "azure_decimal_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_azure", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "decimal" - } - } - } - }, - "azure_decimal_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "azure_decimal_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_double_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "double" - } - } - } - }, - "gcp_double_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_gcp", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "double" - } - } - } - }, - "gcp_double_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_double_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_string_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "string" - } - } - } - }, - "gcp_string_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_gcp", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "string" - } - } - } - }, - "gcp_string_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_string_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_string_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "string" - } - } - } - }, - "gcp_string_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_string_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_object_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "object" - } - } - } - }, - "gcp_object_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_gcp", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "object" - } - } - } - }, - "gcp_object_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_object_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_array_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "array" - } - } - } - }, - "gcp_array_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_gcp", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "array" - } - } - } - }, - "gcp_array_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_array_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_binData=00_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "binData" - } - } - } - }, - "gcp_binData=00_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_gcp", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "binData" - } - } - } - }, - "gcp_binData=00_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_binData=00_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_binData=00_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "binData" - } - } - } - }, - "gcp_binData=00_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_binData=00_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_binData=04_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "binData" - } - } - } - }, - "gcp_binData=04_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_gcp", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "binData" - } - } - } - }, - "gcp_binData=04_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_binData=04_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_binData=04_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "binData" - } - } - } - }, - "gcp_binData=04_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_binData=04_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_objectId_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "objectId" - } - } - } - }, - "gcp_objectId_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_gcp", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "objectId" - } - } - } - }, - "gcp_objectId_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_objectId_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_objectId_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "objectId" - } - } - } - }, - "gcp_objectId_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_objectId_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_bool_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "bool" - } - } - } - }, - "gcp_bool_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_gcp", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "bool" - } - } - } - }, - "gcp_bool_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_bool_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_date_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "date" - } - } - } - }, - "gcp_date_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_gcp", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "date" - } - } - } - }, - "gcp_date_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_date_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_date_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "date" - } - } - } - }, - "gcp_date_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_date_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_regex_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "regex" - } - } - } - }, - "gcp_regex_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_gcp", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "regex" - } - } - } - }, - "gcp_regex_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_regex_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_regex_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "regex" - } - } - } - }, - "gcp_regex_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_regex_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_dbPointer_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "dbPointer" - } - } - } - }, - "gcp_dbPointer_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_gcp", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "dbPointer" - } - } - } - }, - "gcp_dbPointer_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_dbPointer_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_dbPointer_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "dbPointer" - } - } - } - }, - "gcp_dbPointer_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_dbPointer_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_javascript_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "javascript" - } - } - } - }, - "gcp_javascript_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_gcp", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "javascript" - } - } - } - }, - "gcp_javascript_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_javascript_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_javascript_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "javascript" - } - } - } - }, - "gcp_javascript_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_javascript_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_symbol_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "symbol" - } - } - } - }, - "gcp_symbol_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_gcp", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "symbol" - } - } - } - }, - "gcp_symbol_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_symbol_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_symbol_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "symbol" - } - } - } - }, - "gcp_symbol_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_symbol_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_javascriptWithScope_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "javascriptWithScope" - } - } - } - }, - "gcp_javascriptWithScope_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_gcp", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "javascriptWithScope" - } - } - } - }, - "gcp_javascriptWithScope_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_javascriptWithScope_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_int_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "int" - } - } - } - }, - "gcp_int_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_gcp", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "int" - } - } - } - }, - "gcp_int_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_int_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_int_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "int" - } - } - } - }, - "gcp_int_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_int_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_timestamp_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "timestamp" - } - } - } - }, - "gcp_timestamp_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_gcp", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "timestamp" - } - } - } - }, - "gcp_timestamp_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_timestamp_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_timestamp_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "timestamp" - } - } - } - }, - "gcp_timestamp_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_timestamp_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_long_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "long" - } - } - } - }, - "gcp_long_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_gcp", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "long" - } - } - } - }, - "gcp_long_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_long_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_long_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "long" - } - } - } - }, - "gcp_long_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_long_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_decimal_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCPAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "decimal" - } - } - } - }, - "gcp_decimal_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_gcp", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "decimal" - } - } - } - }, - "gcp_decimal_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "gcp_decimal_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_double_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "double" - } - } - } - }, - "kmip_double_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_kmip", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "double" - } - } - } - }, - "kmip_double_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_double_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_string_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "string" - } - } - } - }, - "kmip_string_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_kmip", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "string" - } - } - } - }, - "kmip_string_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_string_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_string_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "string" - } - } - } - }, - "kmip_string_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_string_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_object_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "object" - } - } - } - }, - "kmip_object_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_kmip", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "object" - } - } - } - }, - "kmip_object_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_object_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_array_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "array" - } - } - } - }, - "kmip_array_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_kmip", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "array" - } - } - } - }, - "kmip_array_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_array_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_binData=00_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "binData" - } - } - } - }, - "kmip_binData=00_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_kmip", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "binData" - } - } - } - }, - "kmip_binData=00_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_binData=00_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_binData=00_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "binData" - } - } - } - }, - "kmip_binData=00_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_binData=00_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_binData=04_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "binData" - } - } - } - }, - "kmip_binData=04_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_kmip", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "binData" - } - } - } - }, - "kmip_binData=04_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_binData=04_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_binData=04_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "binData" - } - } - } - }, - "kmip_binData=04_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_binData=04_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_objectId_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "objectId" - } - } - } - }, - "kmip_objectId_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_kmip", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "objectId" - } - } - } - }, - "kmip_objectId_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_objectId_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_objectId_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "objectId" - } - } - } - }, - "kmip_objectId_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_objectId_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_bool_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "bool" - } - } - } - }, - "kmip_bool_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_kmip", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "bool" - } - } - } - }, - "kmip_bool_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_bool_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_date_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "date" - } - } - } - }, - "kmip_date_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_kmip", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "date" - } - } - } - }, - "kmip_date_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_date_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_date_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "date" - } - } - } - }, - "kmip_date_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_date_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_regex_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "regex" - } - } - } - }, - "kmip_regex_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_kmip", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "regex" - } - } - } - }, - "kmip_regex_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_regex_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_regex_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "regex" - } - } - } - }, - "kmip_regex_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_regex_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_dbPointer_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "dbPointer" - } - } - } - }, - "kmip_dbPointer_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_kmip", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "dbPointer" - } - } - } - }, - "kmip_dbPointer_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_dbPointer_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_dbPointer_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "dbPointer" - } - } - } - }, - "kmip_dbPointer_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_dbPointer_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_javascript_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "javascript" - } - } - } - }, - "kmip_javascript_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_kmip", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "javascript" - } - } - } - }, - "kmip_javascript_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_javascript_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_javascript_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "javascript" - } - } - } - }, - "kmip_javascript_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_javascript_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_symbol_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "symbol" - } - } - } - }, - "kmip_symbol_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_kmip", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "symbol" - } - } - } - }, - "kmip_symbol_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_symbol_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_symbol_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "symbol" - } - } - } - }, - "kmip_symbol_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_symbol_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_javascriptWithScope_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "javascriptWithScope" - } - } - } - }, - "kmip_javascriptWithScope_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_kmip", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "javascriptWithScope" - } - } - } - }, - "kmip_javascriptWithScope_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_javascriptWithScope_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_int_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "int" - } - } - } - }, - "kmip_int_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_kmip", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "int" - } - } - } - }, - "kmip_int_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_int_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_int_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "int" - } - } - } - }, - "kmip_int_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_int_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_timestamp_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "timestamp" - } - } - } - }, - "kmip_timestamp_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_kmip", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "timestamp" - } - } - } - }, - "kmip_timestamp_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_timestamp_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_timestamp_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "timestamp" - } - } - } - }, - "kmip_timestamp_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_timestamp_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_long_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "long" - } - } - } - }, - "kmip_long_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_kmip", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "long" - } - } - } - }, - "kmip_long_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_long_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_long_det_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", - "bsonType": "long" - } - } - } - }, - "kmip_long_det_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_long_det_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_decimal_rand_auto_id": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "KMIPAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "decimal" - } - } - } - }, - "kmip_decimal_rand_auto_altname": { - "bsonType": "object", - "properties": { - "value": { - "encrypt": { - "keyId": "/altname_kmip", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random", - "bsonType": "decimal" - } - } - } - }, - "kmip_decimal_rand_explicit_id": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - }, - "kmip_decimal_rand_explicit_altname": { - "bsonType": "object", - "properties": { - "value": { - "bsonType": "binData" - } - } - } - } -} \ No newline at end of file diff --git a/testdata/client-side-encryption-prose/corpus.json b/testdata/client-side-encryption-prose/corpus.json deleted file mode 100644 index 559711b347..0000000000 --- a/testdata/client-side-encryption-prose/corpus.json +++ /dev/null @@ -1,8619 +0,0 @@ -{ - "_id": "client_side_encryption_corpus", - "altname_aws": "aws", - "altname_local": "local", - "altname_azure": "azure", - "altname_gcp": "gcp", - "altname_kmip": "kmip", - "aws_double_rand_auto_id": { - "kms": "aws", - "type": "double", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberDouble": "1.234" - } - }, - "aws_double_rand_auto_altname": { - "kms": "aws", - "type": "double", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$numberDouble": "1.234" - } - }, - "aws_double_rand_explicit_id": { - "kms": "aws", - "type": "double", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberDouble": "1.234" - } - }, - "aws_double_rand_explicit_altname": { - "kms": "aws", - "type": "double", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberDouble": "1.234" - } - }, - "aws_double_det_explicit_id": { - "kms": "aws", - "type": "double", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$numberDouble": "1.234" - } - }, - "aws_double_det_explicit_altname": { - "kms": "aws", - "type": "double", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$numberDouble": "1.234" - } - }, - "aws_string_rand_auto_id": { - "kms": "aws", - "type": "string", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": "mongodb" - }, - "aws_string_rand_auto_altname": { - "kms": "aws", - "type": "string", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": "mongodb" - }, - "aws_string_rand_explicit_id": { - "kms": "aws", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "mongodb" - }, - "aws_string_rand_explicit_altname": { - "kms": "aws", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": "mongodb" - }, - "aws_string_det_auto_id": { - "kms": "aws", - "type": "string", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": "mongodb" - }, - "aws_string_det_explicit_id": { - "kms": "aws", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "mongodb" - }, - "aws_string_det_explicit_altname": { - "kms": "aws", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": "mongodb" - }, - "aws_object_rand_auto_id": { - "kms": "aws", - "type": "object", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "aws_object_rand_auto_altname": { - "kms": "aws", - "type": "object", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "aws_object_rand_explicit_id": { - "kms": "aws", - "type": "object", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "aws_object_rand_explicit_altname": { - "kms": "aws", - "type": "object", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "aws_object_det_explicit_id": { - "kms": "aws", - "type": "object", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "aws_object_det_explicit_altname": { - "kms": "aws", - "type": "object", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "aws_array_rand_auto_id": { - "kms": "aws", - "type": "array", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "aws_array_rand_auto_altname": { - "kms": "aws", - "type": "array", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "aws_array_rand_explicit_id": { - "kms": "aws", - "type": "array", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "aws_array_rand_explicit_altname": { - "kms": "aws", - "type": "array", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "aws_array_det_explicit_id": { - "kms": "aws", - "type": "array", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "aws_array_det_explicit_altname": { - "kms": "aws", - "type": "array", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "aws_binData=00_rand_auto_id": { - "kms": "aws", - "type": "binData=00", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "aws_binData=00_rand_auto_altname": { - "kms": "aws", - "type": "binData=00", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "aws_binData=00_rand_explicit_id": { - "kms": "aws", - "type": "binData=00", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "aws_binData=00_rand_explicit_altname": { - "kms": "aws", - "type": "binData=00", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "aws_binData=00_det_auto_id": { - "kms": "aws", - "type": "binData=00", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "aws_binData=00_det_explicit_id": { - "kms": "aws", - "type": "binData=00", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "aws_binData=00_det_explicit_altname": { - "kms": "aws", - "type": "binData=00", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "aws_binData=04_rand_auto_id": { - "kms": "aws", - "type": "binData=04", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "aws_binData=04_rand_auto_altname": { - "kms": "aws", - "type": "binData=04", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "aws_binData=04_rand_explicit_id": { - "kms": "aws", - "type": "binData=04", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "aws_binData=04_rand_explicit_altname": { - "kms": "aws", - "type": "binData=04", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "aws_binData=04_det_auto_id": { - "kms": "aws", - "type": "binData=04", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "aws_binData=04_det_explicit_id": { - "kms": "aws", - "type": "binData=04", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "aws_binData=04_det_explicit_altname": { - "kms": "aws", - "type": "binData=04", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "aws_undefined_rand_explicit_id": { - "kms": "aws", - "type": "undefined", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$undefined": true - } - }, - "aws_undefined_rand_explicit_altname": { - "kms": "aws", - "type": "undefined", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$undefined": true - } - }, - "aws_undefined_det_explicit_id": { - "kms": "aws", - "type": "undefined", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$undefined": true - } - }, - "aws_undefined_det_explicit_altname": { - "kms": "aws", - "type": "undefined", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$undefined": true - } - }, - "aws_objectId_rand_auto_id": { - "kms": "aws", - "type": "objectId", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "aws_objectId_rand_auto_altname": { - "kms": "aws", - "type": "objectId", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "aws_objectId_rand_explicit_id": { - "kms": "aws", - "type": "objectId", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "aws_objectId_rand_explicit_altname": { - "kms": "aws", - "type": "objectId", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "aws_objectId_det_auto_id": { - "kms": "aws", - "type": "objectId", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "aws_objectId_det_explicit_id": { - "kms": "aws", - "type": "objectId", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "aws_objectId_det_explicit_altname": { - "kms": "aws", - "type": "objectId", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "aws_bool_rand_auto_id": { - "kms": "aws", - "type": "bool", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": true - }, - "aws_bool_rand_auto_altname": { - "kms": "aws", - "type": "bool", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": true - }, - "aws_bool_rand_explicit_id": { - "kms": "aws", - "type": "bool", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": true - }, - "aws_bool_rand_explicit_altname": { - "kms": "aws", - "type": "bool", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": true - }, - "aws_bool_det_explicit_id": { - "kms": "aws", - "type": "bool", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": true - }, - "aws_bool_det_explicit_altname": { - "kms": "aws", - "type": "bool", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": true - }, - "aws_date_rand_auto_id": { - "kms": "aws", - "type": "date", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "aws_date_rand_auto_altname": { - "kms": "aws", - "type": "date", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "aws_date_rand_explicit_id": { - "kms": "aws", - "type": "date", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "aws_date_rand_explicit_altname": { - "kms": "aws", - "type": "date", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "aws_date_det_auto_id": { - "kms": "aws", - "type": "date", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "aws_date_det_explicit_id": { - "kms": "aws", - "type": "date", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "aws_date_det_explicit_altname": { - "kms": "aws", - "type": "date", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "aws_null_rand_explicit_id": { - "kms": "aws", - "type": "null", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": null - }, - "aws_null_rand_explicit_altname": { - "kms": "aws", - "type": "null", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": null - }, - "aws_null_det_explicit_id": { - "kms": "aws", - "type": "null", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": null - }, - "aws_null_det_explicit_altname": { - "kms": "aws", - "type": "null", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": null - }, - "aws_regex_rand_auto_id": { - "kms": "aws", - "type": "regex", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "aws_regex_rand_auto_altname": { - "kms": "aws", - "type": "regex", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "aws_regex_rand_explicit_id": { - "kms": "aws", - "type": "regex", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "aws_regex_rand_explicit_altname": { - "kms": "aws", - "type": "regex", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "aws_regex_det_auto_id": { - "kms": "aws", - "type": "regex", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "aws_regex_det_explicit_id": { - "kms": "aws", - "type": "regex", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "aws_regex_det_explicit_altname": { - "kms": "aws", - "type": "regex", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "aws_dbPointer_rand_auto_id": { - "kms": "aws", - "type": "dbPointer", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "aws_dbPointer_rand_auto_altname": { - "kms": "aws", - "type": "dbPointer", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "aws_dbPointer_rand_explicit_id": { - "kms": "aws", - "type": "dbPointer", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "aws_dbPointer_rand_explicit_altname": { - "kms": "aws", - "type": "dbPointer", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "aws_dbPointer_det_auto_id": { - "kms": "aws", - "type": "dbPointer", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "aws_dbPointer_det_explicit_id": { - "kms": "aws", - "type": "dbPointer", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "aws_dbPointer_det_explicit_altname": { - "kms": "aws", - "type": "dbPointer", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "aws_javascript_rand_auto_id": { - "kms": "aws", - "type": "javascript", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "aws_javascript_rand_auto_altname": { - "kms": "aws", - "type": "javascript", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "aws_javascript_rand_explicit_id": { - "kms": "aws", - "type": "javascript", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "aws_javascript_rand_explicit_altname": { - "kms": "aws", - "type": "javascript", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "aws_javascript_det_auto_id": { - "kms": "aws", - "type": "javascript", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "aws_javascript_det_explicit_id": { - "kms": "aws", - "type": "javascript", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "aws_javascript_det_explicit_altname": { - "kms": "aws", - "type": "javascript", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "aws_symbol_rand_auto_id": { - "kms": "aws", - "type": "symbol", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "aws_symbol_rand_auto_altname": { - "kms": "aws", - "type": "symbol", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "aws_symbol_rand_explicit_id": { - "kms": "aws", - "type": "symbol", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "aws_symbol_rand_explicit_altname": { - "kms": "aws", - "type": "symbol", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "aws_symbol_det_auto_id": { - "kms": "aws", - "type": "symbol", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "aws_symbol_det_explicit_id": { - "kms": "aws", - "type": "symbol", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "aws_symbol_det_explicit_altname": { - "kms": "aws", - "type": "symbol", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "aws_javascriptWithScope_rand_auto_id": { - "kms": "aws", - "type": "javascriptWithScope", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "aws_javascriptWithScope_rand_auto_altname": { - "kms": "aws", - "type": "javascriptWithScope", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "aws_javascriptWithScope_rand_explicit_id": { - "kms": "aws", - "type": "javascriptWithScope", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "aws_javascriptWithScope_rand_explicit_altname": { - "kms": "aws", - "type": "javascriptWithScope", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "aws_javascriptWithScope_det_explicit_id": { - "kms": "aws", - "type": "javascriptWithScope", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "aws_javascriptWithScope_det_explicit_altname": { - "kms": "aws", - "type": "javascriptWithScope", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "aws_int_rand_auto_id": { - "kms": "aws", - "type": "int", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "aws_int_rand_auto_altname": { - "kms": "aws", - "type": "int", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "aws_int_rand_explicit_id": { - "kms": "aws", - "type": "int", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "aws_int_rand_explicit_altname": { - "kms": "aws", - "type": "int", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "aws_int_det_auto_id": { - "kms": "aws", - "type": "int", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "aws_int_det_explicit_id": { - "kms": "aws", - "type": "int", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "aws_int_det_explicit_altname": { - "kms": "aws", - "type": "int", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "aws_timestamp_rand_auto_id": { - "kms": "aws", - "type": "timestamp", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "aws_timestamp_rand_auto_altname": { - "kms": "aws", - "type": "timestamp", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "aws_timestamp_rand_explicit_id": { - "kms": "aws", - "type": "timestamp", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "aws_timestamp_rand_explicit_altname": { - "kms": "aws", - "type": "timestamp", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "aws_timestamp_det_auto_id": { - "kms": "aws", - "type": "timestamp", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "aws_timestamp_det_explicit_id": { - "kms": "aws", - "type": "timestamp", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "aws_timestamp_det_explicit_altname": { - "kms": "aws", - "type": "timestamp", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "aws_long_rand_auto_id": { - "kms": "aws", - "type": "long", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "aws_long_rand_auto_altname": { - "kms": "aws", - "type": "long", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "aws_long_rand_explicit_id": { - "kms": "aws", - "type": "long", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "aws_long_rand_explicit_altname": { - "kms": "aws", - "type": "long", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "aws_long_det_auto_id": { - "kms": "aws", - "type": "long", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "aws_long_det_explicit_id": { - "kms": "aws", - "type": "long", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "aws_long_det_explicit_altname": { - "kms": "aws", - "type": "long", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "aws_decimal_rand_auto_id": { - "kms": "aws", - "type": "decimal", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberDecimal": "1.234" - } - }, - "aws_decimal_rand_auto_altname": { - "kms": "aws", - "type": "decimal", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$numberDecimal": "1.234" - } - }, - "aws_decimal_rand_explicit_id": { - "kms": "aws", - "type": "decimal", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberDecimal": "1.234" - } - }, - "aws_decimal_rand_explicit_altname": { - "kms": "aws", - "type": "decimal", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberDecimal": "1.234" - } - }, - "aws_decimal_det_explicit_id": { - "kms": "aws", - "type": "decimal", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$numberDecimal": "1.234" - } - }, - "aws_decimal_det_explicit_altname": { - "kms": "aws", - "type": "decimal", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$numberDecimal": "1.234" - } - }, - "aws_minKey_rand_explicit_id": { - "kms": "aws", - "type": "minKey", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "aws_minKey_rand_explicit_altname": { - "kms": "aws", - "type": "minKey", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "aws_minKey_det_explicit_id": { - "kms": "aws", - "type": "minKey", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "aws_minKey_det_explicit_altname": { - "kms": "aws", - "type": "minKey", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "aws_maxKey_rand_explicit_id": { - "kms": "aws", - "type": "maxKey", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "aws_maxKey_rand_explicit_altname": { - "kms": "aws", - "type": "maxKey", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "aws_maxKey_det_explicit_id": { - "kms": "aws", - "type": "maxKey", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "aws_maxKey_det_explicit_altname": { - "kms": "aws", - "type": "maxKey", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "local_double_rand_auto_id": { - "kms": "local", - "type": "double", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberDouble": "1.234" - } - }, - "local_double_rand_auto_altname": { - "kms": "local", - "type": "double", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$numberDouble": "1.234" - } - }, - "local_double_rand_explicit_id": { - "kms": "local", - "type": "double", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberDouble": "1.234" - } - }, - "local_double_rand_explicit_altname": { - "kms": "local", - "type": "double", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberDouble": "1.234" - } - }, - "local_double_det_explicit_id": { - "kms": "local", - "type": "double", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$numberDouble": "1.234" - } - }, - "local_double_det_explicit_altname": { - "kms": "local", - "type": "double", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$numberDouble": "1.234" - } - }, - "local_string_rand_auto_id": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": "mongodb" - }, - "local_string_rand_auto_altname": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": "mongodb" - }, - "local_string_rand_explicit_id": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "mongodb" - }, - "local_string_rand_explicit_altname": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": "mongodb" - }, - "local_string_det_auto_id": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": "mongodb" - }, - "local_string_det_explicit_id": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "mongodb" - }, - "local_string_det_explicit_altname": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": "mongodb" - }, - "local_object_rand_auto_id": { - "kms": "local", - "type": "object", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "local_object_rand_auto_altname": { - "kms": "local", - "type": "object", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "local_object_rand_explicit_id": { - "kms": "local", - "type": "object", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "local_object_rand_explicit_altname": { - "kms": "local", - "type": "object", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "local_object_det_explicit_id": { - "kms": "local", - "type": "object", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "local_object_det_explicit_altname": { - "kms": "local", - "type": "object", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "local_array_rand_auto_id": { - "kms": "local", - "type": "array", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "local_array_rand_auto_altname": { - "kms": "local", - "type": "array", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "local_array_rand_explicit_id": { - "kms": "local", - "type": "array", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "local_array_rand_explicit_altname": { - "kms": "local", - "type": "array", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "local_array_det_explicit_id": { - "kms": "local", - "type": "array", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "local_array_det_explicit_altname": { - "kms": "local", - "type": "array", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "local_binData=00_rand_auto_id": { - "kms": "local", - "type": "binData=00", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "local_binData=00_rand_auto_altname": { - "kms": "local", - "type": "binData=00", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "local_binData=00_rand_explicit_id": { - "kms": "local", - "type": "binData=00", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "local_binData=00_rand_explicit_altname": { - "kms": "local", - "type": "binData=00", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "local_binData=00_det_auto_id": { - "kms": "local", - "type": "binData=00", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "local_binData=00_det_explicit_id": { - "kms": "local", - "type": "binData=00", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "local_binData=00_det_explicit_altname": { - "kms": "local", - "type": "binData=00", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "local_binData=04_rand_auto_id": { - "kms": "local", - "type": "binData=04", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "local_binData=04_rand_auto_altname": { - "kms": "local", - "type": "binData=04", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "local_binData=04_rand_explicit_id": { - "kms": "local", - "type": "binData=04", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "local_binData=04_rand_explicit_altname": { - "kms": "local", - "type": "binData=04", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "local_binData=04_det_auto_id": { - "kms": "local", - "type": "binData=04", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "local_binData=04_det_explicit_id": { - "kms": "local", - "type": "binData=04", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "local_binData=04_det_explicit_altname": { - "kms": "local", - "type": "binData=04", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "local_undefined_rand_explicit_id": { - "kms": "local", - "type": "undefined", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$undefined": true - } - }, - "local_undefined_rand_explicit_altname": { - "kms": "local", - "type": "undefined", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$undefined": true - } - }, - "local_undefined_det_explicit_id": { - "kms": "local", - "type": "undefined", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$undefined": true - } - }, - "local_undefined_det_explicit_altname": { - "kms": "local", - "type": "undefined", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$undefined": true - } - }, - "local_objectId_rand_auto_id": { - "kms": "local", - "type": "objectId", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "local_objectId_rand_auto_altname": { - "kms": "local", - "type": "objectId", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "local_objectId_rand_explicit_id": { - "kms": "local", - "type": "objectId", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "local_objectId_rand_explicit_altname": { - "kms": "local", - "type": "objectId", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "local_objectId_det_auto_id": { - "kms": "local", - "type": "objectId", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "local_objectId_det_explicit_id": { - "kms": "local", - "type": "objectId", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "local_objectId_det_explicit_altname": { - "kms": "local", - "type": "objectId", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "local_bool_rand_auto_id": { - "kms": "local", - "type": "bool", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": true - }, - "local_bool_rand_auto_altname": { - "kms": "local", - "type": "bool", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": true - }, - "local_bool_rand_explicit_id": { - "kms": "local", - "type": "bool", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": true - }, - "local_bool_rand_explicit_altname": { - "kms": "local", - "type": "bool", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": true - }, - "local_bool_det_explicit_id": { - "kms": "local", - "type": "bool", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": true - }, - "local_bool_det_explicit_altname": { - "kms": "local", - "type": "bool", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": true - }, - "local_date_rand_auto_id": { - "kms": "local", - "type": "date", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "local_date_rand_auto_altname": { - "kms": "local", - "type": "date", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "local_date_rand_explicit_id": { - "kms": "local", - "type": "date", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "local_date_rand_explicit_altname": { - "kms": "local", - "type": "date", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "local_date_det_auto_id": { - "kms": "local", - "type": "date", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "local_date_det_explicit_id": { - "kms": "local", - "type": "date", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "local_date_det_explicit_altname": { - "kms": "local", - "type": "date", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "local_null_rand_explicit_id": { - "kms": "local", - "type": "null", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": null - }, - "local_null_rand_explicit_altname": { - "kms": "local", - "type": "null", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": null - }, - "local_null_det_explicit_id": { - "kms": "local", - "type": "null", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": null - }, - "local_null_det_explicit_altname": { - "kms": "local", - "type": "null", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": null - }, - "local_regex_rand_auto_id": { - "kms": "local", - "type": "regex", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "local_regex_rand_auto_altname": { - "kms": "local", - "type": "regex", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "local_regex_rand_explicit_id": { - "kms": "local", - "type": "regex", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "local_regex_rand_explicit_altname": { - "kms": "local", - "type": "regex", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "local_regex_det_auto_id": { - "kms": "local", - "type": "regex", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "local_regex_det_explicit_id": { - "kms": "local", - "type": "regex", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "local_regex_det_explicit_altname": { - "kms": "local", - "type": "regex", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "local_dbPointer_rand_auto_id": { - "kms": "local", - "type": "dbPointer", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "local_dbPointer_rand_auto_altname": { - "kms": "local", - "type": "dbPointer", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "local_dbPointer_rand_explicit_id": { - "kms": "local", - "type": "dbPointer", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "local_dbPointer_rand_explicit_altname": { - "kms": "local", - "type": "dbPointer", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "local_dbPointer_det_auto_id": { - "kms": "local", - "type": "dbPointer", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "local_dbPointer_det_explicit_id": { - "kms": "local", - "type": "dbPointer", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "local_dbPointer_det_explicit_altname": { - "kms": "local", - "type": "dbPointer", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "local_javascript_rand_auto_id": { - "kms": "local", - "type": "javascript", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "local_javascript_rand_auto_altname": { - "kms": "local", - "type": "javascript", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "local_javascript_rand_explicit_id": { - "kms": "local", - "type": "javascript", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "local_javascript_rand_explicit_altname": { - "kms": "local", - "type": "javascript", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "local_javascript_det_auto_id": { - "kms": "local", - "type": "javascript", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "local_javascript_det_explicit_id": { - "kms": "local", - "type": "javascript", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "local_javascript_det_explicit_altname": { - "kms": "local", - "type": "javascript", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "local_symbol_rand_auto_id": { - "kms": "local", - "type": "symbol", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "local_symbol_rand_auto_altname": { - "kms": "local", - "type": "symbol", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "local_symbol_rand_explicit_id": { - "kms": "local", - "type": "symbol", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "local_symbol_rand_explicit_altname": { - "kms": "local", - "type": "symbol", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "local_symbol_det_auto_id": { - "kms": "local", - "type": "symbol", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "local_symbol_det_explicit_id": { - "kms": "local", - "type": "symbol", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "local_symbol_det_explicit_altname": { - "kms": "local", - "type": "symbol", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "local_javascriptWithScope_rand_auto_id": { - "kms": "local", - "type": "javascriptWithScope", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "local_javascriptWithScope_rand_auto_altname": { - "kms": "local", - "type": "javascriptWithScope", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "local_javascriptWithScope_rand_explicit_id": { - "kms": "local", - "type": "javascriptWithScope", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "local_javascriptWithScope_rand_explicit_altname": { - "kms": "local", - "type": "javascriptWithScope", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "local_javascriptWithScope_det_explicit_id": { - "kms": "local", - "type": "javascriptWithScope", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "local_javascriptWithScope_det_explicit_altname": { - "kms": "local", - "type": "javascriptWithScope", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "local_int_rand_auto_id": { - "kms": "local", - "type": "int", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "local_int_rand_auto_altname": { - "kms": "local", - "type": "int", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "local_int_rand_explicit_id": { - "kms": "local", - "type": "int", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "local_int_rand_explicit_altname": { - "kms": "local", - "type": "int", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "local_int_det_auto_id": { - "kms": "local", - "type": "int", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "local_int_det_explicit_id": { - "kms": "local", - "type": "int", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "local_int_det_explicit_altname": { - "kms": "local", - "type": "int", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "local_timestamp_rand_auto_id": { - "kms": "local", - "type": "timestamp", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "local_timestamp_rand_auto_altname": { - "kms": "local", - "type": "timestamp", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "local_timestamp_rand_explicit_id": { - "kms": "local", - "type": "timestamp", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "local_timestamp_rand_explicit_altname": { - "kms": "local", - "type": "timestamp", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "local_timestamp_det_auto_id": { - "kms": "local", - "type": "timestamp", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "local_timestamp_det_explicit_id": { - "kms": "local", - "type": "timestamp", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "local_timestamp_det_explicit_altname": { - "kms": "local", - "type": "timestamp", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "local_long_rand_auto_id": { - "kms": "local", - "type": "long", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "local_long_rand_auto_altname": { - "kms": "local", - "type": "long", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "local_long_rand_explicit_id": { - "kms": "local", - "type": "long", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "local_long_rand_explicit_altname": { - "kms": "local", - "type": "long", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "local_long_det_auto_id": { - "kms": "local", - "type": "long", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "local_long_det_explicit_id": { - "kms": "local", - "type": "long", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "local_long_det_explicit_altname": { - "kms": "local", - "type": "long", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "local_decimal_rand_auto_id": { - "kms": "local", - "type": "decimal", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberDecimal": "1.234" - } - }, - "local_decimal_rand_auto_altname": { - "kms": "local", - "type": "decimal", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$numberDecimal": "1.234" - } - }, - "local_decimal_rand_explicit_id": { - "kms": "local", - "type": "decimal", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberDecimal": "1.234" - } - }, - "local_decimal_rand_explicit_altname": { - "kms": "local", - "type": "decimal", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberDecimal": "1.234" - } - }, - "local_decimal_det_explicit_id": { - "kms": "local", - "type": "decimal", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$numberDecimal": "1.234" - } - }, - "local_decimal_det_explicit_altname": { - "kms": "local", - "type": "decimal", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$numberDecimal": "1.234" - } - }, - "local_minKey_rand_explicit_id": { - "kms": "local", - "type": "minKey", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "local_minKey_rand_explicit_altname": { - "kms": "local", - "type": "minKey", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "local_minKey_det_explicit_id": { - "kms": "local", - "type": "minKey", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "local_minKey_det_explicit_altname": { - "kms": "local", - "type": "minKey", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "local_maxKey_rand_explicit_id": { - "kms": "local", - "type": "maxKey", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "local_maxKey_rand_explicit_altname": { - "kms": "local", - "type": "maxKey", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "local_maxKey_det_explicit_id": { - "kms": "local", - "type": "maxKey", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "local_maxKey_det_explicit_altname": { - "kms": "local", - "type": "maxKey", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "azure_double_rand_auto_id": { - "kms": "azure", - "type": "double", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberDouble": "1.234" - } - }, - "azure_double_rand_auto_altname": { - "kms": "azure", - "type": "double", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$numberDouble": "1.234" - } - }, - "azure_double_rand_explicit_id": { - "kms": "azure", - "type": "double", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberDouble": "1.234" - } - }, - "azure_double_rand_explicit_altname": { - "kms": "azure", - "type": "double", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberDouble": "1.234" - } - }, - "azure_double_det_explicit_id": { - "kms": "azure", - "type": "double", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$numberDouble": "1.234" - } - }, - "azure_double_det_explicit_altname": { - "kms": "azure", - "type": "double", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$numberDouble": "1.234" - } - }, - "azure_string_rand_auto_id": { - "kms": "azure", - "type": "string", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": "mongodb" - }, - "azure_string_rand_auto_altname": { - "kms": "azure", - "type": "string", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": "mongodb" - }, - "azure_string_rand_explicit_id": { - "kms": "azure", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "mongodb" - }, - "azure_string_rand_explicit_altname": { - "kms": "azure", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": "mongodb" - }, - "azure_string_det_auto_id": { - "kms": "azure", - "type": "string", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": "mongodb" - }, - "azure_string_det_explicit_id": { - "kms": "azure", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "mongodb" - }, - "azure_string_det_explicit_altname": { - "kms": "azure", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": "mongodb" - }, - "azure_object_rand_auto_id": { - "kms": "azure", - "type": "object", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "azure_object_rand_auto_altname": { - "kms": "azure", - "type": "object", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "azure_object_rand_explicit_id": { - "kms": "azure", - "type": "object", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "azure_object_rand_explicit_altname": { - "kms": "azure", - "type": "object", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "azure_object_det_explicit_id": { - "kms": "azure", - "type": "object", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "azure_object_det_explicit_altname": { - "kms": "azure", - "type": "object", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "azure_array_rand_auto_id": { - "kms": "azure", - "type": "array", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "azure_array_rand_auto_altname": { - "kms": "azure", - "type": "array", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "azure_array_rand_explicit_id": { - "kms": "azure", - "type": "array", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "azure_array_rand_explicit_altname": { - "kms": "azure", - "type": "array", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "azure_array_det_explicit_id": { - "kms": "azure", - "type": "array", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "azure_array_det_explicit_altname": { - "kms": "azure", - "type": "array", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "azure_binData=00_rand_auto_id": { - "kms": "azure", - "type": "binData=00", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "azure_binData=00_rand_auto_altname": { - "kms": "azure", - "type": "binData=00", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "azure_binData=00_rand_explicit_id": { - "kms": "azure", - "type": "binData=00", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "azure_binData=00_rand_explicit_altname": { - "kms": "azure", - "type": "binData=00", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "azure_binData=00_det_auto_id": { - "kms": "azure", - "type": "binData=00", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "azure_binData=00_det_explicit_id": { - "kms": "azure", - "type": "binData=00", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "azure_binData=00_det_explicit_altname": { - "kms": "azure", - "type": "binData=00", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "azure_binData=04_rand_auto_id": { - "kms": "azure", - "type": "binData=04", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "azure_binData=04_rand_auto_altname": { - "kms": "azure", - "type": "binData=04", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "azure_binData=04_rand_explicit_id": { - "kms": "azure", - "type": "binData=04", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "azure_binData=04_rand_explicit_altname": { - "kms": "azure", - "type": "binData=04", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "azure_binData=04_det_auto_id": { - "kms": "azure", - "type": "binData=04", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "azure_binData=04_det_explicit_id": { - "kms": "azure", - "type": "binData=04", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "azure_binData=04_det_explicit_altname": { - "kms": "azure", - "type": "binData=04", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "azure_undefined_rand_explicit_id": { - "kms": "azure", - "type": "undefined", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$undefined": true - } - }, - "azure_undefined_rand_explicit_altname": { - "kms": "azure", - "type": "undefined", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$undefined": true - } - }, - "azure_undefined_det_explicit_id": { - "kms": "azure", - "type": "undefined", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$undefined": true - } - }, - "azure_undefined_det_explicit_altname": { - "kms": "azure", - "type": "undefined", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$undefined": true - } - }, - "azure_objectId_rand_auto_id": { - "kms": "azure", - "type": "objectId", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "azure_objectId_rand_auto_altname": { - "kms": "azure", - "type": "objectId", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "azure_objectId_rand_explicit_id": { - "kms": "azure", - "type": "objectId", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "azure_objectId_rand_explicit_altname": { - "kms": "azure", - "type": "objectId", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "azure_objectId_det_auto_id": { - "kms": "azure", - "type": "objectId", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "azure_objectId_det_explicit_id": { - "kms": "azure", - "type": "objectId", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "azure_objectId_det_explicit_altname": { - "kms": "azure", - "type": "objectId", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "azure_bool_rand_auto_id": { - "kms": "azure", - "type": "bool", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": true - }, - "azure_bool_rand_auto_altname": { - "kms": "azure", - "type": "bool", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": true - }, - "azure_bool_rand_explicit_id": { - "kms": "azure", - "type": "bool", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": true - }, - "azure_bool_rand_explicit_altname": { - "kms": "azure", - "type": "bool", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": true - }, - "azure_bool_det_explicit_id": { - "kms": "azure", - "type": "bool", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": true - }, - "azure_bool_det_explicit_altname": { - "kms": "azure", - "type": "bool", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": true - }, - "azure_date_rand_auto_id": { - "kms": "azure", - "type": "date", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "azure_date_rand_auto_altname": { - "kms": "azure", - "type": "date", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "azure_date_rand_explicit_id": { - "kms": "azure", - "type": "date", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "azure_date_rand_explicit_altname": { - "kms": "azure", - "type": "date", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "azure_date_det_auto_id": { - "kms": "azure", - "type": "date", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "azure_date_det_explicit_id": { - "kms": "azure", - "type": "date", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "azure_date_det_explicit_altname": { - "kms": "azure", - "type": "date", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "azure_null_rand_explicit_id": { - "kms": "azure", - "type": "null", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": null - }, - "azure_null_rand_explicit_altname": { - "kms": "azure", - "type": "null", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": null - }, - "azure_null_det_explicit_id": { - "kms": "azure", - "type": "null", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": null - }, - "azure_null_det_explicit_altname": { - "kms": "azure", - "type": "null", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": null - }, - "azure_regex_rand_auto_id": { - "kms": "azure", - "type": "regex", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "azure_regex_rand_auto_altname": { - "kms": "azure", - "type": "regex", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "azure_regex_rand_explicit_id": { - "kms": "azure", - "type": "regex", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "azure_regex_rand_explicit_altname": { - "kms": "azure", - "type": "regex", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "azure_regex_det_auto_id": { - "kms": "azure", - "type": "regex", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "azure_regex_det_explicit_id": { - "kms": "azure", - "type": "regex", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "azure_regex_det_explicit_altname": { - "kms": "azure", - "type": "regex", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "azure_dbPointer_rand_auto_id": { - "kms": "azure", - "type": "dbPointer", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "azure_dbPointer_rand_auto_altname": { - "kms": "azure", - "type": "dbPointer", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "azure_dbPointer_rand_explicit_id": { - "kms": "azure", - "type": "dbPointer", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "azure_dbPointer_rand_explicit_altname": { - "kms": "azure", - "type": "dbPointer", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "azure_dbPointer_det_auto_id": { - "kms": "azure", - "type": "dbPointer", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "azure_dbPointer_det_explicit_id": { - "kms": "azure", - "type": "dbPointer", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "azure_dbPointer_det_explicit_altname": { - "kms": "azure", - "type": "dbPointer", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "azure_javascript_rand_auto_id": { - "kms": "azure", - "type": "javascript", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "azure_javascript_rand_auto_altname": { - "kms": "azure", - "type": "javascript", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "azure_javascript_rand_explicit_id": { - "kms": "azure", - "type": "javascript", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "azure_javascript_rand_explicit_altname": { - "kms": "azure", - "type": "javascript", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "azure_javascript_det_auto_id": { - "kms": "azure", - "type": "javascript", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "azure_javascript_det_explicit_id": { - "kms": "azure", - "type": "javascript", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "azure_javascript_det_explicit_altname": { - "kms": "azure", - "type": "javascript", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "azure_symbol_rand_auto_id": { - "kms": "azure", - "type": "symbol", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "azure_symbol_rand_auto_altname": { - "kms": "azure", - "type": "symbol", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "azure_symbol_rand_explicit_id": { - "kms": "azure", - "type": "symbol", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "azure_symbol_rand_explicit_altname": { - "kms": "azure", - "type": "symbol", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "azure_symbol_det_auto_id": { - "kms": "azure", - "type": "symbol", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "azure_symbol_det_explicit_id": { - "kms": "azure", - "type": "symbol", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "azure_symbol_det_explicit_altname": { - "kms": "azure", - "type": "symbol", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "azure_javascriptWithScope_rand_auto_id": { - "kms": "azure", - "type": "javascriptWithScope", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "azure_javascriptWithScope_rand_auto_altname": { - "kms": "azure", - "type": "javascriptWithScope", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "azure_javascriptWithScope_rand_explicit_id": { - "kms": "azure", - "type": "javascriptWithScope", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "azure_javascriptWithScope_rand_explicit_altname": { - "kms": "azure", - "type": "javascriptWithScope", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "azure_javascriptWithScope_det_explicit_id": { - "kms": "azure", - "type": "javascriptWithScope", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "azure_javascriptWithScope_det_explicit_altname": { - "kms": "azure", - "type": "javascriptWithScope", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "azure_int_rand_auto_id": { - "kms": "azure", - "type": "int", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "azure_int_rand_auto_altname": { - "kms": "azure", - "type": "int", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "azure_int_rand_explicit_id": { - "kms": "azure", - "type": "int", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "azure_int_rand_explicit_altname": { - "kms": "azure", - "type": "int", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "azure_int_det_auto_id": { - "kms": "azure", - "type": "int", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "azure_int_det_explicit_id": { - "kms": "azure", - "type": "int", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "azure_int_det_explicit_altname": { - "kms": "azure", - "type": "int", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "azure_timestamp_rand_auto_id": { - "kms": "azure", - "type": "timestamp", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "azure_timestamp_rand_auto_altname": { - "kms": "azure", - "type": "timestamp", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "azure_timestamp_rand_explicit_id": { - "kms": "azure", - "type": "timestamp", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "azure_timestamp_rand_explicit_altname": { - "kms": "azure", - "type": "timestamp", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "azure_timestamp_det_auto_id": { - "kms": "azure", - "type": "timestamp", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "azure_timestamp_det_explicit_id": { - "kms": "azure", - "type": "timestamp", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "azure_timestamp_det_explicit_altname": { - "kms": "azure", - "type": "timestamp", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "azure_long_rand_auto_id": { - "kms": "azure", - "type": "long", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "azure_long_rand_auto_altname": { - "kms": "azure", - "type": "long", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "azure_long_rand_explicit_id": { - "kms": "azure", - "type": "long", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "azure_long_rand_explicit_altname": { - "kms": "azure", - "type": "long", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "azure_long_det_auto_id": { - "kms": "azure", - "type": "long", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "azure_long_det_explicit_id": { - "kms": "azure", - "type": "long", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "azure_long_det_explicit_altname": { - "kms": "azure", - "type": "long", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "azure_decimal_rand_auto_id": { - "kms": "azure", - "type": "decimal", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberDecimal": "1.234" - } - }, - "azure_decimal_rand_auto_altname": { - "kms": "azure", - "type": "decimal", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$numberDecimal": "1.234" - } - }, - "azure_decimal_rand_explicit_id": { - "kms": "azure", - "type": "decimal", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberDecimal": "1.234" - } - }, - "azure_decimal_rand_explicit_altname": { - "kms": "azure", - "type": "decimal", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberDecimal": "1.234" - } - }, - "azure_decimal_det_explicit_id": { - "kms": "azure", - "type": "decimal", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$numberDecimal": "1.234" - } - }, - "azure_decimal_det_explicit_altname": { - "kms": "azure", - "type": "decimal", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$numberDecimal": "1.234" - } - }, - "azure_minKey_rand_explicit_id": { - "kms": "azure", - "type": "minKey", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "azure_minKey_rand_explicit_altname": { - "kms": "azure", - "type": "minKey", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "azure_minKey_det_explicit_id": { - "kms": "azure", - "type": "minKey", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "azure_minKey_det_explicit_altname": { - "kms": "azure", - "type": "minKey", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "azure_maxKey_rand_explicit_id": { - "kms": "azure", - "type": "maxKey", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "azure_maxKey_rand_explicit_altname": { - "kms": "azure", - "type": "maxKey", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "azure_maxKey_det_explicit_id": { - "kms": "azure", - "type": "maxKey", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "azure_maxKey_det_explicit_altname": { - "kms": "azure", - "type": "maxKey", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "gcp_double_rand_auto_id": { - "kms": "gcp", - "type": "double", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberDouble": "1.234" - } - }, - "gcp_double_rand_auto_altname": { - "kms": "gcp", - "type": "double", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$numberDouble": "1.234" - } - }, - "gcp_double_rand_explicit_id": { - "kms": "gcp", - "type": "double", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberDouble": "1.234" - } - }, - "gcp_double_rand_explicit_altname": { - "kms": "gcp", - "type": "double", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberDouble": "1.234" - } - }, - "gcp_double_det_explicit_id": { - "kms": "gcp", - "type": "double", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$numberDouble": "1.234" - } - }, - "gcp_double_det_explicit_altname": { - "kms": "gcp", - "type": "double", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$numberDouble": "1.234" - } - }, - "gcp_string_rand_auto_id": { - "kms": "gcp", - "type": "string", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": "mongodb" - }, - "gcp_string_rand_auto_altname": { - "kms": "gcp", - "type": "string", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": "mongodb" - }, - "gcp_string_rand_explicit_id": { - "kms": "gcp", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "mongodb" - }, - "gcp_string_rand_explicit_altname": { - "kms": "gcp", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": "mongodb" - }, - "gcp_string_det_auto_id": { - "kms": "gcp", - "type": "string", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": "mongodb" - }, - "gcp_string_det_explicit_id": { - "kms": "gcp", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "mongodb" - }, - "gcp_string_det_explicit_altname": { - "kms": "gcp", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": "mongodb" - }, - "gcp_object_rand_auto_id": { - "kms": "gcp", - "type": "object", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "gcp_object_rand_auto_altname": { - "kms": "gcp", - "type": "object", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "gcp_object_rand_explicit_id": { - "kms": "gcp", - "type": "object", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "gcp_object_rand_explicit_altname": { - "kms": "gcp", - "type": "object", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "gcp_object_det_explicit_id": { - "kms": "gcp", - "type": "object", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "gcp_object_det_explicit_altname": { - "kms": "gcp", - "type": "object", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "gcp_array_rand_auto_id": { - "kms": "gcp", - "type": "array", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "gcp_array_rand_auto_altname": { - "kms": "gcp", - "type": "array", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "gcp_array_rand_explicit_id": { - "kms": "gcp", - "type": "array", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "gcp_array_rand_explicit_altname": { - "kms": "gcp", - "type": "array", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "gcp_array_det_explicit_id": { - "kms": "gcp", - "type": "array", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "gcp_array_det_explicit_altname": { - "kms": "gcp", - "type": "array", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "gcp_binData=00_rand_auto_id": { - "kms": "gcp", - "type": "binData=00", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "gcp_binData=00_rand_auto_altname": { - "kms": "gcp", - "type": "binData=00", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "gcp_binData=00_rand_explicit_id": { - "kms": "gcp", - "type": "binData=00", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "gcp_binData=00_rand_explicit_altname": { - "kms": "gcp", - "type": "binData=00", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "gcp_binData=00_det_auto_id": { - "kms": "gcp", - "type": "binData=00", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "gcp_binData=00_det_explicit_id": { - "kms": "gcp", - "type": "binData=00", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "gcp_binData=00_det_explicit_altname": { - "kms": "gcp", - "type": "binData=00", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "gcp_binData=04_rand_auto_id": { - "kms": "gcp", - "type": "binData=04", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "gcp_binData=04_rand_auto_altname": { - "kms": "gcp", - "type": "binData=04", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "gcp_binData=04_rand_explicit_id": { - "kms": "gcp", - "type": "binData=04", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "gcp_binData=04_rand_explicit_altname": { - "kms": "gcp", - "type": "binData=04", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "gcp_binData=04_det_auto_id": { - "kms": "gcp", - "type": "binData=04", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "gcp_binData=04_det_explicit_id": { - "kms": "gcp", - "type": "binData=04", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "gcp_binData=04_det_explicit_altname": { - "kms": "gcp", - "type": "binData=04", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "gcp_undefined_rand_explicit_id": { - "kms": "gcp", - "type": "undefined", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$undefined": true - } - }, - "gcp_undefined_rand_explicit_altname": { - "kms": "gcp", - "type": "undefined", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$undefined": true - } - }, - "gcp_undefined_det_explicit_id": { - "kms": "gcp", - "type": "undefined", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$undefined": true - } - }, - "gcp_undefined_det_explicit_altname": { - "kms": "gcp", - "type": "undefined", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$undefined": true - } - }, - "gcp_objectId_rand_auto_id": { - "kms": "gcp", - "type": "objectId", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "gcp_objectId_rand_auto_altname": { - "kms": "gcp", - "type": "objectId", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "gcp_objectId_rand_explicit_id": { - "kms": "gcp", - "type": "objectId", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "gcp_objectId_rand_explicit_altname": { - "kms": "gcp", - "type": "objectId", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "gcp_objectId_det_auto_id": { - "kms": "gcp", - "type": "objectId", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "gcp_objectId_det_explicit_id": { - "kms": "gcp", - "type": "objectId", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "gcp_objectId_det_explicit_altname": { - "kms": "gcp", - "type": "objectId", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "gcp_bool_rand_auto_id": { - "kms": "gcp", - "type": "bool", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": true - }, - "gcp_bool_rand_auto_altname": { - "kms": "gcp", - "type": "bool", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": true - }, - "gcp_bool_rand_explicit_id": { - "kms": "gcp", - "type": "bool", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": true - }, - "gcp_bool_rand_explicit_altname": { - "kms": "gcp", - "type": "bool", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": true - }, - "gcp_bool_det_explicit_id": { - "kms": "gcp", - "type": "bool", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": true - }, - "gcp_bool_det_explicit_altname": { - "kms": "gcp", - "type": "bool", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": true - }, - "gcp_date_rand_auto_id": { - "kms": "gcp", - "type": "date", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "gcp_date_rand_auto_altname": { - "kms": "gcp", - "type": "date", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "gcp_date_rand_explicit_id": { - "kms": "gcp", - "type": "date", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "gcp_date_rand_explicit_altname": { - "kms": "gcp", - "type": "date", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "gcp_date_det_auto_id": { - "kms": "gcp", - "type": "date", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "gcp_date_det_explicit_id": { - "kms": "gcp", - "type": "date", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "gcp_date_det_explicit_altname": { - "kms": "gcp", - "type": "date", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "gcp_null_rand_explicit_id": { - "kms": "gcp", - "type": "null", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": null - }, - "gcp_null_rand_explicit_altname": { - "kms": "gcp", - "type": "null", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": null - }, - "gcp_null_det_explicit_id": { - "kms": "gcp", - "type": "null", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": null - }, - "gcp_null_det_explicit_altname": { - "kms": "gcp", - "type": "null", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": null - }, - "gcp_regex_rand_auto_id": { - "kms": "gcp", - "type": "regex", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "gcp_regex_rand_auto_altname": { - "kms": "gcp", - "type": "regex", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "gcp_regex_rand_explicit_id": { - "kms": "gcp", - "type": "regex", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "gcp_regex_rand_explicit_altname": { - "kms": "gcp", - "type": "regex", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "gcp_regex_det_auto_id": { - "kms": "gcp", - "type": "regex", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "gcp_regex_det_explicit_id": { - "kms": "gcp", - "type": "regex", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "gcp_regex_det_explicit_altname": { - "kms": "gcp", - "type": "regex", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "gcp_dbPointer_rand_auto_id": { - "kms": "gcp", - "type": "dbPointer", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "gcp_dbPointer_rand_auto_altname": { - "kms": "gcp", - "type": "dbPointer", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "gcp_dbPointer_rand_explicit_id": { - "kms": "gcp", - "type": "dbPointer", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "gcp_dbPointer_rand_explicit_altname": { - "kms": "gcp", - "type": "dbPointer", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "gcp_dbPointer_det_auto_id": { - "kms": "gcp", - "type": "dbPointer", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "gcp_dbPointer_det_explicit_id": { - "kms": "gcp", - "type": "dbPointer", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "gcp_dbPointer_det_explicit_altname": { - "kms": "gcp", - "type": "dbPointer", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "gcp_javascript_rand_auto_id": { - "kms": "gcp", - "type": "javascript", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "gcp_javascript_rand_auto_altname": { - "kms": "gcp", - "type": "javascript", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "gcp_javascript_rand_explicit_id": { - "kms": "gcp", - "type": "javascript", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "gcp_javascript_rand_explicit_altname": { - "kms": "gcp", - "type": "javascript", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "gcp_javascript_det_auto_id": { - "kms": "gcp", - "type": "javascript", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "gcp_javascript_det_explicit_id": { - "kms": "gcp", - "type": "javascript", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "gcp_javascript_det_explicit_altname": { - "kms": "gcp", - "type": "javascript", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "gcp_symbol_rand_auto_id": { - "kms": "gcp", - "type": "symbol", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "gcp_symbol_rand_auto_altname": { - "kms": "gcp", - "type": "symbol", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "gcp_symbol_rand_explicit_id": { - "kms": "gcp", - "type": "symbol", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "gcp_symbol_rand_explicit_altname": { - "kms": "gcp", - "type": "symbol", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "gcp_symbol_det_auto_id": { - "kms": "gcp", - "type": "symbol", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "gcp_symbol_det_explicit_id": { - "kms": "gcp", - "type": "symbol", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "gcp_symbol_det_explicit_altname": { - "kms": "gcp", - "type": "symbol", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "gcp_javascriptWithScope_rand_auto_id": { - "kms": "gcp", - "type": "javascriptWithScope", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "gcp_javascriptWithScope_rand_auto_altname": { - "kms": "gcp", - "type": "javascriptWithScope", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "gcp_javascriptWithScope_rand_explicit_id": { - "kms": "gcp", - "type": "javascriptWithScope", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "gcp_javascriptWithScope_rand_explicit_altname": { - "kms": "gcp", - "type": "javascriptWithScope", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "gcp_javascriptWithScope_det_explicit_id": { - "kms": "gcp", - "type": "javascriptWithScope", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "gcp_javascriptWithScope_det_explicit_altname": { - "kms": "gcp", - "type": "javascriptWithScope", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "gcp_int_rand_auto_id": { - "kms": "gcp", - "type": "int", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "gcp_int_rand_auto_altname": { - "kms": "gcp", - "type": "int", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "gcp_int_rand_explicit_id": { - "kms": "gcp", - "type": "int", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "gcp_int_rand_explicit_altname": { - "kms": "gcp", - "type": "int", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "gcp_int_det_auto_id": { - "kms": "gcp", - "type": "int", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "gcp_int_det_explicit_id": { - "kms": "gcp", - "type": "int", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "gcp_int_det_explicit_altname": { - "kms": "gcp", - "type": "int", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "gcp_timestamp_rand_auto_id": { - "kms": "gcp", - "type": "timestamp", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "gcp_timestamp_rand_auto_altname": { - "kms": "gcp", - "type": "timestamp", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "gcp_timestamp_rand_explicit_id": { - "kms": "gcp", - "type": "timestamp", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "gcp_timestamp_rand_explicit_altname": { - "kms": "gcp", - "type": "timestamp", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "gcp_timestamp_det_auto_id": { - "kms": "gcp", - "type": "timestamp", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "gcp_timestamp_det_explicit_id": { - "kms": "gcp", - "type": "timestamp", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "gcp_timestamp_det_explicit_altname": { - "kms": "gcp", - "type": "timestamp", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "gcp_long_rand_auto_id": { - "kms": "gcp", - "type": "long", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "gcp_long_rand_auto_altname": { - "kms": "gcp", - "type": "long", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "gcp_long_rand_explicit_id": { - "kms": "gcp", - "type": "long", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "gcp_long_rand_explicit_altname": { - "kms": "gcp", - "type": "long", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "gcp_long_det_auto_id": { - "kms": "gcp", - "type": "long", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "gcp_long_det_explicit_id": { - "kms": "gcp", - "type": "long", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "gcp_long_det_explicit_altname": { - "kms": "gcp", - "type": "long", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "gcp_decimal_rand_auto_id": { - "kms": "gcp", - "type": "decimal", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberDecimal": "1.234" - } - }, - "gcp_decimal_rand_auto_altname": { - "kms": "gcp", - "type": "decimal", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$numberDecimal": "1.234" - } - }, - "gcp_decimal_rand_explicit_id": { - "kms": "gcp", - "type": "decimal", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberDecimal": "1.234" - } - }, - "gcp_decimal_rand_explicit_altname": { - "kms": "gcp", - "type": "decimal", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberDecimal": "1.234" - } - }, - "gcp_decimal_det_explicit_id": { - "kms": "gcp", - "type": "decimal", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$numberDecimal": "1.234" - } - }, - "gcp_decimal_det_explicit_altname": { - "kms": "gcp", - "type": "decimal", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$numberDecimal": "1.234" - } - }, - "gcp_minKey_rand_explicit_id": { - "kms": "gcp", - "type": "minKey", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "gcp_minKey_rand_explicit_altname": { - "kms": "gcp", - "type": "minKey", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "gcp_minKey_det_explicit_id": { - "kms": "gcp", - "type": "minKey", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "gcp_minKey_det_explicit_altname": { - "kms": "gcp", - "type": "minKey", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "gcp_maxKey_rand_explicit_id": { - "kms": "gcp", - "type": "maxKey", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "gcp_maxKey_rand_explicit_altname": { - "kms": "gcp", - "type": "maxKey", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "gcp_maxKey_det_explicit_id": { - "kms": "gcp", - "type": "maxKey", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "gcp_maxKey_det_explicit_altname": { - "kms": "gcp", - "type": "maxKey", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "kmip_double_rand_auto_id": { - "kms": "kmip", - "type": "double", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberDouble": "1.234" - } - }, - "kmip_double_rand_auto_altname": { - "kms": "kmip", - "type": "double", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$numberDouble": "1.234" - } - }, - "kmip_double_rand_explicit_id": { - "kms": "kmip", - "type": "double", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberDouble": "1.234" - } - }, - "kmip_double_rand_explicit_altname": { - "kms": "kmip", - "type": "double", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberDouble": "1.234" - } - }, - "kmip_double_det_explicit_id": { - "kms": "kmip", - "type": "double", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$numberDouble": "1.234" - } - }, - "kmip_double_det_explicit_altname": { - "kms": "kmip", - "type": "double", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$numberDouble": "1.234" - } - }, - "kmip_string_rand_auto_id": { - "kms": "kmip", - "type": "string", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": "mongodb" - }, - "kmip_string_rand_auto_altname": { - "kms": "kmip", - "type": "string", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": "mongodb" - }, - "kmip_string_rand_explicit_id": { - "kms": "kmip", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "mongodb" - }, - "kmip_string_rand_explicit_altname": { - "kms": "kmip", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": "mongodb" - }, - "kmip_string_det_auto_id": { - "kms": "kmip", - "type": "string", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": "mongodb" - }, - "kmip_string_det_explicit_id": { - "kms": "kmip", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "mongodb" - }, - "kmip_string_det_explicit_altname": { - "kms": "kmip", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": "mongodb" - }, - "kmip_object_rand_auto_id": { - "kms": "kmip", - "type": "object", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "kmip_object_rand_auto_altname": { - "kms": "kmip", - "type": "object", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "kmip_object_rand_explicit_id": { - "kms": "kmip", - "type": "object", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "kmip_object_rand_explicit_altname": { - "kms": "kmip", - "type": "object", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "kmip_object_det_explicit_id": { - "kms": "kmip", - "type": "object", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "kmip_object_det_explicit_altname": { - "kms": "kmip", - "type": "object", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "x": { - "$numberInt": "1" - } - } - }, - "kmip_array_rand_auto_id": { - "kms": "kmip", - "type": "array", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "kmip_array_rand_auto_altname": { - "kms": "kmip", - "type": "array", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "kmip_array_rand_explicit_id": { - "kms": "kmip", - "type": "array", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "kmip_array_rand_explicit_altname": { - "kms": "kmip", - "type": "array", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "kmip_array_det_explicit_id": { - "kms": "kmip", - "type": "array", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "kmip_array_det_explicit_altname": { - "kms": "kmip", - "type": "array", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": [ - { - "$numberInt": "1" - }, - { - "$numberInt": "2" - }, - { - "$numberInt": "3" - } - ] - }, - "kmip_binData=00_rand_auto_id": { - "kms": "kmip", - "type": "binData=00", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "kmip_binData=00_rand_auto_altname": { - "kms": "kmip", - "type": "binData=00", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "kmip_binData=00_rand_explicit_id": { - "kms": "kmip", - "type": "binData=00", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "kmip_binData=00_rand_explicit_altname": { - "kms": "kmip", - "type": "binData=00", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "kmip_binData=00_det_auto_id": { - "kms": "kmip", - "type": "binData=00", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "kmip_binData=00_det_explicit_id": { - "kms": "kmip", - "type": "binData=00", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "kmip_binData=00_det_explicit_altname": { - "kms": "kmip", - "type": "binData=00", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AQIDBA==", - "subType": "00" - } - } - }, - "kmip_binData=04_rand_auto_id": { - "kms": "kmip", - "type": "binData=04", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "kmip_binData=04_rand_auto_altname": { - "kms": "kmip", - "type": "binData=04", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "kmip_binData=04_rand_explicit_id": { - "kms": "kmip", - "type": "binData=04", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "kmip_binData=04_rand_explicit_altname": { - "kms": "kmip", - "type": "binData=04", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "kmip_binData=04_det_auto_id": { - "kms": "kmip", - "type": "binData=04", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "kmip_binData=04_det_explicit_id": { - "kms": "kmip", - "type": "binData=04", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "kmip_binData=04_det_explicit_altname": { - "kms": "kmip", - "type": "binData=04", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$binary": { - "base64": "AAECAwQFBgcICQoLDA0ODw==", - "subType": "04" - } - } - }, - "kmip_undefined_rand_explicit_id": { - "kms": "kmip", - "type": "undefined", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$undefined": true - } - }, - "kmip_undefined_rand_explicit_altname": { - "kms": "kmip", - "type": "undefined", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$undefined": true - } - }, - "kmip_undefined_det_explicit_id": { - "kms": "kmip", - "type": "undefined", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$undefined": true - } - }, - "kmip_undefined_det_explicit_altname": { - "kms": "kmip", - "type": "undefined", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$undefined": true - } - }, - "kmip_objectId_rand_auto_id": { - "kms": "kmip", - "type": "objectId", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "kmip_objectId_rand_auto_altname": { - "kms": "kmip", - "type": "objectId", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "kmip_objectId_rand_explicit_id": { - "kms": "kmip", - "type": "objectId", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "kmip_objectId_rand_explicit_altname": { - "kms": "kmip", - "type": "objectId", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "kmip_objectId_det_auto_id": { - "kms": "kmip", - "type": "objectId", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "kmip_objectId_det_explicit_id": { - "kms": "kmip", - "type": "objectId", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "kmip_objectId_det_explicit_altname": { - "kms": "kmip", - "type": "objectId", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$oid": "01234567890abcdef0123456" - } - }, - "kmip_bool_rand_auto_id": { - "kms": "kmip", - "type": "bool", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": true - }, - "kmip_bool_rand_auto_altname": { - "kms": "kmip", - "type": "bool", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": true - }, - "kmip_bool_rand_explicit_id": { - "kms": "kmip", - "type": "bool", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": true - }, - "kmip_bool_rand_explicit_altname": { - "kms": "kmip", - "type": "bool", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": true - }, - "kmip_bool_det_explicit_id": { - "kms": "kmip", - "type": "bool", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": true - }, - "kmip_bool_det_explicit_altname": { - "kms": "kmip", - "type": "bool", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": true - }, - "kmip_date_rand_auto_id": { - "kms": "kmip", - "type": "date", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "kmip_date_rand_auto_altname": { - "kms": "kmip", - "type": "date", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "kmip_date_rand_explicit_id": { - "kms": "kmip", - "type": "date", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "kmip_date_rand_explicit_altname": { - "kms": "kmip", - "type": "date", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "kmip_date_det_auto_id": { - "kms": "kmip", - "type": "date", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "kmip_date_det_explicit_id": { - "kms": "kmip", - "type": "date", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "kmip_date_det_explicit_altname": { - "kms": "kmip", - "type": "date", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$date": { - "$numberLong": "12345" - } - } - }, - "kmip_null_rand_explicit_id": { - "kms": "kmip", - "type": "null", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": null - }, - "kmip_null_rand_explicit_altname": { - "kms": "kmip", - "type": "null", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": null - }, - "kmip_null_det_explicit_id": { - "kms": "kmip", - "type": "null", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": null - }, - "kmip_null_det_explicit_altname": { - "kms": "kmip", - "type": "null", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": null - }, - "kmip_regex_rand_auto_id": { - "kms": "kmip", - "type": "regex", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "kmip_regex_rand_auto_altname": { - "kms": "kmip", - "type": "regex", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "kmip_regex_rand_explicit_id": { - "kms": "kmip", - "type": "regex", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "kmip_regex_rand_explicit_altname": { - "kms": "kmip", - "type": "regex", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "kmip_regex_det_auto_id": { - "kms": "kmip", - "type": "regex", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "kmip_regex_det_explicit_id": { - "kms": "kmip", - "type": "regex", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "kmip_regex_det_explicit_altname": { - "kms": "kmip", - "type": "regex", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$regularExpression": { - "pattern": ".*", - "options": "" - } - } - }, - "kmip_dbPointer_rand_auto_id": { - "kms": "kmip", - "type": "dbPointer", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "kmip_dbPointer_rand_auto_altname": { - "kms": "kmip", - "type": "dbPointer", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "kmip_dbPointer_rand_explicit_id": { - "kms": "kmip", - "type": "dbPointer", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "kmip_dbPointer_rand_explicit_altname": { - "kms": "kmip", - "type": "dbPointer", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "kmip_dbPointer_det_auto_id": { - "kms": "kmip", - "type": "dbPointer", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "kmip_dbPointer_det_explicit_id": { - "kms": "kmip", - "type": "dbPointer", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "kmip_dbPointer_det_explicit_altname": { - "kms": "kmip", - "type": "dbPointer", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$dbPointer": { - "$ref": "db.example", - "$id": { - "$oid": "01234567890abcdef0123456" - } - } - } - }, - "kmip_javascript_rand_auto_id": { - "kms": "kmip", - "type": "javascript", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "kmip_javascript_rand_auto_altname": { - "kms": "kmip", - "type": "javascript", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "kmip_javascript_rand_explicit_id": { - "kms": "kmip", - "type": "javascript", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "kmip_javascript_rand_explicit_altname": { - "kms": "kmip", - "type": "javascript", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "kmip_javascript_det_auto_id": { - "kms": "kmip", - "type": "javascript", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "kmip_javascript_det_explicit_id": { - "kms": "kmip", - "type": "javascript", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "kmip_javascript_det_explicit_altname": { - "kms": "kmip", - "type": "javascript", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$code": "x=1" - } - }, - "kmip_symbol_rand_auto_id": { - "kms": "kmip", - "type": "symbol", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "kmip_symbol_rand_auto_altname": { - "kms": "kmip", - "type": "symbol", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "kmip_symbol_rand_explicit_id": { - "kms": "kmip", - "type": "symbol", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "kmip_symbol_rand_explicit_altname": { - "kms": "kmip", - "type": "symbol", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "kmip_symbol_det_auto_id": { - "kms": "kmip", - "type": "symbol", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "kmip_symbol_det_explicit_id": { - "kms": "kmip", - "type": "symbol", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "kmip_symbol_det_explicit_altname": { - "kms": "kmip", - "type": "symbol", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$symbol": "mongodb-symbol" - } - }, - "kmip_javascriptWithScope_rand_auto_id": { - "kms": "kmip", - "type": "javascriptWithScope", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "kmip_javascriptWithScope_rand_auto_altname": { - "kms": "kmip", - "type": "javascriptWithScope", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "kmip_javascriptWithScope_rand_explicit_id": { - "kms": "kmip", - "type": "javascriptWithScope", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "kmip_javascriptWithScope_rand_explicit_altname": { - "kms": "kmip", - "type": "javascriptWithScope", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "kmip_javascriptWithScope_det_explicit_id": { - "kms": "kmip", - "type": "javascriptWithScope", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "kmip_javascriptWithScope_det_explicit_altname": { - "kms": "kmip", - "type": "javascriptWithScope", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$code": "x=1", - "$scope": {} - } - }, - "kmip_int_rand_auto_id": { - "kms": "kmip", - "type": "int", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "kmip_int_rand_auto_altname": { - "kms": "kmip", - "type": "int", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "kmip_int_rand_explicit_id": { - "kms": "kmip", - "type": "int", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "kmip_int_rand_explicit_altname": { - "kms": "kmip", - "type": "int", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "kmip_int_det_auto_id": { - "kms": "kmip", - "type": "int", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "kmip_int_det_explicit_id": { - "kms": "kmip", - "type": "int", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "kmip_int_det_explicit_altname": { - "kms": "kmip", - "type": "int", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberInt": "123" - } - }, - "kmip_timestamp_rand_auto_id": { - "kms": "kmip", - "type": "timestamp", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "kmip_timestamp_rand_auto_altname": { - "kms": "kmip", - "type": "timestamp", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "kmip_timestamp_rand_explicit_id": { - "kms": "kmip", - "type": "timestamp", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "kmip_timestamp_rand_explicit_altname": { - "kms": "kmip", - "type": "timestamp", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "kmip_timestamp_det_auto_id": { - "kms": "kmip", - "type": "timestamp", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "kmip_timestamp_det_explicit_id": { - "kms": "kmip", - "type": "timestamp", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "kmip_timestamp_det_explicit_altname": { - "kms": "kmip", - "type": "timestamp", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$timestamp": { - "t": 0, - "i": 12345 - } - } - }, - "kmip_long_rand_auto_id": { - "kms": "kmip", - "type": "long", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "kmip_long_rand_auto_altname": { - "kms": "kmip", - "type": "long", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "kmip_long_rand_explicit_id": { - "kms": "kmip", - "type": "long", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "kmip_long_rand_explicit_altname": { - "kms": "kmip", - "type": "long", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "kmip_long_det_auto_id": { - "kms": "kmip", - "type": "long", - "algo": "det", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "kmip_long_det_explicit_id": { - "kms": "kmip", - "type": "long", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "kmip_long_det_explicit_altname": { - "kms": "kmip", - "type": "long", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberLong": "456" - } - }, - "kmip_decimal_rand_auto_id": { - "kms": "kmip", - "type": "decimal", - "algo": "rand", - "method": "auto", - "identifier": "id", - "allowed": true, - "value": { - "$numberDecimal": "1.234" - } - }, - "kmip_decimal_rand_auto_altname": { - "kms": "kmip", - "type": "decimal", - "algo": "rand", - "method": "auto", - "identifier": "altname", - "allowed": true, - "value": { - "$numberDecimal": "1.234" - } - }, - "kmip_decimal_rand_explicit_id": { - "kms": "kmip", - "type": "decimal", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": { - "$numberDecimal": "1.234" - } - }, - "kmip_decimal_rand_explicit_altname": { - "kms": "kmip", - "type": "decimal", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": true, - "value": { - "$numberDecimal": "1.234" - } - }, - "kmip_decimal_det_explicit_id": { - "kms": "kmip", - "type": "decimal", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$numberDecimal": "1.234" - } - }, - "kmip_decimal_det_explicit_altname": { - "kms": "kmip", - "type": "decimal", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$numberDecimal": "1.234" - } - }, - "kmip_minKey_rand_explicit_id": { - "kms": "kmip", - "type": "minKey", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "kmip_minKey_rand_explicit_altname": { - "kms": "kmip", - "type": "minKey", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "kmip_minKey_det_explicit_id": { - "kms": "kmip", - "type": "minKey", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "kmip_minKey_det_explicit_altname": { - "kms": "kmip", - "type": "minKey", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$minKey": 1 - } - }, - "kmip_maxKey_rand_explicit_id": { - "kms": "kmip", - "type": "maxKey", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "kmip_maxKey_rand_explicit_altname": { - "kms": "kmip", - "type": "maxKey", - "algo": "rand", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "kmip_maxKey_det_explicit_id": { - "kms": "kmip", - "type": "maxKey", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "kmip_maxKey_det_explicit_altname": { - "kms": "kmip", - "type": "maxKey", - "algo": "det", - "method": "explicit", - "identifier": "altname", - "allowed": false, - "value": { - "$maxKey": 1 - } - }, - "payload=0,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "" - }, - "payload=1,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "a" - }, - "payload=2,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aa" - }, - "payload=3,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaa" - }, - "payload=4,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaa" - }, - "payload=5,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaaa" - }, - "payload=6,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaaaa" - }, - "payload=7,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaaaaa" - }, - "payload=8,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaaaaaa" - }, - "payload=9,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaaaaaaa" - }, - "payload=10,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaaaaaaaa" - }, - "payload=11,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaaaaaaaaa" - }, - "payload=12,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaaaaaaaaaa" - }, - "payload=13,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaaaaaaaaaaa" - }, - "payload=14,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaaaaaaaaaaaa" - }, - "payload=15,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaaaaaaaaaaaaa" - }, - "payload=16,algo=rand": { - "kms": "local", - "type": "string", - "algo": "rand", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaaaaaaaaaaaaaa" - }, - "payload=0,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "" - }, - "payload=1,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "a" - }, - "payload=2,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aa" - }, - "payload=3,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaa" - }, - "payload=4,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaa" - }, - "payload=5,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaaa" - }, - "payload=6,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaaaa" - }, - "payload=7,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaaaaa" - }, - "payload=8,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaaaaaa" - }, - "payload=9,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaaaaaaa" - }, - "payload=10,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaaaaaaaa" - }, - "payload=11,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaaaaaaaaa" - }, - "payload=12,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaaaaaaaaaa" - }, - "payload=13,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaaaaaaaaaaa" - }, - "payload=14,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaaaaaaaaaaaa" - }, - "payload=15,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaaaaaaaaaaaaa" - }, - "payload=16,algo=det": { - "kms": "local", - "type": "string", - "algo": "det", - "method": "explicit", - "identifier": "id", - "allowed": true, - "value": "aaaaaaaaaaaaaaaa" - } -} \ No newline at end of file diff --git a/testdata/client-side-encryption-prose/encrypted-fields.json b/testdata/client-side-encryption-prose/encrypted-fields.json deleted file mode 100644 index 4a3ce6c710..0000000000 --- a/testdata/client-side-encryption-prose/encrypted-fields.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] -} \ No newline at end of file diff --git a/testdata/client-side-encryption-prose/external-key.json b/testdata/client-side-encryption-prose/external-key.json deleted file mode 100644 index 9d5f30ac3f..0000000000 --- a/testdata/client-side-encryption-prose/external-key.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "status": { - "$numberInt": "1" - }, - "_id": { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - }, - "masterKey": { - "provider": "local" - }, - "updateDate": { - "$date": { - "$numberLong": "1557827033449" - } - }, - "keyMaterial": { - "$binary": { - "base64": "Ce9HSz/HKKGkIt4uyy+jDuKGA+rLC2cycykMo6vc8jXxqa1UVDYHWq1r+vZKbnnSRBfB981akzRKZCFpC05CTyFqDhXv6OnMjpG97OZEREGIsHEYiJkBW0jJJvfLLgeLsEpBzsro9FztGGXASxyxFRZFhXvHxyiLOKrdWfs7X1O/iK3pEoHMx6uSNSfUOgbebLfIqW7TO++iQS5g1xovXA==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1557827033449" - } - }, - "keyAltNames": [ "local" ] -} \ No newline at end of file diff --git a/testdata/client-side-encryption-prose/external-schema.json b/testdata/client-side-encryption-prose/external-schema.json deleted file mode 100644 index 5798c8bbda..0000000000 --- a/testdata/client-side-encryption-prose/external-schema.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "bsonType": "object", - "properties": { - "encrypted": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - } - } -} \ No newline at end of file diff --git a/testdata/client-side-encryption-prose/key1-document.json b/testdata/client-side-encryption-prose/key1-document.json deleted file mode 100644 index 566b56c354..0000000000 --- a/testdata/client-side-encryption-prose/key1-document.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } -} diff --git a/testdata/client-side-encryption-prose/limits-doc.json b/testdata/client-side-encryption-prose/limits-doc.json deleted file mode 100644 index 08d7056528..0000000000 --- a/testdata/client-side-encryption-prose/limits-doc.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "00": "a", - "01": "a", - "02": "a", - "03": "a", - "04": "a", - "05": "a", - "06": "a", - "07": "a", - "08": "a", - "09": "a", - "10": "a", - "11": "a", - "12": "a", - "13": "a", - "14": "a", - "15": "a", - "16": "a", - "17": "a", - "18": "a", - "19": "a", - "20": "a", - "21": "a", - "22": "a", - "23": "a", - "24": "a", - "25": "a", - "26": "a", - "27": "a", - "28": "a", - "29": "a", - "30": "a", - "31": "a", - "32": "a", - "33": "a", - "34": "a", - "35": "a", - "36": "a", - "37": "a", - "38": "a", - "39": "a", - "40": "a", - "41": "a", - "42": "a", - "43": "a", - "44": "a", - "45": "a", - "46": "a", - "47": "a", - "48": "a", - "49": "a", - "50": "a", - "51": "a", - "52": "a", - "53": "a", - "54": "a", - "55": "a", - "56": "a", - "57": "a", - "58": "a", - "59": "a", - "60": "a", - "61": "a", - "62": "a", - "63": "a", - "64": "a", - "65": "a", - "66": "a", - "67": "a", - "68": "a", - "69": "a", - "70": "a", - "71": "a", - "72": "a", - "73": "a", - "74": "a", - "75": "a", - "76": "a", - "77": "a", - "78": "a", - "79": "a", - "80": "a", - "81": "a", - "82": "a", - "83": "a", - "84": "a", - "85": "a", - "86": "a", - "87": "a", - "88": "a", - "89": "a", - "90": "a", - "91": "a", - "92": "a", - "93": "a", - "94": "a", - "95": "a", - "96": "a", - "97": "a", - "98": "a", - "99": "a" -} \ No newline at end of file diff --git a/testdata/client-side-encryption-prose/limits-key.json b/testdata/client-side-encryption-prose/limits-key.json deleted file mode 100644 index 9d5f30ac3f..0000000000 --- a/testdata/client-side-encryption-prose/limits-key.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "status": { - "$numberInt": "1" - }, - "_id": { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - }, - "masterKey": { - "provider": "local" - }, - "updateDate": { - "$date": { - "$numberLong": "1557827033449" - } - }, - "keyMaterial": { - "$binary": { - "base64": "Ce9HSz/HKKGkIt4uyy+jDuKGA+rLC2cycykMo6vc8jXxqa1UVDYHWq1r+vZKbnnSRBfB981akzRKZCFpC05CTyFqDhXv6OnMjpG97OZEREGIsHEYiJkBW0jJJvfLLgeLsEpBzsro9FztGGXASxyxFRZFhXvHxyiLOKrdWfs7X1O/iK3pEoHMx6uSNSfUOgbebLfIqW7TO++iQS5g1xovXA==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1557827033449" - } - }, - "keyAltNames": [ "local" ] -} \ No newline at end of file diff --git a/testdata/client-side-encryption-prose/limits-schema.json b/testdata/client-side-encryption-prose/limits-schema.json deleted file mode 100644 index 8acf14dfdd..0000000000 --- a/testdata/client-side-encryption-prose/limits-schema.json +++ /dev/null @@ -1,1405 +0,0 @@ -{ - "properties": { - "00": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "01": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "02": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "03": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "04": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "05": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "06": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "07": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "08": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "09": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "10": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "11": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "12": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "13": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "14": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "15": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "16": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "17": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "18": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "19": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "20": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "21": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "22": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "23": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "24": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "25": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "26": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "27": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "28": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "29": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "30": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "31": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "32": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "33": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "34": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "35": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "36": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "37": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "38": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "39": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "40": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "41": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "42": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "43": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "44": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "45": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "46": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "47": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "48": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "49": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "50": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "51": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "52": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "53": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "54": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "55": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "56": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "57": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "58": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "59": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "60": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "61": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "62": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "63": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "64": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "65": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "66": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "67": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "68": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "69": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "70": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "71": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "72": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "73": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "74": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "75": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "76": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "77": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "78": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "79": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "80": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "81": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "82": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "83": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "84": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "85": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "86": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "87": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "88": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "89": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "90": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "91": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "92": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "93": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "94": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "95": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "96": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "97": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "98": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "99": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "LOCALAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - } - }, - "bsonType": "object" -} \ No newline at end of file diff --git a/testdata/client-side-encryption-prose/range-encryptedFields-Date.json b/testdata/client-side-encryption-prose/range-encryptedFields-Date.json deleted file mode 100644 index 6f41ee0bdb..0000000000 --- a/testdata/client-side-encryption-prose/range-encryptedFields-Date.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDate", - "bsonType": "date", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$date": { - "$numberLong": "0" - } - }, - "max": { - "$date": { - "$numberLong": "200" - } - } - } - } - ] -} diff --git a/testdata/client-side-encryption-prose/range-encryptedFields-DecimalNoPrecision.json b/testdata/client-side-encryption-prose/range-encryptedFields-DecimalNoPrecision.json deleted file mode 100644 index f44d74e231..0000000000 --- a/testdata/client-side-encryption-prose/range-encryptedFields-DecimalNoPrecision.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalNoPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] -} diff --git a/testdata/client-side-encryption-prose/range-encryptedFields-DecimalPrecision.json b/testdata/client-side-encryption-prose/range-encryptedFields-DecimalPrecision.json deleted file mode 100644 index 7e8361b958..0000000000 --- a/testdata/client-side-encryption-prose/range-encryptedFields-DecimalPrecision.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDecimal": "0.0" - }, - "max": { - "$numberDecimal": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] -} diff --git a/testdata/client-side-encryption-prose/range-encryptedFields-DoubleNoPrecision.json b/testdata/client-side-encryption-prose/range-encryptedFields-DoubleNoPrecision.json deleted file mode 100644 index 80e6828027..0000000000 --- a/testdata/client-side-encryption-prose/range-encryptedFields-DoubleNoPrecision.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoubleNoPrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] -} diff --git a/testdata/client-side-encryption-prose/range-encryptedFields-DoublePrecision.json b/testdata/client-side-encryption-prose/range-encryptedFields-DoublePrecision.json deleted file mode 100644 index 4fb2afd97e..0000000000 --- a/testdata/client-side-encryption-prose/range-encryptedFields-DoublePrecision.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoublePrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDouble": "0.0" - }, - "max": { - "$numberDouble": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] -} diff --git a/testdata/client-side-encryption-prose/range-encryptedFields-Int.json b/testdata/client-side-encryption-prose/range-encryptedFields-Int.json deleted file mode 100644 index f2acc88d70..0000000000 --- a/testdata/client-side-encryption-prose/range-encryptedFields-Int.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] -} diff --git a/testdata/client-side-encryption-prose/range-encryptedFields-Long.json b/testdata/client-side-encryption-prose/range-encryptedFields-Long.json deleted file mode 100644 index a997280dbb..0000000000 --- a/testdata/client-side-encryption-prose/range-encryptedFields-Long.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedLong", - "bsonType": "long", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberLong": "0" - }, - "max": { - "$numberLong": "200" - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/aggregate.json b/testdata/client-side-encryption/legacy/aggregate.json deleted file mode 100644 index 7de725b71d..0000000000 --- a/testdata/client-side-encryption/legacy/aggregate.json +++ /dev/null @@ -1,390 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - ], - "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" - }, - "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" - ] - } - ], - "tests": [ - { - "description": "Aggregate with deterministic encryption", - "skipReason": "SERVER-39395", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encrypted_string": "457-55-5642" - } - } - ] - }, - "result": [ - { - "_id": 1, - "encrypted_string": "string0" - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "default", - "pipeline": [ - { - "$match": { - "encrypted_string": "457-55-5642" - } - } - ] - }, - "command_name": "aggregate" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - ] - } - } - }, - { - "description": "Aggregate with empty pipeline", - "skipReason": "SERVER-40829 hides agg support behind enableTestCommands flag.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "aggregate", - "arguments": { - "pipeline": [] - }, - "result": [ - { - "_id": 1, - "encrypted_string": "string0" - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "default", - "pipeline": [], - "cursor": {} - }, - "command_name": "aggregate" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - ] - } - } - }, - { - "description": "Aggregate should fail with random encryption", - "skipReason": "SERVER-39395", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "random": "abc" - } - } - ] - }, - "result": { - "errorContains": "Cannot query on fields encrypted with the randomized encryption" - } - } - ] - }, - { - "description": "Database aggregate should fail", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "aggregate", - "object": "database", - "arguments": { - "pipeline": [ - { - "$currentOp": { - "allUsers": false, - "idleConnections": false, - "localOps": true - } - }, - { - "$match": { - "command.aggregate": { - "$eq": 1 - } - } - }, - { - "$project": { - "command": 1 - } - }, - { - "$project": { - "command.lsid": 0 - } - } - ] - }, - "result": { - "errorContains": "non-collection command not supported for auto encryption: aggregate" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/aggregate.yml b/testdata/client-side-encryption/legacy/aggregate.yml deleted file mode 100644 index 64ad5efa60..0000000000 --- a/testdata/client-side-encryption/legacy/aggregate.yml +++ /dev/null @@ -1,120 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: - - &doc0_encrypted { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } -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'} -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']}] - -tests: - - description: "Aggregate with deterministic encryption" - skipReason: "SERVER-39395" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: aggregate - arguments: - pipeline: - - { $match: { encrypted_string: "457-55-5642" } } - result: - - &doc0 { _id: 1, encrypted_string: "string0" } - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - aggregate: *collection_name - pipeline: - - { $match: { encrypted_string: "457-55-5642" } } - command_name: aggregate - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc0_encrypted - - description: "Aggregate with empty pipeline" - skipReason: "SERVER-40829 hides agg support behind enableTestCommands flag." - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: aggregate - arguments: - pipeline: [] - result: - - { _id: 1, encrypted_string: "string0" } - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - aggregate: *collection_name - pipeline: [] - cursor: {} - command_name: aggregate - # Needs to fetch key when decrypting results - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc0_encrypted - - description: "Aggregate should fail with random encryption" - skipReason: "SERVER-39395" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: aggregate - arguments: - pipeline: - - { $match: { random: "abc" } } - result: - errorContains: "Cannot query on fields encrypted with the randomized encryption" - - description: "Database aggregate should fail" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: aggregate - object: database - arguments: - pipeline: - - $currentOp: { allUsers: false, idleConnections: false, localOps: true } - - $match: { command.aggregate: { $eq: 1 } } - - $project: { command: 1 } - - $project: { command.lsid: 0 } - result: - errorContains: "non-collection command not supported for auto encryption: aggregate" \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/awsTemporary.json b/testdata/client-side-encryption/legacy/awsTemporary.json deleted file mode 100644 index 10eb85feee..0000000000 --- a/testdata/client-side-encryption/legacy/awsTemporary.json +++ /dev/null @@ -1,225 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "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" - }, - "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" - ] - } - ], - "tests": [ - { - "description": "Insert a document with auto encryption using the AWS provider with temporary credentials", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "awsTemporary": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_string": "string0" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault" - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - ], - "ordered": true - }, - "command_name": "insert" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - ] - } - } - }, - { - "description": "Insert with invalid temporary credentials", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "awsTemporaryNoSessionToken": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_string": "string0" - } - }, - "result": { - "errorContains": "security token" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/awsTemporary.yml b/testdata/client-side-encryption/legacy/awsTemporary.yml deleted file mode 100644 index cc787530a0..0000000000 --- a/testdata/client-side-encryption/legacy/awsTemporary.yml +++ /dev/null @@ -1,57 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: [] -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'} -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']}] - -tests: - - description: "Insert a document with auto encryption using the AWS provider with temporary credentials" - clientOptions: - autoEncryptOpts: - kmsProviders: - awsTemporary: {} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 1, encrypted_string: "string0" } - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: { $or: [ { _id: { $in: [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] } }, { keyAltNames: { $in: [] } } ] } - $db: keyvault - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } - ordered: true - command_name: insert - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc0_encrypted - - description: "Insert with invalid temporary credentials" - clientOptions: - autoEncryptOpts: - kmsProviders: - awsTemporaryNoSessionToken: {} - operations: - - name: insertOne - arguments: - document: *doc0 - result: - errorContains: "security token" \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/azureKMS.json b/testdata/client-side-encryption/legacy/azureKMS.json deleted file mode 100644 index afecf40b0a..0000000000 --- a/testdata/client-side-encryption/legacy/azureKMS.json +++ /dev/null @@ -1,224 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "json_schema": { - "properties": { - "encrypted_string_aws": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "encrypted_string_azure": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZURE+AAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "encrypted_string_gcp": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCP+AAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "encrypted_string_local": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "encrypted_string_kmip": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "dBHpr8aITfeBQ15grpbLpQ==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - } - }, - "bsonType": "object" - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "AZURE+AAAAAAAAAAAAAAAA==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "n+HWZ0ZSVOYA3cvQgP7inN4JSXfOH85IngmeQxRpQHjCCcqT3IFqEWNlrsVHiz3AELimHhX4HKqOLWMUeSIT6emUDDoQX9BAv8DR1+E1w4nGs/NyEneac78EYFkK3JysrFDOgl2ypCCTKAypkn9CkAx1if4cfgQE93LW4kczcyHdGiH36CIxrCDGv1UzAvERN5Qa47DVwsM6a+hWsF2AAAJVnF0wYLLJU07TuRHdMrrphPWXZsFgyV+lRqJ7DDpReKNO8nMPLV/mHqHBHGPGQiRdb9NoJo8CvokGz4+KE8oLwzKf6V24dtwZmRkrsDV4iOhvROAzz+Euo1ypSkL3mw==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1601573901680" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1601573901680" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "azure", - "keyVaultEndpoint": "key-vault-csfle.vault.azure.net", - "keyName": "key-name-csfle" - }, - "keyAltNames": [ - "altname", - "azure_altname" - ] - } - ], - "tests": [ - { - "description": "Insert a document with auto encryption using Azure KMS provider", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "azure": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_string_azure": "string0" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AZURE+AAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault" - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encrypted_string_azure": { - "$binary": { - "base64": "AQGVERPgAAAAAAAAAAAAAAAC5DbBSwPwfSlBrDtRuglvNvCXD1KzDuCKY2P+4bRFtHDjpTOE2XuytPAUaAbXf1orsPq59PVZmsbTZbt2CB8qaQ==", - "subType": "06" - } - } - } - ], - "ordered": true - }, - "command_name": "insert" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string_azure": { - "$binary": { - "base64": "AQGVERPgAAAAAAAAAAAAAAAC5DbBSwPwfSlBrDtRuglvNvCXD1KzDuCKY2P+4bRFtHDjpTOE2XuytPAUaAbXf1orsPq59PVZmsbTZbt2CB8qaQ==", - "subType": "06" - } - } - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/azureKMS.yml b/testdata/client-side-encryption/legacy/azureKMS.yml deleted file mode 100644 index b3c1f69472..0000000000 --- a/testdata/client-side-encryption/legacy/azureKMS.yml +++ /dev/null @@ -1,46 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: [] -json_schema: {'properties': {'encrypted_string_aws': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}, 'encrypted_string_azure': {'encrypt': {'keyId': [{'$binary': {'base64': 'AZURE+AAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}, 'encrypted_string_gcp': {'encrypt': {'keyId': [{'$binary': {'base64': 'GCP+AAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}, 'encrypted_string_local': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}, 'encrypted_string_kmip': {'encrypt': {'keyId': [{'$binary': {'base64': 'dBHpr8aITfeBQ15grpbLpQ==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}}, 'bsonType': 'object'} -key_vault_data: [{'_id': {'$binary': {'base64': 'AZURE+AAAAAAAAAAAAAAAA==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'n+HWZ0ZSVOYA3cvQgP7inN4JSXfOH85IngmeQxRpQHjCCcqT3IFqEWNlrsVHiz3AELimHhX4HKqOLWMUeSIT6emUDDoQX9BAv8DR1+E1w4nGs/NyEneac78EYFkK3JysrFDOgl2ypCCTKAypkn9CkAx1if4cfgQE93LW4kczcyHdGiH36CIxrCDGv1UzAvERN5Qa47DVwsM6a+hWsF2AAAJVnF0wYLLJU07TuRHdMrrphPWXZsFgyV+lRqJ7DDpReKNO8nMPLV/mHqHBHGPGQiRdb9NoJo8CvokGz4+KE8oLwzKf6V24dtwZmRkrsDV4iOhvROAzz+Euo1ypSkL3mw==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1601573901680'}}, 'updateDate': {'$date': {'$numberLong': '1601573901680'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'azure', 'keyVaultEndpoint': 'key-vault-csfle.vault.azure.net', 'keyName': 'key-name-csfle'}, 'keyAltNames': ['altname', 'azure_altname']}] - -tests: - - description: "Insert a document with auto encryption using Azure KMS provider" - clientOptions: - autoEncryptOpts: - kmsProviders: - azure: {} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 1, encrypted_string_azure: "string0" } - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: { $or: [ { _id: { $in: [ {'$binary': {'base64': 'AZURE+AAAAAAAAAAAAAAAA==', 'subType': '04'}} ] } }, { keyAltNames: { $in: [] } } ] } - $db: keyvault - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { _id: 1, encrypted_string_azure: {'$binary': {'base64': 'AQGVERPgAAAAAAAAAAAAAAAC5DbBSwPwfSlBrDtRuglvNvCXD1KzDuCKY2P+4bRFtHDjpTOE2XuytPAUaAbXf1orsPq59PVZmsbTZbt2CB8qaQ==', 'subType': '06'}} } - ordered: true - command_name: insert - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc0_encrypted \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/badQueries.json b/testdata/client-side-encryption/legacy/badQueries.json deleted file mode 100644 index 4968307ba3..0000000000 --- a/testdata/client-side-encryption/legacy/badQueries.json +++ /dev/null @@ -1,1446 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - }, - { - "_id": 2, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - } - ], - "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" - }, - "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" - ] - } - ], - "tests": [ - { - "description": "$text unconditionally fails", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "find", - "arguments": { - "filter": { - "$text": { - "$search": "search text" - } - } - }, - "result": { - "errorContains": "Unsupported match expression operator for encryption" - } - } - ] - }, - { - "description": "$where unconditionally fails", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "find", - "arguments": { - "filter": { - "$where": { - "$code": "function() { return true }" - } - } - }, - "result": { - "errorContains": "Unsupported match expression operator for encryption" - } - } - ] - }, - { - "description": "$bit operators succeed on unencrypted, error on encrypted", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "find", - "arguments": { - "filter": { - "unencrypted": { - "$bitsAllClear": 35 - } - } - }, - "result": [] - }, - { - "name": "find", - "arguments": { - "filter": { - "encrypted_string": { - "$bitsAllClear": 35 - } - } - }, - "result": { - "errorContains": "Invalid match expression operator on encrypted field" - } - }, - { - "name": "find", - "arguments": { - "filter": { - "unencrypted": { - "$bitsAllSet": 35 - } - } - }, - "result": [] - }, - { - "name": "find", - "arguments": { - "filter": { - "encrypted_string": { - "$bitsAllSet": 35 - } - } - }, - "result": { - "errorContains": "Invalid match expression operator on encrypted field" - } - }, - { - "name": "find", - "arguments": { - "filter": { - "unencrypted": { - "$bitsAnyClear": 35 - } - } - }, - "result": [] - }, - { - "name": "find", - "arguments": { - "filter": { - "encrypted_string": { - "$bitsAnyClear": 35 - } - } - }, - "result": { - "errorContains": "Invalid match expression operator on encrypted field" - } - }, - { - "name": "find", - "arguments": { - "filter": { - "unencrypted": { - "$bitsAnySet": 35 - } - } - }, - "result": [] - }, - { - "name": "find", - "arguments": { - "filter": { - "encrypted_string": { - "$bitsAnySet": 35 - } - } - }, - "result": { - "errorContains": "Invalid match expression operator on encrypted field" - } - } - ] - }, - { - "description": "geo operators succeed on unencrypted, error on encrypted", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "find", - "arguments": { - "filter": { - "unencrypted": { - "$near": [ - 0, - 0 - ] - } - } - }, - "result": { - "errorContains": "unable to find index" - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encrypted_string": { - "$near": [ - 0, - 0 - ] - } - } - }, - "result": { - "errorContains": "Invalid match expression operator on encrypted field" - } - }, - { - "name": "find", - "arguments": { - "filter": { - "unencrypted": { - "$nearSphere": [ - 0, - 0 - ] - } - } - }, - "result": { - "errorContains": "unable to find index" - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encrypted_string": { - "$nearSphere": [ - 0, - 0 - ] - } - } - }, - "result": { - "errorContains": "Invalid match expression operator on encrypted field" - } - }, - { - "name": "find", - "arguments": { - "filter": { - "unencrypted": { - "$geoIntersects": { - "$geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 0, - 0 - ], - [ - 1, - 0 - ], - [ - 1, - 1 - ], - [ - 0, - 0 - ] - ] - ] - } - } - } - } - }, - "result": [] - }, - { - "name": "find", - "arguments": { - "filter": { - "encrypted_string": { - "$geoIntersects": { - "$geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 0, - 0 - ], - [ - 1, - 0 - ], - [ - 1, - 1 - ], - [ - 0, - 0 - ] - ] - ] - } - } - } - } - }, - "result": { - "errorContains": "Invalid match expression operator on encrypted field" - } - }, - { - "name": "find", - "arguments": { - "filter": { - "unencrypted": { - "$geoWithin": { - "$geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 0, - 0 - ], - [ - 1, - 0 - ], - [ - 1, - 1 - ], - [ - 0, - 0 - ] - ] - ] - } - } - } - } - }, - "result": [] - }, - { - "name": "find", - "arguments": { - "filter": { - "encrypted_string": { - "$geoWithin": { - "$geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 0, - 0 - ], - [ - 1, - 0 - ], - [ - 1, - 1 - ], - [ - 0, - 0 - ] - ] - ] - } - } - } - } - }, - "result": { - "errorContains": "Invalid match expression operator on encrypted field" - } - } - ] - }, - { - "description": "inequality operators succeed on unencrypted, error on encrypted", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "find", - "arguments": { - "filter": { - "unencrypted": { - "$gt": 1 - } - } - }, - "result": [] - }, - { - "name": "find", - "arguments": { - "filter": { - "encrypted_string": { - "$gt": 1 - } - } - }, - "result": { - "errorContains": "Invalid match expression operator on encrypted field" - } - }, - { - "name": "find", - "arguments": { - "filter": { - "unencrypted": { - "$lt": 1 - } - } - }, - "result": [] - }, - { - "name": "find", - "arguments": { - "filter": { - "encrypted_string": { - "$lt": 1 - } - } - }, - "result": { - "errorContains": "Invalid match expression operator on encrypted field" - } - }, - { - "name": "find", - "arguments": { - "filter": { - "unencrypted": { - "$gte": 1 - } - } - }, - "result": [] - }, - { - "name": "find", - "arguments": { - "filter": { - "encrypted_string": { - "$gte": 1 - } - } - }, - "result": { - "errorContains": "Invalid match expression operator on encrypted field" - } - }, - { - "name": "find", - "arguments": { - "filter": { - "unencrypted": { - "$lte": 1 - } - } - }, - "result": [] - }, - { - "name": "find", - "arguments": { - "filter": { - "encrypted_string": { - "$lte": 1 - } - } - }, - "result": { - "errorContains": "Invalid match expression operator on encrypted field" - } - } - ] - }, - { - "description": "other misc operators succeed on unencrypted, error on encrypted", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "find", - "arguments": { - "filter": { - "unencrypted": { - "$mod": [ - 3, - 1 - ] - } - } - }, - "result": [] - }, - { - "name": "find", - "arguments": { - "filter": { - "encrypted_string": { - "$mod": [ - 3, - 1 - ] - } - } - }, - "result": { - "errorContains": "Invalid match expression operator on encrypted field" - } - }, - { - "name": "find", - "arguments": { - "filter": { - "unencrypted": { - "$regex": "pattern", - "$options": "" - } - } - }, - "result": [] - }, - { - "name": "find", - "arguments": { - "filter": { - "encrypted_string": { - "$regex": "pattern", - "$options": "" - } - } - }, - "result": { - "errorContains": "Invalid match expression operator on encrypted field" - } - }, - { - "name": "find", - "arguments": { - "filter": { - "unencrypted": { - "$size": 2 - } - } - }, - "result": [] - }, - { - "name": "find", - "arguments": { - "filter": { - "encrypted_string": { - "$size": 2 - } - } - }, - "result": { - "errorContains": "Invalid match expression operator on encrypted field" - } - }, - { - "name": "find", - "arguments": { - "filter": { - "unencrypted": { - "$type": 2 - } - } - }, - "result": [] - }, - { - "name": "find", - "arguments": { - "filter": { - "encrypted_string": { - "$type": 2 - } - } - }, - "result": { - "errorContains": "Invalid match expression operator on encrypted field" - } - }, - { - "name": "find", - "arguments": { - "filter": { - "unencrypted": { - "$eq": null - } - } - }, - "result": [ - { - "_id": 1, - "encrypted_string": "string0" - }, - { - "_id": 2, - "encrypted_string": "string1" - } - ] - }, - { - "name": "find", - "arguments": { - "filter": { - "encrypted_string": { - "$eq": null - } - } - }, - "result": { - "errorContains": "Illegal equality to null predicate for encrypted field" - } - }, - { - "name": "find", - "arguments": { - "filter": { - "unencrypted": { - "$in": [ - null - ] - } - } - }, - "result": [ - { - "_id": 1, - "encrypted_string": "string0" - }, - { - "_id": 2, - "encrypted_string": "string1" - } - ] - }, - { - "name": "find", - "arguments": { - "filter": { - "encrypted_string": { - "$in": [ - null - ] - } - } - }, - "result": { - "errorContains": "Illegal equality to null inside $in against an encrypted field" - } - } - ] - }, - { - "description": "$addToSet succeeds on unencrypted, error on encrypted", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$addToSet": { - "unencrypted": [ - "a" - ] - } - } - }, - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - }, - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$addToSet": { - "encrypted_string": [ - "a" - ] - } - } - }, - "result": { - "errorContains": "$addToSet not allowed on encrypted values" - } - } - ] - }, - { - "description": "$inc succeeds on unencrypted, error on encrypted", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$inc": { - "unencrypted": 1 - } - } - }, - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - }, - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$inc": { - "encrypted_string": 1 - } - } - }, - "result": { - "errorContains": "$inc and $mul not allowed on encrypted values" - } - } - ] - }, - { - "description": "$mul succeeds on unencrypted, error on encrypted", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$mul": { - "unencrypted": 1 - } - } - }, - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - }, - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$mul": { - "encrypted_string": 1 - } - } - }, - "result": { - "errorContains": "$inc and $mul not allowed on encrypted values" - } - } - ] - }, - { - "description": "$max succeeds on unencrypted, error on encrypted", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$max": { - "unencrypted": 1 - } - } - }, - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - }, - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$max": { - "encrypted_string": 1 - } - } - }, - "result": { - "errorContains": "$max and $min not allowed on encrypted values" - } - } - ] - }, - { - "description": "$min succeeds on unencrypted, error on encrypted", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$min": { - "unencrypted": 1 - } - } - }, - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - }, - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$min": { - "encrypted_string": 1 - } - } - }, - "result": { - "errorContains": "$max and $min not allowed on encrypted values" - } - } - ] - }, - { - "description": "$currentDate succeeds on unencrypted, error on encrypted", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$currentDate": { - "unencrypted": true - } - } - }, - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - }, - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$currentDate": { - "encrypted_string": true - } - } - }, - "result": { - "errorContains": "$currentDate not allowed on encrypted values" - } - } - ] - }, - { - "description": "$pop succeeds on unencrypted, error on encrypted", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$pop": { - "unencrypted": 1 - } - } - }, - "result": { - "matchedCount": 1, - "modifiedCount": 0, - "upsertedCount": 0 - } - }, - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$pop": { - "encrypted_string": 1 - } - } - }, - "result": { - "errorContains": "$pop not allowed on encrypted values" - } - } - ] - }, - { - "description": "$pull succeeds on unencrypted, error on encrypted", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$pull": { - "unencrypted": 1 - } - } - }, - "result": { - "matchedCount": 1, - "modifiedCount": 0, - "upsertedCount": 0 - } - }, - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$pull": { - "encrypted_string": 1 - } - } - }, - "result": { - "errorContains": "$pull not allowed on encrypted values" - } - } - ] - }, - { - "description": "$pullAll succeeds on unencrypted, error on encrypted", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$pullAll": { - "unencrypted": [ - 1 - ] - } - } - }, - "result": { - "matchedCount": 1, - "modifiedCount": 0, - "upsertedCount": 0 - } - }, - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$pullAll": { - "encrypted_string": [ - 1 - ] - } - } - }, - "result": { - "errorContains": "$pullAll not allowed on encrypted values" - } - } - ] - }, - { - "description": "$push succeeds on unencrypted, error on encrypted", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$push": { - "unencrypted": 1 - } - } - }, - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - }, - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$push": { - "encrypted_string": 1 - } - } - }, - "result": { - "errorContains": "$push not allowed on encrypted values" - } - } - ] - }, - { - "description": "array filters on encrypted fields does not error in mongocryptd, but errors in mongod", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$set": { - "encrypted_string.$[i].x": 1 - } - }, - "arrayFilters": [ - { - "i.x": 1 - } - ] - }, - "result": { - "errorContains": "Array update operations not allowed on encrypted values" - } - } - ] - }, - { - "description": "positional operator succeeds on unencrypted, errors on encrypted", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "updateOne", - "arguments": { - "filter": { - "unencrypted": 1 - }, - "update": { - "$set": { - "unencrypted.$": 1 - } - } - }, - "result": { - "matchedCount": 0, - "modifiedCount": 0, - "upsertedCount": 0 - } - }, - { - "name": "updateOne", - "arguments": { - "filter": { - "encrypted_string": "abc" - }, - "update": { - "$set": { - "encrypted_string.$": "abc" - } - } - }, - "result": { - "errorContains": "Cannot encrypt fields below '$' positional update operator" - } - } - ] - }, - { - "description": "an update that would produce an array on an encrypted field errors", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$set": { - "encrypted_string": [ - 1, - 2 - ] - } - } - }, - "result": { - "errorContains": "Cannot encrypt element of type" - } - } - ] - }, - { - "description": "an insert with encrypted field on _id errors", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - }, - "schemaMap": { - "default.default": { - "properties": { - "_id": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1 - } - }, - "result": { - "errorContains": "Invalid schema containing the 'encrypt' keyword." - } - } - ] - }, - { - "description": "an insert with an array value for an encrypted field fails", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "encrypted_string": [ - "123", - "456" - ] - } - }, - "result": { - "errorContains": "Cannot encrypt element of type" - } - } - ] - }, - { - "description": "an insert with a Timestamp(0,0) value in the top-level fails", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "random": { - "$timestamp": { - "t": 0, - "i": 0 - } - } - } - }, - "result": { - "errorContains": "A command that inserts cannot supply Timestamp(0, 0) for an encrypted" - } - } - ] - }, - { - "description": "distinct with the key referring to a field where the keyID is a JSON Pointer errors", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "distinct", - "arguments": { - "filter": {}, - "fieldName": "encrypted_w_altname" - }, - "result": { - "errorContains": "The distinct key is not allowed to be marked for encryption with a non-UUID keyId" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/badQueries.yml b/testdata/client-side-encryption/legacy/badQueries.yml deleted file mode 100644 index 893622c4ce..0000000000 --- a/testdata/client-side-encryption/legacy/badQueries.yml +++ /dev/null @@ -1,536 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: - - &doc0_encrypted { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } - - &doc1_encrypted { _id: 2, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}} } -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'} -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']}] - -# TODO: I could see an argument against having these tests of mongocryptd as part -# of driver tests. When mongocryptd introduces support for these operators, these -# tests will fail. But it's also easy enough to remove these tests when that happens. - -tests: - - description: "$text unconditionally fails" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: find - arguments: - filter: - { $text: { $search: "search text" } } - result: - errorContains: "Unsupported match expression operator for encryption" - - description: "$where unconditionally fails" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: find - arguments: - filter: - { $where: { $code: "function() { return true }" } } - result: - errorContains: "Unsupported match expression operator for encryption" - - description: "$bit operators succeed on unencrypted, error on encrypted" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: find - arguments: - filter: { unencrypted: { $bitsAllClear: 35 }} - result: [] - - name: find - arguments: - filter: { encrypted_string: { $bitsAllClear: 35 }} - result: - errorContains: "Invalid match expression operator on encrypted field" - - name: find - arguments: - filter: { unencrypted: { $bitsAllSet: 35 }} - result: [] - - name: find - arguments: - filter: { encrypted_string: { $bitsAllSet: 35 }} - result: - errorContains: "Invalid match expression operator on encrypted field" - - name: find - arguments: - filter: { unencrypted: { $bitsAnyClear: 35 }} - result: [] - - name: find - arguments: - filter: { encrypted_string: { $bitsAnyClear: 35 }} - result: - errorContains: "Invalid match expression operator on encrypted field" - - name: find - arguments: - filter: { unencrypted: { $bitsAnySet: 35 }} - result: [] - - name: find - arguments: - filter: { encrypted_string: { $bitsAnySet: 35 }} - result: - errorContains: "Invalid match expression operator on encrypted field" - - description: "geo operators succeed on unencrypted, error on encrypted" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: find - arguments: - filter: { unencrypted: { $near: [0,0] }} - result: - # Still an error because no geo index, but from mongod - not mongocryptd. - errorContains: "unable to find index" - - name: find - arguments: - filter: { encrypted_string: { $near: [0,0] }} - result: - errorContains: "Invalid match expression operator on encrypted field" - - name: find - arguments: - filter: { unencrypted: { $nearSphere: [0,0] }} - result: - # Still an error because no geo index, but from mongod - not mongocryptd. - errorContains: "unable to find index" - - name: find - arguments: - filter: { encrypted_string: { $nearSphere: [0,0] }} - result: - errorContains: "Invalid match expression operator on encrypted field" - - name: find - arguments: - filter: { unencrypted: { $geoIntersects: { $geometry: { type: "Polygon", coordinates: [[ [0,0], [1,0], [1,1], [0,0] ]] }} }} - result: [] - - name: find - arguments: - filter: { encrypted_string: { $geoIntersects: { $geometry: { type: "Polygon", coordinates: [[ [0,0], [1,0], [1,1], [0,0] ]] }} }} - result: - errorContains: "Invalid match expression operator on encrypted field" - - name: find - arguments: - filter: { unencrypted: { $geoWithin: { $geometry: { type: "Polygon", coordinates: [[ [0,0], [1,0], [1,1], [0,0] ]] }} }} - result: [] - - name: find - arguments: - filter: { encrypted_string: { $geoWithin: { $geometry: { type: "Polygon", coordinates: [[ [0,0], [1,0], [1,1], [0,0] ]] }} }} - result: - errorContains: "Invalid match expression operator on encrypted field" - - description: "inequality operators succeed on unencrypted, error on encrypted" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: find - arguments: - filter: { unencrypted: { $gt: 1 }} - result: [] - - name: find - arguments: - filter: { encrypted_string: { $gt: 1 }} - result: - errorContains: "Invalid match expression operator on encrypted field" - - name: find - arguments: - filter: { unencrypted: { $lt: 1 }} - result: [] - - name: find - arguments: - filter: { encrypted_string: { $lt: 1 }} - result: - errorContains: "Invalid match expression operator on encrypted field" - - name: find - arguments: - filter: { unencrypted: { $gte: 1 }} - result: [] - - name: find - arguments: - filter: { encrypted_string: { $gte: 1 }} - result: - errorContains: "Invalid match expression operator on encrypted field" - - name: find - arguments: - filter: { unencrypted: { $lte: 1 }} - result: [] - - name: find - arguments: - filter: { encrypted_string: { $lte: 1 }} - result: - errorContains: "Invalid match expression operator on encrypted field" - - description: "other misc operators succeed on unencrypted, error on encrypted" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: find - arguments: - filter: { unencrypted: { $mod: [3, 1] }} - result: [] - - name: find - arguments: - filter: { encrypted_string: { $mod: [3, 1] }} - result: - errorContains: "Invalid match expression operator on encrypted field" - - name: find - arguments: - filter: { unencrypted: { $regex: "pattern", $options: "" }} - result: [] - - name: find - arguments: - filter: { encrypted_string: { $regex: "pattern", $options: "" }} - result: - errorContains: "Invalid match expression operator on encrypted field" - - name: find - arguments: - filter: { unencrypted: { $size: 2 }} - result: [] - - name: find - arguments: - filter: { encrypted_string: { $size: 2 }} - result: - errorContains: "Invalid match expression operator on encrypted field" - - name: find - arguments: - filter: { unencrypted: { $type: 2 }} - result: [] - - name: find - arguments: - filter: { encrypted_string: { $type: 2 }} - result: - errorContains: "Invalid match expression operator on encrypted field" - - name: find - arguments: - filter: { unencrypted: { $eq: null }} - result: - - &doc0 { _id: 1, encrypted_string: "string0" } - - &doc1 { _id: 2, encrypted_string: "string1" } - - name: find - arguments: - filter: { encrypted_string: { $eq: null }} - result: - errorContains: "Illegal equality to null predicate for encrypted field" - - name: find - arguments: - filter: { unencrypted: { $in: [null] }} - result: - - *doc0 - - *doc1 - - name: find - arguments: - filter: { encrypted_string: { $in: [null] }} - result: - errorContains: "Illegal equality to null inside $in against an encrypted field" - - description: "$addToSet succeeds on unencrypted, error on encrypted" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: updateOne - arguments: - filter: { } - update: { $addToSet: { "unencrypted": ["a"]}} - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - - name: updateOne - arguments: - filter: { } - update: { $addToSet: { "encrypted_string": ["a"]}} - result: - errorContains: "$addToSet not allowed on encrypted values" - - description: "$inc succeeds on unencrypted, error on encrypted" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: updateOne - arguments: - filter: { } - update: { $inc: { "unencrypted": 1}} - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - - name: updateOne - arguments: - filter: { } - update: { $inc: { "encrypted_string": 1}} - result: - errorContains: "$inc and $mul not allowed on encrypted values" - - description: "$mul succeeds on unencrypted, error on encrypted" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: updateOne - arguments: - filter: { } - update: { $mul: { "unencrypted": 1}} - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - - name: updateOne - arguments: - filter: { } - update: { $mul: { "encrypted_string": 1}} - result: - errorContains: "$inc and $mul not allowed on encrypted values" - - description: "$max succeeds on unencrypted, error on encrypted" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: updateOne - arguments: - filter: { } - update: { $max: { "unencrypted": 1}} - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - - name: updateOne - arguments: - filter: { } - update: { $max: { "encrypted_string": 1}} - result: - errorContains: "$max and $min not allowed on encrypted values" - - description: "$min succeeds on unencrypted, error on encrypted" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: updateOne - arguments: - filter: { } - update: { $min: { "unencrypted": 1}} - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - - name: updateOne - arguments: - filter: { } - update: { $min: { "encrypted_string": 1}} - result: - errorContains: "$max and $min not allowed on encrypted values" - - description: "$currentDate succeeds on unencrypted, error on encrypted" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: updateOne - arguments: - filter: { } - update: { $currentDate: { "unencrypted": true}} - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - - name: updateOne - arguments: - filter: { } - update: { $currentDate: { "encrypted_string": true }} - result: - errorContains: "$currentDate not allowed on encrypted values" - - description: "$pop succeeds on unencrypted, error on encrypted" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: updateOne - arguments: - filter: { } - update: { $pop: { "unencrypted": 1}} - result: - matchedCount: 1 - modifiedCount: 0 - upsertedCount: 0 - - name: updateOne - arguments: - filter: { } - update: { $pop: { "encrypted_string": 1 }} - result: - errorContains: "$pop not allowed on encrypted values" - - description: "$pull succeeds on unencrypted, error on encrypted" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: updateOne - arguments: - filter: { } - update: { $pull: { "unencrypted": 1}} - result: - matchedCount: 1 - modifiedCount: 0 - upsertedCount: 0 - - name: updateOne - arguments: - filter: { } - update: { $pull: { "encrypted_string": 1 }} - result: - errorContains: "$pull not allowed on encrypted values" - - description: "$pullAll succeeds on unencrypted, error on encrypted" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: updateOne - arguments: - filter: { } - update: { $pullAll: { "unencrypted": [1] }} - result: - matchedCount: 1 - modifiedCount: 0 - upsertedCount: 0 - - name: updateOne - arguments: - filter: { } - update: { $pullAll: { "encrypted_string": [1] }} - result: - errorContains: "$pullAll not allowed on encrypted values" - - description: "$push succeeds on unencrypted, error on encrypted" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: updateOne - arguments: - filter: { } - update: { $push: { "unencrypted": 1}} - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - - name: updateOne - arguments: - filter: { } - update: { $push: { "encrypted_string": 1 }} - result: - errorContains: "$push not allowed on encrypted values" - - description: "array filters on encrypted fields does not error in mongocryptd, but errors in mongod" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: updateOne - arguments: - filter: { } - update: { $set : { "encrypted_string.$[i].x": 1 }} - arrayFilters: [{ i.x: 1 }] - result: - errorContains: "Array update operations not allowed on encrypted values" - - description: "positional operator succeeds on unencrypted, errors on encrypted" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: updateOne - arguments: - filter: { "unencrypted": 1 } - update: { $set : { "unencrypted.$": 1 }} - result: - matchedCount: 0 - modifiedCount: 0 - upsertedCount: 0 - - name: updateOne - arguments: - filter: { "encrypted_string": "abc" } - update: { $set : { "encrypted_string.$": "abc" }} - result: - errorContains: "Cannot encrypt fields below '$' positional update operator" - - description: "an update that would produce an array on an encrypted field errors" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: updateOne - arguments: - filter: { } - update: { $set : { "encrypted_string": [1,2] }} - result: - # DRIVERS-2272: The expected error message changed in mongocryptd 6.0. Before it was: - # "Cannot encrypt element of type array because schema requires that type is one of: [ string ]" - # After it is: - # "Cannot encrypt element of type: array" - # Only check for the common prefix. - errorContains: "Cannot encrypt element of type" - - description: "an insert with encrypted field on _id errors" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - schemaMap: - "default.default": {'properties': {'_id': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}}} - operations: - - name: insertOne - arguments: - document: { _id: 1 } - result: - errorContains: "Invalid schema containing the 'encrypt' keyword." - - description: "an insert with an array value for an encrypted field fails" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: { encrypted_string: [ "123", "456"] } - result: - # DRIVERS-2272: The expected error message changed in mongocryptd 6.0. Before it was: - # "Cannot encrypt element of type array because schema requires that type is one of: [ string ]" - # After it is: - # "Cannot encrypt element of type: array" - # Only check for the common prefix. - errorContains: "Cannot encrypt element of type" - - description: "an insert with a Timestamp(0,0) value in the top-level fails" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: { random: {"$timestamp": {"t": 0, "i": 0 }} } - result: - errorContains: "A command that inserts cannot supply Timestamp(0, 0) for an encrypted" - - description: "distinct with the key referring to a field where the keyID is a JSON Pointer errors" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: distinct - arguments: - filter: {} - fieldName: "encrypted_w_altname" - result: - errorContains: "The distinct key is not allowed to be marked for encryption with a non-UUID keyId" \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/badSchema.json b/testdata/client-side-encryption/legacy/badSchema.json deleted file mode 100644 index 1fd0f8ed3f..0000000000 --- a/testdata/client-side-encryption/legacy/badSchema.json +++ /dev/null @@ -1,254 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "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" - ] - } - ], - "tests": [ - { - "description": "Schema with an encrypted field in an array", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "properties": { - "encrypted_string": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random" - } - } - }, - "bsonType": "array" - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_string": "string0" - } - }, - "result": { - "errorContains": "Invalid schema" - } - } - ], - "outcome": { - "collection": { - "data": [] - } - } - }, - { - "description": "Schema without specifying parent object types", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "properties": { - "foo": { - "properties": { - "bar": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random" - } - } - } - } - } - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_string": "string0" - } - }, - "result": { - "errorContains": "Invalid schema" - } - } - ], - "outcome": { - "collection": { - "data": [] - } - } - }, - { - "description": "Schema with siblings of encrypt document", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "properties": { - "encrypted_string": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random" - }, - "bsonType": "object" - } - } - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_string": "string0" - } - }, - "result": { - "errorContains": "'encrypt' cannot be used in conjunction with 'bsonType'" - } - } - ], - "outcome": { - "collection": { - "data": [] - } - } - }, - { - "description": "Schema with logical keywords", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "anyOf": [ - { - "properties": { - "encrypted_string": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random" - } - } - } - } - ] - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_string": "string0" - } - }, - "result": { - "errorContains": "Invalid schema" - } - } - ], - "outcome": { - "collection": { - "data": [] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/badSchema.yml b/testdata/client-side-encryption/legacy/badSchema.yml deleted file mode 100644 index 035774de59..0000000000 --- a/testdata/client-side-encryption/legacy/badSchema.yml +++ /dev/null @@ -1,73 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: [] -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']}] - -tests: - - description: "Schema with an encrypted field in an array" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'properties': {'encrypted_string': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Random'}}}, 'bsonType': 'array'} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 1, encrypted_string: "string0" } - result: - errorContains: "Invalid schema" - outcome: - collection: - data: [] - - description: "Schema without specifying parent object types" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'properties': {'foo': {'properties': {'bar': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Random'}}}}}} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: *doc0 - result: - errorContains: "Invalid schema" - outcome: - collection: - data: [] - - description: "Schema with siblings of encrypt document" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'properties': {'encrypted_string': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Random'}, 'bsonType': 'object'}}} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: *doc0 - result: - errorContains: "'encrypt' cannot be used in conjunction with 'bsonType'" - outcome: - collection: - data: [] - - description: "Schema with logical keywords" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'anyOf': [{'properties': {'encrypted_string': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Random'}}}}]} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: *doc0 - result: - errorContains: "Invalid schema" - outcome: - collection: - data: [] \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/basic.json b/testdata/client-side-encryption/legacy/basic.json deleted file mode 100644 index 3ed066f530..0000000000 --- a/testdata/client-side-encryption/legacy/basic.json +++ /dev/null @@ -1,350 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "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" - }, - "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" - ] - } - ], - "tests": [ - { - "description": "Insert with deterministic encryption, then find it", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_string": "string0" - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": [ - { - "_id": 1, - "encrypted_string": "string0" - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - ], - "ordered": true - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "_id": 1 - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - ] - } - } - }, - { - "description": "Insert with randomized encryption, then find it", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "random": "123" - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": [ - { - "_id": 1, - "random": "123" - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "random": { - "$$type": "binData" - } - } - ], - "ordered": true - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "_id": 1 - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "random": { - "$$type": "binData" - } - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/basic.yml b/testdata/client-side-encryption/legacy/basic.yml deleted file mode 100644 index dfbf5270cf..0000000000 --- a/testdata/client-side-encryption/legacy/basic.yml +++ /dev/null @@ -1,102 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: [] -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'} -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']}] - -tests: - - description: "Insert with deterministic encryption, then find it" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 1, encrypted_string: "string0" } - - name: find - arguments: - filter: { _id: 1 } - result: [*doc0] - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } - ordered: true - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: { _id: 1 } - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc0_encrypted - - description: "Insert with randomized encryption, then find it" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc1 { _id: 1, random: "123" } - - name: find - arguments: - filter: { _id: 1 } - result: [*doc1] - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1, random: { $$type: "binData" } } - ordered: true - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: { _id: 1 } - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - { _id: 1, random: { $$type: "binData" } } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/bulk.json b/testdata/client-side-encryption/legacy/bulk.json deleted file mode 100644 index 1b62e5e8ab..0000000000 --- a/testdata/client-side-encryption/legacy/bulk.json +++ /dev/null @@ -1,333 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "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" - }, - "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" - ] - } - ], - "tests": [ - { - "description": "Bulk write with encryption", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_string": "string0", - "random": "abc" - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 2, - "encrypted_string": "string1" - } - } - }, - { - "name": "updateOne", - "arguments": { - "filter": { - "encrypted_string": "string0" - }, - "update": { - "$set": { - "encrypted_string": "string1" - } - } - } - }, - { - "name": "deleteOne", - "arguments": { - "filter": { - "$and": [ - { - "encrypted_string": "string1" - }, - { - "_id": 2 - } - ] - } - } - } - ], - "options": { - "ordered": true - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - }, - "random": { - "$$type": "binData" - } - }, - { - "_id": 2, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - } - ], - "ordered": true - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "update": "default", - "updates": [ - { - "q": { - "encrypted_string": { - "$eq": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - }, - "u": { - "$set": { - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - } - } - } - ], - "ordered": true - }, - "command_name": "update" - } - }, - { - "command_started_event": { - "command": { - "delete": "default", - "deletes": [ - { - "q": { - "$and": [ - { - "encrypted_string": { - "$eq": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - } - }, - { - "_id": { - "$eq": 2 - } - } - ] - }, - "limit": 1 - } - ], - "ordered": true - }, - "command_name": "delete" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - }, - "random": { - "$$type": "binData" - } - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/bulk.yml b/testdata/client-side-encryption/legacy/bulk.yml deleted file mode 100644 index 824ccdaa10..0000000000 --- a/testdata/client-side-encryption/legacy/bulk.yml +++ /dev/null @@ -1,78 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: [] -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'} -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']}] - -tests: - - description: "Bulk write with encryption" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: bulkWrite - arguments: - requests: - - name: insertOne - arguments: - document: &doc0 { _id: 1, encrypted_string: "string0", random: "abc" } - - name: insertOne - arguments: - document: &doc1 { _id: 2, encrypted_string: "string1" } - - name: updateOne - arguments: - filter: { encrypted_string: "string0" } - update: { $set: { encrypted_string: "string1" } } - - name: deleteOne - arguments: - filter: { $and: [{ encrypted_string: "string1" }, { _id: 2 }]} - options: { ordered: true } - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}}, random: { $$type: "binData" } } - - &doc1_encrypted { _id: 2, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}} } - ordered: true - command_name: insert - - command_started_event: - command: - update: *collection_name - updates: - - q: { encrypted_string: { $eq: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} }} - u: {$set: { encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}} }} - ordered: true - command_name: update - - command_started_event: - command: - delete: *collection_name - deletes: - - q: { "$and": [ { "encrypted_string": { "$eq": {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}} }}, { "_id": { "$eq": 2 }} ] } - limit: 1 - ordered: true - command_name: delete - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}}, random: { $$type: "binData" } } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/bypassAutoEncryption.json b/testdata/client-side-encryption/legacy/bypassAutoEncryption.json deleted file mode 100644 index 9d09cb3fa9..0000000000 --- a/testdata/client-side-encryption/legacy/bypassAutoEncryption.json +++ /dev/null @@ -1,402 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - ], - "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" - }, - "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" - ] - } - ], - "tests": [ - { - "description": "Insert with bypassAutoEncryption", - "clientOptions": { - "autoEncryptOpts": { - "bypassAutoEncryption": true, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 2, - "encrypted_string": "string0" - }, - "bypassDocumentValidation": true - } - }, - { - "name": "find", - "arguments": { - "filter": {} - }, - "result": [ - { - "_id": 1, - "encrypted_string": "string0" - }, - { - "_id": 2, - "encrypted_string": "string0" - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 2, - "encrypted_string": "string0" - } - ], - "ordered": true - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": {} - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - }, - { - "_id": 2, - "encrypted_string": "string0" - } - ] - } - } - }, - { - "description": "Insert with bypassAutoEncryption for local schema", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "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" - } - }, - "bypassAutoEncryption": true, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 2, - "encrypted_string": "string0" - }, - "bypassDocumentValidation": true - } - }, - { - "name": "find", - "arguments": { - "filter": {} - }, - "result": [ - { - "_id": 1, - "encrypted_string": "string0" - }, - { - "_id": 2, - "encrypted_string": "string0" - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 2, - "encrypted_string": "string0" - } - ], - "ordered": true - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": {} - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - }, - { - "_id": 2, - "encrypted_string": "string0" - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/bypassAutoEncryption.yml b/testdata/client-side-encryption/legacy/bypassAutoEncryption.yml deleted file mode 100644 index 7a7bf74e1d..0000000000 --- a/testdata/client-side-encryption/legacy/bypassAutoEncryption.yml +++ /dev/null @@ -1,100 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: [{_id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} }] -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'} -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']}] - -tests: - - description: "Insert with bypassAutoEncryption" - clientOptions: - autoEncryptOpts: - bypassAutoEncryption: true - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: { _id: 2, encrypted_string: "string0" } - bypassDocumentValidation: true - - name: find - arguments: - filter: { } - result: - - { _id: 1, encrypted_string: "string0" } - - { _id: 2, encrypted_string: "string0" } - expectations: - - command_started_event: - command: - insert: *collection_name - documents: - # No encryption. - - { _id: 2, encrypted_string: "string0" } - ordered: true - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: { } - command_name: find - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } - - { _id: 2, encrypted_string: "string0" } - - description: "Insert with bypassAutoEncryption for local schema" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'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'} - bypassAutoEncryption: true - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: { _id: 2, encrypted_string: "string0" } - bypassDocumentValidation: true - - name: find - arguments: - filter: { } - result: - - { _id: 1, encrypted_string: "string0" } - - { _id: 2, encrypted_string: "string0" } - expectations: - - command_started_event: - command: - insert: *collection_name - documents: - # No encryption. - - { _id: 2, encrypted_string: "string0" } - ordered: true - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: { } - command_name: find - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } - - { _id: 2, encrypted_string: "string0" } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/bypassedCommand.json b/testdata/client-side-encryption/legacy/bypassedCommand.json deleted file mode 100644 index 18054a70cb..0000000000 --- a/testdata/client-side-encryption/legacy/bypassedCommand.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "json_schema": {}, - "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" - ] - } - ], - "tests": [ - { - "description": "ping is bypassed", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "runCommand", - "object": "database", - "command_name": "ping", - "arguments": { - "command": { - "ping": 1 - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "ping": 1 - }, - "command_name": "ping" - } - } - ] - }, - { - "description": "kill op is not bypassed", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "runCommand", - "object": "database", - "command_name": "killOp", - "arguments": { - "command": { - "killOp": 1, - "op": 1234 - } - }, - "result": { - "errorContains": "command not supported for auto encryption: killOp" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/bypassedCommand.yml b/testdata/client-side-encryption/legacy/bypassedCommand.yml deleted file mode 100644 index d3c1fc91fe..0000000000 --- a/testdata/client-side-encryption/legacy/bypassedCommand.yml +++ /dev/null @@ -1,43 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: [] -json_schema: {} -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']}] - -tests: - - description: "ping is bypassed" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: runCommand - object: database - command_name: ping - arguments: - command: - ping: 1 - expectations: - # No listCollections, no mongocryptd command, just the ping. - - command_started_event: - command: - ping: 1 - command_name: ping - - description: "kill op is not bypassed" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: runCommand - object: database - command_name: killOp - arguments: - command: - killOp: 1 - op: 1234 - result: - errorContains: "command not supported for auto encryption: killOp" diff --git a/testdata/client-side-encryption/legacy/count.json b/testdata/client-side-encryption/legacy/count.json deleted file mode 100644 index 9df8cd639e..0000000000 --- a/testdata/client-side-encryption/legacy/count.json +++ /dev/null @@ -1,229 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - }, - { - "_id": 2, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - ], - "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" - }, - "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" - ] - } - ], - "tests": [ - { - "description": "Count with deterministic encryption", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "count", - "arguments": { - "filter": { - "encrypted_string": "string0" - } - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "count": "default", - "query": { - "encrypted_string": { - "$eq": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - } - }, - "command_name": "count" - } - } - ] - }, - { - "description": "Count fails when filtering on a random encrypted field", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "count", - "arguments": { - "filter": { - "random": "abc" - } - }, - "result": { - "errorContains": "Cannot query on fields encrypted with the randomized encryption" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/count.yml b/testdata/client-side-encryption/legacy/count.yml deleted file mode 100644 index b8c436a4c0..0000000000 --- a/testdata/client-side-encryption/legacy/count.yml +++ /dev/null @@ -1,54 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: - - &doc0_encrypted { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } - - &doc1_encrypted { _id: 2, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } -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'} -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']}] - -tests: - - description: "Count with deterministic encryption" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: count - arguments: - filter: { encrypted_string: "string0" } - result: 2 - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - count: *collection_name - query: { encrypted_string: { $eq: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } } - command_name: count - - description: "Count fails when filtering on a random encrypted field" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment - operations: - - name: count - arguments: - filter: { random: "abc" } - result: - errorContains: "Cannot query on fields encrypted with the randomized encryption" \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/countDocuments.json b/testdata/client-side-encryption/legacy/countDocuments.json deleted file mode 100644 index 07ff97f264..0000000000 --- a/testdata/client-side-encryption/legacy/countDocuments.json +++ /dev/null @@ -1,241 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - }, - { - "_id": 2, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - } - ], - "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" - }, - "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" - ] - } - ], - "tests": [ - { - "description": "countDocuments with deterministic encryption", - "skipReason": "waiting on SERVER-39395", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "countDocuments", - "arguments": { - "filter": { - "encrypted_string": "string0" - } - }, - "result": 1 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "default", - "pipeline": [ - { - "$match": { - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "command_name": "aggregate" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - }, - { - "_id": 2, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/countDocuments.yml b/testdata/client-side-encryption/legacy/countDocuments.yml deleted file mode 100644 index e28b478c05..0000000000 --- a/testdata/client-side-encryption/legacy/countDocuments.yml +++ /dev/null @@ -1,52 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: - - &doc0_encrypted { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } - - &doc1_encrypted { _id: 2, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}} } -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'} -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']}] - -tests: - - description: "countDocuments with deterministic encryption" - skipReason: "waiting on SERVER-39395" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: countDocuments - arguments: - filter: { encrypted_string: "string0" } - result: 1 - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - aggregate: *collection_name - pipeline: - - { $match: { encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} }} - - { $group: { _id: 1, n: { $sum: 1 }}} - command_name: aggregate - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc0_encrypted - - *doc1_encrypted \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/create-and-createIndexes.json b/testdata/client-side-encryption/legacy/create-and-createIndexes.json deleted file mode 100644 index 48638a97c8..0000000000 --- a/testdata/client-side-encryption/legacy/create-and-createIndexes.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "tests": [ - { - "description": "create is OK", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "unencryptedCollection" - } - }, - { - "name": "createCollection", - "object": "database", - "arguments": { - "collection": "unencryptedCollection", - "validator": { - "unencrypted_string": "foo" - } - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "unencryptedCollection" - } - } - ] - }, - { - "description": "createIndexes is OK", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "unencryptedCollection" - } - }, - { - "name": "createCollection", - "object": "database", - "arguments": { - "collection": "unencryptedCollection" - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "command": { - "createIndexes": "unencryptedCollection", - "indexes": [ - { - "name": "name", - "key": { - "name": 1 - } - } - ] - } - } - }, - { - "name": "assertIndexExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "unencryptedCollection", - "index": "name" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/create-and-createIndexes.yml b/testdata/client-side-encryption/legacy/create-and-createIndexes.yml deleted file mode 100644 index 2d9f5ef711..0000000000 --- a/testdata/client-side-encryption/legacy/create-and-createIndexes.yml +++ /dev/null @@ -1,58 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: [] -tests: - - description: "create is OK" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - # Drop to remove a collection that may exist from previous test runs. - - name: dropCollection - object: database - arguments: - collection: "unencryptedCollection" - - name: createCollection - object: database - arguments: - collection: "unencryptedCollection" - validator: - unencrypted_string: "foo" - - name: assertCollectionExists - object: testRunner - arguments: - database: *database_name - collection: "unencryptedCollection" - - description: "createIndexes is OK" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - # Drop to remove a collection that may exist from previous test runs. - - name: dropCollection - object: database - arguments: - collection: "unencryptedCollection" - - name: createCollection - object: database - arguments: - collection: "unencryptedCollection" - - name: runCommand - object: database - arguments: - command: - createIndexes: "unencryptedCollection" - indexes: - - name: "name" - key: { name: 1 } - - name: assertIndexExists - object: testRunner - arguments: - database: *database_name - collection: "unencryptedCollection" - index: name \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/delete.json b/testdata/client-side-encryption/legacy/delete.json deleted file mode 100644 index a6f4ffde91..0000000000 --- a/testdata/client-side-encryption/legacy/delete.json +++ /dev/null @@ -1,340 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - }, - { - "_id": 2, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - } - ], - "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" - }, - "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" - ] - } - ], - "tests": [ - { - "description": "deleteOne with deterministic encryption", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "deleteOne", - "arguments": { - "filter": { - "encrypted_string": "string0" - } - }, - "result": { - "deletedCount": 1 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "delete": "default", - "deletes": [ - { - "q": { - "encrypted_string": { - "$eq": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - }, - "limit": 1 - } - ], - "ordered": true - }, - "command_name": "delete" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 2, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - } - ] - } - } - }, - { - "description": "deleteMany with deterministic encryption", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "deleteMany", - "arguments": { - "filter": { - "encrypted_string": { - "$in": [ - "string0", - "string1" - ] - } - } - }, - "result": { - "deletedCount": 2 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "delete": "default", - "deletes": [ - { - "q": { - "encrypted_string": { - "$in": [ - { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - }, - { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - ] - } - }, - "limit": 0 - } - ], - "ordered": true - }, - "command_name": "delete" - } - } - ], - "outcome": { - "collection": { - "data": [] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/delete.yml b/testdata/client-side-encryption/legacy/delete.yml deleted file mode 100644 index 60810d063d..0000000000 --- a/testdata/client-side-encryption/legacy/delete.yml +++ /dev/null @@ -1,91 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: - - &doc0_encrypted { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } - - &doc1_encrypted { _id: 2, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}} } -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'} -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']}] - -tests: - - description: "deleteOne with deterministic encryption" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: deleteOne - arguments: - filter: { encrypted_string: "string0" } - result: - deletedCount: 1 - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - delete: *collection_name - deletes: - - q: { encrypted_string: { $eq: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } } - limit: 1 - ordered: true - command_name: delete - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc1_encrypted - - description: "deleteMany with deterministic encryption" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: deleteMany - arguments: - filter: { encrypted_string: { $in: [ "string0", "string1" ] } } - result: - deletedCount: 2 - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - delete: *collection_name - deletes: - - q: { encrypted_string: { $in : [ {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}}, {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}} ] } } - limit: 0 - ordered: true - command_name: delete - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: [] \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/distinct.json b/testdata/client-side-encryption/legacy/distinct.json deleted file mode 100644 index 9786b07814..0000000000 --- a/testdata/client-side-encryption/legacy/distinct.json +++ /dev/null @@ -1,276 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - }, - { - "_id": 2, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - }, - { - "_id": 3, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - } - ], - "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" - }, - "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" - ] - } - ], - "tests": [ - { - "description": "distinct with deterministic encryption", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "distinct", - "arguments": { - "filter": { - "encrypted_string": "string0" - }, - "fieldName": "encrypted_string" - }, - "result": [ - "string0" - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "distinct": "default", - "key": "encrypted_string", - "query": { - "encrypted_string": { - "$eq": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - } - }, - "command_name": "distinct" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - }, - { - "_id": 2, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - }, - { - "_id": 3, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - } - ] - } - } - }, - { - "description": "Distinct fails when filtering on a random encrypted field", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "distinct", - "arguments": { - "filter": { - "random": "abc" - }, - "fieldName": "encrypted_string" - }, - "result": { - "errorContains": "Cannot query on fields encrypted with the randomized encryption" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/distinct.yml b/testdata/client-side-encryption/legacy/distinct.yml deleted file mode 100644 index ca1d8fbf6b..0000000000 --- a/testdata/client-side-encryption/legacy/distinct.yml +++ /dev/null @@ -1,66 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: - - &doc0_encrypted { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } - - &doc1_encrypted { _id: 2, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } - - &doc2_encrypted { _id: 3, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}} } -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'} -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']}] - -tests: - - description: "distinct with deterministic encryption" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: distinct - arguments: - filter: { encrypted_string: "string0" } - fieldName: "encrypted_string" - result: - - "string0" - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - distinct: *collection_name - key: encrypted_string - query: { encrypted_string: {$eq: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } } - command_name: distinct - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc0_encrypted - - *doc1_encrypted - - *doc2_encrypted - - description: "Distinct fails when filtering on a random encrypted field" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment - operations: - - name: distinct - arguments: - filter: { random: "abc" } - fieldName: "encrypted_string" - result: - errorContains: "Cannot query on fields encrypted with the randomized encryption" \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/explain.json b/testdata/client-side-encryption/legacy/explain.json deleted file mode 100644 index 8ca3b48d37..0000000000 --- a/testdata/client-side-encryption/legacy/explain.json +++ /dev/null @@ -1,239 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "7.0.0" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - }, - { - "_id": 2, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - } - ], - "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" - }, - "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" - ] - } - ], - "tests": [ - { - "description": "Explain a find with deterministic encryption", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "runCommand", - "object": "database", - "command_name": "explain", - "arguments": { - "command": { - "explain": { - "find": "default", - "filter": { - "encrypted_string": "string1" - } - } - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "explain": { - "find": "default", - "filter": { - "encrypted_string": { - "$eq": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - } - } - }, - "verbosity": "allPlansExecution" - }, - "command_name": "explain" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - }, - { - "_id": 2, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/explain.yml b/testdata/client-side-encryption/legacy/explain.yml deleted file mode 100644 index 325928a72e..0000000000 --- a/testdata/client-side-encryption/legacy/explain.yml +++ /dev/null @@ -1,57 +0,0 @@ -runOn: - - minServerVersion: "7.0.0" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: - - &doc0_encrypted { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } - - &doc1_encrypted { _id: 2, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}} } -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'} -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']}] - -tests: - - description: "Explain a find with deterministic encryption" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: runCommand - object: database - command_name: explain - arguments: - command: - explain: - find: *collection_name - filter: { encrypted_string : "string1" } - - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - explain: - find: *collection_name - filter: - { encrypted_string: { $eq: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}} } } - verbosity: "allPlansExecution" - command_name: explain - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc0_encrypted - - *doc1_encrypted \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/find.json b/testdata/client-side-encryption/legacy/find.json deleted file mode 100644 index 1feddab0e3..0000000000 --- a/testdata/client-side-encryption/legacy/find.json +++ /dev/null @@ -1,408 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - }, - { - "_id": 2, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - }, - "random": { - "$binary": { - "base64": "AgAAAAAAAAAAAAAAAAAAAAACyfp+lXvKOi7f5vh6ZsCijLEaXFKq1X06RmyS98ZvmMQGixTw8HM1f/bGxZjGwvYwjXOkIEb7Exgb8p2KCDI5TQ==", - "subType": "06" - } - } - } - ], - "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" - }, - "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" - ] - } - ], - "tests": [ - { - "description": "Find with deterministic encryption", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "find", - "arguments": { - "filter": { - "encrypted_string": "string0" - } - }, - "result": [ - { - "_id": 1, - "encrypted_string": "string0" - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "encrypted_string": { - "$eq": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - }, - { - "_id": 2, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - }, - "random": { - "$binary": { - "base64": "AgAAAAAAAAAAAAAAAAAAAAACyfp+lXvKOi7f5vh6ZsCijLEaXFKq1X06RmyS98ZvmMQGixTw8HM1f/bGxZjGwvYwjXOkIEb7Exgb8p2KCDI5TQ==", - "subType": "06" - } - } - } - ] - } - } - }, - { - "description": "Find with $in with deterministic encryption", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "find", - "arguments": { - "filter": { - "encrypted_string": { - "$in": [ - "string0", - "string1" - ] - } - } - }, - "result": [ - { - "_id": 1, - "encrypted_string": "string0" - }, - { - "_id": 2, - "encrypted_string": "string1", - "random": "abc" - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "encrypted_string": { - "$in": [ - { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - }, - { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - ] - } - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - }, - { - "_id": 2, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - }, - "random": { - "$binary": { - "base64": "AgAAAAAAAAAAAAAAAAAAAAACyfp+lXvKOi7f5vh6ZsCijLEaXFKq1X06RmyS98ZvmMQGixTw8HM1f/bGxZjGwvYwjXOkIEb7Exgb8p2KCDI5TQ==", - "subType": "06" - } - } - } - ] - } - } - }, - { - "description": "Find fails when filtering on a random encrypted field", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "find", - "arguments": { - "filter": { - "random": "abc" - } - }, - "result": { - "errorContains": "Cannot query on fields encrypted with the randomized encryption" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/find.yml b/testdata/client-side-encryption/legacy/find.yml deleted file mode 100644 index 20179a314c..0000000000 --- a/testdata/client-side-encryption/legacy/find.yml +++ /dev/null @@ -1,105 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: - - &doc0_encrypted { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } - - &doc1_encrypted { _id: 2, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}} , random: {'$binary': {'base64': 'AgAAAAAAAAAAAAAAAAAAAAACyfp+lXvKOi7f5vh6ZsCijLEaXFKq1X06RmyS98ZvmMQGixTw8HM1f/bGxZjGwvYwjXOkIEb7Exgb8p2KCDI5TQ==', 'subType': '06'}} } -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'} -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']}] - -tests: - - description: "Find with deterministic encryption" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: find - arguments: - filter: - { encrypted_string: "string0" } - result: - - &doc0 { _id: 1, encrypted_string: "string0" } - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - find: *collection_name - filter: - { encrypted_string: { $eq: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } } - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc0_encrypted - - *doc1_encrypted - - description: "Find with $in with deterministic encryption" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: find - arguments: - filter: - { encrypted_string: { $in: [ "string0", "string1" ] } } - result: - - { _id: 1, encrypted_string: "string0" } - - &doc1 { _id: 2, encrypted_string: "string1", random: "abc" } - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - find: *collection_name - filter: - # Note, the values are re-ordered, but this is logically equivalent. - { encrypted_string: { $in: [ {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}}, {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}} ] } } - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc0_encrypted - - *doc1_encrypted - - description: "Find fails when filtering on a random encrypted field" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment - operations: - - name: find - arguments: - filter: { random: "abc" } - result: - errorContains: "Cannot query on fields encrypted with the randomized encryption" \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/findOneAndDelete.json b/testdata/client-side-encryption/legacy/findOneAndDelete.json deleted file mode 100644 index e418a4581b..0000000000 --- a/testdata/client-side-encryption/legacy/findOneAndDelete.json +++ /dev/null @@ -1,221 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - }, - { - "_id": 2, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - } - ], - "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" - }, - "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" - ] - } - ], - "tests": [ - { - "description": "findOneAndDelete with deterministic encryption", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "findOneAndDelete", - "arguments": { - "filter": { - "encrypted_string": "string0" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "findAndModify": "default", - "query": { - "encrypted_string": { - "$eq": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - }, - "remove": true - }, - "command_name": "findAndModify" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 2, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/findOneAndDelete.yml b/testdata/client-side-encryption/legacy/findOneAndDelete.yml deleted file mode 100644 index 6650f2132d..0000000000 --- a/testdata/client-side-encryption/legacy/findOneAndDelete.yml +++ /dev/null @@ -1,50 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: - - &doc0_encrypted { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } - - &doc1_encrypted { _id: 2, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}} } -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'} -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']}] - -tests: - - description: "findOneAndDelete with deterministic encryption" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: findOneAndDelete - arguments: - filter: - { encrypted_string: "string0" } - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - findAndModify: *collection_name - query: - { encrypted_string: { $eq: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } } - remove: true - command_name: findAndModify - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc1_encrypted \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/findOneAndReplace.json b/testdata/client-side-encryption/legacy/findOneAndReplace.json deleted file mode 100644 index 78baca8432..0000000000 --- a/testdata/client-side-encryption/legacy/findOneAndReplace.json +++ /dev/null @@ -1,227 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - ], - "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" - }, - "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" - ] - } - ], - "tests": [ - { - "description": "findOneAndReplace with deterministic encryption", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "findOneAndReplace", - "arguments": { - "filter": { - "encrypted_string": "string0" - }, - "replacement": { - "encrypted_string": "string1" - }, - "returnDocument": "Before" - }, - "result": { - "_id": 1, - "encrypted_string": "string0" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "findAndModify": "default", - "query": { - "encrypted_string": { - "$eq": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - }, - "update": { - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - } - }, - "command_name": "findAndModify" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/findOneAndReplace.yml b/testdata/client-side-encryption/legacy/findOneAndReplace.yml deleted file mode 100644 index f39f3c0fb4..0000000000 --- a/testdata/client-side-encryption/legacy/findOneAndReplace.yml +++ /dev/null @@ -1,50 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: - - &doc0_encrypted { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } -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'} -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']}] - -tests: - - description: "findOneAndReplace with deterministic encryption" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: findOneAndReplace - arguments: - filter: { encrypted_string: "string0" } - replacement: { encrypted_string: "string1" } - returnDocument: Before - result: { _id: 1, encrypted_string: "string0" } - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - findAndModify: *collection_name - query: { encrypted_string: { $eq: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } } - update: { encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}} } - command_name: findAndModify - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}} } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/findOneAndUpdate.json b/testdata/client-side-encryption/legacy/findOneAndUpdate.json deleted file mode 100644 index 1d85851151..0000000000 --- a/testdata/client-side-encryption/legacy/findOneAndUpdate.json +++ /dev/null @@ -1,231 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - ], - "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" - }, - "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" - ] - } - ], - "tests": [ - { - "description": "findOneAndUpdate with deterministic encryption", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "encrypted_string": "string0" - }, - "update": { - "$set": { - "encrypted_string": "string1" - } - }, - "returnDocument": "Before" - }, - "result": { - "_id": 1, - "encrypted_string": "string0" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "findAndModify": "default", - "query": { - "encrypted_string": { - "$eq": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - }, - "update": { - "$set": { - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - } - } - }, - "command_name": "findAndModify" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/findOneAndUpdate.yml b/testdata/client-side-encryption/legacy/findOneAndUpdate.yml deleted file mode 100644 index 459902fd44..0000000000 --- a/testdata/client-side-encryption/legacy/findOneAndUpdate.yml +++ /dev/null @@ -1,50 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: - - &doc0_encrypted { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } -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'} -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']}] - -tests: - - description: "findOneAndUpdate with deterministic encryption" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: findOneAndUpdate - arguments: - filter: { encrypted_string: "string0" } - update: { $set: { encrypted_string: "string1" } } - returnDocument: Before - result: { _id: 1, encrypted_string: "string0" } - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - findAndModify: *collection_name - query: { encrypted_string: { $eq: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } } - update: { $set: { encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}} } } - command_name: findAndModify - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}} } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-BypassQueryAnalysis.json b/testdata/client-side-encryption/legacy/fle2v2-BypassQueryAnalysis.json deleted file mode 100644 index 9b28df2f9a..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-BypassQueryAnalysis.json +++ /dev/null @@ -1,261 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "7.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "BypassQueryAnalysis decrypts", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - }, - "bypassQueryAnalysis": true - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedIndexed": { - "$binary": { - "base64": "C18BAAAFZAAgAAAAANnt+eLTkv4GdDPl8IAfJOvTzArOgFJQ2S/DcLza4W0DBXMAIAAAAAD2u+omZme3P2gBPehMQyQHQ153tPN1+z7bksYA9jKTpAVwADAAAAAAUnCOQqIvmR65YKyYnsiVfVrg9hwUVO3RhhKExo3RWOzgaS0QdsBL5xKFS0JhZSoWBXUAEAAAAAQSNFZ4EjSYdhI0EjRWeJASEHQAAgAAAAV2AFAAAAAAEjRWeBI0mHYSNBI0VniQEpQbp/ZJpWBKeDtKLiXb0P2E9wvc0g3f373jnYQYlJquOrlPOoEy3ngsHPJuSUijvWDsrQzqYa349K7G/66qaXEFZQAgAAAAAOuac/eRLYakKX6B0vZ1r3QodOQFfjqJD+xlGiPu4/PsBWwAIAAAAACkm0o9bj6j0HuADKc0svbqO2UHj6GrlNdF6yKNxh63xRJrAAAAAAAAAAAAAA==", - "subType": "06" - } - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": [ - { - "_id": 1, - "encryptedIndexed": "123" - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedIndexed": { - "$binary": { - "base64": "C18BAAAFZAAgAAAAANnt+eLTkv4GdDPl8IAfJOvTzArOgFJQ2S/DcLza4W0DBXMAIAAAAAD2u+omZme3P2gBPehMQyQHQ153tPN1+z7bksYA9jKTpAVwADAAAAAAUnCOQqIvmR65YKyYnsiVfVrg9hwUVO3RhhKExo3RWOzgaS0QdsBL5xKFS0JhZSoWBXUAEAAAAAQSNFZ4EjSYdhI0EjRWeJASEHQAAgAAAAV2AFAAAAAAEjRWeBI0mHYSNBI0VniQEpQbp/ZJpWBKeDtKLiXb0P2E9wvc0g3f373jnYQYlJquOrlPOoEy3ngsHPJuSUijvWDsrQzqYa349K7G/66qaXEFZQAgAAAAAOuac/eRLYakKX6B0vZ1r3QodOQFfjqJD+xlGiPu4/PsBWwAIAAAAACkm0o9bj6j0HuADKc0svbqO2UHj6GrlNdF6yKNxh63xRJrAAAAAAAAAAAAAA==", - "subType": "06" - } - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "_id": 1 - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encryptedIndexed": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "31eCYlbQoVboc5zwC8IoyJVSkag9PxREka8dkmbXJeY=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-BypassQueryAnalysis.yml b/testdata/client-side-encryption/legacy/fle2v2-BypassQueryAnalysis.yml deleted file mode 100644 index 51e7a56758..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-BypassQueryAnalysis.yml +++ /dev/null @@ -1,89 +0,0 @@ -# Requires libmongocrypt 1.8.0. -runOn: - - minServerVersion: "7.0.0" - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedIndexed', 'bsonType': 'string', 'queries': {'queryType': 'equality', 'contention': {'$numberLong': '0'}}}, {'keyId': {'$binary': {'base64': 'q83vqxI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedUnindexed', 'bsonType': 'string'}]} -key_vault_data: [{'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] - -tests: - - description: "BypassQueryAnalysis decrypts" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - bypassQueryAnalysis: true - operations: - - name: insertOne - arguments: - document: &doc0_encrypted { - "_id": 1, - "encryptedIndexed": { - "$binary": { - # Payload has an IndexKey of key1 and UserKey of key1. - "base64": "C18BAAAFZAAgAAAAANnt+eLTkv4GdDPl8IAfJOvTzArOgFJQ2S/DcLza4W0DBXMAIAAAAAD2u+omZme3P2gBPehMQyQHQ153tPN1+z7bksYA9jKTpAVwADAAAAAAUnCOQqIvmR65YKyYnsiVfVrg9hwUVO3RhhKExo3RWOzgaS0QdsBL5xKFS0JhZSoWBXUAEAAAAAQSNFZ4EjSYdhI0EjRWeJASEHQAAgAAAAV2AFAAAAAAEjRWeBI0mHYSNBI0VniQEpQbp/ZJpWBKeDtKLiXb0P2E9wvc0g3f373jnYQYlJquOrlPOoEy3ngsHPJuSUijvWDsrQzqYa349K7G/66qaXEFZQAgAAAAAOuac/eRLYakKX6B0vZ1r3QodOQFfjqJD+xlGiPu4/PsBWwAIAAAAACkm0o9bj6j0HuADKc0svbqO2UHj6GrlNdF6yKNxh63xRJrAAAAAAAAAAAAAA==", - "subType": "06" - } - } - } - - name: find - arguments: - filter: { "_id": 1 } - result: [{"_id": 1, "encryptedIndexed": "123" }] - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - insert: *collection_name - documents: - - *doc0_encrypted - ordered: true - encryptionInformation: - type: 1 - schema: - "default.default": - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: { "_id": 1 } - command_name: find - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - outcome: - collection: - data: - - {"_id": 1, "encryptedIndexed": { "$$type": "binData" }, "__safeContent__": [{ "$binary" : { "base64" : "31eCYlbQoVboc5zwC8IoyJVSkag9PxREka8dkmbXJeY=", "subType" : "00" } }] } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Compact.json b/testdata/client-side-encryption/legacy/fle2v2-Compact.json deleted file mode 100644 index 868095e1e6..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Compact.json +++ /dev/null @@ -1,233 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "7.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - }, - { - "_id": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "HBk9BWihXExNDvTp1lUxOuxuZK2Pe2ZdVdlsxPEBkiO1bS4mG5NNDsQ7zVxJAH8BtdOYp72Ku4Y3nwc0BUpIKsvAKX4eYXtlhv5zUQxWdeNFhg9qK7qb8nqhnnLeT0f25jFSqzWJoT379hfwDeu0bebJHr35QrJ8myZdPMTEDYF08QYQ48ShRBli0S+QzBHHAQiM2iJNr4svg2WR8JSeWQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "Compact works", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "runCommand", - "object": "database", - "command_name": "compactStructuredEncryptionData", - "arguments": { - "command": { - "compactStructuredEncryptionData": "default" - } - }, - "result": { - "ok": 1 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "compactStructuredEncryptionData": "default", - "compactionTokens": { - "encryptedIndexed": { - "$binary": { - "base64": "noN+05JsuO1oDg59yypIGj45i+eFH6HOTXOPpeZ//Mk=", - "subType": "00" - } - }, - "encryptedUnindexed": { - "$binary": { - "base64": "SWO8WEoZ2r2Kx/muQKb7+COizy85nIIUFiHh4K9kcvA=", - "subType": "00" - } - } - } - }, - "command_name": "compactStructuredEncryptionData" - } - } - ] - }, - { - "description": "Compact errors on an unencrypted client", - "operations": [ - { - "name": "runCommand", - "object": "database", - "command_name": "compactStructuredEncryptionData", - "arguments": { - "command": { - "compactStructuredEncryptionData": "default" - } - }, - "result": { - "errorContains": "'compactStructuredEncryptionData.compactionTokens' is missing" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Compact.yml b/testdata/client-side-encryption/legacy/fle2v2-Compact.yml deleted file mode 100644 index 6c1965a5a2..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Compact.yml +++ /dev/null @@ -1,84 +0,0 @@ -# Requires libmongocrypt 1.8.0. libmongocrypt 1.10.0 has a bug (MONGOCRYPT-699) that may cause this test to fail on server version 7. -runOn: - - minServerVersion: "7.0.0" - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedIndexed', 'bsonType': 'string', 'queries': {'queryType': 'equality', 'contention': {'$numberLong': '0'}}}, {'keyId': {'$binary': {'base64': 'q83vqxI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedUnindexed', 'bsonType': 'string'}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}}, {'_id': {'$binary': {'base64': 'q83vqxI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'HBk9BWihXExNDvTp1lUxOuxuZK2Pe2ZdVdlsxPEBkiO1bS4mG5NNDsQ7zVxJAH8BtdOYp72Ku4Y3nwc0BUpIKsvAKX4eYXtlhv5zUQxWdeNFhg9qK7qb8nqhnnLeT0f25jFSqzWJoT379hfwDeu0bebJHr35QrJ8myZdPMTEDYF08QYQ48ShRBli0S+QzBHHAQiM2iJNr4svg2WR8JSeWQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "Compact works" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: runCommand - object: database - command_name: compactStructuredEncryptionData - arguments: - command: - compactStructuredEncryptionData: *collection_name - result: - ok: 1 - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, - {'$binary': {'base64': 'q83vqxI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - compactStructuredEncryptionData: *collection_name - compactionTokens: { - "encryptedIndexed": { - "$binary": { - "base64": "noN+05JsuO1oDg59yypIGj45i+eFH6HOTXOPpeZ//Mk=", - "subType": "00" - } - }, - "encryptedUnindexed": { - "$binary": { - "base64": "SWO8WEoZ2r2Kx/muQKb7+COizy85nIIUFiHh4K9kcvA=", - "subType": "00" - } - } - } - command_name: compactStructuredEncryptionData - - description: "Compact errors on an unencrypted client" - operations: - - name: runCommand - object: database - command_name: compactStructuredEncryptionData - arguments: - command: - compactStructuredEncryptionData: *collection_name - result: - errorContains: "'compactStructuredEncryptionData.compactionTokens' is missing" \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-CreateCollection-OldServer.json b/testdata/client-side-encryption/legacy/fle2v2-CreateCollection-OldServer.json deleted file mode 100644 index c266aa6b83..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-CreateCollection-OldServer.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "6.0.0", - "maxServerVersion": "6.3.99", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "tests": [ - { - "description": "driver returns an error if creating a QEv2 collection on unsupported server", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - }, - "encryptedFieldsMap": { - "default.encryptedCollection": { - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - } - ] - } - } - } - }, - "operations": [ - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "createCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - }, - "result": { - "errorContains": "Driver support of Queryable Encryption is incompatible with server. Upgrade server to use Queryable Encryption." - } - }, - { - "name": "assertCollectionNotExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.esc" - } - }, - { - "name": "assertCollectionNotExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.ecc" - } - }, - { - "name": "assertCollectionNotExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.ecoc" - } - }, - { - "name": "assertCollectionNotExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "encryptedCollection" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-CreateCollection-OldServer.yml b/testdata/client-side-encryption/legacy/fle2v2-CreateCollection-OldServer.yml deleted file mode 100644 index 5cc6ead0f6..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-CreateCollection-OldServer.yml +++ /dev/null @@ -1,61 +0,0 @@ -# Requires libmongocrypt 1.8.0. -runOn: - - minServerVersion: "6.0.0" - maxServerVersion: "6.3.99" - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] - -database_name: &database_name "default" -collection_name: &collection_name "default" - -tests: - - description: "driver returns an error if creating a QEv2 collection on unsupported server" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - encryptedFieldsMap: - default.encryptedCollection: { - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { "$binary": { "base64": "AAAAAAAAAAAAAAAAAAAAAA==", "subType": "04" }} - } - ] - } - - operations: - # Do an initial drop to remove collections that may exist from previous test runs. - - name: dropCollection - object: database - arguments: - collection: "encryptedCollection" - - name: createCollection - object: database - arguments: - collection: "encryptedCollection" - result: - errorContains: "Driver support of Queryable Encryption is incompatible with server. Upgrade server to use Queryable Encryption." - # Assert no collections were created. - - name: assertCollectionNotExists - object: testRunner - arguments: - database: *database_name - collection: &esc_collection_name "enxcol_.encryptedCollection.esc" - # ecc collection is no longer created for QEv2 - - name: assertCollectionNotExists - object: testRunner - arguments: - database: *database_name - collection: &ecc_collection_name "enxcol_.encryptedCollection.ecc" - - name: assertCollectionNotExists - object: testRunner - arguments: - database: *database_name - collection: &ecoc_collection_name "enxcol_.encryptedCollection.ecoc" - - name: assertCollectionNotExists - object: testRunner - arguments: - database: *database_name - collection: encryptedCollection diff --git a/testdata/client-side-encryption/legacy/fle2v2-CreateCollection.json b/testdata/client-side-encryption/legacy/fle2v2-CreateCollection.json deleted file mode 100644 index c324be8abc..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-CreateCollection.json +++ /dev/null @@ -1,1758 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "7.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "tests": [ - { - "description": "state collections and index are created", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - }, - "encryptedFieldsMap": { - "default.encryptedCollection": { - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { - "$binary": { - "subType": "04", - "base64": "AAAAAAAAAAAAAAAAAAAAAA==" - } - } - } - ] - } - } - } - }, - "operations": [ - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "createCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.esc" - } - }, - { - "name": "assertCollectionNotExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.ecc" - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.ecoc" - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "encryptedCollection" - } - }, - { - "name": "assertIndexExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "encryptedCollection", - "index": "__safeContent___1" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "drop": "enxcol_.encryptedCollection.esc" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "enxcol_.encryptedCollection.ecoc" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "encryptedCollection" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "create": "enxcol_.encryptedCollection.esc", - "clusteredIndex": { - "key": { - "_id": 1 - }, - "unique": true - } - }, - "command_name": "create", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "create": "enxcol_.encryptedCollection.ecoc", - "clusteredIndex": { - "key": { - "_id": 1 - }, - "unique": true - } - }, - "command_name": "create", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "create": "encryptedCollection", - "encryptedFields": { - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { - "$binary": { - "subType": "04", - "base64": "AAAAAAAAAAAAAAAAAAAAAA==" - } - } - } - ] - } - }, - "command_name": "create", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "createIndexes": "encryptedCollection", - "indexes": [ - { - "name": "__safeContent___1", - "key": { - "__safeContent__": 1 - } - } - ] - }, - "command_name": "createIndexes", - "database_name": "default" - } - } - ] - }, - { - "description": "default state collection names are applied", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - }, - "encryptedFieldsMap": { - "default.encryptedCollection": { - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { - "$binary": { - "subType": "04", - "base64": "AAAAAAAAAAAAAAAAAAAAAA==" - } - } - } - ] - } - } - } - }, - "operations": [ - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "createCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.esc" - } - }, - { - "name": "assertCollectionNotExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.ecc" - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.ecoc" - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "encryptedCollection" - } - }, - { - "name": "assertIndexExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "encryptedCollection", - "index": "__safeContent___1" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "drop": "enxcol_.encryptedCollection.esc" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "enxcol_.encryptedCollection.ecoc" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "encryptedCollection" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "create": "enxcol_.encryptedCollection.esc", - "clusteredIndex": { - "key": { - "_id": 1 - }, - "unique": true - } - }, - "command_name": "create", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "create": "enxcol_.encryptedCollection.ecoc", - "clusteredIndex": { - "key": { - "_id": 1 - }, - "unique": true - } - }, - "command_name": "create", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "create": "encryptedCollection", - "encryptedFields": { - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { - "$binary": { - "subType": "04", - "base64": "AAAAAAAAAAAAAAAAAAAAAA==" - } - } - } - ] - } - }, - "command_name": "create", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "createIndexes": "encryptedCollection", - "indexes": [ - { - "name": "__safeContent___1", - "key": { - "__safeContent__": 1 - } - } - ] - }, - "command_name": "createIndexes", - "database_name": "default" - } - } - ] - }, - { - "description": "drop removes all state collections", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - }, - "encryptedFieldsMap": { - "default.encryptedCollection": { - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { - "$binary": { - "subType": "04", - "base64": "AAAAAAAAAAAAAAAAAAAAAA==" - } - } - } - ] - } - } - } - }, - "operations": [ - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "createCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.esc" - } - }, - { - "name": "assertCollectionNotExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.ecc" - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.ecoc" - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "encryptedCollection" - } - }, - { - "name": "assertIndexExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "encryptedCollection", - "index": "__safeContent___1" - } - }, - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "assertCollectionNotExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.ecoc" - } - }, - { - "name": "assertCollectionNotExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "encryptedCollection" - } - }, - { - "name": "assertIndexNotExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "encryptedCollection", - "index": "__safeContent___1" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "drop": "enxcol_.encryptedCollection.esc" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "enxcol_.encryptedCollection.ecoc" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "encryptedCollection" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "create": "enxcol_.encryptedCollection.esc", - "clusteredIndex": { - "key": { - "_id": 1 - }, - "unique": true - } - }, - "command_name": "create", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "create": "enxcol_.encryptedCollection.ecoc", - "clusteredIndex": { - "key": { - "_id": 1 - }, - "unique": true - } - }, - "command_name": "create", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "create": "encryptedCollection", - "encryptedFields": { - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { - "$binary": { - "subType": "04", - "base64": "AAAAAAAAAAAAAAAAAAAAAA==" - } - } - } - ] - } - }, - "command_name": "create", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "createIndexes": "encryptedCollection", - "indexes": [ - { - "name": "__safeContent___1", - "key": { - "__safeContent__": 1 - } - } - ] - }, - "command_name": "createIndexes", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "enxcol_.encryptedCollection.esc" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "enxcol_.encryptedCollection.ecoc" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "encryptedCollection" - }, - "command_name": "drop", - "database_name": "default" - } - } - ] - }, - { - "description": "CreateCollection without encryptedFields.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - }, - "encryptedFieldsMap": { - "default.encryptedCollection": { - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { - "$binary": { - "subType": "04", - "base64": "AAAAAAAAAAAAAAAAAAAAAA==" - } - } - } - ] - } - } - } - }, - "operations": [ - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "plaintextCollection" - } - }, - { - "name": "createCollection", - "object": "database", - "arguments": { - "collection": "plaintextCollection" - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "plaintextCollection" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "plaintextCollection" - } - }, - "command_name": "listCollections", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "plaintextCollection" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "create": "plaintextCollection" - }, - "command_name": "create", - "database_name": "default" - } - } - ] - }, - { - "description": "CreateCollection from encryptedFieldsMap.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - }, - "encryptedFieldsMap": { - "default.encryptedCollection": { - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { - "$binary": { - "subType": "04", - "base64": "AAAAAAAAAAAAAAAAAAAAAA==" - } - } - } - ] - } - } - } - }, - "operations": [ - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "createCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.esc" - } - }, - { - "name": "assertCollectionNotExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.ecc" - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.ecoc" - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "encryptedCollection" - } - }, - { - "name": "assertIndexExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "encryptedCollection", - "index": "__safeContent___1" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "drop": "enxcol_.encryptedCollection.esc" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "enxcol_.encryptedCollection.ecoc" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "encryptedCollection" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "create": "enxcol_.encryptedCollection.esc", - "clusteredIndex": { - "key": { - "_id": 1 - }, - "unique": true - } - }, - "command_name": "create", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "create": "enxcol_.encryptedCollection.ecoc", - "clusteredIndex": { - "key": { - "_id": 1 - }, - "unique": true - } - }, - "command_name": "create", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "create": "encryptedCollection", - "encryptedFields": { - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { - "$binary": { - "subType": "04", - "base64": "AAAAAAAAAAAAAAAAAAAAAA==" - } - } - } - ] - } - }, - "command_name": "create", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "createIndexes": "encryptedCollection", - "indexes": [ - { - "name": "__safeContent___1", - "key": { - "__safeContent__": 1 - } - } - ] - }, - "command_name": "createIndexes", - "database_name": "default" - } - } - ] - }, - { - "description": "CreateCollection from encryptedFields.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection", - "encryptedFields": { - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { - "$binary": { - "subType": "04", - "base64": "AAAAAAAAAAAAAAAAAAAAAA==" - } - } - } - ] - } - } - }, - { - "name": "createCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection", - "encryptedFields": { - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { - "$binary": { - "subType": "04", - "base64": "AAAAAAAAAAAAAAAAAAAAAA==" - } - } - } - ] - } - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.esc" - } - }, - { - "name": "assertCollectionNotExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.ecc" - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.ecoc" - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "encryptedCollection" - } - }, - { - "name": "assertIndexExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "encryptedCollection", - "index": "__safeContent___1" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "drop": "enxcol_.encryptedCollection.esc" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "enxcol_.encryptedCollection.ecoc" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "encryptedCollection" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "create": "enxcol_.encryptedCollection.esc", - "clusteredIndex": { - "key": { - "_id": 1 - }, - "unique": true - } - }, - "command_name": "create", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "create": "enxcol_.encryptedCollection.ecoc", - "clusteredIndex": { - "key": { - "_id": 1 - }, - "unique": true - } - }, - "command_name": "create", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "create": "encryptedCollection", - "encryptedFields": { - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { - "$binary": { - "subType": "04", - "base64": "AAAAAAAAAAAAAAAAAAAAAA==" - } - } - } - ] - } - }, - "command_name": "create", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "encryptedCollection" - } - }, - "command_name": "listCollections", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "createIndexes": "encryptedCollection", - "indexes": [ - { - "name": "__safeContent___1", - "key": { - "__safeContent__": 1 - } - } - ] - }, - "command_name": "createIndexes", - "database_name": "default" - } - } - ] - }, - { - "description": "DropCollection from encryptedFieldsMap", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - }, - "encryptedFieldsMap": { - "default.encryptedCollection": { - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { - "$binary": { - "subType": "04", - "base64": "AAAAAAAAAAAAAAAAAAAAAA==" - } - } - } - ] - } - } - } - }, - "operations": [ - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "drop": "enxcol_.encryptedCollection.esc" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "enxcol_.encryptedCollection.ecoc" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "encryptedCollection" - }, - "command_name": "drop", - "database_name": "default" - } - } - ] - }, - { - "description": "DropCollection from encryptedFields", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - }, - "encryptedFieldsMap": {} - } - }, - "operations": [ - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection", - "encryptedFields": { - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { - "$binary": { - "subType": "04", - "base64": "AAAAAAAAAAAAAAAAAAAAAA==" - } - } - } - ] - } - } - }, - { - "name": "createCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection", - "encryptedFields": { - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { - "$binary": { - "subType": "04", - "base64": "AAAAAAAAAAAAAAAAAAAAAA==" - } - } - } - ] - } - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.esc" - } - }, - { - "name": "assertCollectionNotExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.ecc" - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.ecoc" - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "encryptedCollection" - } - }, - { - "name": "assertIndexExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "encryptedCollection", - "index": "__safeContent___1" - } - }, - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection", - "encryptedFields": { - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { - "$binary": { - "subType": "04", - "base64": "AAAAAAAAAAAAAAAAAAAAAA==" - } - } - } - ] - } - } - }, - { - "name": "assertCollectionNotExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.esc" - } - }, - { - "name": "assertCollectionNotExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.ecoc" - } - }, - { - "name": "assertCollectionNotExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "encryptedCollection" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "drop": "enxcol_.encryptedCollection.esc" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "enxcol_.encryptedCollection.ecoc" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "encryptedCollection" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "create": "enxcol_.encryptedCollection.esc", - "clusteredIndex": { - "key": { - "_id": 1 - }, - "unique": true - } - }, - "command_name": "create", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "create": "enxcol_.encryptedCollection.ecoc", - "clusteredIndex": { - "key": { - "_id": 1 - }, - "unique": true - } - }, - "command_name": "create", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "create": "encryptedCollection", - "encryptedFields": { - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { - "$binary": { - "subType": "04", - "base64": "AAAAAAAAAAAAAAAAAAAAAA==" - } - } - } - ] - } - }, - "command_name": "create", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "encryptedCollection" - } - }, - "command_name": "listCollections", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "createIndexes": "encryptedCollection", - "indexes": [ - { - "name": "__safeContent___1", - "key": { - "__safeContent__": 1 - } - } - ] - }, - "command_name": "createIndexes", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "enxcol_.encryptedCollection.esc" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "enxcol_.encryptedCollection.ecoc" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "encryptedCollection" - }, - "command_name": "drop", - "database_name": "default" - } - } - ] - }, - { - "description": "DropCollection from remote encryptedFields", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - }, - "encryptedFieldsMap": {} - } - }, - "operations": [ - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection", - "encryptedFields": { - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { - "$binary": { - "subType": "04", - "base64": "AAAAAAAAAAAAAAAAAAAAAA==" - } - } - } - ] - } - } - }, - { - "name": "createCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection", - "encryptedFields": { - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { - "$binary": { - "subType": "04", - "base64": "AAAAAAAAAAAAAAAAAAAAAA==" - } - } - } - ] - } - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.esc" - } - }, - { - "name": "assertCollectionNotExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.ecc" - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.ecoc" - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "encryptedCollection" - } - }, - { - "name": "assertIndexExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "encryptedCollection", - "index": "__safeContent___1" - } - }, - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "assertCollectionNotExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.esc" - } - }, - { - "name": "assertCollectionNotExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "enxcol_.encryptedCollection.ecoc" - } - }, - { - "name": "assertCollectionNotExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "encryptedCollection" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "drop": "enxcol_.encryptedCollection.esc" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "enxcol_.encryptedCollection.ecoc" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "encryptedCollection" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "create": "enxcol_.encryptedCollection.esc", - "clusteredIndex": { - "key": { - "_id": 1 - }, - "unique": true - } - }, - "command_name": "create", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "create": "enxcol_.encryptedCollection.ecoc", - "clusteredIndex": { - "key": { - "_id": 1 - }, - "unique": true - } - }, - "command_name": "create", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "create": "encryptedCollection", - "encryptedFields": { - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { - "$binary": { - "subType": "04", - "base64": "AAAAAAAAAAAAAAAAAAAAAA==" - } - } - } - ] - } - }, - "command_name": "create", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "encryptedCollection" - } - }, - "command_name": "listCollections", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "createIndexes": "encryptedCollection", - "indexes": [ - { - "name": "__safeContent___1", - "key": { - "__safeContent__": 1 - } - } - ] - }, - "command_name": "createIndexes", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "encryptedCollection" - } - }, - "command_name": "listCollections", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "enxcol_.encryptedCollection.esc" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "enxcol_.encryptedCollection.ecoc" - }, - "command_name": "drop", - "database_name": "default" - } - }, - { - "command_started_event": { - "command": { - "drop": "encryptedCollection" - }, - "command_name": "drop", - "database_name": "default" - } - } - ] - }, - { - "description": "encryptedFields are consulted for metadata collection names", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - }, - "encryptedFieldsMap": { - "default.encryptedCollection": { - "escCollection": "invalid_esc_name", - "ecocCollection": "invalid_ecoc_name", - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { - "$binary": { - "subType": "04", - "base64": "AAAAAAAAAAAAAAAAAAAAAA==" - } - } - } - ] - } - } - } - }, - "operations": [ - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "createCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - }, - "result": { - "errorContains": "Encrypted State Collection name should follow" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-CreateCollection.yml b/testdata/client-side-encryption/legacy/fle2v2-CreateCollection.yml deleted file mode 100644 index 43dbccfc37..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-CreateCollection.yml +++ /dev/null @@ -1,937 +0,0 @@ -# Requires libmongocrypt 1.8.0. -runOn: - - minServerVersion: "7.0.0" - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] - -database_name: &database_name "default" -collection_name: &collection_name "default" - -tests: - - description: "state collections and index are created" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - encryptedFieldsMap: - default.encryptedCollection: &encrypted_fields { - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { "$binary": { "subType": "04", "base64": "AAAAAAAAAAAAAAAAAAAAAA==" }} - } - ] - } - - operations: - # Do an initial drop to remove collections that may exist from previous test runs. - - name: dropCollection - object: database - arguments: - collection: &encrypted_collection_name "encryptedCollection" - - name: createCollection - object: database - arguments: - collection: *encrypted_collection_name - - name: assertCollectionExists - object: testRunner - arguments: - database: *database_name - collection: &esc_collection_name "enxcol_.encryptedCollection.esc" - # ecc collection is no longer created for QEv2 - - name: assertCollectionNotExists - object: testRunner - arguments: - database: *database_name - collection: &ecc_collection_name "enxcol_.encryptedCollection.ecc" - - name: assertCollectionExists - object: testRunner - arguments: - database: *database_name - collection: &ecoc_collection_name "enxcol_.encryptedCollection.ecoc" - - name: assertCollectionExists - object: testRunner - arguments: - database: *database_name - collection: *encrypted_collection_name - - name: assertIndexExists - object: testRunner - arguments: - database: *database_name - collection: *encrypted_collection_name - index: __safeContent___1 - - expectations: - # events from dropCollection ... begin - - command_started_event: - command: - drop: *esc_collection_name - command_name: drop - database_name: *database_name - - command_started_event: - command: - drop: *ecoc_collection_name - command_name: drop - database_name: *database_name - - command_started_event: - command: - drop: *encrypted_collection_name - command_name: drop - database_name: *database_name - # events from dropCollection ... end - # events from createCollection ... begin - # State collections are created first. - - command_started_event: - command: - create: *esc_collection_name - clusteredIndex: {key: {_id: 1}, unique: true} - command_name: create - database_name: *database_name - - command_started_event: - command: - create: *ecoc_collection_name - clusteredIndex: {key: {_id: 1}, unique: true} - command_name: create - database_name: *database_name - # Data collection is created after. - - command_started_event: - command: - create: *encrypted_collection_name - encryptedFields: &encrypted_fields_expectation { - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { "$binary": { "subType": "04", "base64": "AAAAAAAAAAAAAAAAAAAAAA==" }} - } - ] - } - command_name: create - database_name: *database_name - # Index on __safeContents__ is then created. - - command_started_event: - command: - createIndexes: *encrypted_collection_name - indexes: - - name: __safeContent___1 - key: { __safeContent__: 1 } - command_name: createIndexes - database_name: *database_name - # events from createCollection ... end - - description: "default state collection names are applied" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - encryptedFieldsMap: - default.encryptedCollection: *encrypted_fields - - operations: - # Do an initial drop to remove collections that may exist from previous test runs. - - name: dropCollection - object: database - arguments: - collection: *encrypted_collection_name - - name: createCollection - object: database - arguments: - collection: *encrypted_collection_name - - name: assertCollectionExists - object: testRunner - arguments: - database: *database_name - collection: *esc_collection_name - # ecc collection is no longer created for QEv2 - - name: assertCollectionNotExists - object: testRunner - arguments: - database: *database_name - collection: *ecc_collection_name - - name: assertCollectionExists - object: testRunner - arguments: - database: *database_name - collection: *ecoc_collection_name - - name: assertCollectionExists - object: testRunner - arguments: - database: *database_name - collection: *encrypted_collection_name - - name: assertIndexExists - object: testRunner - arguments: - database: *database_name - collection: *encrypted_collection_name - index: __safeContent___1 - - expectations: - # events from dropCollection ... begin - - command_started_event: - command: - drop: *esc_collection_name - command_name: drop - database_name: *database_name - - command_started_event: - command: - drop: *ecoc_collection_name - command_name: drop - database_name: *database_name - - command_started_event: - command: - drop: *encrypted_collection_name - command_name: drop - database_name: *database_name - # events from dropCollection ... end - # events from createCollection ... begin - # State collections are created first. - - command_started_event: - command: - create: *esc_collection_name - clusteredIndex: {key: {_id: 1}, unique: true} - command_name: create - database_name: *database_name - - command_started_event: - command: - create: *ecoc_collection_name - clusteredIndex: {key: {_id: 1}, unique: true} - command_name: create - database_name: *database_name - # Data collection is created after. - - command_started_event: - command: - create: *encrypted_collection_name - encryptedFields: *encrypted_fields_expectation - command_name: create - database_name: *database_name - # Index on __safeContents__ is then created. - - command_started_event: - command: - createIndexes: *encrypted_collection_name - indexes: - - name: __safeContent___1 - key: { __safeContent__: 1 } - command_name: createIndexes - database_name: *database_name - # events from createCollection ... end - - description: "drop removes all state collections" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - encryptedFieldsMap: - default.encryptedCollection: *encrypted_fields - - operations: - # Do an initial drop to remove collections that may exist from previous test runs. - - name: dropCollection - object: database - arguments: - collection: *encrypted_collection_name - - name: createCollection - object: database - arguments: - collection: *encrypted_collection_name - - name: assertCollectionExists - object: testRunner - arguments: - database: *database_name - collection: *esc_collection_name - # ecc collection is no longer created for QEv2 - - name: assertCollectionNotExists - object: testRunner - arguments: - database: *database_name - collection: *ecc_collection_name - - name: assertCollectionExists - object: testRunner - arguments: - database: *database_name - collection: *ecoc_collection_name - - name: assertCollectionExists - object: testRunner - arguments: - database: *database_name - collection: *encrypted_collection_name - - name: assertIndexExists - object: testRunner - arguments: - database: *database_name - collection: *encrypted_collection_name - index: __safeContent___1 - - name: dropCollection - object: database - arguments: - collection: *encrypted_collection_name - # ecc collection is no longer created for QEv2 - - name: assertCollectionNotExists - object: testRunner - arguments: - database: *database_name - collection: *ecoc_collection_name - # ecc collection is no longer created for QEv2 - - name: assertCollectionNotExists - object: testRunner - arguments: - database: *database_name - collection: *encrypted_collection_name - - name: assertIndexNotExists - object: testRunner - arguments: - database: *database_name - collection: *encrypted_collection_name - index: __safeContent___1 - - expectations: - # events from dropCollection ... begin - - command_started_event: - command: - drop: *esc_collection_name - command_name: drop - database_name: *database_name - - command_started_event: - command: - drop: *ecoc_collection_name - command_name: drop - database_name: *database_name - - command_started_event: - command: - drop: *encrypted_collection_name - command_name: drop - database_name: *database_name - # events from dropCollection ... end - # events from createCollection ... begin - # State collections are created first. - - command_started_event: - command: - create: *esc_collection_name - clusteredIndex: {key: {_id: 1}, unique: true} - command_name: create - database_name: *database_name - - command_started_event: - command: - create: *ecoc_collection_name - clusteredIndex: {key: {_id: 1}, unique: true} - command_name: create - database_name: *database_name - # Data collection is created after. - - command_started_event: - command: - create: *encrypted_collection_name - encryptedFields: *encrypted_fields - command_name: create - database_name: *database_name - # Index on __safeContents__ is then created. - - command_started_event: - command: - createIndexes: *encrypted_collection_name - indexes: - - name: __safeContent___1 - key: { __safeContent__: 1 } - command_name: createIndexes - database_name: *database_name - # events from createCollection ... end - # events from dropCollection ... begin - - command_started_event: - command: - drop: *esc_collection_name - command_name: drop - database_name: *database_name - - command_started_event: - command: - drop: *ecoc_collection_name - command_name: drop - database_name: *database_name - - command_started_event: - command: - drop: *encrypted_collection_name - command_name: drop - database_name: *database_name - # events from dropCollection ... end - - description: "CreateCollection without encryptedFields." - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - encryptedFieldsMap: - default.encryptedCollection: *encrypted_fields - operations: - # Do an initial drop to remove collections that may exist from previous test runs. - - name: dropCollection - object: database - arguments: - collection: "plaintextCollection" - - name: createCollection - object: database - arguments: - collection: "plaintextCollection" - - name: assertCollectionExists - object: testRunner - arguments: - database: *database_name - collection: "plaintextCollection" - - expectations: - # events from dropCollection ... begin - # expect listCollections to be sent on drop to check for remote encryptedFields. - - command_started_event: - command: - listCollections: 1 - filter: { name: "plaintextCollection" } - command_name: listCollections - database_name: *database_name - - command_started_event: - command: - drop: "plaintextCollection" - command_name: drop - database_name: *database_name - # events from dropCollection ... end - - command_started_event: - command: - create: "plaintextCollection" - command_name: create - database_name: *database_name - - description: "CreateCollection from encryptedFieldsMap." - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - encryptedFieldsMap: - default.encryptedCollection: *encrypted_fields - operations: - # Do an initial drop to remove collections that may exist from previous test runs. - - name: dropCollection - object: database - arguments: - collection: *encrypted_collection_name - - name: createCollection - object: database - arguments: - collection: *encrypted_collection_name - - name: assertCollectionExists - object: testRunner - arguments: - database: *database_name - collection: *esc_collection_name - # ecc collection is no longer created for QEv2 - - name: assertCollectionNotExists - object: testRunner - arguments: - database: *database_name - collection: *ecc_collection_name - - name: assertCollectionExists - object: testRunner - arguments: - database: *database_name - collection: *ecoc_collection_name - - name: assertCollectionExists - object: testRunner - arguments: - database: *database_name - collection: *encrypted_collection_name - - name: assertIndexExists - object: testRunner - arguments: - database: *database_name - collection: *encrypted_collection_name - index: __safeContent___1 - - expectations: - # events from dropCollection ... begin - - command_started_event: - command: - drop: *esc_collection_name - command_name: drop - database_name: *database_name - - command_started_event: - command: - drop: *ecoc_collection_name - command_name: drop - database_name: *database_name - - command_started_event: - command: - drop: *encrypted_collection_name - command_name: drop - database_name: *database_name - # events from dropCollection ... end - # events from createCollection ... begin - # State collections are created first. - - command_started_event: - command: - create: *esc_collection_name - clusteredIndex: {key: {_id: 1}, unique: true} - command_name: create - database_name: *database_name - - command_started_event: - command: - create: *ecoc_collection_name - clusteredIndex: {key: {_id: 1}, unique: true} - command_name: create - database_name: *database_name - # Data collection is created after. - - command_started_event: - command: - create: *encrypted_collection_name - encryptedFields: *encrypted_fields_expectation - command_name: create - database_name: *database_name - # Index on __safeContents__ is then created. - - command_started_event: - command: - createIndexes: *encrypted_collection_name - indexes: - - name: __safeContent___1 - key: { __safeContent__: 1 } - command_name: createIndexes - database_name: *database_name - # events from createCollection ... end - - description: "CreateCollection from encryptedFields." - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - # Do initial drops to remove collections that may exist from previous test runs. - - name: dropCollection - object: database - arguments: - collection: *encrypted_collection_name - encryptedFields: *encrypted_fields - - name: createCollection - object: database - arguments: - collection: *encrypted_collection_name - encryptedFields: *encrypted_fields - - name: assertCollectionExists - object: testRunner - arguments: - database: *database_name - collection: *esc_collection_name - # ecc collection is no longer created for QEv2 - - name: assertCollectionNotExists - object: testRunner - arguments: - database: *database_name - collection: *ecc_collection_name - - name: assertCollectionExists - object: testRunner - arguments: - database: *database_name - collection: *ecoc_collection_name - - name: assertCollectionExists - object: testRunner - arguments: - database: *database_name - collection: *encrypted_collection_name - - name: assertIndexExists - object: testRunner - arguments: - database: *database_name - collection: *encrypted_collection_name - index: __safeContent___1 - - expectations: - # events from dropCollection ... begin - - command_started_event: - command: - drop: *esc_collection_name - command_name: drop - database_name: *database_name - - command_started_event: - command: - drop: *ecoc_collection_name - command_name: drop - database_name: *database_name - - command_started_event: - command: - drop: *encrypted_collection_name - command_name: drop - database_name: *database_name - # events from dropCollection ... end - # events from createCollection ... begin - # State collections are created first. - - command_started_event: - command: - create: *esc_collection_name - clusteredIndex: {key: {_id: 1}, unique: true} - command_name: create - database_name: *database_name - - command_started_event: - command: - create: *ecoc_collection_name - clusteredIndex: {key: {_id: 1}, unique: true} - command_name: create - database_name: *database_name - # Data collection is created after. - - command_started_event: - command: - create: *encrypted_collection_name - encryptedFields: *encrypted_fields_expectation - command_name: create - database_name: *database_name - # libmongocrypt requests listCollections to get a schema for the "createIndexes" command. - - command_started_event: - command: - listCollections: 1 - filter: { name: *encrypted_collection_name } - command_name: listCollections - database_name: *database_name - # Index on __safeContents__ is then created. - - command_started_event: - command: - createIndexes: *encrypted_collection_name - indexes: - - name: __safeContent___1 - key: { __safeContent__: 1 } - command_name: createIndexes - database_name: *database_name - # events from createCollection ... end - - - description: "DropCollection from encryptedFieldsMap" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - encryptedFieldsMap: - default.encryptedCollection: *encrypted_fields - operations: - - name: dropCollection - object: database - arguments: - collection: *encrypted_collection_name - expectations: - # events from dropCollection ... begin - - command_started_event: - command: - drop: *esc_collection_name - command_name: drop - database_name: *database_name - - command_started_event: - command: - drop: *ecoc_collection_name - command_name: drop - database_name: *database_name - - command_started_event: - command: - drop: *encrypted_collection_name - command_name: drop - database_name: *database_name - # events from dropCollection ... end - - description: "DropCollection from encryptedFields" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - encryptedFieldsMap: {} - operations: - # Do initial drops to remove collections that may exist from previous test runs. - - name: dropCollection - object: database - arguments: - collection: *encrypted_collection_name - encryptedFields: *encrypted_fields - - name: createCollection - object: database - arguments: - collection: *encrypted_collection_name - encryptedFields: *encrypted_fields - - name: assertCollectionExists - object: testRunner - arguments: - database: *database_name - collection: *esc_collection_name - # ecc collection is no longer created for QEv2 - - name: assertCollectionNotExists - object: testRunner - arguments: - database: *database_name - collection: *ecc_collection_name - - name: assertCollectionExists - object: testRunner - arguments: - database: *database_name - collection: *ecoc_collection_name - - name: assertCollectionExists - object: testRunner - arguments: - database: *database_name - collection: *encrypted_collection_name - - name: assertIndexExists - object: testRunner - arguments: - database: *database_name - collection: *encrypted_collection_name - index: __safeContent___1 - - name: dropCollection - object: database - arguments: - collection: *encrypted_collection_name - encryptedFields: *encrypted_fields - # ecc collection is no longer created for QEv2 - - name: assertCollectionNotExists - object: testRunner - arguments: - database: *database_name - collection: *esc_collection_name - # ecc collection is no longer created for QEv2 - - name: assertCollectionNotExists - object: testRunner - arguments: - database: *database_name - collection: *ecoc_collection_name - # ecc collection is no longer created for QEv2 - - name: assertCollectionNotExists - object: testRunner - arguments: - database: *database_name - collection: *encrypted_collection_name - expectations: - # events from dropCollection ... begin - - command_started_event: - command: - drop: *esc_collection_name - command_name: drop - database_name: *database_name - - command_started_event: - command: - drop: *ecoc_collection_name - command_name: drop - database_name: *database_name - - command_started_event: - command: - drop: *encrypted_collection_name - command_name: drop - database_name: *database_name - # events from dropCollection ... end - # events from createCollection ... begin - - command_started_event: - command: - create: *esc_collection_name - clusteredIndex: {key: {_id: 1}, unique: true} - command_name: create - database_name: *database_name - - command_started_event: - command: - create: *ecoc_collection_name - clusteredIndex: {key: {_id: 1}, unique: true} - command_name: create - database_name: *database_name - - command_started_event: - command: - create: *encrypted_collection_name - encryptedFields: *encrypted_fields_expectation - command_name: create - database_name: *database_name - # libmongocrypt requests listCollections to get a schema for the "createIndexes" command. - - command_started_event: - command: - listCollections: 1 - filter: { name: *encrypted_collection_name } - command_name: listCollections - database_name: *database_name - # Index on __safeContents__ is then created. - - command_started_event: - command: - createIndexes: *encrypted_collection_name - indexes: - - name: __safeContent___1 - key: { __safeContent__: 1 } - command_name: createIndexes - database_name: *database_name - # events from createCollection ... end - # events from dropCollection ... begin - - command_started_event: - command: - drop: *esc_collection_name - command_name: drop - database_name: *database_name - - command_started_event: - command: - drop: *ecoc_collection_name - command_name: drop - database_name: *database_name - - command_started_event: - command: - drop: *encrypted_collection_name - command_name: drop - database_name: *database_name - # events from dropCollection ... end - - - description: "DropCollection from remote encryptedFields" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - encryptedFieldsMap: {} - - operations: - # Do initial drops to remove collections that may exist from previous test runs. - - name: dropCollection - object: database - arguments: - collection: *encrypted_collection_name - encryptedFields: *encrypted_fields - - name: createCollection - object: database - arguments: - collection: *encrypted_collection_name - encryptedFields: *encrypted_fields - - name: assertCollectionExists - object: testRunner - arguments: - database: *database_name - collection: *esc_collection_name - # ecc collection is no longer created for QEv2 - - name: assertCollectionNotExists - object: testRunner - arguments: - database: *database_name - collection: *ecc_collection_name - - name: assertCollectionExists - object: testRunner - arguments: - database: *database_name - collection: *ecoc_collection_name - - name: assertCollectionExists - object: testRunner - arguments: - database: *database_name - collection: *encrypted_collection_name - - name: assertIndexExists - object: testRunner - arguments: - database: *database_name - collection: *encrypted_collection_name - index: __safeContent___1 - - name: dropCollection - object: database - arguments: - collection: *encrypted_collection_name - # ecc collection is no longer created for QEv2 - - name: assertCollectionNotExists - object: testRunner - arguments: - database: *database_name - collection: *esc_collection_name - # ecc collection is no longer created for QEv2 - - name: assertCollectionNotExists - object: testRunner - arguments: - database: *database_name - collection: *ecoc_collection_name - # ecc collection is no longer created for QEv2 - - name: assertCollectionNotExists - object: testRunner - arguments: - database: *database_name - collection: *encrypted_collection_name - - expectations: - # events from dropCollection ... begin - - command_started_event: - command: - drop: *esc_collection_name - command_name: drop - database_name: *database_name - - command_started_event: - command: - drop: *ecoc_collection_name - command_name: drop - database_name: *database_name - - command_started_event: - command: - drop: *encrypted_collection_name - command_name: drop - database_name: *database_name - # events from dropCollection ... end - # events from createCollection ... begin - - command_started_event: - command: - create: *esc_collection_name - clusteredIndex: {key: {_id: 1}, unique: true} - command_name: create - database_name: *database_name - - command_started_event: - command: - create: *ecoc_collection_name - clusteredIndex: {key: {_id: 1}, unique: true} - command_name: create - database_name: *database_name - - command_started_event: - command: - create: *encrypted_collection_name - encryptedFields: *encrypted_fields_expectation - command_name: create - database_name: *database_name - # libmongocrypt requests listCollections to get a schema for the "createIndexes" command. - - command_started_event: - command: - listCollections: 1 - filter: { name: *encrypted_collection_name } - command_name: listCollections - database_name: *database_name - # Index on __safeContents__ is then created. - - command_started_event: - command: - createIndexes: *encrypted_collection_name - indexes: - - name: __safeContent___1 - key: { __safeContent__: 1 } - command_name: createIndexes - database_name: *database_name - # events from createCollection ... end - # events from dropCollection ... begin - - command_started_event: - command: - listCollections: 1 - filter: { name: *encrypted_collection_name } - command_name: listCollections - database_name: *database_name - - command_started_event: - command: - drop: *esc_collection_name - command_name: drop - database_name: *database_name - - command_started_event: - command: - drop: *ecoc_collection_name - command_name: drop - database_name: *database_name - - command_started_event: - command: - drop: *encrypted_collection_name - command_name: drop - database_name: *database_name - # events from dropCollection ... end - - description: "encryptedFields are consulted for metadata collection names" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - encryptedFieldsMap: - default.encryptedCollection: { - "escCollection": "invalid_esc_name", - "ecocCollection": "invalid_ecoc_name", - "fields": [ - { - "path": "firstName", - "bsonType": "string", - "keyId": { "$binary": { "subType": "04", "base64": "AAAAAAAAAAAAAAAAAAAAAA==" }} - } - ] - } - - operations: - # Do an initial drop to remove collections that may exist from previous test runs. - - name: dropCollection - object: database - arguments: - collection: *encrypted_collection_name - - name: createCollection - object: database - arguments: - collection: *encrypted_collection_name - result: - # Expect error due to server constraints added in SERVER-74069 - errorContains: "Encrypted State Collection name should follow" diff --git a/testdata/client-side-encryption/legacy/fle2v2-DecryptExistingData.json b/testdata/client-side-encryption/legacy/fle2v2-DecryptExistingData.json deleted file mode 100644 index 1fb4c1d1bc..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-DecryptExistingData.json +++ /dev/null @@ -1,149 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "7.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [ - { - "_id": 1, - "encryptedUnindexed": { - "$binary": { - "base64": "BqvN76sSNJh2EjQSNFZ4kBICTQaVZPWgXp41I7mPV1rLFTtw1tXzjcdSEyxpKKqujlko5TeizkB9hHQ009dVY1+fgIiDcefh+eQrm3CkhQ==", - "subType": "06" - } - } - } - ], - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "HBk9BWihXExNDvTp1lUxOuxuZK2Pe2ZdVdlsxPEBkiO1bS4mG5NNDsQ7zVxJAH8BtdOYp72Ku4Y3nwc0BUpIKsvAKX4eYXtlhv5zUQxWdeNFhg9qK7qb8nqhnnLeT0f25jFSqzWJoT379hfwDeu0bebJHr35QrJ8myZdPMTEDYF08QYQ48ShRBli0S+QzBHHAQiM2iJNr4svg2WR8JSeWQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 decrypt of existing data succeeds", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "find", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": [ - { - "_id": 1, - "encryptedUnindexed": "value123" - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "_id": 1 - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-DecryptExistingData.yml b/testdata/client-side-encryption/legacy/fle2v2-DecryptExistingData.yml deleted file mode 100644 index 952551ba3a..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-DecryptExistingData.yml +++ /dev/null @@ -1,66 +0,0 @@ -# Requires libmongocrypt 1.8.0. -runOn: - - minServerVersion: "7.0.0" - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [ - &doc0 { - "_id": 1, - "encryptedUnindexed": { - "$binary": { - "base64": "BqvN76sSNJh2EjQSNFZ4kBICTQaVZPWgXp41I7mPV1rLFTtw1tXzjcdSEyxpKKqujlko5TeizkB9hHQ009dVY1+fgIiDcefh+eQrm3CkhQ==", - "subType": "06" - } - } - } -] -key_vault_data: [ {'_id': {'$binary': {'base64': 'q83vqxI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'HBk9BWihXExNDvTp1lUxOuxuZK2Pe2ZdVdlsxPEBkiO1bS4mG5NNDsQ7zVxJAH8BtdOYp72Ku4Y3nwc0BUpIKsvAKX4eYXtlhv5zUQxWdeNFhg9qK7qb8nqhnnLeT0f25jFSqzWJoT379hfwDeu0bebJHr35QrJ8myZdPMTEDYF08QYQ48ShRBli0S+QzBHHAQiM2iJNr4svg2WR8JSeWQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}}] -tests: - - description: "FLE2 decrypt of existing data succeeds" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: find - arguments: - filter: { _id: 1 } - result: - [{ "_id": 1, "encryptedUnindexed": "value123" }] - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: *collection_name - filter: { "_id": 1 } - command_name: find - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'q83vqxI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Delete.json b/testdata/client-side-encryption/legacy/fle2v2-Delete.json deleted file mode 100644 index ddfe57b00c..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Delete.json +++ /dev/null @@ -1,284 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "7.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "Delete can query an FLE2 indexed field", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedIndexed": "value123" - } - } - }, - { - "name": "deleteOne", - "arguments": { - "filter": { - "encryptedIndexed": "value123" - } - }, - "result": { - "deletedCount": 1 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedIndexed": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "delete": "default", - "deletes": [ - { - "q": { - "encryptedIndexed": { - "$eq": { - "$binary": { - "base64": "DIkAAAAFZAAgAAAAAPtVteJQAlgb2YMa/+7YWH00sbQPyt7L6Rb8OwBdMmL2BXMAIAAAAAAd44hgVKnEnTFlwNVC14oyc9OZOTspeymusqkRQj57nAVsACAAAAAAaZ9s3G+4znfxStxeOZwcZy1OhzjMGc5hjmdMN+b/w6kSY20AAAAAAAAAAAAA", - "subType": "06" - } - } - } - }, - "limit": 1 - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - } - } - } - }, - "command_name": "delete" - } - } - ], - "outcome": { - "collection": { - "data": [] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Delete.yml b/testdata/client-side-encryption/legacy/fle2v2-Delete.yml deleted file mode 100644 index 4e1a59c93f..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Delete.yml +++ /dev/null @@ -1,100 +0,0 @@ -# Requires libmongocrypt 1.8.0. -runOn: - - minServerVersion: "7.0.0" - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedIndexed', 'bsonType': 'string', 'queries': {'queryType': 'equality', 'contention': {'$numberLong': '0'}}}, {'keyId': {'$binary': {'base64': 'q83vqxI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedUnindexed', 'bsonType': 'string'}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "Delete can query an FLE2 indexed field" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 {"_id": 1, "encryptedIndexed": "value123" } - - name: deleteOne - arguments: - filter: { "encryptedIndexed": "value123" } - result: - deletedCount: 1 - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - { "_id": 1, "encryptedIndexed": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - "default.default": - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - delete: *collection_name - deletes: - - { - "q": { - "encryptedIndexed": { - "$eq": { - "$binary": { - "base64": "DIkAAAAFZAAgAAAAAPtVteJQAlgb2YMa/+7YWH00sbQPyt7L6Rb8OwBdMmL2BXMAIAAAAAAd44hgVKnEnTFlwNVC14oyc9OZOTspeymusqkRQj57nAVsACAAAAAAaZ9s3G+4znfxStxeOZwcZy1OhzjMGc5hjmdMN+b/w6kSY20AAAAAAAAAAAAA", - "subType": "06" - } - } - } - }, - "limit": 1 - } - ordered: true - encryptionInformation: - type: 1 - schema: - "default.default": - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: delete - outcome: - collection: - data: [] \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.json b/testdata/client-side-encryption/legacy/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.json deleted file mode 100644 index bdc5c99bc2..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.json +++ /dev/null @@ -1,212 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "7.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "HBk9BWihXExNDvTp1lUxOuxuZK2Pe2ZdVdlsxPEBkiO1bS4mG5NNDsQ7zVxJAH8BtdOYp72Ku4Y3nwc0BUpIKsvAKX4eYXtlhv5zUQxWdeNFhg9qK7qb8nqhnnLeT0f25jFSqzWJoT379hfwDeu0bebJHr35QrJ8myZdPMTEDYF08QYQ48ShRBli0S+QzBHHAQiM2iJNr4svg2WR8JSeWQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "encryptedFieldsMap is preferred over remote encryptedFields", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - }, - "encryptedFieldsMap": { - "default.default": { - "fields": [] - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedUnindexed": { - "$binary": { - "base64": "BqvN76sSNJh2EjQSNFZ4kBICTQaVZPWgXp41I7mPV1rLFTtw1tXzjcdSEyxpKKqujlko5TeizkB9hHQ009dVY1+fgIiDcefh+eQrm3CkhQ==", - "subType": "06" - } - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": [ - { - "_id": 1, - "encryptedUnindexed": "value123" - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedUnindexed": { - "$binary": { - "base64": "BqvN76sSNJh2EjQSNFZ4kBICTQaVZPWgXp41I7mPV1rLFTtw1tXzjcdSEyxpKKqujlko5TeizkB9hHQ009dVY1+fgIiDcefh+eQrm3CkhQ==", - "subType": "06" - } - } - } - ], - "ordered": true - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "_id": 1 - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encryptedUnindexed": { - "$binary": { - "base64": "BqvN76sSNJh2EjQSNFZ4kBICTQaVZPWgXp41I7mPV1rLFTtw1tXzjcdSEyxpKKqujlko5TeizkB9hHQ009dVY1+fgIiDcefh+eQrm3CkhQ==", - "subType": "06" - } - } - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml b/testdata/client-side-encryption/legacy/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml deleted file mode 100644 index 8767132e62..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml +++ /dev/null @@ -1,79 +0,0 @@ -# Requires libmongocrypt 1.8.0. -runOn: - - minServerVersion: "7.0.0" - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedIndexed', 'bsonType': 'string', 'queries': {'queryType': 'equality', 'contention': {'$numberLong': '0'}}}, {'keyId': {'$binary': {'base64': 'q83vqxI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedUnindexed', 'bsonType': 'string'}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'q83vqxI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'HBk9BWihXExNDvTp1lUxOuxuZK2Pe2ZdVdlsxPEBkiO1bS4mG5NNDsQ7zVxJAH8BtdOYp72Ku4Y3nwc0BUpIKsvAKX4eYXtlhv5zUQxWdeNFhg9qK7qb8nqhnnLeT0f25jFSqzWJoT379hfwDeu0bebJHr35QrJ8myZdPMTEDYF08QYQ48ShRBli0S+QzBHHAQiM2iJNr4svg2WR8JSeWQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}}] -tests: - - description: "encryptedFieldsMap is preferred over remote encryptedFields" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - encryptedFieldsMap: { - "default.default": { - "fields": [] - } - } - operations: - # EncryptedFieldsMap overrides remote encryptedFields. - # Automatic encryption does not occur on encryptedUnindexed. The value is validated on the server. - - name: insertOne - arguments: - document: &doc0 { - _id: 1, - encryptedUnindexed: { - "$binary": { - "base64": "BqvN76sSNJh2EjQSNFZ4kBICTQaVZPWgXp41I7mPV1rLFTtw1tXzjcdSEyxpKKqujlko5TeizkB9hHQ009dVY1+fgIiDcefh+eQrm3CkhQ==", - "subType": "06" - } - } - } - - name: find - arguments: - filter: { "_id": 1 } - result: [{"_id": 1, "encryptedUnindexed": "value123" }] - expectations: - - command_started_event: - command: - insert: *collection_name - documents: - - *doc0 - ordered: true - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: { "_id": 1} - command_name: find - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'q83vqxI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - outcome: - collection: - data: - - *doc0 \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-EncryptedFields-vs-jsonSchema.json b/testdata/client-side-encryption/legacy/fle2v2-EncryptedFields-vs-jsonSchema.json deleted file mode 100644 index 8e0c6dafa3..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-EncryptedFields-vs-jsonSchema.json +++ /dev/null @@ -1,300 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "7.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "json_schema": { - "properties": {}, - "bsonType": "object" - }, - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "encryptedFields is preferred over jsonSchema", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedIndexed": "123" - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedIndexed": "123" - } - }, - "result": [ - { - "_id": 1, - "encryptedIndexed": "123" - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedIndexed": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "encryptedIndexed": { - "$eq": { - "$binary": { - "base64": "DIkAAAAFZAAgAAAAAPGmZcUzdE/FPILvRSyAScGvZparGI2y9rJ/vSBxgCujBXMAIAAAAACi1RjmndKqgnXy7xb22RzUbnZl1sOZRXPOC0KcJkAxmQVsACAAAAAApJtKPW4+o9B7gAynNLL26jtlB4+hq5TXResijcYet8USY20AAAAAAAAAAAAA", - "subType": "06" - } - } - } - }, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - } - } - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encryptedIndexed": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "31eCYlbQoVboc5zwC8IoyJVSkag9PxREka8dkmbXJeY=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-EncryptedFields-vs-jsonSchema.yml b/testdata/client-side-encryption/legacy/fle2v2-EncryptedFields-vs-jsonSchema.yml deleted file mode 100644 index 119da443fe..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-EncryptedFields-vs-jsonSchema.yml +++ /dev/null @@ -1,102 +0,0 @@ -# Requires libmongocrypt 1.8.0. -runOn: - - minServerVersion: "7.0.0" - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -json_schema: { - "properties": {}, - "bsonType": "object" -} -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedIndexed', 'bsonType': 'string', 'queries': {'queryType': 'equality', 'contention': {'$numberLong': '0'}}}, {'keyId': {'$binary': {'base64': 'q83vqxI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedUnindexed', 'bsonType': 'string'}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "encryptedFields is preferred over jsonSchema" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 1, encryptedIndexed: "123" } - - name: find - arguments: - filter: { encryptedIndexed: "123" } - result: [*doc0] - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 1, "encryptedIndexed": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - "default.default": - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: { - "encryptedIndexed": { - "$eq": { - "$binary": { - "base64": "DIkAAAAFZAAgAAAAAPGmZcUzdE/FPILvRSyAScGvZparGI2y9rJ/vSBxgCujBXMAIAAAAACi1RjmndKqgnXy7xb22RzUbnZl1sOZRXPOC0KcJkAxmQVsACAAAAAApJtKPW4+o9B7gAynNLL26jtlB4+hq5TXResijcYet8USY20AAAAAAAAAAAAA", - "subType": "06" - } - } - } - } - encryptionInformation: - type: 1 - schema: - "default.default": - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - { "_id": 1, "encryptedIndexed": { $$type: "binData" }, "__safeContent__": [{ "$binary" : { "base64" : "31eCYlbQoVboc5zwC8IoyJVSkag9PxREka8dkmbXJeY=", "subType" : "00" } }] } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-EncryptedFieldsMap-defaults.json b/testdata/client-side-encryption/legacy/fle2v2-EncryptedFieldsMap-defaults.json deleted file mode 100644 index 1c0a057cad..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-EncryptedFieldsMap-defaults.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "7.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "key_vault_data": [], - "tests": [ - { - "description": "default state collections are applied to encryptionInformation", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - }, - "encryptedFieldsMap": { - "default.default": { - "fields": [] - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "foo": { - "$binary": { - "base64": "BYkAAAAFZAAgAAAAAE8KGPgq7h3n9nH5lfHcia8wtOTLwGkZNLBesb6PULqbBXMAIAAAAACq0558QyD3c3jkR5k0Zc9UpQK8ByhXhtn2d1xVQnuJ3AVjACAAAAAA1003zUWGwD4zVZ0KeihnZOthS3V6CEHUfnJZcIYHefISY20AAAAAAAAAAAAA", - "subType": "06" - } - } - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "foo": { - "$binary": { - "base64": "BYkAAAAFZAAgAAAAAE8KGPgq7h3n9nH5lfHcia8wtOTLwGkZNLBesb6PULqbBXMAIAAAAACq0558QyD3c3jkR5k0Zc9UpQK8ByhXhtn2d1xVQnuJ3AVjACAAAAAA1003zUWGwD4zVZ0KeihnZOthS3V6CEHUfnJZcIYHefISY20AAAAAAAAAAAAA", - "subType": "06" - } - } - } - ], - "encryptionInformation": { - "type": { - "$numberInt": "1" - }, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [] - } - } - }, - "ordered": true - }, - "command_name": "insert" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "foo": { - "$binary": { - "base64": "BYkAAAAFZAAgAAAAAE8KGPgq7h3n9nH5lfHcia8wtOTLwGkZNLBesb6PULqbBXMAIAAAAACq0558QyD3c3jkR5k0Zc9UpQK8ByhXhtn2d1xVQnuJ3AVjACAAAAAA1003zUWGwD4zVZ0KeihnZOthS3V6CEHUfnJZcIYHefISY20AAAAAAAAAAAAA", - "subType": "06" - } - } - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-EncryptedFieldsMap-defaults.yml b/testdata/client-side-encryption/legacy/fle2v2-EncryptedFieldsMap-defaults.yml deleted file mode 100644 index ec91ebf1ca..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-EncryptedFieldsMap-defaults.yml +++ /dev/null @@ -1,58 +0,0 @@ -# Requires libmongocrypt 1.8.0. -runOn: - - minServerVersion: "7.0.0" - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -key_vault_data: [] -tests: - - description: "default state collections are applied to encryptionInformation" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - encryptedFieldsMap: &efm { - "default.default": { - "fields": [] - } - } - operations: - - name: insertOne - arguments: - document: &doc0 { - _id: 1, - # Include a FLE2FindEncryptedPayload for 'encryptionInformation' to be appended. - foo: { - "$binary": { - "base64": "BYkAAAAFZAAgAAAAAE8KGPgq7h3n9nH5lfHcia8wtOTLwGkZNLBesb6PULqbBXMAIAAAAACq0558QyD3c3jkR5k0Zc9UpQK8ByhXhtn2d1xVQnuJ3AVjACAAAAAA1003zUWGwD4zVZ0KeihnZOthS3V6CEHUfnJZcIYHefISY20AAAAAAAAAAAAA", - "subType": "06" - } - } - } - expectations: - - command_started_event: - command: - insert: *collection_name - documents: - - *doc0 - encryptionInformation: { - "type": { - "$numberInt": "1" - }, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [] - } - } - } - ordered: true - command_name: insert - outcome: - collection: - data: - - *doc0 \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-FindOneAndUpdate.json b/testdata/client-side-encryption/legacy/fle2v2-FindOneAndUpdate.json deleted file mode 100644 index c5e689a3de..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-FindOneAndUpdate.json +++ /dev/null @@ -1,560 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "7.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "findOneAndUpdate can query an FLE2 indexed field", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedIndexed": "value123" - } - } - }, - { - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "encryptedIndexed": "value123" - }, - "update": { - "$set": { - "foo": "bar" - } - }, - "returnDocument": "Before" - }, - "result": { - "_id": 1, - "encryptedIndexed": "value123" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedIndexed": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "findAndModify": "default", - "query": { - "encryptedIndexed": { - "$eq": { - "$binary": { - "base64": "DIkAAAAFZAAgAAAAAPtVteJQAlgb2YMa/+7YWH00sbQPyt7L6Rb8OwBdMmL2BXMAIAAAAAAd44hgVKnEnTFlwNVC14oyc9OZOTspeymusqkRQj57nAVsACAAAAAAaZ9s3G+4znfxStxeOZwcZy1OhzjMGc5hjmdMN+b/w6kSY20AAAAAAAAAAAAA", - "subType": "06" - } - } - } - }, - "update": { - "$set": { - "foo": "bar" - } - }, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - } - } - } - }, - "command_name": "findAndModify" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encryptedIndexed": { - "$$type": "binData" - }, - "foo": "bar", - "__safeContent__": [ - { - "$binary": { - "base64": "ThpoKfQ8AkOzkFfNC1+9PF0pY2nIzfXvRdxQgjkNbBw=", - "subType": "00" - } - } - ] - } - ] - } - } - }, - { - "description": "findOneAndUpdate can modify an FLE2 indexed field", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedIndexed": "value123" - } - } - }, - { - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "encryptedIndexed": "value123" - }, - "update": { - "$set": { - "encryptedIndexed": "value456" - } - }, - "returnDocument": "Before" - }, - "result": { - "_id": 1, - "encryptedIndexed": "value123" - } - }, - { - "name": "find", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": [ - { - "encryptedIndexed": "value456" - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedIndexed": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "findAndModify": "default", - "query": { - "encryptedIndexed": { - "$eq": { - "$binary": { - "base64": "DIkAAAAFZAAgAAAAAPtVteJQAlgb2YMa/+7YWH00sbQPyt7L6Rb8OwBdMmL2BXMAIAAAAAAd44hgVKnEnTFlwNVC14oyc9OZOTspeymusqkRQj57nAVsACAAAAAAaZ9s3G+4znfxStxeOZwcZy1OhzjMGc5hjmdMN+b/w6kSY20AAAAAAAAAAAAA", - "subType": "06" - } - } - } - }, - "update": { - "$set": { - "encryptedIndexed": { - "$$type": "binData" - } - } - }, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - } - } - } - }, - "command_name": "findAndModify" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "_id": { - "$eq": 1 - } - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encryptedIndexed": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "rhe7/w8Ob8Unl44rGr/moScx6m5VODQnscDhF4Nkn6g=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-FindOneAndUpdate.yml b/testdata/client-side-encryption/legacy/fle2v2-FindOneAndUpdate.yml deleted file mode 100644 index 7849b6032a..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-FindOneAndUpdate.yml +++ /dev/null @@ -1,200 +0,0 @@ -# Requires libmongocrypt 1.8.0. -runOn: - - minServerVersion: "7.0.0" - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedIndexed', 'bsonType': 'string', 'queries': {'queryType': 'equality', 'contention': {'$numberLong': '0'}}}, {'keyId': {'$binary': {'base64': 'q83vqxI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedUnindexed', 'bsonType': 'string'}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "findOneAndUpdate can query an FLE2 indexed field" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: {"_id": 1, "encryptedIndexed": "value123" } - - name: findOneAndUpdate - arguments: - filter: { "encryptedIndexed": "value123" } - update: { "$set": { "foo": "bar"}} - returnDocument: Before - result: { "_id": 1, "encryptedIndexed": "value123" } - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - { "_id": 1, "encryptedIndexed": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - "default.default": - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - - command_name: insert - - command_started_event: - command: - findAndModify: *collection_name - query: { - "encryptedIndexed": { - "$eq": { - "$binary": { - "base64": "DIkAAAAFZAAgAAAAAPtVteJQAlgb2YMa/+7YWH00sbQPyt7L6Rb8OwBdMmL2BXMAIAAAAAAd44hgVKnEnTFlwNVC14oyc9OZOTspeymusqkRQj57nAVsACAAAAAAaZ9s3G+4znfxStxeOZwcZy1OhzjMGc5hjmdMN+b/w6kSY20AAAAAAAAAAAAA", - "subType": "06" - } - } - } - } - update: { "$set": { "foo": "bar"} } - encryptionInformation: - type: 1 - schema: - "default.default": - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - - command_name: findAndModify - outcome: - collection: - data: - - { "_id": 1, "encryptedIndexed": { "$$type": "binData" }, "foo": "bar", "__safeContent__": [{ "$binary" : { "base64" : "ThpoKfQ8AkOzkFfNC1+9PF0pY2nIzfXvRdxQgjkNbBw=", "subType" : "00" } }] } - - - description: "findOneAndUpdate can modify an FLE2 indexed field" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: {"_id": 1, "encryptedIndexed": "value123" } - - name: findOneAndUpdate - arguments: - filter: { "encryptedIndexed": "value123" } - update: { "$set": { "encryptedIndexed": "value456"}} - returnDocument: Before - result: { "_id": 1, "encryptedIndexed": "value123" } - - name: find - arguments: - filter: { "_id": 1} - result: - [ "encryptedIndexed": "value456" ] - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - { "_id": 1, "encryptedIndexed": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - "default.default": - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - - command_name: insert - - - command_started_event: - command: - findAndModify: *collection_name - query: { - "encryptedIndexed": { - "$eq": { - "$binary": { - "base64": "DIkAAAAFZAAgAAAAAPtVteJQAlgb2YMa/+7YWH00sbQPyt7L6Rb8OwBdMmL2BXMAIAAAAAAd44hgVKnEnTFlwNVC14oyc9OZOTspeymusqkRQj57nAVsACAAAAAAaZ9s3G+4znfxStxeOZwcZy1OhzjMGc5hjmdMN+b/w6kSY20AAAAAAAAAAAAA", - "subType": "06" - } - } - } - } - update: { "$set": { "encryptedIndexed": { "$$type": "binData" }} } - encryptionInformation: - type: 1 - schema: - "default.default": - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - - command_name: findAndModify - - command_started_event: - command: - find: *collection_name - filter: { "_id": { "$eq": 1 }} - command_name: find - outcome: - collection: - data: - - { "_id": 1, "encryptedIndexed": { "$$type": "binData" }, "__safeContent__": [{ "$binary" : { "base64" : "rhe7/w8Ob8Unl44rGr/moScx6m5VODQnscDhF4Nkn6g=", "subType" : "00" } }] } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-InsertFind-Indexed.json b/testdata/client-side-encryption/legacy/fle2v2-InsertFind-Indexed.json deleted file mode 100644 index 6e156ffc60..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-InsertFind-Indexed.json +++ /dev/null @@ -1,296 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "7.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "Insert and find FLE2 indexed field", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedIndexed": "123" - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedIndexed": "123" - } - }, - "result": [ - { - "_id": 1, - "encryptedIndexed": "123" - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedIndexed": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "encryptedIndexed": { - "$eq": { - "$binary": { - "base64": "DIkAAAAFZAAgAAAAAPGmZcUzdE/FPILvRSyAScGvZparGI2y9rJ/vSBxgCujBXMAIAAAAACi1RjmndKqgnXy7xb22RzUbnZl1sOZRXPOC0KcJkAxmQVsACAAAAAApJtKPW4+o9B7gAynNLL26jtlB4+hq5TXResijcYet8USY20AAAAAAAAAAAAA", - "subType": "06" - } - } - } - }, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - } - } - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encryptedIndexed": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "31eCYlbQoVboc5zwC8IoyJVSkag9PxREka8dkmbXJeY=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-InsertFind-Indexed.yml b/testdata/client-side-encryption/legacy/fle2v2-InsertFind-Indexed.yml deleted file mode 100644 index 2acd97585b..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-InsertFind-Indexed.yml +++ /dev/null @@ -1,96 +0,0 @@ -# Requires libmongocrypt 1.8.0. -runOn: - - minServerVersion: "7.0.0" - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedIndexed', 'bsonType': 'string', 'queries': {'queryType': 'equality', 'contention': {'$numberLong': '0'}}}, {'keyId': {'$binary': {'base64': 'q83vqxI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedUnindexed', 'bsonType': 'string'}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "Insert and find FLE2 indexed field" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 1, encryptedIndexed: "123" } - - name: find - arguments: - filter: { encryptedIndexed: "123" } - result: [*doc0] - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 1, "encryptedIndexed": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: { - "encryptedIndexed": { - "$eq": { - "$binary": { - "base64": "DIkAAAAFZAAgAAAAAPGmZcUzdE/FPILvRSyAScGvZparGI2y9rJ/vSBxgCujBXMAIAAAAACi1RjmndKqgnXy7xb22RzUbnZl1sOZRXPOC0KcJkAxmQVsACAAAAAApJtKPW4+o9B7gAynNLL26jtlB4+hq5TXResijcYet8USY20AAAAAAAAAAAAA", - "subType": "06" - } - } - } - } - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - { "_id": 1, "encryptedIndexed": { $$type: "binData" }, "__safeContent__": [{ "$binary" : { "base64" : "31eCYlbQoVboc5zwC8IoyJVSkag9PxREka8dkmbXJeY=", "subType" : "00" } }] } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-InsertFind-Unindexed.json b/testdata/client-side-encryption/legacy/fle2v2-InsertFind-Unindexed.json deleted file mode 100644 index 48280f5bd4..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-InsertFind-Unindexed.json +++ /dev/null @@ -1,248 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "7.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "HBk9BWihXExNDvTp1lUxOuxuZK2Pe2ZdVdlsxPEBkiO1bS4mG5NNDsQ7zVxJAH8BtdOYp72Ku4Y3nwc0BUpIKsvAKX4eYXtlhv5zUQxWdeNFhg9qK7qb8nqhnnLeT0f25jFSqzWJoT379hfwDeu0bebJHr35QrJ8myZdPMTEDYF08QYQ48ShRBli0S+QzBHHAQiM2iJNr4svg2WR8JSeWQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "Insert and find FLE2 unindexed field", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedUnindexed": "value123" - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": [ - { - "_id": 1, - "encryptedUnindexed": "value123" - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedUnindexed": { - "$$type": "binData" - } - } - ], - "ordered": true - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "_id": { - "$eq": 1 - } - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encryptedUnindexed": { - "$$type": "binData" - } - } - ] - } - } - }, - { - "description": "Query with an unindexed field fails", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedUnindexed": "value123" - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedUnindexed": "value123" - } - }, - "result": { - "errorContains": "encrypt" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-InsertFind-Unindexed.yml b/testdata/client-side-encryption/legacy/fle2v2-InsertFind-Unindexed.yml deleted file mode 100644 index ddba6c7439..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-InsertFind-Unindexed.yml +++ /dev/null @@ -1,89 +0,0 @@ -# Requires libmongocrypt 1.8.0. -runOn: - - minServerVersion: "7.0.0" - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedIndexed', 'bsonType': 'string', 'queries': {'queryType': 'equality', 'contention': {'$numberLong': '0'}}}, {'keyId': {'$binary': {'base64': 'q83vqxI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedUnindexed', 'bsonType': 'string'}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'q83vqxI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'HBk9BWihXExNDvTp1lUxOuxuZK2Pe2ZdVdlsxPEBkiO1bS4mG5NNDsQ7zVxJAH8BtdOYp72Ku4Y3nwc0BUpIKsvAKX4eYXtlhv5zUQxWdeNFhg9qK7qb8nqhnnLeT0f25jFSqzWJoT379hfwDeu0bebJHr35QrJ8myZdPMTEDYF08QYQ48ShRBli0S+QzBHHAQiM2iJNr4svg2WR8JSeWQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "Insert and find FLE2 unindexed field" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 1, encryptedUnindexed: "value123" } - - name: find - arguments: - filter: { _id: 1 } - result: [*doc0] - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'q83vqxI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 1, "encryptedUnindexed": { $$type: "binData" } } - ordered: true - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: { "_id": { "$eq": 1 }} - command_name: find - outcome: - collection: - data: - - { "_id": 1, "encryptedUnindexed": { $$type: "binData" } } - - - description: "Query with an unindexed field fails" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: { _id: 1, encryptedUnindexed: "value123" } - - name: find - arguments: - filter: { encryptedUnindexed: "value123" } - result: - # Expected error message changed in https://github.com/10gen/mongo-enterprise-modules/commit/212b584d4f7a44bed41c826a180a4aff00923d7a#diff-5f12b55e8d5c52c2f62853ec595dc2c1e2e5cb4fdbf7a32739a8e3acb3c6f818 - # Before the message was "cannot query non-indexed fields with the randomized encryption algorithm" - # After: "can only execute encrypted equality queries with an encrypted equality index" - # Use a small common substring. - errorContains: "encrypt" \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-MissingKey.json b/testdata/client-side-encryption/legacy/fle2v2-MissingKey.json deleted file mode 100644 index 1e655f0a9c..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-MissingKey.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "7.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [ - { - "encryptedUnindexed": { - "$binary": { - "base64": "BqvN76sSNJh2EjQSNFZ4kBICTQaVZPWgXp41I7mPV1rLFTtw1tXzjcdSEyxpKKqujlko5TeizkB9hHQ009dVY1+fgIiDcefh+eQrm3CkhQ==", - "subType": "06" - } - } - } - ], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - }, - "key_vault_data": [], - "tests": [ - { - "description": "FLE2 encrypt fails with missing key", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedIndexed": "123" - } - }, - "result": { - "errorContains": "not all keys requested were satisfied" - } - } - ] - }, - { - "description": "FLE2 decrypt fails with missing key", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "find", - "arguments": { - "filter": {} - }, - "result": { - "errorContains": "not all keys requested were satisfied" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-MissingKey.yml b/testdata/client-side-encryption/legacy/fle2v2-MissingKey.yml deleted file mode 100644 index f4fbbeb5ca..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-MissingKey.yml +++ /dev/null @@ -1,43 +0,0 @@ -# Requires libmongocrypt 1.8.0. -runOn: - - minServerVersion: "7.0.0" - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [ - &doc0 { - "encryptedUnindexed": { - "$binary": { - "base64": "BqvN76sSNJh2EjQSNFZ4kBICTQaVZPWgXp41I7mPV1rLFTtw1tXzjcdSEyxpKKqujlko5TeizkB9hHQ009dVY1+fgIiDcefh+eQrm3CkhQ==", - "subType": "06" - } - } - } -] -encrypted_fields: {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedIndexed', 'bsonType': 'string', 'queries': {'queryType': 'equality', 'contention': {'$numberLong': '0'}}}, {'keyId': {'$binary': {'base64': 'q83vqxI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedUnindexed', 'bsonType': 'string'}]} -key_vault_data: [] -tests: - - description: "FLE2 encrypt fails with missing key" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: { _id: 1, encryptedIndexed: "123" } - result: - errorContains: "not all keys requested were satisfied" - - description: "FLE2 decrypt fails with missing key" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: find - arguments: - filter: { } - result: - errorContains: "not all keys requested were satisfied" \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-NoEncryption.json b/testdata/client-side-encryption/legacy/fle2v2-NoEncryption.json deleted file mode 100644 index a6843c4737..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-NoEncryption.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "7.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "key_vault_data": [], - "encrypted_fields": { - "fields": [] - }, - "tests": [ - { - "description": "insert with no encryption succeeds", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "foo": "bar" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "foo": "bar" - } - ], - "ordered": true - }, - "command_name": "insert" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "foo": "bar" - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-NoEncryption.yml b/testdata/client-side-encryption/legacy/fle2v2-NoEncryption.yml deleted file mode 100644 index afb79d526b..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-NoEncryption.yml +++ /dev/null @@ -1,44 +0,0 @@ -# Requires libmongocrypt 1.8.0. -runOn: - - minServerVersion: "7.0.0" - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -key_vault_data: [] -encrypted_fields: { - "fields": [] -} -tests: - - description: "insert with no encryption succeeds" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { - _id: 1, - foo: "bar" - } - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - insert: *collection_name - documents: - - *doc0 - ordered: true - command_name: insert - outcome: - collection: - data: - - *doc0 \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Compact.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Compact.json deleted file mode 100644 index bba9f25535..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Compact.json +++ /dev/null @@ -1,290 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ], - "serverless": "forbid" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "Compact works with 'range' fields", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "runCommand", - "object": "database", - "command_name": "compactStructuredEncryptionData", - "arguments": { - "command": { - "compactStructuredEncryptionData": "default" - } - }, - "result": { - "ok": 1 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedInt": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "compactStructuredEncryptionData": "default", - "compactionTokens": { - "encryptedInt": { - "ecoc": { - "$binary": { - "base64": "noN+05JsuO1oDg59yypIGj45i+eFH6HOTXOPpeZ//Mk=", - "subType": "00" - } - }, - "anchorPaddingToken": { - "$binary": { - "base64": "QxKJD2If48p0l8NAXf2Kr0aleMd/dATSjBK6hTpNMyc=", - "subType": "00" - } - } - } - }, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - } - } - } - }, - "command_name": "compactStructuredEncryptionData" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Compact.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Compact.yml deleted file mode 100644 index d49c084ef2..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Compact.yml +++ /dev/null @@ -1,94 +0,0 @@ -# Requires libmongocrypt 1.10.1. -runOn: - - minServerVersion: "8.0.0" # Require range v2 support on server. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] - serverless: forbid # Skip on serverless until CLOUDP-267864 is resolved. -database_name: "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedInt', 'bsonType': 'int', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberInt': '0'}, 'max': {'$numberInt': '200'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "Compact works with 'range' fields" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - # Insert before running compact to ensure the server errors if `encryptionInformation` is incorrectly omitted. - - name: insertOne - arguments: - document: { _id: 0, encryptedInt: { $numberInt: "0" } } - - name: runCommand - object: database - command_name: compactStructuredEncryptionData - arguments: - command: - compactStructuredEncryptionData: *collection_name - result: - ok: 1 - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - { "_id": 0, "encryptedInt": { $$type: "binData" } } - ordered: true - encryptionInformation: &encryptionInformation - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - compactStructuredEncryptionData: *collection_name - compactionTokens: - "encryptedInt": { - "ecoc": { - "$binary": { - "base64": "noN+05JsuO1oDg59yypIGj45i+eFH6HOTXOPpeZ//Mk=", - "subType": "00" - } - }, - "anchorPaddingToken": { - "$binary": { - "base64": "QxKJD2If48p0l8NAXf2Kr0aleMd/dATSjBK6hTpNMyc=", - "subType": "00" - } - } - } - encryptionInformation: *encryptionInformation - command_name: compactStructuredEncryptionData \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Aggregate.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Aggregate.json deleted file mode 100644 index df2161cc36..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Aggregate.json +++ /dev/null @@ -1,508 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDate", - "bsonType": "date", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$date": { - "$numberLong": "0" - } - }, - "max": { - "$date": { - "$numberLong": "200" - } - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range Date. Aggregate.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDate": { - "$gt": { - "$date": { - "$numberLong": "0" - } - } - } - } - } - ] - }, - "result": [ - { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedDate": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDate", - "bsonType": "date", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$date": { - "$numberLong": "0" - } - }, - "max": { - "$date": { - "$numberLong": "200" - } - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedDate": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDate", - "bsonType": "date", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$date": { - "$numberLong": "0" - } - }, - "max": { - "$date": { - "$numberLong": "200" - } - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "default", - "pipeline": [ - { - "$match": { - "encryptedDate": { - "$gt": { - "$binary": { - "base64": "DXUFAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAAJbW4AAAAAAAAAAAAJbXgAyAAAAAAAAAAA", - "subType": "06" - } - } - } - } - } - ], - "cursor": {}, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDate", - "bsonType": "date", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$date": { - "$numberLong": "0" - } - }, - "max": { - "$date": { - "$numberLong": "200" - } - } - } - } - ] - } - } - } - }, - "command_name": "aggregate" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedDate": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - }, - { - "_id": 1, - "encryptedDate": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "25j9sQXZCihCmHKvTHgaBsAVZFcGPn7JjHdrCGlwyyw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FA74j21GUEJb1DJBOpR9nVnjaDZnd8yAQNuaW9Qi26g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kJv//KVkbrobIBf+QeWC5jxn20mx/P0R1N6aCSMgKM8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zB+Whi9IUUGxfLEe+lGuIzLX4LFbIhaIAm5lRk65QTc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ybO1QU3CgvhO8JgRXH+HxKszWcpl5aGDYYVa75fHa1g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X3Y3eSAbbMg//JgiHHiFpYOpV61t8kkDexI+CQyitH4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SlNHXyqVFGDPrX/2ppwog6l4pwj3PKda2TkZbqgfSfA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "McjV8xwTF3xI7863DYOBdyvIv6UpzThl6v9vBRk05bI=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Aggregate.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Aggregate.yml deleted file mode 100644 index cc5fd4d267..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Aggregate.yml +++ /dev/null @@ -1,229 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDate', 'bsonType': 'date', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$date': {'$numberLong': '0'}}, 'max': {'$date': {'$numberLong': '200'}}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range Date. Aggregate." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDate: {$date: { $numberLong: "0" }} } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDate: {$date: { $numberLong: "1" }} } - - name: aggregate - arguments: - pipeline: [{ $match: { "encryptedDate": { $gt: {$date: {$numberLong: "0" }}} } }] - result: [*doc1] - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedDate": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedDate": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - aggregate: *collection_name - pipeline: [ - { - "$match": { - "encryptedDate": { - "$gt": { - "$binary": { - "base64": "DXUFAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAAJbW4AAAAAAAAAAAAJbXgAyAAAAAAAAAAA", - "subType": "06" - } - } - } - } - } - ] - cursor: {} - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: aggregate - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedDate": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - } - - - { - "_id": 1, - "encryptedDate": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "25j9sQXZCihCmHKvTHgaBsAVZFcGPn7JjHdrCGlwyyw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FA74j21GUEJb1DJBOpR9nVnjaDZnd8yAQNuaW9Qi26g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kJv//KVkbrobIBf+QeWC5jxn20mx/P0R1N6aCSMgKM8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zB+Whi9IUUGxfLEe+lGuIzLX4LFbIhaIAm5lRk65QTc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ybO1QU3CgvhO8JgRXH+HxKszWcpl5aGDYYVa75fHa1g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X3Y3eSAbbMg//JgiHHiFpYOpV61t8kkDexI+CQyitH4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SlNHXyqVFGDPrX/2ppwog6l4pwj3PKda2TkZbqgfSfA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "McjV8xwTF3xI7863DYOBdyvIv6UpzThl6v9vBRk05bI=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Correctness.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Correctness.json deleted file mode 100644 index fae25a1c02..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Correctness.json +++ /dev/null @@ -1,1842 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDate", - "bsonType": "date", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$date": { - "$numberLong": "0" - } - }, - "max": { - "$date": { - "$numberLong": "200" - } - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "Find with $gt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDate": { - "$gt": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - "result": [ - { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - ] - } - ] - }, - { - "description": "Find with $gte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDate": { - "$gte": { - "$date": { - "$numberLong": "0" - } - } - } - }, - "sort": { - "_id": 1 - } - }, - "result": [ - { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - }, - { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - ] - } - ] - }, - { - "description": "Find with $gt with no results", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDate": { - "$gt": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - "result": [] - } - ] - }, - { - "description": "Find with $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDate": { - "$lt": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - "result": [ - { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - ] - } - ] - }, - { - "description": "Find with $lte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDate": { - "$lte": { - "$date": { - "$numberLong": "1" - } - } - } - }, - "sort": { - "_id": 1 - } - }, - "result": [ - { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - }, - { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - ] - } - ] - }, - { - "description": "Find with $lt below min", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDate": { - "$lt": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - "result": { - "errorContains": "must be greater than the range minimum" - } - } - ] - }, - { - "description": "Find with $gt above max", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDate": { - "$gt": { - "$date": { - "$numberLong": "200" - } - } - } - } - }, - "result": { - "errorContains": "must be less than the range maximum" - } - } - ] - }, - { - "description": "Find with $gt and $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDate": { - "$gt": { - "$date": { - "$numberLong": "0" - } - }, - "$lt": { - "$date": { - "$numberLong": "2" - } - } - } - } - }, - "result": [ - { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - ] - } - ] - }, - { - "description": "Find with equality", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - }, - "result": [ - { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - ] - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - }, - "result": [ - { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - ] - } - ] - }, - { - "description": "Find with full range", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDate": { - "$gte": { - "$date": { - "$numberLong": "0" - } - }, - "$lte": { - "$date": { - "$numberLong": "200" - } - } - } - }, - "sort": { - "_id": 1 - } - }, - "result": [ - { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - }, - { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - ] - } - ] - }, - { - "description": "Find with $in", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDate": { - "$in": [ - { - "$date": { - "$numberLong": "0" - } - } - ] - } - } - }, - "result": [ - { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - ] - } - ] - }, - { - "description": "Insert out of range", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "-1" - } - } - } - }, - "result": { - "errorContains": "value must be greater than or equal to the minimum value" - } - } - ] - }, - { - "description": "Insert min and max", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 200, - "encryptedDate": { - "$date": { - "$numberLong": "200" - } - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": {}, - "sort": { - "_id": 1 - } - }, - "result": [ - { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - }, - { - "_id": 200, - "encryptedDate": { - "$date": { - "$numberLong": "200" - } - } - } - ] - } - ] - }, - { - "description": "Aggregate with $gte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDate": { - "$gte": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "$sort": { - "_id": 1 - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - }, - { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - ] - } - ] - }, - { - "description": "Aggregate with $gt with no results", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDate": { - "$gt": { - "$date": { - "$numberLong": "1" - } - } - } - } - } - ] - }, - "result": [] - } - ] - }, - { - "description": "Aggregate with $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDate": { - "$lt": { - "$date": { - "$numberLong": "1" - } - } - } - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - ] - } - ] - }, - { - "description": "Aggregate with $lte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDate": { - "$lte": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "$sort": { - "_id": 1 - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - }, - { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - ] - } - ] - }, - { - "description": "Aggregate with $lt below min", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDate": { - "$lt": { - "$date": { - "$numberLong": "0" - } - } - } - } - } - ] - }, - "result": { - "errorContains": "must be greater than the range minimum" - } - } - ] - }, - { - "description": "Aggregate with $gt above max", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDate": { - "$gt": { - "$date": { - "$numberLong": "200" - } - } - } - } - } - ] - }, - "result": { - "errorContains": "must be less than the range maximum" - } - } - ] - }, - { - "description": "Aggregate with $gt and $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDate": { - "$gt": { - "$date": { - "$numberLong": "0" - } - }, - "$lt": { - "$date": { - "$numberLong": "2" - } - } - } - } - } - ] - }, - "result": [ - { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - ] - } - ] - }, - { - "description": "Aggregate with equality", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - ] - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - ] - }, - "result": [ - { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - ] - } - ] - }, - { - "description": "Aggregate with full range", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDate": { - "$gte": { - "$date": { - "$numberLong": "0" - } - }, - "$lte": { - "$date": { - "$numberLong": "200" - } - } - } - } - }, - { - "$sort": { - "_id": 1 - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - }, - { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - ] - } - ] - }, - { - "description": "Aggregate with $in", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDate": { - "$in": [ - { - "$date": { - "$numberLong": "0" - } - } - ] - } - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - ] - } - ] - }, - { - "description": "Wrong type: Insert Double", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$numberDouble": "0" - } - } - }, - "result": { - "errorContains": "cannot encrypt element" - } - } - ] - }, - { - "description": "Wrong type: Find Double", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "find", - "arguments": { - "filter": { - "encryptedDate": { - "$gte": { - "$numberDouble": "0" - } - } - } - }, - "result": { - "errorContains": "value type is a date" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Correctness.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Correctness.yml deleted file mode 100644 index f7ed9fb93f..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Correctness.yml +++ /dev/null @@ -1,422 +0,0 @@ -# Test correctness results. -# Does not include command monitoring expectations or outcome assertions to make tests more readable. - -# Requires libmongocrypt 1.8.0. -runOn: - - minServerVersion: "8.0.0" - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDate', 'bsonType': 'date', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$date': {'$numberLong': '0'}}, 'max': {'$date': {'$numberLong': '200'}}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "Find with $gt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDate: { $date: { $numberLong: "0" } } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDate: { $date: { $numberLong: "1" } } } - - name: find - arguments: - filter: { encryptedDate: { $gt: { $date: { $numberLong: "0" } } }} - result: [*doc1] - - - description: "Find with $gte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDate: { $gte: { $date: { $numberLong: "0" } } }} - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: [*doc0, *doc1] - - - description: "Find with $gt with no results" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDate: { $gt: { $date: { $numberLong: "1" } } }} - result: [] - - - description: "Find with $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDate: { $lt: { $date: { $numberLong: "1" } } }} - result: [*doc0] - - - description: "Find with $lte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDate: { $lte: { $date: { $numberLong: "1" } } }} - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: [*doc0, *doc1] - - - description: "Find with $lt below min" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDate: { $lt: { $date: { $numberLong: "0" } } }} - result: - errorContains: must be greater than the range minimum - - - description: "Find with $gt above max" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDate: { $gt: { $date: { $numberLong: "200" } } }} - result: - errorContains: must be less than the range maximum - - - description: "Find with $gt and $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDate: { $gt: { $date: { $numberLong: "0" } }, $lt: { $date: {$numberLong: "2"}} }} - result: [*doc1] - - - description: "Find with equality" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDate: { $date: { $numberLong: "0" } } } - result: [*doc0] - - name: find - arguments: - filter: { encryptedDate: { $date: { $numberLong: "1" } } } - result: [*doc1] - - - description: "Find with full range" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDate: { $gte: { $date: {$numberLong: "0"}}, $lte: { $date: {$numberLong: "200"} } } } - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: [*doc0, *doc1] - - - description: "Find with $in" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDate: { $in: [ {$date: {$numberLong: "0"}} ] } } - result: [*doc0] - - - description: "Insert out of range" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: { _id: 0, encryptedDate: {$date: { $numberLong: "-1" }}} - result: - errorContains: value must be greater than or equal to the minimum value - - - description: "Insert min and max" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: *doc0 - - name: insertOne - arguments: - document: &doc200 { _id: 200, encryptedDate: { $date: { $numberLong: "200" } }} - - name: find - arguments: - filter: {} - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: [*doc0, *doc200] - - - description: "Aggregate with $gte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDate: { $gte: { $date: { $numberLong: "0" } } }} } - # sort so results from range queries are ordered. - - { $sort: { _id: 1 }} - result: [*doc0, *doc1] - - - description: "Aggregate with $gt with no results" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDate: { $gt: { $date: { $numberLong: "1" } } }} } - result: [] - - - description: "Aggregate with $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDate: { $lt: { $date: { $numberLong: "1" } } }} } - result: [*doc0] - - - description: "Aggregate with $lte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDate: { $lte: { $date: { $numberLong: "1" } } }} } - # sort so results from range queries are ordered. - - { $sort: { _id: 1 }} - result: [*doc0, *doc1] - - - description: "Aggregate with $lt below min" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDate: { $lt: { $date: { $numberLong: "0" } } }} } - result: - errorContains: must be greater than the range minimum - - - description: "Aggregate with $gt above max" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDate: { $gt: { $date: { $numberLong: "200" } } }} } - result: - errorContains: must be less than the range maximum - - - description: "Aggregate with $gt and $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDate: { $gt: { $date: { $numberLong: "0" } }, $lt: { $date: {$numberLong: "2"}} }} } - result: [*doc1] - - - description: "Aggregate with equality" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDate: { $date: { $numberLong: "0" } } } } - result: [*doc0] - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDate: { $date: { $numberLong: "1" } } } } - result: [*doc1] - - - description: "Aggregate with full range" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDate: { $gte: {$date: {$numberLong: "0"}}, $lte: {$date: {$numberLong: "200"}} } } } - # sort so results from range queries are ordered. - - { $sort: { _id: 1 }} - result: [*doc0, *doc1] - - - description: "Aggregate with $in" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDate: { $in: [ {$date: {$numberLong: "0"}} ] } } } - result: [*doc0] - - - description: "Wrong type: Insert Double" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: { _id: 0, encryptedDate: { $numberDouble: "0" }} } - result: - # Expect an error from mongocryptd. - errorContains: "cannot encrypt element" - - - description: "Wrong type: Find Double" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: find - arguments: - filter: { encryptedDate: { $gte: { $numberDouble: "0" } }} - result: - # expect an error mongocryptd. - errorContains: "value type is a date" \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Delete.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Delete.json deleted file mode 100644 index b4f15d9b1f..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Delete.json +++ /dev/null @@ -1,442 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDate", - "bsonType": "date", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$date": { - "$numberLong": "0" - } - }, - "max": { - "$date": { - "$numberLong": "200" - } - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range Date. Delete.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "deleteOne", - "arguments": { - "filter": { - "encryptedDate": { - "$gt": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - "result": { - "deletedCount": 1 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedDate": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDate", - "bsonType": "date", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$date": { - "$numberLong": "0" - } - }, - "max": { - "$date": { - "$numberLong": "200" - } - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedDate": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDate", - "bsonType": "date", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$date": { - "$numberLong": "0" - } - }, - "max": { - "$date": { - "$numberLong": "200" - } - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "delete": "default", - "deletes": [ - { - "q": { - "encryptedDate": { - "$gt": { - "$binary": { - "base64": "DXUFAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAAJbW4AAAAAAAAAAAAJbXgAyAAAAAAAAAAA", - "subType": "06" - } - } - } - }, - "limit": 1 - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDate", - "bsonType": "date", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$date": { - "$numberLong": "0" - } - }, - "max": { - "$date": { - "$numberLong": "200" - } - } - } - } - ] - } - } - } - }, - "command_name": "delete" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedDate": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Delete.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Delete.yml deleted file mode 100644 index 188b75940b..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Delete.yml +++ /dev/null @@ -1,176 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDate', 'bsonType': 'date', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$date': {'$numberLong': '0'}}, 'max': {'$date': {'$numberLong': '200'}}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range Date. Delete." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDate: {$date: { $numberLong: "0" }} } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDate: {$date: { $numberLong: "1" }} } - - name: deleteOne - arguments: - filter: { "encryptedDate": { $gt: {$date: {$numberLong: "0" }}} } - result: - deletedCount: 1 - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedDate": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedDate": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - delete: *collection_name - deletes: [ - { - "q": { - "encryptedDate": { - "$gt": { - "$binary": { - "base64": "DXUFAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAAJbW4AAAAAAAAAAAAJbXgAyAAAAAAAAAAA", - "subType": "06" - } - } - } - }, - "limit": 1 - } - ] - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: delete - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedDate": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-FindOneAndUpdate.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-FindOneAndUpdate.json deleted file mode 100644 index 97ab4aaeb9..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-FindOneAndUpdate.json +++ /dev/null @@ -1,514 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDate", - "bsonType": "date", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$date": { - "$numberLong": "0" - } - }, - "max": { - "$date": { - "$numberLong": "200" - } - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range Date. FindOneAndUpdate.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "encryptedDate": { - "$gt": { - "$date": { - "$numberLong": "0" - } - } - } - }, - "update": { - "$set": { - "encryptedDate": { - "$date": { - "$numberLong": "2" - } - } - } - }, - "returnDocument": "Before" - }, - "result": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedDate": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDate", - "bsonType": "date", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$date": { - "$numberLong": "0" - } - }, - "max": { - "$date": { - "$numberLong": "200" - } - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedDate": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDate", - "bsonType": "date", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$date": { - "$numberLong": "0" - } - }, - "max": { - "$date": { - "$numberLong": "200" - } - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "findAndModify": "default", - "query": { - "encryptedDate": { - "$gt": { - "$binary": { - "base64": "DXUFAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAAJbW4AAAAAAAAAAAAJbXgAyAAAAAAAAAAA", - "subType": "06" - } - } - } - }, - "update": { - "$set": { - "encryptedDate": { - "$$type": "binData" - } - } - }, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDate", - "bsonType": "date", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$date": { - "$numberLong": "0" - } - }, - "max": { - "$date": { - "$numberLong": "200" - } - } - } - } - ] - } - } - } - }, - "command_name": "findAndModify" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedDate": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - }, - { - "_id": 1, - "encryptedDate": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "hyDcE6QQjPrYJaIS/n7evEZFYcm31Tj89CpEYGF45cI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "F08nMDWDZc+DbWM7XCEJNNCEYyinRmrvGP7EWhmp4is=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cXH4688amcDc8kZOJq4UP8cE3R58Zl7e+Qo/1jyspps=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uURBxvTp3FBCVkd+LPqyuY7d6rMW6SGIJQEPY/wtkZI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jG3hax1L3RBp9t38vUt53FsBxgr/+Si/vVISpAylYpE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kwtIW8MhH9Ky5xNjBx8gFA/SHh2YVphie7g5FGBzals=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FHflwFuEMu4xX0ZApHi+pdlBH+oevAtXckCUb5Wv0xU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ty4cnzJdAlbQKnh7px3GEYjBnvO+jIOaKjoTRDtmh3M=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-FindOneAndUpdate.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-FindOneAndUpdate.yml deleted file mode 100644 index 2c53412e9a..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-FindOneAndUpdate.yml +++ /dev/null @@ -1,227 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDate', 'bsonType': 'date', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$date': {'$numberLong': '0'}}, 'max': {'$date': {'$numberLong': '200'}}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range Date. FindOneAndUpdate." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDate: {$date: { $numberLong: "0" }} } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDate: {$date: { $numberLong: "1" }} } - - name: findOneAndUpdate - arguments: - filter: { encryptedDate: { $gt: {$date: {$numberLong: "0"}}} } - update: { "$set": { "encryptedDate": {$date: {$numberLong: "2"}}}} - returnDocument: Before - result: *doc1 - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedDate": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedDate": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - findAndModify: *collection_name - query: { - "encryptedDate": { - "$gt": { - "$binary": { - "base64": "DXUFAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAAJbW4AAAAAAAAAAAAJbXgAyAAAAAAAAAAA", - "subType": "06" - } - } - } - } - update: { "$set": {"encryptedDate": { $$type: "binData" }} } - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: findAndModify - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedDate": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - } - - - { - "_id": 1, - "encryptedDate": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "hyDcE6QQjPrYJaIS/n7evEZFYcm31Tj89CpEYGF45cI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "F08nMDWDZc+DbWM7XCEJNNCEYyinRmrvGP7EWhmp4is=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cXH4688amcDc8kZOJq4UP8cE3R58Zl7e+Qo/1jyspps=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uURBxvTp3FBCVkd+LPqyuY7d6rMW6SGIJQEPY/wtkZI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jG3hax1L3RBp9t38vUt53FsBxgr/+Si/vVISpAylYpE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kwtIW8MhH9Ky5xNjBx8gFA/SHh2YVphie7g5FGBzals=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FHflwFuEMu4xX0ZApHi+pdlBH+oevAtXckCUb5Wv0xU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ty4cnzJdAlbQKnh7px3GEYjBnvO+jIOaKjoTRDtmh3M=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-InsertFind.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-InsertFind.json deleted file mode 100644 index a011c388e4..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-InsertFind.json +++ /dev/null @@ -1,499 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDate", - "bsonType": "date", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$date": { - "$numberLong": "0" - } - }, - "max": { - "$date": { - "$numberLong": "200" - } - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range Date. Insert and Find.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDate": { - "$gt": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - "result": [ - { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedDate": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDate", - "bsonType": "date", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$date": { - "$numberLong": "0" - } - }, - "max": { - "$date": { - "$numberLong": "200" - } - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedDate": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDate", - "bsonType": "date", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$date": { - "$numberLong": "0" - } - }, - "max": { - "$date": { - "$numberLong": "200" - } - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "encryptedDate": { - "$gt": { - "$binary": { - "base64": "DXUFAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAAJbW4AAAAAAAAAAAAJbXgAyAAAAAAAAAAA", - "subType": "06" - } - } - } - }, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDate", - "bsonType": "date", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$date": { - "$numberLong": "0" - } - }, - "max": { - "$date": { - "$numberLong": "200" - } - } - } - } - ] - } - } - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedDate": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - }, - { - "_id": 1, - "encryptedDate": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "25j9sQXZCihCmHKvTHgaBsAVZFcGPn7JjHdrCGlwyyw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FA74j21GUEJb1DJBOpR9nVnjaDZnd8yAQNuaW9Qi26g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kJv//KVkbrobIBf+QeWC5jxn20mx/P0R1N6aCSMgKM8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zB+Whi9IUUGxfLEe+lGuIzLX4LFbIhaIAm5lRk65QTc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ybO1QU3CgvhO8JgRXH+HxKszWcpl5aGDYYVa75fHa1g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X3Y3eSAbbMg//JgiHHiFpYOpV61t8kkDexI+CQyitH4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SlNHXyqVFGDPrX/2ppwog6l4pwj3PKda2TkZbqgfSfA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "McjV8xwTF3xI7863DYOBdyvIv6UpzThl6v9vBRk05bI=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-InsertFind.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-InsertFind.yml deleted file mode 100644 index 8188fc6e39..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-InsertFind.yml +++ /dev/null @@ -1,223 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDate', 'bsonType': 'date', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$date': {'$numberLong': '0'}}, 'max': {'$date': {'$numberLong': '200'}}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range Date. Insert and Find." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDate: { $date: { $numberLong: "0" }} } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDate: { $date: { $numberLong: "1" }} } - - name: find - arguments: - filter: { encryptedDate: { $gt: { $date: { $numberLong: "0" }} } } - result: [*doc1] - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedDate": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedDate": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: - "encryptedDate": { - "$gt": { - "$binary": { - "base64": "DXUFAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAAJbW4AAAAAAAAAAAAJbXgAyAAAAAAAAAAA", - "subType": "06" - } - } - } - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedDate": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - } - - - { - "_id": 1, - "encryptedDate": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "25j9sQXZCihCmHKvTHgaBsAVZFcGPn7JjHdrCGlwyyw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FA74j21GUEJb1DJBOpR9nVnjaDZnd8yAQNuaW9Qi26g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kJv//KVkbrobIBf+QeWC5jxn20mx/P0R1N6aCSMgKM8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zB+Whi9IUUGxfLEe+lGuIzLX4LFbIhaIAm5lRk65QTc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ybO1QU3CgvhO8JgRXH+HxKszWcpl5aGDYYVa75fHa1g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X3Y3eSAbbMg//JgiHHiFpYOpV61t8kkDexI+CQyitH4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SlNHXyqVFGDPrX/2ppwog6l4pwj3PKda2TkZbqgfSfA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "McjV8xwTF3xI7863DYOBdyvIv6UpzThl6v9vBRk05bI=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Update.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Update.json deleted file mode 100644 index 6bab6499f5..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Update.json +++ /dev/null @@ -1,516 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDate", - "bsonType": "date", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$date": { - "$numberLong": "0" - } - }, - "max": { - "$date": { - "$numberLong": "200" - } - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range Date. Update.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDate": { - "$date": { - "$numberLong": "0" - } - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDate": { - "$date": { - "$numberLong": "1" - } - } - } - } - }, - { - "name": "updateOne", - "arguments": { - "filter": { - "encryptedDate": { - "$gt": { - "$date": { - "$numberLong": "0" - } - } - } - }, - "update": { - "$set": { - "encryptedDate": { - "$date": { - "$numberLong": "2" - } - } - } - } - }, - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedDate": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDate", - "bsonType": "date", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$date": { - "$numberLong": "0" - } - }, - "max": { - "$date": { - "$numberLong": "200" - } - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedDate": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDate", - "bsonType": "date", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$date": { - "$numberLong": "0" - } - }, - "max": { - "$date": { - "$numberLong": "200" - } - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command_name": "update", - "command": { - "update": "default", - "ordered": true, - "updates": [ - { - "q": { - "encryptedDate": { - "$gt": { - "$binary": { - "base64": "DXUFAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAAJbW4AAAAAAAAAAAAJbXgAyAAAAAAAAAAA", - "subType": "06" - } - } - } - }, - "u": { - "$set": { - "encryptedDate": { - "$$type": "binData" - } - } - } - } - ], - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDate", - "bsonType": "date", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$date": { - "$numberLong": "0" - } - }, - "max": { - "$date": { - "$numberLong": "200" - } - } - } - } - ] - } - } - }, - "$db": "default" - } - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedDate": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - }, - { - "_id": 1, - "encryptedDate": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "hyDcE6QQjPrYJaIS/n7evEZFYcm31Tj89CpEYGF45cI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "F08nMDWDZc+DbWM7XCEJNNCEYyinRmrvGP7EWhmp4is=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cXH4688amcDc8kZOJq4UP8cE3R58Zl7e+Qo/1jyspps=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uURBxvTp3FBCVkd+LPqyuY7d6rMW6SGIJQEPY/wtkZI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jG3hax1L3RBp9t38vUt53FsBxgr/+Si/vVISpAylYpE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kwtIW8MhH9Ky5xNjBx8gFA/SHh2YVphie7g5FGBzals=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FHflwFuEMu4xX0ZApHi+pdlBH+oevAtXckCUb5Wv0xU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ty4cnzJdAlbQKnh7px3GEYjBnvO+jIOaKjoTRDtmh3M=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Update.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Update.yml deleted file mode 100644 index 3018726b6f..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Date-Update.yml +++ /dev/null @@ -1,240 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDate', 'bsonType': 'date', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$date': {'$numberLong': '0'}}, 'max': {'$date': {'$numberLong': '200'}}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range Date. Update." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDate: { $date: { $numberLong: "0" } }} - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDate: { $date: { $numberLong: "1" } }} - - name: updateOne - arguments: - filter: { encryptedDate: { $gt: { $date: { $numberLong: "0" } } }} - update: { "$set": { "encryptedDate": { $date: { $numberLong: "2" } }}} - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedDate": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedDate": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command_name: update - command: - "update": "default" - "ordered": true - "updates": [ - { - "q": { - "encryptedDate": { - "$gt": { - "$binary": { - "base64": "DXUFAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAAJbW4AAAAAAAAAAAAJbXgAyAAAAAAAAAAA", - "subType": "06" - } - } - } - }, - "u": { - "$set": { - "encryptedDate": { $$type: "binData" } - } - } - } - ] - encryptionInformation: - type: 1 - schema: - "default.default": - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - "$db": "default" - - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedDate": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - } - - - { - "_id": 1, - "encryptedDate": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "hyDcE6QQjPrYJaIS/n7evEZFYcm31Tj89CpEYGF45cI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "F08nMDWDZc+DbWM7XCEJNNCEYyinRmrvGP7EWhmp4is=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cXH4688amcDc8kZOJq4UP8cE3R58Zl7e+Qo/1jyspps=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uURBxvTp3FBCVkd+LPqyuY7d6rMW6SGIJQEPY/wtkZI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jG3hax1L3RBp9t38vUt53FsBxgr/+Si/vVISpAylYpE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kwtIW8MhH9Ky5xNjBx8gFA/SHh2YVphie7g5FGBzals=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FHflwFuEMu4xX0ZApHi+pdlBH+oevAtXckCUb5Wv0xU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ty4cnzJdAlbQKnh7px3GEYjBnvO+jIOaKjoTRDtmh3M=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Aggregate.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Aggregate.json deleted file mode 100644 index d1a82c2164..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Aggregate.json +++ /dev/null @@ -1,1902 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalNoPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range Decimal. Aggregate.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDecimalNoPrecision": { - "$gt": { - "$numberDecimal": "0" - } - } - } - } - ] - }, - "result": [ - { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1" - } - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalNoPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalNoPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "default", - "pipeline": [ - { - "$match": { - "encryptedDecimalNoPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - } - } - ], - "cursor": {}, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalNoPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "aggregate" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": { - "$numberInt": "0" - }, - "encryptedDecimalNoPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "rbf3AeBEv4wWFAKknqDxRW5cLNkFvbIs6iJjc6LShQY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "n+XAuFnP8Dov9TnhGFxNx0K/MnVM9WbJ7RouEu0ndO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yRXojuVdn5GQtD97qYlaCL6cOLmZ7Cvcb3wFjkLUIdM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DuIkdRPITRs55I4SZmgomAHCIsDQmXRhW8+MOznkzSk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SsBk+Et1lTbU+QRPx+xyJ/jMkmfG+QCvQEpip2YYrzA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "crCIzOd8KhHvvUlX7M1v9bhvU4pLdTc+X2SuqoKU5Ek=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YOWdCw4UrqnxkAaVjqmC4sKQDMVMHEpFGnlxpxdaU6E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "M3SShp81Ff8tQ632qKbv9MUcN6wjDaBReI0VXNu6Xh4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gzHlSPxpM0hT75kQvWFzGlOxKvDoiKQZOr19V6l2zXI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s3JnppOGYw9SL2Q1kMAZs948v2F5PrpXjGei/HioDWs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cG6+3Gk/zEH68P/uuuwiAUVCuyJwa1LeV+t29FlPPAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dupdvR3AyJtM+g9NDKiaLVOtGca387JQp8w+V03m7Ig=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JqEQc5svj2jTvZ6LLA5ivE+kTb/0aRemSEmxk4G7Zrg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "szcXXXKnob+p3SoM4yED2R920LeJ7cVsclPMFTe4CeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o1QoGVXmuBdHwHm7aCtGMlMVKrjFdYvJXpoq6uhIAZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Jfm5wPlqqLCJRGQIqRq2NGmpn7s0Vrih2H3YAOoI2YU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zMHLb8ARbsYo8Ld05bqnGFf1Usha6EGb8QKwdSAyps0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yQdtq9lh5pugL7/i0Bj/PuZUUBUIzf+7wj1rl5y736w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wGWVZdO7qIuyDg/BqDgqjgoQ02h5YYgwXQB1oCin2NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "by9HMLj6NTEpgztZ5HSN6GxImkXPcaFINYDzgZY33X8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tWo0vbasi7bXmn/MsOx13VC1IsWtpx/nYp0uj4iMzdA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tQQpndUYd5O87lOtrGjH3wl9VsOK0ray7RMasL90sBM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cQjXEDCMsOpKLLf+vlTgIHA+cbSJdzqhbSX9Wvh95aA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7yMpU48IxK9SzP2cx3VnTownGEwFmeFofuuFT97SuuY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kSOx1kz0CmBgzKQHZlo65ZUY1DIv9A99JRm+Us2y6Ew=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ubQpdPBe6/xvtr+AcXdfYLSvYCR4ot0tivehkCsupb4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xal+iCJ6FTefRQToyoNksc9NCZShyn04NDGi4IYrcoM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "d7jU4iOK50xHxlkSifcxlZFCM46TSgQzoYivxG3HNLY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJvl2nsBLBVzL3pp6sKWCL4UXeh3q/roYBJjSb74ve0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OIUCaKRvIx9t1w6Hxlz1IcQTdPNCfdRNwnnTm10W+X0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A9tvzsiElotOUVIB4CqfQp9mAwqvTM35YkmAR170aHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lI8gpK7hpb7c9x4RQugsxMnQay5LZJmwslZdvMx/dcE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dNCzh40U0XvdKnSDi3HRQOWQftEsDVqc4uUvsVFGoq8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IP+iwEBWBwVVZIdpaMu8k5+soFCz+TZkYn3drKZ9grE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnqyh6e0y5svHkJDShlN9CHV0WvMBE4QbtJpQw5ZCXc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "elEl42tbVDoRTLjAhZUFEtXiut4b3PVhg/1ZLZSQdtE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vHuu2FxwclMHqyE6JBYbTYgbEkB0dqb/JuaxsvfwsmY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xTf7NCe3Gf8QpE78HR5OknlLTKfs9J+RN9UZpH6fnso=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XiWSasRnJAulGR6+LCVD3mwRObXylqYWR9jvpywq12c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MZMxEQ5ikx0PG1YFIExv0UnTZogsvgeOEZTpzvBDn4w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yZMyMZBDrWbAhvnic7vvIYhmO9m5H2iuv0c8KNZrBzY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xxM14hTPY5j0vvcK2C7YAEjzdsfUTFHozHC0hEo1bxI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+01rqR1xVwkpGXcstbk1ItJqFVjH6Q8MGxEN3Cm9Y1A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xOpLV0Z2VTRJ3iWtnWZcsyjXubTIkYWo31cO+HV1o1k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BWUOLqgLBqc5NwxVlSV5H3KFQPXbCp7mdo+jF+8cJqY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fuQb1S6xZDGlrEbK+kI23aL53PP1PVNwqICnZNt9Yzg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfscnoibFttahLdPVC4Ee+47ewGFKpDSU7M6HX19bKE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rpSW2awybNVeKtat91VFxqbINoTfNhPfQAu+d73Xtf8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9M/CP9ccOIIj2LLFmE0GFDO0Ban2wsNalEXfM6+h+1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WrEMG49l1ye4MhXs5ZS9tz8P6h+hDvthIg/2wW9ne1Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ImNhbfeyfH8qIEeA5ic0s3dAQBdzzTBS+CPsNih9vZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dWP33YDSn04UKJN2ogh2Rui0iW/0q2y18OCDRVcfyoo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lYv0isAtfGh6H9tdp3cp2eHU7q2J+uk7QrgcxtK3w7Y=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VGMoamB/+7zTOYcY/pqJc96xlv2PdW4hwsIAEIslTDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yNeBWMF7BnD9wVwz2PgJsvWr77QiVvvWUvJF0+fqBug=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfpvObJ+tJBXSvqeN7vlOfmhYign635lciYAJIjUtY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dsen4NqjzVGjpjufiTMs3+gqeD09EbnuogPgxrJECwg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pxCWVM3sn19NsFEpgHbgLa+PmYlhN3mMiP0Wk8kJhYw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q11KNvJszjYIB9n9HcC+N4uz11a3eRj1L3BH9scKMDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A1PmkgcEToWh1JiVWE6mI5jUu7poxWWuCUt/cgRUUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qJo3Hu4PJeanL7XEaWXO/n3YsodhZyd+MJOOmB9Kpd8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BkBKLO8URFscfRY9Bav/1+L9mLohDgNr/MkZtGiraIs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rZq5WA3Hx3xthOyHAJXK//f8pE2qbz7YKu3TIMp9GFY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X07a/Lm80p5xd4RFs1dNmw+90tmPDPdGiAKVZkxd4zY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6YrBn2ofIw1b5ooakrLOwF41BWrps8OO0H9WH4/rtlE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0l86Ag5OszXpa78SlOUV3K9nff5iC1p0mRXtLg9M1s4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Hn6yuxFHodeyu7ISlhYrbSf9pTiH4TDEvbYLWjTwFO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zdf4y2etKBuIpkEU1zMwoCkCsdisfXZCh8QPamm+drY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rOQ9oMdiK5xxGH+jPzOvwVqdGGnF3+HkJXxn81s6hp4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "61aKKsE3+BJHHWYvs3xSIBvlRmKswmaOo5rygQJguUg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KuDb/GIzqDM8wv7m7m8AECiWJbae5EKKtJRugZx7kR0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Q+t8t2TmNUiCIorVr9F3AlVnX+Mpt2ZYvN+s8UGict8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJRZIpKxUgHyL83kW8cvfjkxN3z6WoNnUg+SQw+LK+k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnUsYjip8SvW0+m9mR5WWTkpK+p6uwJ6yBUAlBnFKMk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PArHlz+yPRYDycAP/PgnI/AkP8Wgmfg++Vf4UG1Bf0E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wnIh53Q3jeK8jEBe1n8kJLa89/H0BxO26ZU8SRIAs9Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4F8U59gzBLGhq58PEWQk2nch+R0Va7eTUoxMneReUIA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ihKagIW3uT1dm22ROr/g5QaCpxZVj2+Fs/YSdM2Noco=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EJtUOOwjkrPUi9mavYAi+Gom9Y2DuFll7aDwo4mq0M0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dIkr8dbaVRQFskAVT6B286BbcBBt1pZPEOcTZqk4ZcI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aYVAcZYkH/Tieoa1XOjE/zCy5AJcVTHjS0NG2QB7muA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sBidL6y8TenseetpioIAAtn0lK/7C8MoW4JXpVYi3z8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0Dd2klU/t4R86c2WJcJDAd57k/N7OjvYSO5Vf8KH8sw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I3jZ92WEVmZmgaIkLbuWhBxl7EM6bEjiEttgBJunArA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aGHoQMlgJoGvArjfIbc3nnkoc8SWBxcrN7hSmjMRzos=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "bpiWPnF/KVBQr5F6MEwc5ZZayzIRvQOLDAm4ntwOi8g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tI7QVKbE6avWgDD9h4QKyFlnTxFCwd2iLySKakxNR/I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XGsge0CnoaXgE3rcpKm8AEeku5QVfokS3kcI+JKV1lk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JQxlryW2Q5WOwfrjAnaZxDvC83Dg6sjRVP5zegf2WiM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YFuHKJOfoqp1iGVxoFjx7bLYgVdsN4GuUFxEgO9HJ5s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Z6vUdiCR18ylKomf08uxcQHeRtmyav7/Ecvzz4av3k4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SPGo1Ib5AiP/tSllL7Z5PAypvnKdwJLzt8imfIMSEJQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "m94Nh6PFFQFLIib9Cu5LAKavhXnagSHG6F5EF8lD96I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pfEkQI98mB+gm1+JbmVurPAODMFPJ4E8DnqfVyUWbSo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DNj3OVRLbr43s0vd+rgWghOL3FqeO/60npdojC8Ry/M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kAYIQrjHVu49W8FTxyxJeiLVRWWjC9fPcBn+Hx1F+Ss=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aCSO7UVOpoQvu/iridarxkxV1SVxU1i9HVSYXUAeXk4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Gh6hTP/yj1IKlXQ+Q69KTfMlGZjEcXoRLGbQHNFo/1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/gDgIFQ4tAlJk3GN48IS5Qa5IPmErwGk8CHxAbp6gs0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PICyimwPjxpusyKxNssOOwUotAUbygpyEtORsVGXT8g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4lu+cBHyAUvuxC6JUNyHLzHsCogGSWFFnUCkDwfQdgI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pSndkmoNUJwXjgkbkgOrT5f9nSvuoMEZOkwAN9ElRaE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tyW+D4i26QihNM5MuBM+wnt5AdWGSJaJ4X5ydc9iWTU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9Syjr8RoxUgPKr+O5rsCu07AvcebA4P8IVKyS1NVLWc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "67tPfDYnK2tmrioI51fOBG0ygajcV0pLo5+Zm/rEW7U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "y0EiPRxYTuS1eVTIaPQUQBBxwkyxNckbePvKgChwd0M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NWd+2veAaeXQgR3vCvzlI4R1WW67D5YsVLdoXfdb8qg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PY5RQqKQsL2GqBBSPNOEVpojNFRX/NijCghIpxD6CZk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lcvwTyEjFlssCJtdjRpdN6oY+C7bxZY+WA+QAqzj9zg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWE7XRNylvTwO/9Fv56dNqUaQWMmESNS/GNIwgBaEI0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ijwlrUeS8nRYqK1F8kiCYF0mNDolEZS+/lJO1Lg93C8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8KzV+qYGYuIjoNj8eEpnTuHrMYuhzphl80rS6wrODuU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wDyTLjSEFF895hSQsHvmoEQVS6KIkZOtq1c9dVogm9I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SGrtPuMYCjUrfKF0Pq/thdaQzmGBMUvlwN3ORIu9tHU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KySHON3hIoUk4xWcwTqk6IL0kgjzjxgMBObVIkCGvk4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hBIdS9j0XJPeT4ot73ngELkpUoSixvRBvdOL9z48jY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Tx6um0q9HjS5ZvlFhvukpI6ORnyrXMWVW1OoxvgqII0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zFKlyfX5H81+d4A4J3FKn4T5JfG+OWtR06ddyX4Mxas=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cGgCDuPV7MeMMYEDpgOupqyNP4BQ4H7rBnd2QygumgM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IPaUoy98v11EoglTpJ4kBlEawoZ8y7BPwzjLYBpkvHQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Pfo4Am6tOWAyZNn8G9W5HWWGC3ZWmX0igI/RRB870Ro=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fnTSjd7bC1Udoq6iM7UDnHAC/lsIXSHp/Gy332qw+/I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fApBgVRrTDyEumkeWs5p3ag9KB48SbU4Si0dl7Ns9rc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QxudfBItgoCnUj5NXVnSmWH3HK76YtKkMmzn4lyyUYY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sSOvwhKa29Wq94bZ5jGIiJQGbG1uBrKSBfOYBz/oZeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FdaMgwwJ0NKsqmPZLC5oE+/0D74Dfpvig3LaI5yW5Fs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sRWBy12IERN43BSZIrnBfC9+zFBUdvjTlkqIH81NGt4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/4tIRpxKhoOwnXAiFn1Z7Xmric4USOIfKvTYQXk3QTc=", - "subType": "00" - } - } - ] - }, - { - "_id": { - "$numberInt": "1" - }, - "encryptedDecimalNoPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "RGTjNVEsNJb+DG7DpPOam8rQWD5HZAMpRyiTQaw7tk8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I93Md7QNPGmEEGYU1+VVCqBPBEvXdqHPtTJtMOn06Yk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "GecBFQ1PemlECWZWCl7f74vmsL6eB6mzQ9n6tK6FYfs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QpjhZl+O1ORifgtCZuWAdcP6OKL7IZ2cA46v8FJcV28=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RlQWwhU+uVv0a+9IB5cUkEfvHBvOw3B1Sx6WfPWMqes=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ubb81XTC7U+4tcNzf1oYvOY6gR5hC2Izqx54f4GuJ0E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6M4Q5NMQ9TqNnjzGOxIkiUIY8TEL0I3XD1QnhefQUqU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BtInzk9t2FFMCEY6AQ7zN8jwrrZEs2irSv6q0Q4NaIw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6vxXfETu9cuBIpRBo3jUUU04mJIH/aAhLX8K6VI5Xv0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wXPCdS+q23zi1bkPnaVG2j0PsVtxdeSLJ//h6J1x8RU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KY3KkfBAsN2l80wbpj41G0gwBR5KmmFnZcagg7D3ENk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tI8NFAxXCX4VOnY5X73K6KI/Yspd3aR94KV39MhJlAw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "nFxH0UC3mATKA6Vboz+QX/hAjj19kF/SH6H5Cne7qC0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q8hYqIYaIi7nOdG/7qQZYnz8Bsacfi66M1nVku4SH08=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4saA92R4arp4anvD9xFtze+sNcQqTEhPHyl1h70A8NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DbIziOBRRyeQS6RtBR09E37LV+CTKrEjGoRMLSpG6eE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Fv80Plp/7w2gnVqrwawLd6qhJ10G4NCDm3re67cNq4Y=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "T/T2oiQCBBES4YN7EodzPRdabZSFlYIClHBym+bQUZE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ZQgHD3l46Ujqtbnj1VbbeM29C9wJzOhz+yZ/7XdSrxk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ltlFKzWvyZvHxDFOYDd/XXJ6kUiJj0ln2HTCEz2o4Z4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "flW8A7bltC1u8bzx0WJtxosGJdOVsJFfbx33jxnpFGg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SXO+92QbMKwUSG2t27ciunV1c3VvFkUuDmSczpRe008=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+KioGs1GM+xRBzFE67ePTWj04KMSE5/Y6qUF7nJ5kvU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L3xNVbh6YH+RzqABN+5Jgb7T234Efpn766DmUvxIxgg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hPF+60mBYPjh21dEmPlBhKgyc9S2qLtTkypYvnqP2Fc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EletRsETy2HcjaPIm2c8CkT7ch/P3pJJDC8hasepcSU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "r5bMXUaNKqLPxZ+TG9HYTG4aSDgcpim27rN8rQFkM0w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0Q7Erdr8+/S0wUEDDIqlS5XjBVWvhZY65K0uUDb6+Ns=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xEcnhXy35hbXNVBPOOt3TUHbxvKfQ48KjA9b6/rbMqQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "T8bEpiQNgsEudXvyKE9SZlSvbpV/LUaslsdqgSFltyo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hIoiaF2YjnxDbODfhFEB+JGZ5nf8suD3Shck5bwQ3N0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qnA6qzejeRJ0rsZaZ0zOvKAaXyxt5lpscKQNYFZNl4k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "anAKCL2DN/le2VaP0n2ucYSEH/DaaEH/8Sa4OqTZsRA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JCZlBJaFm618oWYSnT9Jr1MtwFVw4BZjOzO+5yWgR90=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yxyk4n9762WzcDVGnTn4jCqUnSMIVCrLDIjCX1QVj34=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fDI6fdKvDJwim5/CQwWZEzcrXE3LHgy7FTtffcC7tXE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Vex+gcz5T+WkzsVZQrkqUR2ryyZbnaOGuWpYvjN0zCw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8TLEXz+Gbbp6llHpZXVjLsdlYY9f6hrKpHVpyfDe0RY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7fTyt5BrunypS65TfOzFW2E2qdIuT4SLeDeGlbQoJCs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8fKGrkqN0/KuSjyXgDBmRauDKrSa//JBKRWHEB9xBf4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s4codmG7uN4ss6P357jL21lazEe90M9GOK5WrOknSV0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RkSpua8XF+NUdxVDU90EbLUTTyZFX3tt3atBTroFaRk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "LnTCuCDyAHK5B9KXzjtwGmWB+qergQk2OCjnIx9MI2A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cBFh0virAX4pVXf/udIGI2951i0+0aZAdJcBVGtYnT4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "G54X6myQXWZ5fw/G31en3QbdgfXzL9+hFTtJpnWMqDI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EdsiiuezcsFJFnYIyGjCOhnqMj1BOwTB5EFxN+ERUkg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dVH9MXLtk0WTwGQ3xmrhOqfropMUkDW3o6paNPGl3NU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sB3HqXKWY3pKbuEH8BTbfNIGfbY+7/ZbOc3XC+JRNNI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WHyDk62Xhqbo4/iie2aLIM4x2uuAjv6102dJSHI58oM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pNUFuHpeNRDUZ/NrtII2c6sNc9eGR1lIUlIyXKERA+0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UPa+pdCqnN0bfAptdzldQOSd01gidrDKy8KhWrpSKAI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "l+7dOAlo+HUffMqFYXL6pgUFeTbwOM9CjKQLxEoLtc4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SRnDXV/rN6C8xwMutv9E1luv3DOUio3VkgPr8Cpm7Ew=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QcH6gl+gX7xZ7OWhUNQMbndJy0Piz49pDo6RsnLkVSA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "t+uL4DnfsI/Zll/KXWW1cOKX3Hu8WIkm3pt9efCVSAQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "myutHDctku/+Uug/nD8gRbYvmx/IovtoAAC2/fz2oHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6C+cjD0e0nSCP6cPqQYbNG7SlOd6Mfvi8hyfm7Ng+D8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zg01JSoOj9oBKT0S1ldJucXzY5AKgreS+h2xJreWTOs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7qQ80/FjodHl1m1py/Oii0/9C/xWbLdhaRXQ+kkCP10=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YwWMNH07vL6c5Nhg+MRnVByhzUunu8y0VLM9z/XvR5U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Dle8bU98+fudAbc14SToZFkwvV3tcYVsjDug0NWljpc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "J+eKL1vPJmlzltvhI6Li5Fz/TJmi3Ng+ehRTcs46API=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zB3XzfFygLwC3WHkj0up+VbEd25KKoce1vOpG/5bwK4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vnVnmOnL+z2pqwE+A6cVKS0Iwy4F4/2IiElJca9bUQM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+lG5r/Fpqry3BtFuvY67+RntmHAMDoLVOSGc6ZoXPb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L5MXQertqc6uj7ADe8aWKbd1sYHPCE7P1VYVg9Zc3VI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "imKONuZgopt0bhM3GMX2WVPwQYMTobuUUEdhcLfHs4c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "eOkU1J1uVbiVFWBerbXsSIVcF2nqiicTkFy4x7kFHB8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gI0uDhXeoH/UatDQKEf4qo8FHzWZDhb/wuWTqbq/ID4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cOkd5Aa3btYhtojE/smsF/PJnULqQ4NNqTkU6KXTFmo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "AWNJMs1MTe294oFipp8Y6P0CjpkZ4qCZoClQF3XcHq8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6gJtlzXOFhGYrVbTuRMmvMlDTwXdNtR9aGBlHZPwIMw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "LEmwVGA/xsEG7UrcOoYLFu6KCXgijzFznenknuDacm8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "mIRFPTXRrGaPtp/Ydij2jgkRe4uoUvAKxW2d8b9zYL0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "B+Uv2u48WALOO0L311z+eryjYQzKJVMfdHMZPhOAFmY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "INXXp0wDyVCq+NtfIrrC2ciETmyW/dWB/48/u4yLEZ4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "se7DGo8XrlrQDLEcco1tZrQt9kDe+0RTyl2bw/quG4w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vr0m2+Zk9lbN6UgWCyn8xJWJOokU3IDYab5U5q1+CgQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XI+eJ8Gy2JktG1gICgoj1qpsfy1tKmH0kglWbaQH6DA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A+UCuNnuAUqnQzspA6TVqUPRmtZmpSex5HFw7THRxs0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xaH2Ehfljd19uo0Fvb3iwkdaiWEVQd2YPoitgEPkhSM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "S/iZBJGcc8+qZxyMtab65MMBoSglybwk3x58Nb86gnY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "w14ZE5qqY5YgkS4Zcs9YNbrQbY1XfGOOHNn9bOYnFVQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0MhGd/jEF1vjkKGp+ZMn9SjLK54jkp9W4Hg+Sp/oxaI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "92QZ73e/NRTYgCm4aifaKth6aAsKnLLccBc0zx/qUTY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WOjzemCgFJOiGIp81RSVh/tFlzSTj9eFWcBnsiv2Ycs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DrsP9CmfKPjw5yLL8bnSeAxfNzAwlb+Z8OqCiKgBY7o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lMogqg8veBv6mri3/drMe9afJiKMvevkmGcw9BedfLo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "TxqwNcY8Tg2MPpNdkPBwvfpuTttSYRHU26DGECKYQ9o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "l0u1b4b4vYACWIwfnB7PZac4oDEgjQZCzHruNPTgAIY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "iVSGQ+cCfhbWIrY/v/WBORK92elu9gfRKyGhr6r/k00=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yK1forG50diEXte8ECzjfpHeYsPyuQ/dgxbxn/nzY5k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gIfTLCD3VwnOwkC0zPXWTqaITxX6ZplA69PO2a6zolc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "O/Zxlgh3WqpzJ7+Sd8XWMVID4/GXJUUWaSqfgDUi3b0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ZQ6yv368zwahUqSUYH/StL0Qgz/TwS1CzlMjVDvCciI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "m2rPEYkjwyiKdonMrKlcF7hya4lFOAUwEePJ3SgrNx8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Mq0yl5iVKlq71bT/dT/fXOWf2n90bTnXFnOdGDN0JOc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6qDGMXipPLC2O6EAAMjO2F9xx4rdqZso4IkPpH2304U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jvQHRQQa2RIszE2LX2Hv2LbRhYawJ6qmtRt8HZzFQXg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ovJXQrkZlpeHRciKyE/WWNm5O389gRgzx1W+Dw596X4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "a4kgRNvYctGYqyQv9qScL/WkljTYVylJ9pE9KDULlxU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qV4Q48vPiCJMTjljotzYKI/zfExWpkKOSHGcAjGyDig=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jtI7zbBF+QW/aYYTkn90zzyHLXLgmy7l1bzgMb2oqic=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q0KmJl9txPdn962UNvnfe6UFhdk9YaFZuTm33F+csso=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ULNdEqeZJgtmNOhN/Y9INzsE9AnxWYwOMn+pIbRXIFs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "R4oz9+wkdjpKe5tE1jpG7IURAnfvS5fLP4LrD5cZfTE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qG5Z7VhwSu/HT/YFTgDzyAAzJKq51xPw2HeEV5btYC4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OM/1DmIIZ5Qyhtq8TGkHTBEMVKjAnKRZMRXYtTG8ctc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2R5vZbljLXnDFA99YfGuRB7pAdPJVKsT25zLNMC0fUk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OMbavF2EmdAz1fHkLV3ctFEUDfriKhoT2gidwHZ9z1o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MWT4Zrw3/vVvTYMa1Is5Pjr3wEwnBfnEAPPUAHKQhNU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tBkRPfG9yxfKocQx5pAJX0oEHKPL0Tgtr+0UYe09InE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lqxpnDR/H0YgH7RcfKoNoaaRhe1SIazIeMbQ1fu9y3Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "utT1UdR22PWOTrOkZauztX613lAplV4eh/ejTRb7ZSk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "S+Y2yFyKi/a6FXhih4yGo29X8I8OT6/zwEoX6NMKT4o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QSjVppg29x6oS5yBg8OFjrFt0tuTpWCuKxfIy0k8YnE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "y3r6/Xsfvsl3HksXlVYkJgHUqpQGfICxg3x9f8Zw1qM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BSltHzEwDjFN4du9rDHAPvl22atlcTioEtt+gC5L1tk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0arGXjSN0006UnXbrWsGqhvBair569DeFDUME3Df3rA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s/DumaMad08S+PBUUcrS+v42K0z8HgcdiQtrFAEu2Qs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EzJ8Y8N0OQBTlnvrK82PdevDNZZO4E6CNgYVu8Cj6Ks=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VA4vr8jBPI5QdiPrULzzZjBMIUbG3V7Slg5zm0bFcKc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YAOvEB2ZLtq9LQiFViBHWaxxWVVonC2rNYj9tN9s3L0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hgaHMo9aAGS+nBwvqnTjZO+YkiQPY1c1XcIYeaYKHyI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YvaoLt3ZpH0atB0tNzwMjpoxRYJXl0DqSjisMJiGVBE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EMmW6CptFsiLoPOi5/uAJQ2FmeLg6mCpuVLLrRWk7Mc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1jQsNMarSnarlYmXEuoFokeBMg/090qUD9wqo1Zn8Gs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hupXNKhRpJxpyDAAP1TgJ5JMZh9lhbMk6s7D7dMS3C8=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Aggregate.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Aggregate.yml deleted file mode 100644 index 97a95b2d94..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Aggregate.yml +++ /dev/null @@ -1,1675 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - # Tests for Decimal (without precision) must only run against a replica set. Decimal (without precision) queries are expected to take a long time and may exceed the default mongos timeout. - topology: [ "replicaset" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDecimalNoPrecision', 'bsonType': 'decimal', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range Decimal. Aggregate." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDecimalNoPrecision: { $numberDecimal: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDecimalNoPrecision: { $numberDecimal: "1" } } - - name: aggregate - arguments: - pipeline: [{ $match: { "encryptedDecimalNoPrecision": { $gt: {$numberDecimal: "0" }} } }] - result: [*doc1] - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedDecimalNoPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedDecimalNoPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - aggregate: *collection_name - pipeline: [ - { - "$match": { - "encryptedDecimalNoPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - } - } - ] - cursor: {} - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: aggregate - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": { - "$numberInt": "0" - }, - "encryptedDecimalNoPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "rbf3AeBEv4wWFAKknqDxRW5cLNkFvbIs6iJjc6LShQY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "n+XAuFnP8Dov9TnhGFxNx0K/MnVM9WbJ7RouEu0ndO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yRXojuVdn5GQtD97qYlaCL6cOLmZ7Cvcb3wFjkLUIdM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DuIkdRPITRs55I4SZmgomAHCIsDQmXRhW8+MOznkzSk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SsBk+Et1lTbU+QRPx+xyJ/jMkmfG+QCvQEpip2YYrzA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "crCIzOd8KhHvvUlX7M1v9bhvU4pLdTc+X2SuqoKU5Ek=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YOWdCw4UrqnxkAaVjqmC4sKQDMVMHEpFGnlxpxdaU6E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "M3SShp81Ff8tQ632qKbv9MUcN6wjDaBReI0VXNu6Xh4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gzHlSPxpM0hT75kQvWFzGlOxKvDoiKQZOr19V6l2zXI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s3JnppOGYw9SL2Q1kMAZs948v2F5PrpXjGei/HioDWs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cG6+3Gk/zEH68P/uuuwiAUVCuyJwa1LeV+t29FlPPAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dupdvR3AyJtM+g9NDKiaLVOtGca387JQp8w+V03m7Ig=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JqEQc5svj2jTvZ6LLA5ivE+kTb/0aRemSEmxk4G7Zrg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "szcXXXKnob+p3SoM4yED2R920LeJ7cVsclPMFTe4CeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o1QoGVXmuBdHwHm7aCtGMlMVKrjFdYvJXpoq6uhIAZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Jfm5wPlqqLCJRGQIqRq2NGmpn7s0Vrih2H3YAOoI2YU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zMHLb8ARbsYo8Ld05bqnGFf1Usha6EGb8QKwdSAyps0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yQdtq9lh5pugL7/i0Bj/PuZUUBUIzf+7wj1rl5y736w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wGWVZdO7qIuyDg/BqDgqjgoQ02h5YYgwXQB1oCin2NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "by9HMLj6NTEpgztZ5HSN6GxImkXPcaFINYDzgZY33X8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tWo0vbasi7bXmn/MsOx13VC1IsWtpx/nYp0uj4iMzdA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tQQpndUYd5O87lOtrGjH3wl9VsOK0ray7RMasL90sBM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cQjXEDCMsOpKLLf+vlTgIHA+cbSJdzqhbSX9Wvh95aA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7yMpU48IxK9SzP2cx3VnTownGEwFmeFofuuFT97SuuY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kSOx1kz0CmBgzKQHZlo65ZUY1DIv9A99JRm+Us2y6Ew=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ubQpdPBe6/xvtr+AcXdfYLSvYCR4ot0tivehkCsupb4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xal+iCJ6FTefRQToyoNksc9NCZShyn04NDGi4IYrcoM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "d7jU4iOK50xHxlkSifcxlZFCM46TSgQzoYivxG3HNLY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJvl2nsBLBVzL3pp6sKWCL4UXeh3q/roYBJjSb74ve0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OIUCaKRvIx9t1w6Hxlz1IcQTdPNCfdRNwnnTm10W+X0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A9tvzsiElotOUVIB4CqfQp9mAwqvTM35YkmAR170aHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lI8gpK7hpb7c9x4RQugsxMnQay5LZJmwslZdvMx/dcE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dNCzh40U0XvdKnSDi3HRQOWQftEsDVqc4uUvsVFGoq8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IP+iwEBWBwVVZIdpaMu8k5+soFCz+TZkYn3drKZ9grE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnqyh6e0y5svHkJDShlN9CHV0WvMBE4QbtJpQw5ZCXc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "elEl42tbVDoRTLjAhZUFEtXiut4b3PVhg/1ZLZSQdtE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vHuu2FxwclMHqyE6JBYbTYgbEkB0dqb/JuaxsvfwsmY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xTf7NCe3Gf8QpE78HR5OknlLTKfs9J+RN9UZpH6fnso=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XiWSasRnJAulGR6+LCVD3mwRObXylqYWR9jvpywq12c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MZMxEQ5ikx0PG1YFIExv0UnTZogsvgeOEZTpzvBDn4w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yZMyMZBDrWbAhvnic7vvIYhmO9m5H2iuv0c8KNZrBzY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xxM14hTPY5j0vvcK2C7YAEjzdsfUTFHozHC0hEo1bxI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+01rqR1xVwkpGXcstbk1ItJqFVjH6Q8MGxEN3Cm9Y1A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xOpLV0Z2VTRJ3iWtnWZcsyjXubTIkYWo31cO+HV1o1k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BWUOLqgLBqc5NwxVlSV5H3KFQPXbCp7mdo+jF+8cJqY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fuQb1S6xZDGlrEbK+kI23aL53PP1PVNwqICnZNt9Yzg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfscnoibFttahLdPVC4Ee+47ewGFKpDSU7M6HX19bKE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rpSW2awybNVeKtat91VFxqbINoTfNhPfQAu+d73Xtf8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9M/CP9ccOIIj2LLFmE0GFDO0Ban2wsNalEXfM6+h+1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WrEMG49l1ye4MhXs5ZS9tz8P6h+hDvthIg/2wW9ne1Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ImNhbfeyfH8qIEeA5ic0s3dAQBdzzTBS+CPsNih9vZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dWP33YDSn04UKJN2ogh2Rui0iW/0q2y18OCDRVcfyoo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lYv0isAtfGh6H9tdp3cp2eHU7q2J+uk7QrgcxtK3w7Y=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VGMoamB/+7zTOYcY/pqJc96xlv2PdW4hwsIAEIslTDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yNeBWMF7BnD9wVwz2PgJsvWr77QiVvvWUvJF0+fqBug=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfpvObJ+tJBXSvqeN7vlOfmhYign635lciYAJIjUtY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dsen4NqjzVGjpjufiTMs3+gqeD09EbnuogPgxrJECwg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pxCWVM3sn19NsFEpgHbgLa+PmYlhN3mMiP0Wk8kJhYw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q11KNvJszjYIB9n9HcC+N4uz11a3eRj1L3BH9scKMDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A1PmkgcEToWh1JiVWE6mI5jUu7poxWWuCUt/cgRUUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qJo3Hu4PJeanL7XEaWXO/n3YsodhZyd+MJOOmB9Kpd8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BkBKLO8URFscfRY9Bav/1+L9mLohDgNr/MkZtGiraIs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rZq5WA3Hx3xthOyHAJXK//f8pE2qbz7YKu3TIMp9GFY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X07a/Lm80p5xd4RFs1dNmw+90tmPDPdGiAKVZkxd4zY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6YrBn2ofIw1b5ooakrLOwF41BWrps8OO0H9WH4/rtlE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0l86Ag5OszXpa78SlOUV3K9nff5iC1p0mRXtLg9M1s4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Hn6yuxFHodeyu7ISlhYrbSf9pTiH4TDEvbYLWjTwFO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zdf4y2etKBuIpkEU1zMwoCkCsdisfXZCh8QPamm+drY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rOQ9oMdiK5xxGH+jPzOvwVqdGGnF3+HkJXxn81s6hp4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "61aKKsE3+BJHHWYvs3xSIBvlRmKswmaOo5rygQJguUg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KuDb/GIzqDM8wv7m7m8AECiWJbae5EKKtJRugZx7kR0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Q+t8t2TmNUiCIorVr9F3AlVnX+Mpt2ZYvN+s8UGict8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJRZIpKxUgHyL83kW8cvfjkxN3z6WoNnUg+SQw+LK+k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnUsYjip8SvW0+m9mR5WWTkpK+p6uwJ6yBUAlBnFKMk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PArHlz+yPRYDycAP/PgnI/AkP8Wgmfg++Vf4UG1Bf0E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wnIh53Q3jeK8jEBe1n8kJLa89/H0BxO26ZU8SRIAs9Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4F8U59gzBLGhq58PEWQk2nch+R0Va7eTUoxMneReUIA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ihKagIW3uT1dm22ROr/g5QaCpxZVj2+Fs/YSdM2Noco=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EJtUOOwjkrPUi9mavYAi+Gom9Y2DuFll7aDwo4mq0M0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dIkr8dbaVRQFskAVT6B286BbcBBt1pZPEOcTZqk4ZcI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aYVAcZYkH/Tieoa1XOjE/zCy5AJcVTHjS0NG2QB7muA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sBidL6y8TenseetpioIAAtn0lK/7C8MoW4JXpVYi3z8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0Dd2klU/t4R86c2WJcJDAd57k/N7OjvYSO5Vf8KH8sw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I3jZ92WEVmZmgaIkLbuWhBxl7EM6bEjiEttgBJunArA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aGHoQMlgJoGvArjfIbc3nnkoc8SWBxcrN7hSmjMRzos=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "bpiWPnF/KVBQr5F6MEwc5ZZayzIRvQOLDAm4ntwOi8g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tI7QVKbE6avWgDD9h4QKyFlnTxFCwd2iLySKakxNR/I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XGsge0CnoaXgE3rcpKm8AEeku5QVfokS3kcI+JKV1lk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JQxlryW2Q5WOwfrjAnaZxDvC83Dg6sjRVP5zegf2WiM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YFuHKJOfoqp1iGVxoFjx7bLYgVdsN4GuUFxEgO9HJ5s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Z6vUdiCR18ylKomf08uxcQHeRtmyav7/Ecvzz4av3k4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SPGo1Ib5AiP/tSllL7Z5PAypvnKdwJLzt8imfIMSEJQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "m94Nh6PFFQFLIib9Cu5LAKavhXnagSHG6F5EF8lD96I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pfEkQI98mB+gm1+JbmVurPAODMFPJ4E8DnqfVyUWbSo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DNj3OVRLbr43s0vd+rgWghOL3FqeO/60npdojC8Ry/M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kAYIQrjHVu49W8FTxyxJeiLVRWWjC9fPcBn+Hx1F+Ss=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aCSO7UVOpoQvu/iridarxkxV1SVxU1i9HVSYXUAeXk4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Gh6hTP/yj1IKlXQ+Q69KTfMlGZjEcXoRLGbQHNFo/1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/gDgIFQ4tAlJk3GN48IS5Qa5IPmErwGk8CHxAbp6gs0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PICyimwPjxpusyKxNssOOwUotAUbygpyEtORsVGXT8g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4lu+cBHyAUvuxC6JUNyHLzHsCogGSWFFnUCkDwfQdgI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pSndkmoNUJwXjgkbkgOrT5f9nSvuoMEZOkwAN9ElRaE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tyW+D4i26QihNM5MuBM+wnt5AdWGSJaJ4X5ydc9iWTU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9Syjr8RoxUgPKr+O5rsCu07AvcebA4P8IVKyS1NVLWc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "67tPfDYnK2tmrioI51fOBG0ygajcV0pLo5+Zm/rEW7U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "y0EiPRxYTuS1eVTIaPQUQBBxwkyxNckbePvKgChwd0M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NWd+2veAaeXQgR3vCvzlI4R1WW67D5YsVLdoXfdb8qg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PY5RQqKQsL2GqBBSPNOEVpojNFRX/NijCghIpxD6CZk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lcvwTyEjFlssCJtdjRpdN6oY+C7bxZY+WA+QAqzj9zg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWE7XRNylvTwO/9Fv56dNqUaQWMmESNS/GNIwgBaEI0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ijwlrUeS8nRYqK1F8kiCYF0mNDolEZS+/lJO1Lg93C8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8KzV+qYGYuIjoNj8eEpnTuHrMYuhzphl80rS6wrODuU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wDyTLjSEFF895hSQsHvmoEQVS6KIkZOtq1c9dVogm9I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SGrtPuMYCjUrfKF0Pq/thdaQzmGBMUvlwN3ORIu9tHU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KySHON3hIoUk4xWcwTqk6IL0kgjzjxgMBObVIkCGvk4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hBIdS9j0XJPeT4ot73ngELkpUoSixvRBvdOL9z48jY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Tx6um0q9HjS5ZvlFhvukpI6ORnyrXMWVW1OoxvgqII0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zFKlyfX5H81+d4A4J3FKn4T5JfG+OWtR06ddyX4Mxas=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cGgCDuPV7MeMMYEDpgOupqyNP4BQ4H7rBnd2QygumgM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IPaUoy98v11EoglTpJ4kBlEawoZ8y7BPwzjLYBpkvHQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Pfo4Am6tOWAyZNn8G9W5HWWGC3ZWmX0igI/RRB870Ro=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fnTSjd7bC1Udoq6iM7UDnHAC/lsIXSHp/Gy332qw+/I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fApBgVRrTDyEumkeWs5p3ag9KB48SbU4Si0dl7Ns9rc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QxudfBItgoCnUj5NXVnSmWH3HK76YtKkMmzn4lyyUYY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sSOvwhKa29Wq94bZ5jGIiJQGbG1uBrKSBfOYBz/oZeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FdaMgwwJ0NKsqmPZLC5oE+/0D74Dfpvig3LaI5yW5Fs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sRWBy12IERN43BSZIrnBfC9+zFBUdvjTlkqIH81NGt4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/4tIRpxKhoOwnXAiFn1Z7Xmric4USOIfKvTYQXk3QTc=", - "subType": "00" - } - } - ] - } - - - { - "_id": { - "$numberInt": "1" - }, - "encryptedDecimalNoPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "RGTjNVEsNJb+DG7DpPOam8rQWD5HZAMpRyiTQaw7tk8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I93Md7QNPGmEEGYU1+VVCqBPBEvXdqHPtTJtMOn06Yk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "GecBFQ1PemlECWZWCl7f74vmsL6eB6mzQ9n6tK6FYfs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QpjhZl+O1ORifgtCZuWAdcP6OKL7IZ2cA46v8FJcV28=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RlQWwhU+uVv0a+9IB5cUkEfvHBvOw3B1Sx6WfPWMqes=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ubb81XTC7U+4tcNzf1oYvOY6gR5hC2Izqx54f4GuJ0E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6M4Q5NMQ9TqNnjzGOxIkiUIY8TEL0I3XD1QnhefQUqU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BtInzk9t2FFMCEY6AQ7zN8jwrrZEs2irSv6q0Q4NaIw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6vxXfETu9cuBIpRBo3jUUU04mJIH/aAhLX8K6VI5Xv0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wXPCdS+q23zi1bkPnaVG2j0PsVtxdeSLJ//h6J1x8RU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KY3KkfBAsN2l80wbpj41G0gwBR5KmmFnZcagg7D3ENk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tI8NFAxXCX4VOnY5X73K6KI/Yspd3aR94KV39MhJlAw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "nFxH0UC3mATKA6Vboz+QX/hAjj19kF/SH6H5Cne7qC0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q8hYqIYaIi7nOdG/7qQZYnz8Bsacfi66M1nVku4SH08=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4saA92R4arp4anvD9xFtze+sNcQqTEhPHyl1h70A8NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DbIziOBRRyeQS6RtBR09E37LV+CTKrEjGoRMLSpG6eE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Fv80Plp/7w2gnVqrwawLd6qhJ10G4NCDm3re67cNq4Y=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "T/T2oiQCBBES4YN7EodzPRdabZSFlYIClHBym+bQUZE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ZQgHD3l46Ujqtbnj1VbbeM29C9wJzOhz+yZ/7XdSrxk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ltlFKzWvyZvHxDFOYDd/XXJ6kUiJj0ln2HTCEz2o4Z4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "flW8A7bltC1u8bzx0WJtxosGJdOVsJFfbx33jxnpFGg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SXO+92QbMKwUSG2t27ciunV1c3VvFkUuDmSczpRe008=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+KioGs1GM+xRBzFE67ePTWj04KMSE5/Y6qUF7nJ5kvU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L3xNVbh6YH+RzqABN+5Jgb7T234Efpn766DmUvxIxgg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hPF+60mBYPjh21dEmPlBhKgyc9S2qLtTkypYvnqP2Fc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EletRsETy2HcjaPIm2c8CkT7ch/P3pJJDC8hasepcSU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "r5bMXUaNKqLPxZ+TG9HYTG4aSDgcpim27rN8rQFkM0w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0Q7Erdr8+/S0wUEDDIqlS5XjBVWvhZY65K0uUDb6+Ns=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xEcnhXy35hbXNVBPOOt3TUHbxvKfQ48KjA9b6/rbMqQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "T8bEpiQNgsEudXvyKE9SZlSvbpV/LUaslsdqgSFltyo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hIoiaF2YjnxDbODfhFEB+JGZ5nf8suD3Shck5bwQ3N0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qnA6qzejeRJ0rsZaZ0zOvKAaXyxt5lpscKQNYFZNl4k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "anAKCL2DN/le2VaP0n2ucYSEH/DaaEH/8Sa4OqTZsRA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JCZlBJaFm618oWYSnT9Jr1MtwFVw4BZjOzO+5yWgR90=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yxyk4n9762WzcDVGnTn4jCqUnSMIVCrLDIjCX1QVj34=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fDI6fdKvDJwim5/CQwWZEzcrXE3LHgy7FTtffcC7tXE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Vex+gcz5T+WkzsVZQrkqUR2ryyZbnaOGuWpYvjN0zCw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8TLEXz+Gbbp6llHpZXVjLsdlYY9f6hrKpHVpyfDe0RY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7fTyt5BrunypS65TfOzFW2E2qdIuT4SLeDeGlbQoJCs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8fKGrkqN0/KuSjyXgDBmRauDKrSa//JBKRWHEB9xBf4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s4codmG7uN4ss6P357jL21lazEe90M9GOK5WrOknSV0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RkSpua8XF+NUdxVDU90EbLUTTyZFX3tt3atBTroFaRk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "LnTCuCDyAHK5B9KXzjtwGmWB+qergQk2OCjnIx9MI2A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cBFh0virAX4pVXf/udIGI2951i0+0aZAdJcBVGtYnT4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "G54X6myQXWZ5fw/G31en3QbdgfXzL9+hFTtJpnWMqDI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EdsiiuezcsFJFnYIyGjCOhnqMj1BOwTB5EFxN+ERUkg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dVH9MXLtk0WTwGQ3xmrhOqfropMUkDW3o6paNPGl3NU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sB3HqXKWY3pKbuEH8BTbfNIGfbY+7/ZbOc3XC+JRNNI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WHyDk62Xhqbo4/iie2aLIM4x2uuAjv6102dJSHI58oM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pNUFuHpeNRDUZ/NrtII2c6sNc9eGR1lIUlIyXKERA+0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UPa+pdCqnN0bfAptdzldQOSd01gidrDKy8KhWrpSKAI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "l+7dOAlo+HUffMqFYXL6pgUFeTbwOM9CjKQLxEoLtc4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SRnDXV/rN6C8xwMutv9E1luv3DOUio3VkgPr8Cpm7Ew=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QcH6gl+gX7xZ7OWhUNQMbndJy0Piz49pDo6RsnLkVSA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "t+uL4DnfsI/Zll/KXWW1cOKX3Hu8WIkm3pt9efCVSAQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "myutHDctku/+Uug/nD8gRbYvmx/IovtoAAC2/fz2oHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6C+cjD0e0nSCP6cPqQYbNG7SlOd6Mfvi8hyfm7Ng+D8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zg01JSoOj9oBKT0S1ldJucXzY5AKgreS+h2xJreWTOs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7qQ80/FjodHl1m1py/Oii0/9C/xWbLdhaRXQ+kkCP10=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YwWMNH07vL6c5Nhg+MRnVByhzUunu8y0VLM9z/XvR5U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Dle8bU98+fudAbc14SToZFkwvV3tcYVsjDug0NWljpc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "J+eKL1vPJmlzltvhI6Li5Fz/TJmi3Ng+ehRTcs46API=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zB3XzfFygLwC3WHkj0up+VbEd25KKoce1vOpG/5bwK4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vnVnmOnL+z2pqwE+A6cVKS0Iwy4F4/2IiElJca9bUQM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+lG5r/Fpqry3BtFuvY67+RntmHAMDoLVOSGc6ZoXPb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L5MXQertqc6uj7ADe8aWKbd1sYHPCE7P1VYVg9Zc3VI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "imKONuZgopt0bhM3GMX2WVPwQYMTobuUUEdhcLfHs4c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "eOkU1J1uVbiVFWBerbXsSIVcF2nqiicTkFy4x7kFHB8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gI0uDhXeoH/UatDQKEf4qo8FHzWZDhb/wuWTqbq/ID4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cOkd5Aa3btYhtojE/smsF/PJnULqQ4NNqTkU6KXTFmo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "AWNJMs1MTe294oFipp8Y6P0CjpkZ4qCZoClQF3XcHq8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6gJtlzXOFhGYrVbTuRMmvMlDTwXdNtR9aGBlHZPwIMw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "LEmwVGA/xsEG7UrcOoYLFu6KCXgijzFznenknuDacm8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "mIRFPTXRrGaPtp/Ydij2jgkRe4uoUvAKxW2d8b9zYL0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "B+Uv2u48WALOO0L311z+eryjYQzKJVMfdHMZPhOAFmY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "INXXp0wDyVCq+NtfIrrC2ciETmyW/dWB/48/u4yLEZ4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "se7DGo8XrlrQDLEcco1tZrQt9kDe+0RTyl2bw/quG4w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vr0m2+Zk9lbN6UgWCyn8xJWJOokU3IDYab5U5q1+CgQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XI+eJ8Gy2JktG1gICgoj1qpsfy1tKmH0kglWbaQH6DA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A+UCuNnuAUqnQzspA6TVqUPRmtZmpSex5HFw7THRxs0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xaH2Ehfljd19uo0Fvb3iwkdaiWEVQd2YPoitgEPkhSM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "S/iZBJGcc8+qZxyMtab65MMBoSglybwk3x58Nb86gnY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "w14ZE5qqY5YgkS4Zcs9YNbrQbY1XfGOOHNn9bOYnFVQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0MhGd/jEF1vjkKGp+ZMn9SjLK54jkp9W4Hg+Sp/oxaI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "92QZ73e/NRTYgCm4aifaKth6aAsKnLLccBc0zx/qUTY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WOjzemCgFJOiGIp81RSVh/tFlzSTj9eFWcBnsiv2Ycs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DrsP9CmfKPjw5yLL8bnSeAxfNzAwlb+Z8OqCiKgBY7o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lMogqg8veBv6mri3/drMe9afJiKMvevkmGcw9BedfLo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "TxqwNcY8Tg2MPpNdkPBwvfpuTttSYRHU26DGECKYQ9o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "l0u1b4b4vYACWIwfnB7PZac4oDEgjQZCzHruNPTgAIY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "iVSGQ+cCfhbWIrY/v/WBORK92elu9gfRKyGhr6r/k00=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yK1forG50diEXte8ECzjfpHeYsPyuQ/dgxbxn/nzY5k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gIfTLCD3VwnOwkC0zPXWTqaITxX6ZplA69PO2a6zolc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "O/Zxlgh3WqpzJ7+Sd8XWMVID4/GXJUUWaSqfgDUi3b0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ZQ6yv368zwahUqSUYH/StL0Qgz/TwS1CzlMjVDvCciI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "m2rPEYkjwyiKdonMrKlcF7hya4lFOAUwEePJ3SgrNx8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Mq0yl5iVKlq71bT/dT/fXOWf2n90bTnXFnOdGDN0JOc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6qDGMXipPLC2O6EAAMjO2F9xx4rdqZso4IkPpH2304U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jvQHRQQa2RIszE2LX2Hv2LbRhYawJ6qmtRt8HZzFQXg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ovJXQrkZlpeHRciKyE/WWNm5O389gRgzx1W+Dw596X4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "a4kgRNvYctGYqyQv9qScL/WkljTYVylJ9pE9KDULlxU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qV4Q48vPiCJMTjljotzYKI/zfExWpkKOSHGcAjGyDig=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jtI7zbBF+QW/aYYTkn90zzyHLXLgmy7l1bzgMb2oqic=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q0KmJl9txPdn962UNvnfe6UFhdk9YaFZuTm33F+csso=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ULNdEqeZJgtmNOhN/Y9INzsE9AnxWYwOMn+pIbRXIFs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "R4oz9+wkdjpKe5tE1jpG7IURAnfvS5fLP4LrD5cZfTE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qG5Z7VhwSu/HT/YFTgDzyAAzJKq51xPw2HeEV5btYC4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OM/1DmIIZ5Qyhtq8TGkHTBEMVKjAnKRZMRXYtTG8ctc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2R5vZbljLXnDFA99YfGuRB7pAdPJVKsT25zLNMC0fUk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OMbavF2EmdAz1fHkLV3ctFEUDfriKhoT2gidwHZ9z1o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MWT4Zrw3/vVvTYMa1Is5Pjr3wEwnBfnEAPPUAHKQhNU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tBkRPfG9yxfKocQx5pAJX0oEHKPL0Tgtr+0UYe09InE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lqxpnDR/H0YgH7RcfKoNoaaRhe1SIazIeMbQ1fu9y3Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "utT1UdR22PWOTrOkZauztX613lAplV4eh/ejTRb7ZSk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "S+Y2yFyKi/a6FXhih4yGo29X8I8OT6/zwEoX6NMKT4o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QSjVppg29x6oS5yBg8OFjrFt0tuTpWCuKxfIy0k8YnE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "y3r6/Xsfvsl3HksXlVYkJgHUqpQGfICxg3x9f8Zw1qM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BSltHzEwDjFN4du9rDHAPvl22atlcTioEtt+gC5L1tk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0arGXjSN0006UnXbrWsGqhvBair569DeFDUME3Df3rA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s/DumaMad08S+PBUUcrS+v42K0z8HgcdiQtrFAEu2Qs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EzJ8Y8N0OQBTlnvrK82PdevDNZZO4E6CNgYVu8Cj6Ks=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VA4vr8jBPI5QdiPrULzzZjBMIUbG3V7Slg5zm0bFcKc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YAOvEB2ZLtq9LQiFViBHWaxxWVVonC2rNYj9tN9s3L0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hgaHMo9aAGS+nBwvqnTjZO+YkiQPY1c1XcIYeaYKHyI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YvaoLt3ZpH0atB0tNzwMjpoxRYJXl0DqSjisMJiGVBE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EMmW6CptFsiLoPOi5/uAJQ2FmeLg6mCpuVLLrRWk7Mc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1jQsNMarSnarlYmXEuoFokeBMg/090qUD9wqo1Zn8Gs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hupXNKhRpJxpyDAAP1TgJ5JMZh9lhbMk6s7D7dMS3C8=", - "subType": "00" - } - } - ] - } - \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Correctness.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Correctness.json deleted file mode 100644 index 4316a31c3e..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Correctness.json +++ /dev/null @@ -1,1158 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalNoPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "Find with $gt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDecimalNoPrecision": { - "$gt": { - "$numberDecimal": "0.0" - } - } - } - }, - "result": [ - { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - ] - } - ] - }, - { - "description": "Find with $gte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDecimalNoPrecision": { - "$gte": { - "$numberDecimal": "0.0" - } - } - }, - "sort": { - "_id": 1 - } - }, - "result": [ - { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - }, - { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - ] - } - ] - }, - { - "description": "Find with $gt with no results", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDecimalNoPrecision": { - "$gt": { - "$numberDecimal": "1.0" - } - } - } - }, - "result": [] - } - ] - }, - { - "description": "Find with $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDecimalNoPrecision": { - "$lt": { - "$numberDecimal": "1.0" - } - } - } - }, - "result": [ - { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - } - ] - } - ] - }, - { - "description": "Find with $lte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDecimalNoPrecision": { - "$lte": { - "$numberDecimal": "1.0" - } - } - }, - "sort": { - "_id": 1 - } - }, - "result": [ - { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - }, - { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - ] - } - ] - }, - { - "description": "Find with $gt and $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDecimalNoPrecision": { - "$gt": { - "$numberDecimal": "0.0" - }, - "$lt": { - "$numberDecimal": "2.0" - } - } - } - }, - "result": [ - { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - ] - } - ] - }, - { - "description": "Find with equality", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - } - }, - "result": [ - { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - } - ] - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - }, - "result": [ - { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - ] - } - ] - }, - { - "description": "Find with $in", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDecimalNoPrecision": { - "$in": [ - { - "$numberDecimal": "0.0" - } - ] - } - } - }, - "result": [ - { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $gte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDecimalNoPrecision": { - "$gte": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "$sort": { - "_id": 1 - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - }, - { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $gt with no results", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDecimalNoPrecision": { - "$gt": { - "$numberDecimal": "1.0" - } - } - } - } - ] - }, - "result": [] - } - ] - }, - { - "description": "Aggregate with $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDecimalNoPrecision": { - "$lt": { - "$numberDecimal": "1.0" - } - } - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $lte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDecimalNoPrecision": { - "$lte": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "$sort": { - "_id": 1 - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - }, - { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $gt and $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDecimalNoPrecision": { - "$gt": { - "$numberDecimal": "0.0" - }, - "$lt": { - "$numberDecimal": "2.0" - } - } - } - } - ] - }, - "result": [ - { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with equality", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - } - ] - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - } - ] - }, - "result": [ - { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $in", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDecimalNoPrecision": { - "$in": [ - { - "$numberDecimal": "0.0" - } - ] - } - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0.0" - } - } - ] - } - ] - }, - { - "description": "Wrong type: Insert Int", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberInt": "0" - } - } - }, - "result": { - "errorContains": "cannot encrypt element" - } - } - ] - }, - { - "description": "Wrong type: Find Int", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "find", - "arguments": { - "filter": { - "encryptedDecimalNoPrecision": { - "$gte": { - "$numberInt": "0" - } - } - }, - "sort": { - "_id": 1 - } - }, - "result": { - "errorContains": "field type is not supported" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Correctness.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Correctness.yml deleted file mode 100644 index 8154624799..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Correctness.yml +++ /dev/null @@ -1,293 +0,0 @@ -# Test correctness results. -# Does not include command monitoring expectations or outcome assertions to make tests more readable. - -# Requires libmongocrypt 1.8.0. -runOn: - - minServerVersion: "8.0.0" - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - # Tests for Decimal (without precision) must only run against a replica set. Decimal (without precision) queries are expected to take a long time and may exceed the default mongos timeout. - topology: [ "replicaset" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDecimalNoPrecision', 'bsonType': 'decimal', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "Find with $gt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDecimalNoPrecision: { $numberDecimal: "0.0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDecimalNoPrecision: { $numberDecimal: "1.0" } } - - name: find - arguments: - filter: { encryptedDecimalNoPrecision: { $gt: { $numberDecimal: "0.0" } }} - result: [*doc1] - - - description: "Find with $gte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDecimalNoPrecision: { $gte: { $numberDecimal: "0.0" } }} - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: [*doc0, *doc1] - - - description: "Find with $gt with no results" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDecimalNoPrecision: { $gt: { $numberDecimal: "1.0" } }} - result: [] - - - description: "Find with $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDecimalNoPrecision: { $lt: { $numberDecimal: "1.0" } }} - result: [*doc0] - - - description: "Find with $lte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDecimalNoPrecision: { $lte: { $numberDecimal: "1.0" } }} - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: [*doc0, *doc1] - - - description: "Find with $gt and $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDecimalNoPrecision: { $gt: { $numberDecimal: "0.0" }, $lt: { $numberDecimal: "2.0"} }} - result: [*doc1] - - - description: "Find with equality" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDecimalNoPrecision: { $numberDecimal: "0.0" } } - result: [*doc0] - - name: find - arguments: - filter: { encryptedDecimalNoPrecision: { $numberDecimal: "1.0" } } - result: [*doc1] - - - description: "Find with $in" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDecimalNoPrecision: { $in: [ {$numberDecimal: "0.0"} ] } } - result: [*doc0] - - - description: "Aggregate with $gte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDecimalNoPrecision: { $gte: { $numberDecimal: "0.0" } }} } - # sort so results from range queries are ordered. - - { $sort: { _id: 1 }} - result: [*doc0, *doc1] - - - description: "Aggregate with $gt with no results" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDecimalNoPrecision: { $gt: { $numberDecimal: "1.0" } }} } - result: [] - - - description: "Aggregate with $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDecimalNoPrecision: { $lt: { $numberDecimal: "1.0" } }} } - result: [*doc0] - - - description: "Aggregate with $lte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDecimalNoPrecision: { $lte: { $numberDecimal: "1.0" } }} } - # sort so results from range queries are ordered. - - { $sort: { _id: 1 }} - result: [*doc0, *doc1] - - - description: "Aggregate with $gt and $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDecimalNoPrecision: { $gt: { $numberDecimal: "0.0" }, $lt: { $numberDecimal: "2.0"} }} } - result: [*doc1] - - - description: "Aggregate with equality" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDecimalNoPrecision: { $numberDecimal: "0.0" } } } - result: [*doc0] - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDecimalNoPrecision: { $numberDecimal: "1.0" } } } - result: [*doc1] - - - description: "Aggregate with $in" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDecimalNoPrecision: { $in: [ {$numberDecimal: "0.0"} ] } } } - result: [*doc0] - - - description: "Wrong type: Insert Int" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: { _id: 0, encryptedDecimalNoPrecision: { $numberInt: "0" }} } - result: - # Expect an error from mongocryptd. - errorContains: "cannot encrypt element" - - - description: "Wrong type: Find Int" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: find - arguments: - filter: { encryptedDecimalNoPrecision: { $gte: { $numberInt: "0" } }} - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: - # expect an error from libmongocrypt. - errorContains: "field type is not supported" \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Delete.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Delete.json deleted file mode 100644 index 19cae3c64f..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Delete.json +++ /dev/null @@ -1,1116 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalNoPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range Decimal. Delete.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1" - } - } - } - }, - { - "name": "deleteOne", - "arguments": { - "filter": { - "encryptedDecimalNoPrecision": { - "$gt": { - "$numberDecimal": "0" - } - } - } - }, - "result": { - "deletedCount": 1 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalNoPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalNoPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "delete": "default", - "deletes": [ - { - "q": { - "encryptedDecimalNoPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - }, - "limit": 1 - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalNoPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "delete" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": { - "$numberInt": "0" - }, - "encryptedDecimalNoPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "rbf3AeBEv4wWFAKknqDxRW5cLNkFvbIs6iJjc6LShQY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "n+XAuFnP8Dov9TnhGFxNx0K/MnVM9WbJ7RouEu0ndO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yRXojuVdn5GQtD97qYlaCL6cOLmZ7Cvcb3wFjkLUIdM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DuIkdRPITRs55I4SZmgomAHCIsDQmXRhW8+MOznkzSk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SsBk+Et1lTbU+QRPx+xyJ/jMkmfG+QCvQEpip2YYrzA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "crCIzOd8KhHvvUlX7M1v9bhvU4pLdTc+X2SuqoKU5Ek=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YOWdCw4UrqnxkAaVjqmC4sKQDMVMHEpFGnlxpxdaU6E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "M3SShp81Ff8tQ632qKbv9MUcN6wjDaBReI0VXNu6Xh4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gzHlSPxpM0hT75kQvWFzGlOxKvDoiKQZOr19V6l2zXI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s3JnppOGYw9SL2Q1kMAZs948v2F5PrpXjGei/HioDWs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cG6+3Gk/zEH68P/uuuwiAUVCuyJwa1LeV+t29FlPPAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dupdvR3AyJtM+g9NDKiaLVOtGca387JQp8w+V03m7Ig=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JqEQc5svj2jTvZ6LLA5ivE+kTb/0aRemSEmxk4G7Zrg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "szcXXXKnob+p3SoM4yED2R920LeJ7cVsclPMFTe4CeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o1QoGVXmuBdHwHm7aCtGMlMVKrjFdYvJXpoq6uhIAZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Jfm5wPlqqLCJRGQIqRq2NGmpn7s0Vrih2H3YAOoI2YU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zMHLb8ARbsYo8Ld05bqnGFf1Usha6EGb8QKwdSAyps0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yQdtq9lh5pugL7/i0Bj/PuZUUBUIzf+7wj1rl5y736w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wGWVZdO7qIuyDg/BqDgqjgoQ02h5YYgwXQB1oCin2NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "by9HMLj6NTEpgztZ5HSN6GxImkXPcaFINYDzgZY33X8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tWo0vbasi7bXmn/MsOx13VC1IsWtpx/nYp0uj4iMzdA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tQQpndUYd5O87lOtrGjH3wl9VsOK0ray7RMasL90sBM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cQjXEDCMsOpKLLf+vlTgIHA+cbSJdzqhbSX9Wvh95aA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7yMpU48IxK9SzP2cx3VnTownGEwFmeFofuuFT97SuuY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kSOx1kz0CmBgzKQHZlo65ZUY1DIv9A99JRm+Us2y6Ew=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ubQpdPBe6/xvtr+AcXdfYLSvYCR4ot0tivehkCsupb4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xal+iCJ6FTefRQToyoNksc9NCZShyn04NDGi4IYrcoM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "d7jU4iOK50xHxlkSifcxlZFCM46TSgQzoYivxG3HNLY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJvl2nsBLBVzL3pp6sKWCL4UXeh3q/roYBJjSb74ve0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OIUCaKRvIx9t1w6Hxlz1IcQTdPNCfdRNwnnTm10W+X0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A9tvzsiElotOUVIB4CqfQp9mAwqvTM35YkmAR170aHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lI8gpK7hpb7c9x4RQugsxMnQay5LZJmwslZdvMx/dcE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dNCzh40U0XvdKnSDi3HRQOWQftEsDVqc4uUvsVFGoq8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IP+iwEBWBwVVZIdpaMu8k5+soFCz+TZkYn3drKZ9grE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnqyh6e0y5svHkJDShlN9CHV0WvMBE4QbtJpQw5ZCXc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "elEl42tbVDoRTLjAhZUFEtXiut4b3PVhg/1ZLZSQdtE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vHuu2FxwclMHqyE6JBYbTYgbEkB0dqb/JuaxsvfwsmY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xTf7NCe3Gf8QpE78HR5OknlLTKfs9J+RN9UZpH6fnso=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XiWSasRnJAulGR6+LCVD3mwRObXylqYWR9jvpywq12c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MZMxEQ5ikx0PG1YFIExv0UnTZogsvgeOEZTpzvBDn4w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yZMyMZBDrWbAhvnic7vvIYhmO9m5H2iuv0c8KNZrBzY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xxM14hTPY5j0vvcK2C7YAEjzdsfUTFHozHC0hEo1bxI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+01rqR1xVwkpGXcstbk1ItJqFVjH6Q8MGxEN3Cm9Y1A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xOpLV0Z2VTRJ3iWtnWZcsyjXubTIkYWo31cO+HV1o1k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BWUOLqgLBqc5NwxVlSV5H3KFQPXbCp7mdo+jF+8cJqY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fuQb1S6xZDGlrEbK+kI23aL53PP1PVNwqICnZNt9Yzg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfscnoibFttahLdPVC4Ee+47ewGFKpDSU7M6HX19bKE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rpSW2awybNVeKtat91VFxqbINoTfNhPfQAu+d73Xtf8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9M/CP9ccOIIj2LLFmE0GFDO0Ban2wsNalEXfM6+h+1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WrEMG49l1ye4MhXs5ZS9tz8P6h+hDvthIg/2wW9ne1Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ImNhbfeyfH8qIEeA5ic0s3dAQBdzzTBS+CPsNih9vZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dWP33YDSn04UKJN2ogh2Rui0iW/0q2y18OCDRVcfyoo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lYv0isAtfGh6H9tdp3cp2eHU7q2J+uk7QrgcxtK3w7Y=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VGMoamB/+7zTOYcY/pqJc96xlv2PdW4hwsIAEIslTDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yNeBWMF7BnD9wVwz2PgJsvWr77QiVvvWUvJF0+fqBug=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfpvObJ+tJBXSvqeN7vlOfmhYign635lciYAJIjUtY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dsen4NqjzVGjpjufiTMs3+gqeD09EbnuogPgxrJECwg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pxCWVM3sn19NsFEpgHbgLa+PmYlhN3mMiP0Wk8kJhYw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q11KNvJszjYIB9n9HcC+N4uz11a3eRj1L3BH9scKMDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A1PmkgcEToWh1JiVWE6mI5jUu7poxWWuCUt/cgRUUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qJo3Hu4PJeanL7XEaWXO/n3YsodhZyd+MJOOmB9Kpd8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BkBKLO8URFscfRY9Bav/1+L9mLohDgNr/MkZtGiraIs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rZq5WA3Hx3xthOyHAJXK//f8pE2qbz7YKu3TIMp9GFY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X07a/Lm80p5xd4RFs1dNmw+90tmPDPdGiAKVZkxd4zY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6YrBn2ofIw1b5ooakrLOwF41BWrps8OO0H9WH4/rtlE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0l86Ag5OszXpa78SlOUV3K9nff5iC1p0mRXtLg9M1s4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Hn6yuxFHodeyu7ISlhYrbSf9pTiH4TDEvbYLWjTwFO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zdf4y2etKBuIpkEU1zMwoCkCsdisfXZCh8QPamm+drY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rOQ9oMdiK5xxGH+jPzOvwVqdGGnF3+HkJXxn81s6hp4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "61aKKsE3+BJHHWYvs3xSIBvlRmKswmaOo5rygQJguUg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KuDb/GIzqDM8wv7m7m8AECiWJbae5EKKtJRugZx7kR0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Q+t8t2TmNUiCIorVr9F3AlVnX+Mpt2ZYvN+s8UGict8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJRZIpKxUgHyL83kW8cvfjkxN3z6WoNnUg+SQw+LK+k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnUsYjip8SvW0+m9mR5WWTkpK+p6uwJ6yBUAlBnFKMk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PArHlz+yPRYDycAP/PgnI/AkP8Wgmfg++Vf4UG1Bf0E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wnIh53Q3jeK8jEBe1n8kJLa89/H0BxO26ZU8SRIAs9Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4F8U59gzBLGhq58PEWQk2nch+R0Va7eTUoxMneReUIA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ihKagIW3uT1dm22ROr/g5QaCpxZVj2+Fs/YSdM2Noco=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EJtUOOwjkrPUi9mavYAi+Gom9Y2DuFll7aDwo4mq0M0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dIkr8dbaVRQFskAVT6B286BbcBBt1pZPEOcTZqk4ZcI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aYVAcZYkH/Tieoa1XOjE/zCy5AJcVTHjS0NG2QB7muA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sBidL6y8TenseetpioIAAtn0lK/7C8MoW4JXpVYi3z8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0Dd2klU/t4R86c2WJcJDAd57k/N7OjvYSO5Vf8KH8sw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I3jZ92WEVmZmgaIkLbuWhBxl7EM6bEjiEttgBJunArA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aGHoQMlgJoGvArjfIbc3nnkoc8SWBxcrN7hSmjMRzos=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "bpiWPnF/KVBQr5F6MEwc5ZZayzIRvQOLDAm4ntwOi8g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tI7QVKbE6avWgDD9h4QKyFlnTxFCwd2iLySKakxNR/I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XGsge0CnoaXgE3rcpKm8AEeku5QVfokS3kcI+JKV1lk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JQxlryW2Q5WOwfrjAnaZxDvC83Dg6sjRVP5zegf2WiM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YFuHKJOfoqp1iGVxoFjx7bLYgVdsN4GuUFxEgO9HJ5s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Z6vUdiCR18ylKomf08uxcQHeRtmyav7/Ecvzz4av3k4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SPGo1Ib5AiP/tSllL7Z5PAypvnKdwJLzt8imfIMSEJQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "m94Nh6PFFQFLIib9Cu5LAKavhXnagSHG6F5EF8lD96I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pfEkQI98mB+gm1+JbmVurPAODMFPJ4E8DnqfVyUWbSo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DNj3OVRLbr43s0vd+rgWghOL3FqeO/60npdojC8Ry/M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kAYIQrjHVu49W8FTxyxJeiLVRWWjC9fPcBn+Hx1F+Ss=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aCSO7UVOpoQvu/iridarxkxV1SVxU1i9HVSYXUAeXk4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Gh6hTP/yj1IKlXQ+Q69KTfMlGZjEcXoRLGbQHNFo/1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/gDgIFQ4tAlJk3GN48IS5Qa5IPmErwGk8CHxAbp6gs0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PICyimwPjxpusyKxNssOOwUotAUbygpyEtORsVGXT8g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4lu+cBHyAUvuxC6JUNyHLzHsCogGSWFFnUCkDwfQdgI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pSndkmoNUJwXjgkbkgOrT5f9nSvuoMEZOkwAN9ElRaE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tyW+D4i26QihNM5MuBM+wnt5AdWGSJaJ4X5ydc9iWTU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9Syjr8RoxUgPKr+O5rsCu07AvcebA4P8IVKyS1NVLWc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "67tPfDYnK2tmrioI51fOBG0ygajcV0pLo5+Zm/rEW7U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "y0EiPRxYTuS1eVTIaPQUQBBxwkyxNckbePvKgChwd0M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NWd+2veAaeXQgR3vCvzlI4R1WW67D5YsVLdoXfdb8qg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PY5RQqKQsL2GqBBSPNOEVpojNFRX/NijCghIpxD6CZk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lcvwTyEjFlssCJtdjRpdN6oY+C7bxZY+WA+QAqzj9zg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWE7XRNylvTwO/9Fv56dNqUaQWMmESNS/GNIwgBaEI0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ijwlrUeS8nRYqK1F8kiCYF0mNDolEZS+/lJO1Lg93C8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8KzV+qYGYuIjoNj8eEpnTuHrMYuhzphl80rS6wrODuU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wDyTLjSEFF895hSQsHvmoEQVS6KIkZOtq1c9dVogm9I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SGrtPuMYCjUrfKF0Pq/thdaQzmGBMUvlwN3ORIu9tHU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KySHON3hIoUk4xWcwTqk6IL0kgjzjxgMBObVIkCGvk4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hBIdS9j0XJPeT4ot73ngELkpUoSixvRBvdOL9z48jY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Tx6um0q9HjS5ZvlFhvukpI6ORnyrXMWVW1OoxvgqII0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zFKlyfX5H81+d4A4J3FKn4T5JfG+OWtR06ddyX4Mxas=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cGgCDuPV7MeMMYEDpgOupqyNP4BQ4H7rBnd2QygumgM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IPaUoy98v11EoglTpJ4kBlEawoZ8y7BPwzjLYBpkvHQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Pfo4Am6tOWAyZNn8G9W5HWWGC3ZWmX0igI/RRB870Ro=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fnTSjd7bC1Udoq6iM7UDnHAC/lsIXSHp/Gy332qw+/I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fApBgVRrTDyEumkeWs5p3ag9KB48SbU4Si0dl7Ns9rc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QxudfBItgoCnUj5NXVnSmWH3HK76YtKkMmzn4lyyUYY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sSOvwhKa29Wq94bZ5jGIiJQGbG1uBrKSBfOYBz/oZeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FdaMgwwJ0NKsqmPZLC5oE+/0D74Dfpvig3LaI5yW5Fs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sRWBy12IERN43BSZIrnBfC9+zFBUdvjTlkqIH81NGt4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/4tIRpxKhoOwnXAiFn1Z7Xmric4USOIfKvTYQXk3QTc=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Delete.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Delete.yml deleted file mode 100644 index daf89dd91c..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Delete.yml +++ /dev/null @@ -1,899 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - # Tests for Decimal (without precision) must only run against a replica set. Decimal (without precision) queries are expected to take a long time and may exceed the default mongos timeout. - topology: [ "replicaset" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDecimalNoPrecision', 'bsonType': 'decimal', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range Decimal. Delete." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDecimalNoPrecision: { $numberDecimal: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDecimalNoPrecision: { $numberDecimal: "1" } } - - name: deleteOne - arguments: - filter: { "encryptedDecimalNoPrecision": { $gt: {$numberDecimal: "0" }} } - result: - deletedCount: 1 - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedDecimalNoPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedDecimalNoPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - delete: *collection_name - deletes: [ - { - "q": { - "encryptedDecimalNoPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - }, - "limit": 1 - } - ] - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: delete - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": { - "$numberInt": "0" - }, - "encryptedDecimalNoPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "rbf3AeBEv4wWFAKknqDxRW5cLNkFvbIs6iJjc6LShQY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "n+XAuFnP8Dov9TnhGFxNx0K/MnVM9WbJ7RouEu0ndO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yRXojuVdn5GQtD97qYlaCL6cOLmZ7Cvcb3wFjkLUIdM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DuIkdRPITRs55I4SZmgomAHCIsDQmXRhW8+MOznkzSk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SsBk+Et1lTbU+QRPx+xyJ/jMkmfG+QCvQEpip2YYrzA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "crCIzOd8KhHvvUlX7M1v9bhvU4pLdTc+X2SuqoKU5Ek=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YOWdCw4UrqnxkAaVjqmC4sKQDMVMHEpFGnlxpxdaU6E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "M3SShp81Ff8tQ632qKbv9MUcN6wjDaBReI0VXNu6Xh4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gzHlSPxpM0hT75kQvWFzGlOxKvDoiKQZOr19V6l2zXI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s3JnppOGYw9SL2Q1kMAZs948v2F5PrpXjGei/HioDWs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cG6+3Gk/zEH68P/uuuwiAUVCuyJwa1LeV+t29FlPPAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dupdvR3AyJtM+g9NDKiaLVOtGca387JQp8w+V03m7Ig=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JqEQc5svj2jTvZ6LLA5ivE+kTb/0aRemSEmxk4G7Zrg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "szcXXXKnob+p3SoM4yED2R920LeJ7cVsclPMFTe4CeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o1QoGVXmuBdHwHm7aCtGMlMVKrjFdYvJXpoq6uhIAZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Jfm5wPlqqLCJRGQIqRq2NGmpn7s0Vrih2H3YAOoI2YU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zMHLb8ARbsYo8Ld05bqnGFf1Usha6EGb8QKwdSAyps0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yQdtq9lh5pugL7/i0Bj/PuZUUBUIzf+7wj1rl5y736w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wGWVZdO7qIuyDg/BqDgqjgoQ02h5YYgwXQB1oCin2NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "by9HMLj6NTEpgztZ5HSN6GxImkXPcaFINYDzgZY33X8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tWo0vbasi7bXmn/MsOx13VC1IsWtpx/nYp0uj4iMzdA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tQQpndUYd5O87lOtrGjH3wl9VsOK0ray7RMasL90sBM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cQjXEDCMsOpKLLf+vlTgIHA+cbSJdzqhbSX9Wvh95aA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7yMpU48IxK9SzP2cx3VnTownGEwFmeFofuuFT97SuuY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kSOx1kz0CmBgzKQHZlo65ZUY1DIv9A99JRm+Us2y6Ew=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ubQpdPBe6/xvtr+AcXdfYLSvYCR4ot0tivehkCsupb4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xal+iCJ6FTefRQToyoNksc9NCZShyn04NDGi4IYrcoM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "d7jU4iOK50xHxlkSifcxlZFCM46TSgQzoYivxG3HNLY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJvl2nsBLBVzL3pp6sKWCL4UXeh3q/roYBJjSb74ve0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OIUCaKRvIx9t1w6Hxlz1IcQTdPNCfdRNwnnTm10W+X0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A9tvzsiElotOUVIB4CqfQp9mAwqvTM35YkmAR170aHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lI8gpK7hpb7c9x4RQugsxMnQay5LZJmwslZdvMx/dcE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dNCzh40U0XvdKnSDi3HRQOWQftEsDVqc4uUvsVFGoq8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IP+iwEBWBwVVZIdpaMu8k5+soFCz+TZkYn3drKZ9grE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnqyh6e0y5svHkJDShlN9CHV0WvMBE4QbtJpQw5ZCXc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "elEl42tbVDoRTLjAhZUFEtXiut4b3PVhg/1ZLZSQdtE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vHuu2FxwclMHqyE6JBYbTYgbEkB0dqb/JuaxsvfwsmY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xTf7NCe3Gf8QpE78HR5OknlLTKfs9J+RN9UZpH6fnso=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XiWSasRnJAulGR6+LCVD3mwRObXylqYWR9jvpywq12c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MZMxEQ5ikx0PG1YFIExv0UnTZogsvgeOEZTpzvBDn4w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yZMyMZBDrWbAhvnic7vvIYhmO9m5H2iuv0c8KNZrBzY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xxM14hTPY5j0vvcK2C7YAEjzdsfUTFHozHC0hEo1bxI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+01rqR1xVwkpGXcstbk1ItJqFVjH6Q8MGxEN3Cm9Y1A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xOpLV0Z2VTRJ3iWtnWZcsyjXubTIkYWo31cO+HV1o1k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BWUOLqgLBqc5NwxVlSV5H3KFQPXbCp7mdo+jF+8cJqY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fuQb1S6xZDGlrEbK+kI23aL53PP1PVNwqICnZNt9Yzg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfscnoibFttahLdPVC4Ee+47ewGFKpDSU7M6HX19bKE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rpSW2awybNVeKtat91VFxqbINoTfNhPfQAu+d73Xtf8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9M/CP9ccOIIj2LLFmE0GFDO0Ban2wsNalEXfM6+h+1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WrEMG49l1ye4MhXs5ZS9tz8P6h+hDvthIg/2wW9ne1Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ImNhbfeyfH8qIEeA5ic0s3dAQBdzzTBS+CPsNih9vZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dWP33YDSn04UKJN2ogh2Rui0iW/0q2y18OCDRVcfyoo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lYv0isAtfGh6H9tdp3cp2eHU7q2J+uk7QrgcxtK3w7Y=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VGMoamB/+7zTOYcY/pqJc96xlv2PdW4hwsIAEIslTDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yNeBWMF7BnD9wVwz2PgJsvWr77QiVvvWUvJF0+fqBug=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfpvObJ+tJBXSvqeN7vlOfmhYign635lciYAJIjUtY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dsen4NqjzVGjpjufiTMs3+gqeD09EbnuogPgxrJECwg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pxCWVM3sn19NsFEpgHbgLa+PmYlhN3mMiP0Wk8kJhYw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q11KNvJszjYIB9n9HcC+N4uz11a3eRj1L3BH9scKMDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A1PmkgcEToWh1JiVWE6mI5jUu7poxWWuCUt/cgRUUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qJo3Hu4PJeanL7XEaWXO/n3YsodhZyd+MJOOmB9Kpd8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BkBKLO8URFscfRY9Bav/1+L9mLohDgNr/MkZtGiraIs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rZq5WA3Hx3xthOyHAJXK//f8pE2qbz7YKu3TIMp9GFY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X07a/Lm80p5xd4RFs1dNmw+90tmPDPdGiAKVZkxd4zY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6YrBn2ofIw1b5ooakrLOwF41BWrps8OO0H9WH4/rtlE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0l86Ag5OszXpa78SlOUV3K9nff5iC1p0mRXtLg9M1s4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Hn6yuxFHodeyu7ISlhYrbSf9pTiH4TDEvbYLWjTwFO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zdf4y2etKBuIpkEU1zMwoCkCsdisfXZCh8QPamm+drY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rOQ9oMdiK5xxGH+jPzOvwVqdGGnF3+HkJXxn81s6hp4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "61aKKsE3+BJHHWYvs3xSIBvlRmKswmaOo5rygQJguUg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KuDb/GIzqDM8wv7m7m8AECiWJbae5EKKtJRugZx7kR0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Q+t8t2TmNUiCIorVr9F3AlVnX+Mpt2ZYvN+s8UGict8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJRZIpKxUgHyL83kW8cvfjkxN3z6WoNnUg+SQw+LK+k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnUsYjip8SvW0+m9mR5WWTkpK+p6uwJ6yBUAlBnFKMk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PArHlz+yPRYDycAP/PgnI/AkP8Wgmfg++Vf4UG1Bf0E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wnIh53Q3jeK8jEBe1n8kJLa89/H0BxO26ZU8SRIAs9Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4F8U59gzBLGhq58PEWQk2nch+R0Va7eTUoxMneReUIA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ihKagIW3uT1dm22ROr/g5QaCpxZVj2+Fs/YSdM2Noco=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EJtUOOwjkrPUi9mavYAi+Gom9Y2DuFll7aDwo4mq0M0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dIkr8dbaVRQFskAVT6B286BbcBBt1pZPEOcTZqk4ZcI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aYVAcZYkH/Tieoa1XOjE/zCy5AJcVTHjS0NG2QB7muA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sBidL6y8TenseetpioIAAtn0lK/7C8MoW4JXpVYi3z8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0Dd2klU/t4R86c2WJcJDAd57k/N7OjvYSO5Vf8KH8sw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I3jZ92WEVmZmgaIkLbuWhBxl7EM6bEjiEttgBJunArA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aGHoQMlgJoGvArjfIbc3nnkoc8SWBxcrN7hSmjMRzos=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "bpiWPnF/KVBQr5F6MEwc5ZZayzIRvQOLDAm4ntwOi8g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tI7QVKbE6avWgDD9h4QKyFlnTxFCwd2iLySKakxNR/I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XGsge0CnoaXgE3rcpKm8AEeku5QVfokS3kcI+JKV1lk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JQxlryW2Q5WOwfrjAnaZxDvC83Dg6sjRVP5zegf2WiM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YFuHKJOfoqp1iGVxoFjx7bLYgVdsN4GuUFxEgO9HJ5s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Z6vUdiCR18ylKomf08uxcQHeRtmyav7/Ecvzz4av3k4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SPGo1Ib5AiP/tSllL7Z5PAypvnKdwJLzt8imfIMSEJQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "m94Nh6PFFQFLIib9Cu5LAKavhXnagSHG6F5EF8lD96I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pfEkQI98mB+gm1+JbmVurPAODMFPJ4E8DnqfVyUWbSo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DNj3OVRLbr43s0vd+rgWghOL3FqeO/60npdojC8Ry/M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kAYIQrjHVu49W8FTxyxJeiLVRWWjC9fPcBn+Hx1F+Ss=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aCSO7UVOpoQvu/iridarxkxV1SVxU1i9HVSYXUAeXk4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Gh6hTP/yj1IKlXQ+Q69KTfMlGZjEcXoRLGbQHNFo/1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/gDgIFQ4tAlJk3GN48IS5Qa5IPmErwGk8CHxAbp6gs0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PICyimwPjxpusyKxNssOOwUotAUbygpyEtORsVGXT8g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4lu+cBHyAUvuxC6JUNyHLzHsCogGSWFFnUCkDwfQdgI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pSndkmoNUJwXjgkbkgOrT5f9nSvuoMEZOkwAN9ElRaE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tyW+D4i26QihNM5MuBM+wnt5AdWGSJaJ4X5ydc9iWTU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9Syjr8RoxUgPKr+O5rsCu07AvcebA4P8IVKyS1NVLWc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "67tPfDYnK2tmrioI51fOBG0ygajcV0pLo5+Zm/rEW7U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "y0EiPRxYTuS1eVTIaPQUQBBxwkyxNckbePvKgChwd0M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NWd+2veAaeXQgR3vCvzlI4R1WW67D5YsVLdoXfdb8qg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PY5RQqKQsL2GqBBSPNOEVpojNFRX/NijCghIpxD6CZk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lcvwTyEjFlssCJtdjRpdN6oY+C7bxZY+WA+QAqzj9zg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWE7XRNylvTwO/9Fv56dNqUaQWMmESNS/GNIwgBaEI0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ijwlrUeS8nRYqK1F8kiCYF0mNDolEZS+/lJO1Lg93C8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8KzV+qYGYuIjoNj8eEpnTuHrMYuhzphl80rS6wrODuU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wDyTLjSEFF895hSQsHvmoEQVS6KIkZOtq1c9dVogm9I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SGrtPuMYCjUrfKF0Pq/thdaQzmGBMUvlwN3ORIu9tHU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KySHON3hIoUk4xWcwTqk6IL0kgjzjxgMBObVIkCGvk4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hBIdS9j0XJPeT4ot73ngELkpUoSixvRBvdOL9z48jY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Tx6um0q9HjS5ZvlFhvukpI6ORnyrXMWVW1OoxvgqII0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zFKlyfX5H81+d4A4J3FKn4T5JfG+OWtR06ddyX4Mxas=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cGgCDuPV7MeMMYEDpgOupqyNP4BQ4H7rBnd2QygumgM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IPaUoy98v11EoglTpJ4kBlEawoZ8y7BPwzjLYBpkvHQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Pfo4Am6tOWAyZNn8G9W5HWWGC3ZWmX0igI/RRB870Ro=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fnTSjd7bC1Udoq6iM7UDnHAC/lsIXSHp/Gy332qw+/I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fApBgVRrTDyEumkeWs5p3ag9KB48SbU4Si0dl7Ns9rc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QxudfBItgoCnUj5NXVnSmWH3HK76YtKkMmzn4lyyUYY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sSOvwhKa29Wq94bZ5jGIiJQGbG1uBrKSBfOYBz/oZeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FdaMgwwJ0NKsqmPZLC5oE+/0D74Dfpvig3LaI5yW5Fs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sRWBy12IERN43BSZIrnBfC9+zFBUdvjTlkqIH81NGt4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/4tIRpxKhoOwnXAiFn1Z7Xmric4USOIfKvTYQXk3QTc=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-FindOneAndUpdate.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-FindOneAndUpdate.json deleted file mode 100644 index 4ab3b63ea5..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-FindOneAndUpdate.json +++ /dev/null @@ -1,1906 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalNoPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range Decimal. FindOneAndUpdate.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1" - } - } - } - }, - { - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "encryptedDecimalNoPrecision": { - "$gt": { - "$numberDecimal": "0" - } - } - }, - "update": { - "$set": { - "encryptedDecimalNoPrecision": { - "$numberDecimal": "2" - } - } - }, - "returnDocument": "Before" - }, - "result": { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalNoPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalNoPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "findAndModify": "default", - "query": { - "encryptedDecimalNoPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - }, - "update": { - "$set": { - "encryptedDecimalNoPrecision": { - "$$type": "binData" - } - } - }, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalNoPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "findAndModify" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": { - "$numberInt": "0" - }, - "encryptedDecimalNoPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "rbf3AeBEv4wWFAKknqDxRW5cLNkFvbIs6iJjc6LShQY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "n+XAuFnP8Dov9TnhGFxNx0K/MnVM9WbJ7RouEu0ndO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yRXojuVdn5GQtD97qYlaCL6cOLmZ7Cvcb3wFjkLUIdM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DuIkdRPITRs55I4SZmgomAHCIsDQmXRhW8+MOznkzSk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SsBk+Et1lTbU+QRPx+xyJ/jMkmfG+QCvQEpip2YYrzA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "crCIzOd8KhHvvUlX7M1v9bhvU4pLdTc+X2SuqoKU5Ek=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YOWdCw4UrqnxkAaVjqmC4sKQDMVMHEpFGnlxpxdaU6E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "M3SShp81Ff8tQ632qKbv9MUcN6wjDaBReI0VXNu6Xh4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gzHlSPxpM0hT75kQvWFzGlOxKvDoiKQZOr19V6l2zXI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s3JnppOGYw9SL2Q1kMAZs948v2F5PrpXjGei/HioDWs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cG6+3Gk/zEH68P/uuuwiAUVCuyJwa1LeV+t29FlPPAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dupdvR3AyJtM+g9NDKiaLVOtGca387JQp8w+V03m7Ig=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JqEQc5svj2jTvZ6LLA5ivE+kTb/0aRemSEmxk4G7Zrg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "szcXXXKnob+p3SoM4yED2R920LeJ7cVsclPMFTe4CeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o1QoGVXmuBdHwHm7aCtGMlMVKrjFdYvJXpoq6uhIAZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Jfm5wPlqqLCJRGQIqRq2NGmpn7s0Vrih2H3YAOoI2YU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zMHLb8ARbsYo8Ld05bqnGFf1Usha6EGb8QKwdSAyps0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yQdtq9lh5pugL7/i0Bj/PuZUUBUIzf+7wj1rl5y736w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wGWVZdO7qIuyDg/BqDgqjgoQ02h5YYgwXQB1oCin2NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "by9HMLj6NTEpgztZ5HSN6GxImkXPcaFINYDzgZY33X8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tWo0vbasi7bXmn/MsOx13VC1IsWtpx/nYp0uj4iMzdA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tQQpndUYd5O87lOtrGjH3wl9VsOK0ray7RMasL90sBM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cQjXEDCMsOpKLLf+vlTgIHA+cbSJdzqhbSX9Wvh95aA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7yMpU48IxK9SzP2cx3VnTownGEwFmeFofuuFT97SuuY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kSOx1kz0CmBgzKQHZlo65ZUY1DIv9A99JRm+Us2y6Ew=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ubQpdPBe6/xvtr+AcXdfYLSvYCR4ot0tivehkCsupb4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xal+iCJ6FTefRQToyoNksc9NCZShyn04NDGi4IYrcoM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "d7jU4iOK50xHxlkSifcxlZFCM46TSgQzoYivxG3HNLY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJvl2nsBLBVzL3pp6sKWCL4UXeh3q/roYBJjSb74ve0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OIUCaKRvIx9t1w6Hxlz1IcQTdPNCfdRNwnnTm10W+X0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A9tvzsiElotOUVIB4CqfQp9mAwqvTM35YkmAR170aHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lI8gpK7hpb7c9x4RQugsxMnQay5LZJmwslZdvMx/dcE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dNCzh40U0XvdKnSDi3HRQOWQftEsDVqc4uUvsVFGoq8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IP+iwEBWBwVVZIdpaMu8k5+soFCz+TZkYn3drKZ9grE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnqyh6e0y5svHkJDShlN9CHV0WvMBE4QbtJpQw5ZCXc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "elEl42tbVDoRTLjAhZUFEtXiut4b3PVhg/1ZLZSQdtE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vHuu2FxwclMHqyE6JBYbTYgbEkB0dqb/JuaxsvfwsmY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xTf7NCe3Gf8QpE78HR5OknlLTKfs9J+RN9UZpH6fnso=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XiWSasRnJAulGR6+LCVD3mwRObXylqYWR9jvpywq12c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MZMxEQ5ikx0PG1YFIExv0UnTZogsvgeOEZTpzvBDn4w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yZMyMZBDrWbAhvnic7vvIYhmO9m5H2iuv0c8KNZrBzY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xxM14hTPY5j0vvcK2C7YAEjzdsfUTFHozHC0hEo1bxI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+01rqR1xVwkpGXcstbk1ItJqFVjH6Q8MGxEN3Cm9Y1A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xOpLV0Z2VTRJ3iWtnWZcsyjXubTIkYWo31cO+HV1o1k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BWUOLqgLBqc5NwxVlSV5H3KFQPXbCp7mdo+jF+8cJqY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fuQb1S6xZDGlrEbK+kI23aL53PP1PVNwqICnZNt9Yzg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfscnoibFttahLdPVC4Ee+47ewGFKpDSU7M6HX19bKE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rpSW2awybNVeKtat91VFxqbINoTfNhPfQAu+d73Xtf8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9M/CP9ccOIIj2LLFmE0GFDO0Ban2wsNalEXfM6+h+1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WrEMG49l1ye4MhXs5ZS9tz8P6h+hDvthIg/2wW9ne1Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ImNhbfeyfH8qIEeA5ic0s3dAQBdzzTBS+CPsNih9vZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dWP33YDSn04UKJN2ogh2Rui0iW/0q2y18OCDRVcfyoo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lYv0isAtfGh6H9tdp3cp2eHU7q2J+uk7QrgcxtK3w7Y=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VGMoamB/+7zTOYcY/pqJc96xlv2PdW4hwsIAEIslTDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yNeBWMF7BnD9wVwz2PgJsvWr77QiVvvWUvJF0+fqBug=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfpvObJ+tJBXSvqeN7vlOfmhYign635lciYAJIjUtY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dsen4NqjzVGjpjufiTMs3+gqeD09EbnuogPgxrJECwg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pxCWVM3sn19NsFEpgHbgLa+PmYlhN3mMiP0Wk8kJhYw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q11KNvJszjYIB9n9HcC+N4uz11a3eRj1L3BH9scKMDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A1PmkgcEToWh1JiVWE6mI5jUu7poxWWuCUt/cgRUUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qJo3Hu4PJeanL7XEaWXO/n3YsodhZyd+MJOOmB9Kpd8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BkBKLO8URFscfRY9Bav/1+L9mLohDgNr/MkZtGiraIs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rZq5WA3Hx3xthOyHAJXK//f8pE2qbz7YKu3TIMp9GFY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X07a/Lm80p5xd4RFs1dNmw+90tmPDPdGiAKVZkxd4zY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6YrBn2ofIw1b5ooakrLOwF41BWrps8OO0H9WH4/rtlE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0l86Ag5OszXpa78SlOUV3K9nff5iC1p0mRXtLg9M1s4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Hn6yuxFHodeyu7ISlhYrbSf9pTiH4TDEvbYLWjTwFO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zdf4y2etKBuIpkEU1zMwoCkCsdisfXZCh8QPamm+drY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rOQ9oMdiK5xxGH+jPzOvwVqdGGnF3+HkJXxn81s6hp4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "61aKKsE3+BJHHWYvs3xSIBvlRmKswmaOo5rygQJguUg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KuDb/GIzqDM8wv7m7m8AECiWJbae5EKKtJRugZx7kR0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Q+t8t2TmNUiCIorVr9F3AlVnX+Mpt2ZYvN+s8UGict8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJRZIpKxUgHyL83kW8cvfjkxN3z6WoNnUg+SQw+LK+k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnUsYjip8SvW0+m9mR5WWTkpK+p6uwJ6yBUAlBnFKMk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PArHlz+yPRYDycAP/PgnI/AkP8Wgmfg++Vf4UG1Bf0E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wnIh53Q3jeK8jEBe1n8kJLa89/H0BxO26ZU8SRIAs9Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4F8U59gzBLGhq58PEWQk2nch+R0Va7eTUoxMneReUIA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ihKagIW3uT1dm22ROr/g5QaCpxZVj2+Fs/YSdM2Noco=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EJtUOOwjkrPUi9mavYAi+Gom9Y2DuFll7aDwo4mq0M0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dIkr8dbaVRQFskAVT6B286BbcBBt1pZPEOcTZqk4ZcI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aYVAcZYkH/Tieoa1XOjE/zCy5AJcVTHjS0NG2QB7muA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sBidL6y8TenseetpioIAAtn0lK/7C8MoW4JXpVYi3z8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0Dd2klU/t4R86c2WJcJDAd57k/N7OjvYSO5Vf8KH8sw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I3jZ92WEVmZmgaIkLbuWhBxl7EM6bEjiEttgBJunArA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aGHoQMlgJoGvArjfIbc3nnkoc8SWBxcrN7hSmjMRzos=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "bpiWPnF/KVBQr5F6MEwc5ZZayzIRvQOLDAm4ntwOi8g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tI7QVKbE6avWgDD9h4QKyFlnTxFCwd2iLySKakxNR/I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XGsge0CnoaXgE3rcpKm8AEeku5QVfokS3kcI+JKV1lk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JQxlryW2Q5WOwfrjAnaZxDvC83Dg6sjRVP5zegf2WiM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YFuHKJOfoqp1iGVxoFjx7bLYgVdsN4GuUFxEgO9HJ5s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Z6vUdiCR18ylKomf08uxcQHeRtmyav7/Ecvzz4av3k4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SPGo1Ib5AiP/tSllL7Z5PAypvnKdwJLzt8imfIMSEJQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "m94Nh6PFFQFLIib9Cu5LAKavhXnagSHG6F5EF8lD96I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pfEkQI98mB+gm1+JbmVurPAODMFPJ4E8DnqfVyUWbSo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DNj3OVRLbr43s0vd+rgWghOL3FqeO/60npdojC8Ry/M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kAYIQrjHVu49W8FTxyxJeiLVRWWjC9fPcBn+Hx1F+Ss=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aCSO7UVOpoQvu/iridarxkxV1SVxU1i9HVSYXUAeXk4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Gh6hTP/yj1IKlXQ+Q69KTfMlGZjEcXoRLGbQHNFo/1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/gDgIFQ4tAlJk3GN48IS5Qa5IPmErwGk8CHxAbp6gs0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PICyimwPjxpusyKxNssOOwUotAUbygpyEtORsVGXT8g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4lu+cBHyAUvuxC6JUNyHLzHsCogGSWFFnUCkDwfQdgI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pSndkmoNUJwXjgkbkgOrT5f9nSvuoMEZOkwAN9ElRaE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tyW+D4i26QihNM5MuBM+wnt5AdWGSJaJ4X5ydc9iWTU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9Syjr8RoxUgPKr+O5rsCu07AvcebA4P8IVKyS1NVLWc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "67tPfDYnK2tmrioI51fOBG0ygajcV0pLo5+Zm/rEW7U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "y0EiPRxYTuS1eVTIaPQUQBBxwkyxNckbePvKgChwd0M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NWd+2veAaeXQgR3vCvzlI4R1WW67D5YsVLdoXfdb8qg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PY5RQqKQsL2GqBBSPNOEVpojNFRX/NijCghIpxD6CZk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lcvwTyEjFlssCJtdjRpdN6oY+C7bxZY+WA+QAqzj9zg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWE7XRNylvTwO/9Fv56dNqUaQWMmESNS/GNIwgBaEI0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ijwlrUeS8nRYqK1F8kiCYF0mNDolEZS+/lJO1Lg93C8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8KzV+qYGYuIjoNj8eEpnTuHrMYuhzphl80rS6wrODuU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wDyTLjSEFF895hSQsHvmoEQVS6KIkZOtq1c9dVogm9I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SGrtPuMYCjUrfKF0Pq/thdaQzmGBMUvlwN3ORIu9tHU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KySHON3hIoUk4xWcwTqk6IL0kgjzjxgMBObVIkCGvk4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hBIdS9j0XJPeT4ot73ngELkpUoSixvRBvdOL9z48jY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Tx6um0q9HjS5ZvlFhvukpI6ORnyrXMWVW1OoxvgqII0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zFKlyfX5H81+d4A4J3FKn4T5JfG+OWtR06ddyX4Mxas=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cGgCDuPV7MeMMYEDpgOupqyNP4BQ4H7rBnd2QygumgM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IPaUoy98v11EoglTpJ4kBlEawoZ8y7BPwzjLYBpkvHQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Pfo4Am6tOWAyZNn8G9W5HWWGC3ZWmX0igI/RRB870Ro=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fnTSjd7bC1Udoq6iM7UDnHAC/lsIXSHp/Gy332qw+/I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fApBgVRrTDyEumkeWs5p3ag9KB48SbU4Si0dl7Ns9rc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QxudfBItgoCnUj5NXVnSmWH3HK76YtKkMmzn4lyyUYY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sSOvwhKa29Wq94bZ5jGIiJQGbG1uBrKSBfOYBz/oZeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FdaMgwwJ0NKsqmPZLC5oE+/0D74Dfpvig3LaI5yW5Fs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sRWBy12IERN43BSZIrnBfC9+zFBUdvjTlkqIH81NGt4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/4tIRpxKhoOwnXAiFn1Z7Xmric4USOIfKvTYQXk3QTc=", - "subType": "00" - } - } - ] - }, - { - "_id": { - "$numberInt": "1" - }, - "encryptedDecimalNoPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "Mr/laWHUijZT5VT3x2a7crb7wgd/UXOGz8jr8BVqBpM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wXVD/HSbBljko0jJcaxJ1nrzs2+pchLQqYR3vywS8SU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VDCpBYsJIxTfcI6Zgf7FTmKMxUffQv+Ys8zt5dlK76I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zYDslUwOUVNwTYkETfjceH/PU3bac9X3UuQyYJ19qK0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rAOmHSz18Jx107xpbv9fYcPOmh/KPAqge0PAtuhIRnc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BFOB1OGVUen7VsOuS0g8Ti7oDsTt2Yj/k/7ta8YAdGM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2fckE5SPs0GU+akDkUEM6mm0EtcV3WDE/sQsnTtodlk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "mi9+aNjuwIvaMpSHENvKzKRAmX9cYguo2mXLvOoftHQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "K6TWn4VcWWkz/gkUkLmbtwkG7SNeABICmLDnoYJFlLU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Z+2/cEtGU0Fq7QJFNGA/0y4aWAsw0ncG6X0LYRqwS3c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rrSIf+lgcNZFbbUkS9BmE045jRWBpcBJXHzfMVEFuzE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KlHL3Kyje1/LMIfgbCqw1SolxffJvvgsYBV5y77wxuA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hzJ1YBoETmYeCh352dBmG8d8Wse/bUcqojTWpWQlgsc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lSdcllDXx8MA+s0GULjDA1lQkcV0L8/aHtZ6dM2pZ2c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "HGr7JLTTA7ksAnlmjSIwwdBVvgr3fv46/FTdiCPYpos=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "mMr25v1VwOEVZ8xaNUTHJCcsYqV+kwK6RzGYilxPtJ4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "129hJbziPJzNo0IoTU3bECdge0FtaPW8dm4dyNVNwYU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "doiLJ96qoo+v7NqIAZLq6BI5axV8Id8gT5vyJ1ZZ0PM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cW/Lcul3xYmfyvI/0x/+ybN78aQmBK1XIGs1EEU09N8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1aVIwzu9N5EJV9yEES+/g6hOTH7cA2NTcLIc59cu0wU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kw5tyl7Ew0r1wFyrN1mB9FiVW2hK2BxxxUuJDNWjyjQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ADAY2YBrm6RJBDY/eLLcfNxmSJku+mefz74gH66oyco=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8gkqB1LojzPrstpFG7RHYmWxXpIlPDTqWnNsXH7XDRU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "TESfVQMDQjfTZmHmUeYUE2XrokJ6CcrsKx/GmypGjOw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qFM+HFVQ539S0Ouynd1fBHoemFxtU9PRxE5+Dq7Ljy4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jPiFgUZteSmOg4wf3bsEKCZzcnxmMoILsgp/GaZD+dM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YaWUgJhYgPNN7TkFK16H8SsQS226JguaVhOIQxZwQNQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x90/Qk3AgyaFsvWf2KUCu5XF3j76WFSjt/GrnG01060=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ZGWybWL/xlEdMYRFCZDUoz10sywTf7U/7wufsb78lH0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8l4ganN66jIcdxfHAdYLaym/mdzUUQ8TViw3MDRySPc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "c8p5XEGTqxqvRGVlR+nkxw9uUdoqDqTB0jlYQ361qMA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1ZGFLlpQBcU3zIUg8MmgWwFKVz/SaA7eSYFrfe3Hb70=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "34529174M77rHr3Ftn9r8jU4a5ztYtyVhMn1wryZSkU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YkQ4pxFWzc49MS0vZM6S8mNo4wAwo21rePBeF3C+9mI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MhOf4mYY00KKVhptOcXf0bXB7WfuuM801MRJg4vXPgc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7pbbD8ihNIYIBJ3tAUPGzHpFPpIeCTAk5L88qCB0/9w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "C9Q5PoNJTQo6pmNzXEEXUEqH22//UUWY1gqILcIywec=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "AqGVk1QjDNDLYWGRBX/nv9QdGR2SEgXZEhF0EWBAiSE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/sGI3VCbJUKATULJmhTayPOeVW+5MjWSvVCqS77sRbU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yOtbL0ih7gsuoxVtRrACMz+4N5uo7jIR7zzmtih2Beo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uA6dkb2Iyg9Su8UNDvZzkPx33kPZtWr/CCuEY+XgzUM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1DoSFPdHIplqZk+DyWAmEPckWwXw/GdB25NLmzeEZhk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OfDVS0T3ZuIXI/LNbTp6C9UbPIWLKiMy6Wx+9tqNl+g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "3PZjHXbmG6GtPz+iapKtQ3yY4PoFFgjIy+fV2xQv1YU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kaoLN0BoBWsmqE7kKkJQejATmLShd8qffcAmlhsxsGY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vpiw9KgQdegGmp7IJnSGX2miujRLU0xzs0ITTqbPW7c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NuXFf7xGUefYjIUTuMxNUTCfVHrF8oL0AT7dPv5Plk4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8Tz53LxtfEBJ9eR+d2690kwNsqPV6XyKo2PlqZCbUrc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "e6zsOmHSyV8tyQtSX6BSwui6wK9v1xG3giY/IILJQ2w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2fedFMCxa2DzmIpfbDKGXhQg0PPwbUv6vIWdwwlvhms=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yEJKMFnWXTC8tJUfzCInzQRByNEPjHxpw4L4m8No91Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YbFuWwOiFuQyOzIJXDbOkCWC2DyrG+248TBuVCa1pXU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "w7IkwGdrguwDrar5+w0Z3va5wXyZ4VXJkDMISyRjPGo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YmJUoILTRJPhyIyWyXJTsQ6KSZHHbEpwPVup6Ldm/Ko=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FvMjcwVZJmfh6FP/yBg2wgskK+KHD8YVUY6WtrE8xbg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "h4HCtD4HyYz0nci49IVAa10Z4NJD/FHnRMV4sRX6qro=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "nC7BpXCmym+a0Is2kReM9cYN2M1Eh5rVo8fjms14Oiw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1qtVWaeVo649ZZZtN8gXbwLgMWGLhz8beODbvru0I7Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Ej+mC0QFyMNIiSjR939S+iGBm7dm+1xObu5IcF/OpbU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UQ8LbUG3cMegbr9yKfKanAPQE1EfPkFciVDrNqZ5GHY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4iI3mXIDjnX+ralk1HhJY43mZx2uTJM7hsv9MQzTX7E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0WQCcs3rvsasgohERHHCaBM4Iy6yomS4qJ5To3/yYiw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qDCTVPoue1/DOAGNAlUstdA9Sid8MgEY4e5EzHcVHRk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9F9Mus0UnlzHb8E8ImxgXtz6SU98YXD0JqswOKw/Bzs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pctHpHKVBBcsahQ6TNh6/1V1ZrqOtKSAPtATV6BJqh0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vfR3C/4cPkVdxtNaqtF/v635ONbhTf5WbwJM6s4EXNE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ejP43xUBIex6szDcqExAFpx1IE/Ksi5ywJ84GKDFRrs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jbP4AWYd3S2f3ejmMG7dS5IbrFol48UUoT+ve3JLN6U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CiDifI7958sUjNqJUBQULeyF7x0Up3loPWvYKw9uAuw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "e2dQFsiHqd2BFHNhlSxocjd+cPs4wkcUW/CnCz4KNuM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PJFckVmzBipqaEqsuP2mkjhJE4qhw36NhfQ9DcOHyEU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "S3MeuJhET/B8VcfZYDR9fvX0nscDj416jdDekhmK11s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CGVHZRXpuNtQviDB2Kj03Q8uvs4w3RwTgV847R7GwPw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yUGgmgyLrxbEpDVy89XN3c2cmFpZXWWmuJ/35zVZ+Jw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "inb6Q97mL1a9onfNTT8v9wsoi/fz7KXKq3p8j90AU9c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CCyYx/4npq9xGO1lsCo8ZJhFO9/tN7DB+/DTE778rYg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "LNnYw4fwbiAZu0kBdAHPEm/OFnreS+oArdB5O/l/I98=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "P006SxmUS/RjiQJVYPdMFnNo3827GIEmSzagggkg05Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "oyvwY+WsnYV6UHuPki1o0ILJ2jN4uyXf9yaUNtZJyBA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "36Lk3RHWh1wmtCWC/Yj6jNIo17U5y6SofAgQjzjVxD8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vOOo8FqeHnuO9mqOYjIb4vgwIwVyXZ5Y+bY5d9tGFUM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "bJiDJjwQRNxqxlGjRm5lLziFhcfTDCnQ/qU1V85qcRg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2Qgrm1n0wUELAQnpkEiIHB856yv76q8jLbpiucetcm0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "5ciPOYxTK0WDwwYyfs7yiVymwtYQXDELLxmM4JLl4/o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "31dC2WUSIOKQc4jwT6PikfeYTwi80mTlh7P31T5KNQU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YluTV2Mu53EGCKLcWfHZb0BM/IPW2xJdG3vYlDMEsM4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dh/8lGo2Ek6KukSwutH6Q35iy8TgV0FN0SJqe0ZVHN8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EVw6HpIs3BKen2qY2gz4y5dw1JpXilfh07msZfQqJpc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FYolLla9L8EZMROEdWetozroU40Dnmwwx2jIMrr7c1A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8M6k4QIutSIj6CM41vvkQtuFsaGrjoR9SZJVSLbfGKQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9LM0VoddDNHway442MqY+Z7vohB2UHau/cddshhzf40=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "66i8Ytco4Yq/FMl6pIRZazz3CZlu8fO2OI6Pne0pvHU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2a/HgX+MjZxjXtSvHgF1yEpHMJBkl8Caee8XrJtn0WM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "frhBM662c4ZVG7mWP8K/HhRjd01lydW/cPcHnDjifqc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6k1T7Q1t668PBqv6fwpVnT1HWh7Am5LtbKvwPJKcpGU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UlJ5Edfusp8S/Pyhw6KTglIejmbr1HO0zUeHn/qFETA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jsxsB+1ECB3assUdoC333do9tYH+LglHmVSJHy4N8Hg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2nzIQxGYF7j3bGsIesECEOqhObKs/9ywknPHeJ3yges=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xJYKtuWrX90JrJVoYtnwP7Ce59XQGFYoalxpNfBXEH0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NLI5lriBTleGCELcHBtNnmnvwSRkHHaLOX4cKboMgTw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hUOQV0RmE5aJdJww1AR9rirJG4zOYPo+6cCkgn/BGvQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "h4G2Of76AgxcUziBwCyH+ayMOpdBWzg4yFrTfehSC2c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VuamM75RzGfQpj2/Y1jSVuQLrhy6OAwlZxjuQLB/9Ss=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kn9+hLq7hvw02xr9vrplOCDXKBTuFhfbX7d5v/l85Pg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fAiGqKyLZpGngBYFbtYUYt8LUrJ49vYafiboifTDjxs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BxRILymgfVJCczqjUIWXcfrfSgrrYkxTM5VTg0HkZLY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CrFY/PzfPU2zsFkGLu/dI6mEeizZzCR+uYgjZBAHro0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "AEbrIuwvXLTtYgMjOqnGQ8y8axUn5Ukrn7UZRSyfQVw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ouWeVH3PEFg+dKWlXc6BmqirJOaVWjJbMzZbCsce4dA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+hd6xFB+EG+kVP7WH4uMd1CLaWMnt5xJRaY/Guuga9Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zmpGalfAOL3gmcUMJYcLYIRT/2VDO/1Dw4KdYZoNcng=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2PbHAoM/46J2UIZ/vyksKzmVVfxA7YUyIxWeL/N/vBk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7fD9x+zk5MVFesb59Klqiwwmve7P5ON/5COURXj5smE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tlrNQ4jaq051iaWonuv1sSrYhKkL1LtNZuHsvATha3s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fBodm28iClNpvlRyVq0dOdXQ08S7/N3aDwid+PdWvRo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "O+/nnRqT3Zv7yMMGug8GhKHaWy6u7BfRGtZoj0sdN1c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "5AZZ/RTMY4Photnm/cpXZr/HnFRi3eljacMsipkJLHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "oFVyo/kgoMxBIk2VE52ySSimeyU+Gr0EfCwapXnTpKA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Z8v59DfcnviA0mzvnUk+URVO0UuqAWvtarEgJva/n1c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "P64GOntZ+zBJEHkigoh9FSxSO+rJTqR20z5aiGQ9an4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xMbSuDPfWuO/Dm7wuVl06GnzG9uzTlJJX9vFy7boGlY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kXPB19mRClxdH2UsHwlttS6lLU2uHvzuZgZz7kC45jU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NDVjVYXAw4k0w4tFzvs7QDq39aaU3HQor4I2XMKKnCk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uKw/+ErVfpTO1dGUfd3T/eWfZW3nUxXCdBGdjvHtZ88=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "av0uxEzWkizYWm0QUM/MN1hLibnxPvCWJKwjOV4yVQY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ERwUC47dvgOBzIsEESMIioLYbFOxOe8PtJTnmDkKuHM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2gseKlG5Le12fS/vj4eaED4lturF16kAgJ1TpW3HxEE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7Cvg0Y3j/5i2F1TeXxlMmU7xwif5dCmwkZAOrVC5K2Y=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-FindOneAndUpdate.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-FindOneAndUpdate.yml deleted file mode 100644 index e470f42db6..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-FindOneAndUpdate.yml +++ /dev/null @@ -1,1672 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - # Tests for Decimal (without precision) must only run against a replica set. Decimal (without precision) queries are expected to take a long time and may exceed the default mongos timeout. - topology: [ "replicaset" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDecimalNoPrecision', 'bsonType': 'decimal', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range Decimal. FindOneAndUpdate." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDecimalNoPrecision: { $numberDecimal: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDecimalNoPrecision: { $numberDecimal: "1" } } - - name: findOneAndUpdate - arguments: - filter: { encryptedDecimalNoPrecision: { $gt: {$numberDecimal: "0"}} } - update: { "$set": { "encryptedDecimalNoPrecision": {$numberDecimal: "2"}}} - returnDocument: Before - result: *doc1 - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedDecimalNoPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedDecimalNoPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - findAndModify: *collection_name - query: { - "encryptedDecimalNoPrecision": { - "$gt": { - "$binary": { - "base64": "DR1jAAADcGF5bG9hZACxYgAABGcAnWIAAAMwAH0AAAAFZAAgAAAAAJu2KgiI8vM+kz9qD3ZQzFQY5qbgYqCqHG5R4jAlnlwXBXMAIAAAAAAAUXxFXsz764T79sGCdhxvNd5b6E/9p61FonsHyEIhogVsACAAAAAAt19RL3Oo5ni5L8kcvgOJYLgVYyXJExwP8pkuzLG7f/kAAzEAfQAAAAVkACAAAAAAPQPvL0ARjujSv2Rkm8r7spVsgeC1K3FWcskGGZ3OdDIFcwAgAAAAACgNn660GmefR8jLqzgR1u5O+Uocx9GyEHiBqVGko5FZBWwAIAAAAADflr+fsnZngm6KRWYgHa9JzK+bXogWl9evBU9sQUHPHQADMgB9AAAABWQAIAAAAAD2Zi6kcxmaD2mY3VWrP+wYJMPg6cSBIYPapxaFQxYFdQVzACAAAAAAM/cV36BLBY3xFBXsXJY8M9EHHOc/qrmdc2CJmj3M89gFbAAgAAAAAOpydOrKxx6m2gquSDV2Vv3w10GocmNCFeOo/fRhRH9JAAMzAH0AAAAFZAAgAAAAAOaNqI9srQ/mI9gwbk+VkizGBBH/PPWOVusgnfPk3tY1BXMAIAAAAAAc96O/pwKCmHCagT6T/QV/wz4vqO+R22GsZ1dse2Vg6QVsACAAAAAAgzIak+Q3UFLTHXPmJ+MuEklFtR3eLtvM+jdKkmGCV/YAAzQAfQAAAAVkACAAAAAA0XlQgy/Yu97EQOjronl9b3dcR1DFn3deuVhtTLbJZHkFcwAgAAAAACoMnpVl6EFJak8A+t5N4RFnQhkQEBnNAx8wDqmq5U/dBWwAIAAAAACR26FJif673qpwF1J1FEkQGJ1Ywcr/ZW6JQ7meGqzt1QADNQB9AAAABWQAIAAAAAAOtpNexRxfv0yRFvZO9DhlkpU4mDuAb8ykdLnE5Vf1VAVzACAAAAAAeblFKm/30orP16uQpZslvsoS8s0xfNPIBlw3VkHeekYFbAAgAAAAAPEoHj87sYE+nBut52/LPvleWQBzB/uaJFnosxp4NRO2AAM2AH0AAAAFZAAgAAAAAIr8xAFm1zPmrvW4Vy5Ct0W8FxMmyPmFzdWVzesBhAJFBXMAIAAAAABYeeXjJEzTHwxab6pUiCRiZjxgtN59a1y8Szy3hfkg+gVsACAAAAAAJuoY4rF8mbI+nKb+5XbZShJ8191o/e8ZCRHE0O4Ey8MAAzcAfQAAAAVkACAAAAAAl+ibLk0/+EwoqeC8S8cGgAtjtpQWGEZDsybMPnrrkwEFcwAgAAAAAHPPBudWgQ+HUorLDpJMqhS9VBF2VF5aLcxgrM1s+yU7BWwAIAAAAAAcCcBR2Vyv5pAFbaOU97yovuOi1+ATDnLLcAUqHecXcAADOAB9AAAABWQAIAAAAACR9erwLTb+tcWFZgJ2MEfM0PKI9uuwIjDTHADRFgD+SQVzACAAAAAAcOop8TXsGUVQoKhzUllMYWxL93xCOkwtIpV8Q6hiSYYFbAAgAAAAAKXKmh4V8veYwob1H03Q3p3PN8SRAaQwDT34KlNVUjiDAAM5AH0AAAAFZAAgAAAAALv0vCPgh7QpmM8Ug6ad5ioZJCh7pLMdT8FYyQioBQ6KBXMAIAAAAADsCPyIG8t6ApQkRk1fX/sfc1kpuWCWP8gAEpnYoBSHrQVsACAAAAAAJe/r67N6d8uTiogvfoR9rEXbIDjyLb9EVdqkayFFGaYAAzEwAH0AAAAFZAAgAAAAAIW4AxJgYoM0pcNTwk1RSbyjZGIqgKL1hcTJmNrnZmoPBXMAIAAAAAAZpfx3EFO0vY0f1eHnE0PazgqeNDTaj+pPJMUNW8lFrAVsACAAAAAAP+Um2vwW6Bj6vuz9DKz6+6aWkoKoEmFNoiz/xXm7lOsAAzExAH0AAAAFZAAgAAAAAKliO6L9zgeuufjj174hvmQGNRbmYYs9yAirL7OxwEW3BXMAIAAAAAAqU7vs3DWUQ95Eq8OejwWnD0GuXd+ASi/uD6S0l8MM1QVsACAAAAAAb9legYzsfctBPpHyl7YWpPmLr5QiNZFND/50N1vv2MUAAzEyAH0AAAAFZAAgAAAAAOGQcCBkk+j/Kzjt/Cs6g3BZPJG81wIHBS8JewHGpgk+BXMAIAAAAABjrxZXWCkdzrExwCgyHaafuPSQ4V4x2k9kUCAqUaYKDQVsACAAAAAADBU6KefT0v8zSmseaMNmQxKjJar72y7MojLFhkEHqrUAAzEzAH0AAAAFZAAgAAAAAPmCNEt4t97waOSd5hNi2fNCdWEkmcFJ37LI9k4Az4/5BXMAIAAAAABX7DuDPNg+duvELf3NbLWkPMFw2HGLgWGHyVWcPvSNCAVsACAAAAAAS7El1FtZ5STh8Q1FguvieyYX9b2DF1DFVsb9hzxXYRsAAzE0AH0AAAAFZAAgAAAAAD4vtVUYRNB+FD9yoQ2FVJH3nMeJeKbi6eZfth638YqbBXMAIAAAAAANCuUB4OdmuD6LaDK2f3vaqfgYYvg40wDXOBbcFjTqLwVsACAAAAAA9hqC2VoJBjwR7hcQ45xO8ZVojwC83jiRacCaDj6Px2gAAzE1AH0AAAAFZAAgAAAAAJPIRzjmTjbdIvshG6UslbEOd797ZSIdjGAhGWxVQvK1BXMAIAAAAABgmJ0Jh8WLs9IYs/a7DBjDWd8J3thW/AGJK7zDnMeYOAVsACAAAAAAi9zAsyAuou2oiCUHGc6QefLUkACa9IgeBhGu9W/r0X8AAzE2AH0AAAAFZAAgAAAAAABQyKQPoW8wGPIqnsTv69+DzIdRkohRhOhDmyVHkw9WBXMAIAAAAAAqWA2X4tB/h3O1Xlawtz6ndI6WaTwgU1QYflL35opu5gVsACAAAAAAWI/Gj5aZMwDIxztqmVL0g5LBcI8EdKEc2UA28pnekQoAAzE3AH0AAAAFZAAgAAAAACB7NOyGQ1Id3MYnxtBXqyZ5Ul/lHH6p1b10U63DfT6bBXMAIAAAAADpOryIcndxztkHSfLN3Kzq29sD8djS0PspDSqERMqokQVsACAAAAAADatsMW4ezgnyi1PiP7xk+gA4AFIN/fb5uJqfVkjg4UoAAzE4AH0AAAAFZAAgAAAAAKVfXLfs8XA14CRTB56oZwV+bFJN5BHraTXbqEXZDmTkBXMAIAAAAAASRWTsfGOpqdffiOodoqIgBzG/yzFyjR5CfUsIUIWGpgVsACAAAAAAkgCHbCwyX640/0Ni8+MoYxeHUiC+FSU4Mn9jTLYtgZgAAzE5AH0AAAAFZAAgAAAAAH/aZr4EuS0/noQR9rcF8vwoaxnxrwgOsSJ0ys8PkHhGBXMAIAAAAACd7ObGQW7qfddcvyxRTkPuvq/PHu7+6I5dxwS1Lzy5XAVsACAAAAAA3q0eKdV7KeU3pc+CtfypKR7BPxwaf30yu0j9FXeOOboAAzIwAH0AAAAFZAAgAAAAAKvlcpFFNq0oA+urq3w6d80PK1HHHw0H0yVWvU9aHijXBXMAIAAAAADWnAHQ5Fhlcjawki7kWzdqjM2f6IdGJblojrYElWjsZgVsACAAAAAAO0wvY66l24gx8nRxyVGC0QcTztIi81Kx3ndRhuZr6W4AAzIxAH0AAAAFZAAgAAAAAH/2aMezEOddrq+dNOkDrdqf13h2ttOnexZsJxG1G6PNBXMAIAAAAABNtgnibjC4VKy5poYjvdsBBnVvDTF/4mmEAxsXVgZVKgVsACAAAAAAqvadzJFLqQbs8WxgZ2D2X+XnaPSDMLCVVgWxx5jnLcYAAzIyAH0AAAAFZAAgAAAAAF2wZoDL6/V59QqO8vdRZWDpXpkV4h4KOCSn5e7x7nmzBXMAIAAAAADLZBu7LCYjbThaVUqMK14H/elrVOYIKJQCx4C9Yjw37gVsACAAAAAAEh6Vs81jLU204aGpL90fmYTm5i5R8/RT1uIbg6VU3HwAAzIzAH0AAAAFZAAgAAAAAH27yYaLn9zh2CpvaoomUPercSfJRUmBY6XFqmhcXi9QBXMAIAAAAAAUwumVlIYIs9JhDhSj0R0+59psCMsFk94E62VxkPt42QVsACAAAAAAT5x2hCCd2bpmpnyWaxas8nSxTc8e4C9DfKaqr0ABEysAAzI0AH0AAAAFZAAgAAAAALMg2kNAO4AFFs/mW3In04yFeN4AP6Vo0klyUoT06RquBXMAIAAAAAAgGWJbeIdwlpqXCyVIYSs0dt54Rfc8JF4b8uYc+YUj0AVsACAAAAAAWHeWxIkyvXTOWvfZzqtPXjfGaWWKjGSIQENTU3zBCrsAAzI1AH0AAAAFZAAgAAAAALas/i1T2DFCEmrrLEi7O2ngJZyFHialOoedVXS+OjenBXMAIAAAAAA1kK0QxY4REcGxHeMkgumyF7iwlsRFtw9MlbSSoQY7uAVsACAAAAAAUNlpMJZs1p4HfsD4Q4WZ4TBEi6Oc2fX34rzyynqWCdwAAzI2AH0AAAAFZAAgAAAAAP1TejmWg1CEuNSMt6NUgeQ5lT+oBoeyF7d2l5xQrbXWBXMAIAAAAABPX0kj6obggdJShmqtVfueKHplH4ZrXusiwrRDHMOKeQVsACAAAAAAIYOsNwC3DA7fLcOzqdr0bOFdHCfmK8tLwPoaE9uKOosAAzI3AH0AAAAFZAAgAAAAAMrKn+QPa/NxYezNhlOX9nyEkN1kE/gW7EuZkVqYl0b8BXMAIAAAAABUoZMSPUywRGfX2EEencJEKH5x/P9ySUVrhStAwgR/LgVsACAAAAAAMgZFH6lQIIDrgHnFeslv3ld20ynwQjQJt3cAp4GgrFkAAzI4AH0AAAAFZAAgAAAAAMmD1+a+oVbiUZd1HuZqdgtdVsVKwuWAn3/M1B6QGBM3BXMAIAAAAACLyytOYuZ9WEsIrrtJbXUx4QgipbaAbmlJvSZVkGi0CAVsACAAAAAA4v1lSp5H9BB+HYJ4bH43tC8aeuPZMf78Ng1JOhJh190AAzI5AH0AAAAFZAAgAAAAAOVKV7IuFwmYP1qVv8h0NvJmfPICu8yQhzjG7oJdTLDoBXMAIAAAAABL70XLfQLKRsw1deJ2MUvxSWKxpF/Ez73jqtbLvqbuogVsACAAAAAAvfgzIorXxE91dDt4nQxYfntTsx0M8Gzdsao5naQqcRUAAzMwAH0AAAAFZAAgAAAAAKS/1RSAQma+xV9rz04IcdzmavtrBDjOKPM+Z2NEyYfPBXMAIAAAAAAOJDWGORDgfRv8+w5nunh41wXb2hCA0MRzwnLnQtIqPgVsACAAAAAAf42C1+T7xdHEFF83+c2mF5S8PuuL22ogXXELnRAZ4boAAzMxAH0AAAAFZAAgAAAAAFeq8o82uNY1X8cH6OhdTzHNBUnCChsEDs5tm0kPBz3qBXMAIAAAAABaxMBbsaeEj/EDtr8nZfrhhhirBRPJwVamDo5WwbgvTQVsACAAAAAAMbH453A+BYAaDOTo5kdhV1VdND1avNwvshEG/4MIJjQAAzMyAH0AAAAFZAAgAAAAAI8IKIfDrohHh2cjspJHCovqroSr5N3QyVtNzFvT5+FzBXMAIAAAAABXHXteKG0DoOMmECKp6ro1MZNQvXGzqTDdZ0DUc8QfFAVsACAAAAAA/w5s++XYmO+9TWTbtGc3n3ndV4T9JUribIbF4jmDLSMAAzMzAH0AAAAFZAAgAAAAAJkHvm15kIu1OtAiaByj5ieWqzxiu/epK6c/9+KYIrB0BXMAIAAAAACzg5TcyANk0nes/wCJudd1BwlkWWF6zw3nGclq5v3SJQVsACAAAAAAvruXHTT3irPJLyWpI1j/Xwf2FeIE/IV+6Z49pqRzISoAAzM0AH0AAAAFZAAgAAAAAAYSOvEWWuSg1Aym7EssNLR+xsY7e9BcwsX4JKlnSHJcBXMAIAAAAABT48eY3PXVDOjw7JpNjOe1j2JyI3LjDnQoqZ8Je5B2KgVsACAAAAAAU2815RR57TQ9uDg0XjWjBkAKvf8yssxDMzrM4+FqP6AAAzM1AH0AAAAFZAAgAAAAAGQxC9L1e9DfO5XZvX1yvc3hTLtQEdKO9FPMkyg0Y9ZABXMAIAAAAADtmcMNJwdWLxQEArMGZQyzpnu+Z5yMmPAkvgq4eAKwNQVsACAAAAAAJ88zt4Y/Hoqh+zrf6KCOiUwHbOzCxSfp6k/qsZaYGEgAAzM2AH0AAAAFZAAgAAAAADLHK2LNCNRO0pv8n4fAsxwtUqCNnVK8rRgNiQfXpHSdBXMAIAAAAACf16EBIHRKD3SzjRW+LMOl+47QXA3CJhMzlcqyFRW22AVsACAAAAAAMGz4fAOa0EoVv90fUffwLjBrQhHATf+NdlgCR65vujAAAzM3AH0AAAAFZAAgAAAAAHiZJiXKNF8bbukQGsdYkEi95I+FSBHy1I5/hK2uEZruBXMAIAAAAADE+lZBa8HDUJPN+bF6xI9x4N7GF9pj3vBR7y0BcfFhBAVsACAAAAAAGIEN6sfqq30nyxW4dxDgXr/jz5HmvA9T1jx/pKCn4zgAAzM4AH0AAAAFZAAgAAAAAI1oa2OIw5TvhT14tYCGmhanUoYcCZtNbrVbeoMldHNZBXMAIAAAAAAx2nS0Ipblf2XOgBiUOuJFBupBhe7nb6QPLZlA4aMPCgVsACAAAAAA9xu828hugIgo0E3de9dZD+gTpVUGlwtDba+tw/WcbUoAAzM5AH0AAAAFZAAgAAAAABgTWS3Yap7Q59hii/uPPimHWXsr+DUmsqfwt/X73qsOBXMAIAAAAACKK05liW5KrmEAvtpCB1WUltruzUylDDpjea//UlWoOAVsACAAAAAAcgN4P/wakJ5aJK5c1bvJBqpVGND221dli2YicPFfuAYAAzQwAH0AAAAFZAAgAAAAABOAnBPXDp6i9TISQXvcNKwGDLepZTu3cKrB4vKnSCjBBXMAIAAAAADjjzZO7UowAAvpwyG8BNOVqLCccMFk3aDK4unUeft5ywVsACAAAAAA4zkCd4k9gvfXoD1C7vwTjNcdVJwEARh8h/cxZ4PNMfgAAzQxAH0AAAAFZAAgAAAAAHN8hyvT1lYrAsdiV5GBdd5jhtrAYE/KnSjw2Ka9hjz9BXMAIAAAAAD794JK7EeXBs+D7yOVK7nWF8SbZ/7U8gZ7nnT9JFNwTAVsACAAAAAAg8Wt1HO3NhByq2ggux2a4Lo6Gryr24rEFIqh2acrwWMAAzQyAH0AAAAFZAAgAAAAAO93bPrq8bsnp1AtNd9ETnXIz0lH/2HYN/vuw9wA3fyFBXMAIAAAAABHlls5fbaF2oAGqptC481XQ4eYxInTC29aElfmVZgDUgVsACAAAAAANoQXEWpXJpgrSNK/cKi/m7oYhuSRlp1IZBF0bqTEATcAAzQzAH0AAAAFZAAgAAAAAL1YsAZm1SA0ztU6ySIrQgCCA74V6rr0/4iIygCcaJL6BXMAIAAAAADTXWTHWovGmUR1Zg9l/Aqq9H5mOCJQQrb/Dfae7e3wKAVsACAAAAAA5dunyJK6/SVfDD0t9QlNBcFqoZnf9legRjHaLSKAoQMAAzQ0AH0AAAAFZAAgAAAAAEoFAeHk0RZ9kD+cJRD3j7PcE5gzWKnyBrF1I/MDNp5mBXMAIAAAAACgHtc2hMBRSZjKw8RAdDHK+Pi1HeyjiBuAslGVNcW5tAVsACAAAAAAXzBLfq+GxRtX4Wa9fazA49DBLG6AjZm2XODStJKH8D0AAzQ1AH0AAAAFZAAgAAAAAAW+7DmSN/LX+/0uBVJDHIc2dhxAGz4+ehyyz8fAnNGoBXMAIAAAAAA6Ilw42EvvfLJ3Eq8Afd+FjPoPcQutZO6ltmCLEr8kxQVsACAAAAAAbbZalyo07BbFjPFlYmbmv0z023eT9eLkHqeVUnfUAUAAAzQ2AH0AAAAFZAAgAAAAANBdV7M7kuYO3EMoQItAbXv4t2cIhfaT9V6+s4cg9djlBXMAIAAAAABvz4MIvZWxxrcJCL5qxLfFhXiUYB1OLHdKEjco94SgDgVsACAAAAAAK2GVGvyPIKolF/ECcmfmkVcf1/IZNcaTv96N92yGrkEAAzQ3AH0AAAAFZAAgAAAAAMoAoiAn1kc79j5oPZtlMWHMhhgwNhLUnvqkqIFvcH1NBXMAIAAAAADcJTW7WiCyW0Z9YDUYwppXhLj4Ac1povpJvcAq+i48MQVsACAAAAAAIGxGDzoeB3PTmudl4+j6piQB++e33EEzuzAiXcqGxvUAAzQ4AH0AAAAFZAAgAAAAACI3j5QP7dWHpcT6WO/OhsWwRJNASBYqIBDNzW8IorEyBXMAIAAAAABxUpBSjXwCKDdGP9hYU+RvyR+96kChfvyyRC4jZmztqAVsACAAAAAAvBCHguWswb4X0xdcAryCvZgQuthXzt7597bJ5VxAMdgAAzQ5AH0AAAAFZAAgAAAAAKsbycEuQSeNrF8Qnxqw3x3og8JmQabwGqnDbqzFRVrrBXMAIAAAAACno/3ef2JZJS93SVVzmOZSN+jjJHT8s0XYq2M46d2sLAVsACAAAAAAAt5zLJG+/j4K8rnkFtAn8IvdUVNefe6utJ3rdzgwudIAAzUwAH0AAAAFZAAgAAAAAPXIcoO8TiULqlxzb74NFg+I8kWX5uXIDUPnh2DobIoMBXMAIAAAAADR6/drkdTpnr9g1XNvKDwtBRBdKn7c2c4ZNUVK5CThdQVsACAAAAAAJqOA1c6KVog3F4Hb/GfDb3jCxXDRTqpXWSbMH4ePIJsAAzUxAH0AAAAFZAAgAAAAAEa03ZOJmfHT6/nVadvIw71jVxEuIloyvxXraYEW7u7pBXMAIAAAAADzRlBJK75FLiKjz3djqcgjCLo/e3yntI3MnPS48OORhgVsACAAAAAAnQhx4Rnyj081XrLRLD5NLpWmRWCsd0M9Hl7Jl19R0h8AAzUyAH0AAAAFZAAgAAAAAKx8NLSZUU04pSSGmHa5fh2oLHsEN5mmNMNHL95/tuC9BXMAIAAAAAA59hcXVaN3MNdHoo11OcH1aPRzHCwpVjO9mGfMz4xh3QVsACAAAAAAYIPdjV2XbPj7dBeHPwnwhVU7zMuJ+xtMUW5mIOYtmdAAAzUzAH0AAAAFZAAgAAAAAHNKAUxUqBFNS9Ea9NgCZoXMWgwhP4x0/OvoaPRWMquXBXMAIAAAAABUZ551mnP4ZjX+PXU9ttomzuOpo427MVynpkyq+nsYCQVsACAAAAAALnVK5p2tTTeZEh1zYt4iqKIQT9Z0si//Hy1L85oF+5IAAzU0AH0AAAAFZAAgAAAAALfGXDlyDVcGaqtyHkLT0qpuRhJQLgCxtznazhFtuyn/BXMAIAAAAABipxlXDq14C62pXhwAeen5+syA+/C6bN4rtZYcO4zKwAVsACAAAAAAXUf0pzUq0NhLYagWDap4uEiwq5rLpcx29rWbt1NYMsMAAzU1AH0AAAAFZAAgAAAAANoEr8sheJjg4UCfBkuUzarU9NFoy1xwbXjs5ifVDeA9BXMAIAAAAABPoyTf6M+xeZVGES4aNzVlq7LgjqZXJ/QunjYVusGUEAVsACAAAAAA1hA2gMeZZPUNytk9K+lB1RCqWRudRr7GtadJlExJf8oAAzU2AH0AAAAFZAAgAAAAAKvDiK+xjlBe1uQ3SZTNQl2lClIIvpP/5CHwY6Kb3WlgBXMAIAAAAAANnxImq5MFbWaRBHdJp+yD09bVlcFtiFDYsy1eDZj+iQVsACAAAAAAWtsyO+FxMPSIezwsV1TJD8ZrXAdRnQM6DJ+f+1V3qEkAAzU3AH0AAAAFZAAgAAAAAF49IlFH9RmSUSvUQpEPUedEksrQUcjsOv44nMkwXhjzBXMAIAAAAADJtWGbk0bZzmk20obz+mNsp86UCu/nLLlbg7ppxYn7PgVsACAAAAAA3k0Tj/XgPQtcYijH8cIlQoe/VXf15q1nrZNmg7yWYEgAAzU4AH0AAAAFZAAgAAAAAOuSJyuvz50lp3BzXlFKnq62QkN2quNU1Gq1IDsnFoJCBXMAIAAAAAAqavH1d93XV3IzshWlMnzznucadBF0ND092/2ApI1AcAVsACAAAAAAzUrK4kpoKCmcpdZlZNI13fddjdoAseVe67jaX1LobIIAAzU5AH0AAAAFZAAgAAAAALtgC4Whb4ZdkCiI30zY6fwlsxSa7lEaOAU3SfUXr02XBXMAIAAAAACgdZ6U1ZVgUaZZwbIaCdlANpCw6TZV0bwg3DS1NC/mnAVsACAAAAAAzI49hdpp0PbO7S2KexISxC16sE73EUAEyuqUFAC/J48AAzYwAH0AAAAFZAAgAAAAAF6PfplcGp6vek1ThwenMHVkbZgrc/dHgdsgx1VdPqZ5BXMAIAAAAACha3qhWkqmuwJSEXPozDO8y1ZdRLyzt9Crt2vjGnT7AAVsACAAAAAA7nvcU59+LwxGupSF21jAeAE0x7JE94tjRkJfgM1yKU8AAzYxAH0AAAAFZAAgAAAAAKoLEhLvLjKc7lhOJfx+VrGJCx9tXlOSa9bxQzGR6rfbBXMAIAAAAAAIDK5wNnjRMBzET7x/KAMExL/zi1IumJM92XTgXfoPoAVsACAAAAAAFkUYWFwNr815dEdFqp+TiIozDcq5IBNVkyMoDjharDQAAzYyAH0AAAAFZAAgAAAAADoQv6lutRmh5scQFvIW6K5JBquLxszuygM1tzBiGknIBXMAIAAAAADAD+JjW7FoBQ76/rsECmmcL76bmyfXpUU/awqIsZdO+wVsACAAAAAAPFHdLw3jssmEXsgtvl/RBNaUCRA1kgSwsofG364VOvQAAzYzAH0AAAAFZAAgAAAAAJNHUGAgn56KekghO19d11nai3lAh0JAlWfeP+6w4lJBBXMAIAAAAAD9XGJlvz59msJvA6St9fKW9CG4JoHV61rlWWnkdBRLzwVsACAAAAAAxwP/X/InJJHmrjznvahIMgj6pQR30B62UtHCthSjrP0AAzY0AH0AAAAFZAAgAAAAAHgYoMGjEE6fAlAhICv0+doHcVX8CmMVxyq7+jlyGrvmBXMAIAAAAAC/5MQZgTHuIr/O5Z3mXPvqrom5JTQ8IeSpQGhO9sB+8gVsACAAAAAAuPSXVmJUAUpTQg/A9Bu1hYczZF58KEhVofakygbsvJQAAzY1AH0AAAAFZAAgAAAAANpIljbxHOM7pydY877gpRQvYY2TGK7igqgGsavqGPBABXMAIAAAAAAqHyEu9gpurPOulApPnr0x9wrygY/7mXe9rAC+tPK80wVsACAAAAAA7gkPzNsS3gCxdFBWbSW9tkBjoR5ib+saDvpGSB3A3ogAAzY2AH0AAAAFZAAgAAAAAGR+gEaZTeGNgG9BuM1bX2R9ed4FCxBA9F9QvdQDAjZwBXMAIAAAAABSkrYFQ6pf8MZ1flgmeIRkxaSh/Eep4Btdx4QYnGGnwAVsACAAAAAApRovMiV00hm/pEcT4XBsyPNw0eo8RLAX/fuabjdU+uwAAzY3AH0AAAAFZAAgAAAAAFNprhQ3ZwIcYbuzLolAT5n/vc14P9kUUQComDu6eFyKBXMAIAAAAAAcx9z9pk32YbPV/sfPZl9ALIEVsqoLXgqWLVK/tP+heAVsACAAAAAA/qxvuvJbAHwwhfrPVpmCFzNvg2cU/NXaWgqgYUZpgXwAAzY4AH0AAAAFZAAgAAAAADgyPqQdqQrgfmJjRFAILTHzXbdw5kpKyfeoEcy6YYG/BXMAIAAAAAAE+3XsBQ8VAxAkN81au+f3FDeCD/s7KoZD+fnM1MJSSAVsACAAAAAAhRnjrXecwV0yeCWKJ5J/x12Xx4qVJahsCEVHB/1U2rcAAzY5AH0AAAAFZAAgAAAAAI0CT7JNngTCTUSei1Arw7eHWCD0jumv2rb7imjWIlWABXMAIAAAAABSP8t6ya0SyCphXMwnru6ZUDXWElN0NfBvEOhDvW9bJQVsACAAAAAAGWeGmBNDRaMtvm7Rv+8TJ2sJ4WNXKcp3tqpv5Se9Ut4AAzcwAH0AAAAFZAAgAAAAAD/FIrGYFDjyYmVb7oTMVwweWP7A6F9LnyIuNO4MjBnXBXMAIAAAAACIZgJCQRZu7NhuNMyOqCn1tf+DfU1qm10TPCfj5JYV3wVsACAAAAAA5hmY4ptuNxULGf87SUFXQWGAONsL9U29duh8xqsHtxoAAzcxAH0AAAAFZAAgAAAAAHIkVuNDkSS1cHIThKc/O0r2/ubaABTOi8Q1r/dvBAsEBXMAIAAAAADdHYqchEiJLM340c3Q4vJABmmth3+MKzwLYlsG6GS7sQVsACAAAAAADa+KP/pdTiG22l+ZWd30P1iHjnBF4zSNRdFm0oEK82kAAzcyAH0AAAAFZAAgAAAAAJmoDILNhC6kn3masElfnjIjP1VjsjRavGk1gSUIjh1NBXMAIAAAAAD97Ilvp3XF8T6MmVVcxMPcdL80RgQ09UoC6PnoOvZ1IQVsACAAAAAA2RK3Xng6v8kpvfVW9tkVXjpE+BSnx9/+Fw85Evs+kUEAAzczAH0AAAAFZAAgAAAAAI5bm3YO0Xgf0VT+qjVTTfvckecM3Cwqj7DTKZXf8/NXBXMAIAAAAAD/m+h8fBhWaHm6Ykuz0WX1xL4Eme3ErLObyEVJf8NCywVsACAAAAAAfb1VZZCqs2ivYbRzX4p5CtaCkKW+g20Pr57FWXzEZi8AAzc0AH0AAAAFZAAgAAAAANqo4+p6qdtCzcB4BX1wQ6llU7eFBnuu4MtZwp4B6mDlBXMAIAAAAAAGiz+VaukMZ+6IH4jtn4KWWdKK4/W+O+gRioQDrfzpMgVsACAAAAAAG4YYkTp80EKo59mlHExDodRQFR7njhR5dmISwUJ6ukAAAzc1AH0AAAAFZAAgAAAAAPrFXmHP2Y4YAm7b/aqsdn/DPoDkv7B8egWkfe23XsM1BXMAIAAAAAAGhwpKAr7skeqHm3oseSbO7qKNhmYsuUrECBxJ5k+D2AVsACAAAAAAAqPQi9luYAu3GrFCEsVjd9z2zIDcp6SPTR2w6KQEr+IAAzc2AH0AAAAFZAAgAAAAABzjYxwAjXxXc0Uxv18rH8I3my0Aguow0kTwKyxbrm+cBXMAIAAAAADVbqJVr6IdokuhXkEtXF0C2gINLiAjMVN20lE20Vmp2QVsACAAAAAAD7K1Fx4gFaaizkIUrf+EGXQeG7QX1jadhGc6Ji471H8AAzc3AH0AAAAFZAAgAAAAAFMm2feF2fFCm/UC6AfIyepX/xJDSmnnolQIBnHcPmb5BXMAIAAAAABLI11kFrQoaNVZFmq/38aRNImPOjdJh0Lo6irI8M/AaAVsACAAAAAAOWul0oVqJ9CejD2RqphhTC98DJeRQy5EwbNerU2+4l8AAzc4AH0AAAAFZAAgAAAAAJvXB3KyNiNtQko4SSzo/9b2qmM2zU9CQTTDfLSBWMgRBXMAIAAAAAAvjuVP7KsLRDeqVqRziTKpBrjVyqKiIbO9Gw8Wl2wFTAVsACAAAAAADlE+oc1ins+paNcaOZJhBlKlObDJ4VQORWjFYocM4LgAAzc5AH0AAAAFZAAgAAAAAPGdcxDiid8z8XYnfdDivNMYVPgBKdGOUw6UStU+48CdBXMAIAAAAAARj6g1Ap0eEfuCZ4X2TsEw+Djrhto3fA5nLwPaY0vCTgVsACAAAAAAoHqiwGOUkBu8SX5U1yHho+UIFdSN2MdQN5s6bQ0EsJYAAzgwAH0AAAAFZAAgAAAAAP5rGPrYGt3aKob5f/ldP0qrW7bmWvqnKY4QwdDWz400BXMAIAAAAADTQkW2ymaaf/bhteOOGmSrIR97bAnJx+yN3yMj1bTeewVsACAAAAAADyQnHGH2gF4w4L8axUsSTf6Ubk7L5/eoFOJk12MtZAoAAzgxAH0AAAAFZAAgAAAAAAlz6wJze5UkIxKpJOZFGCOf3v2KByWyI6NB6JM9wNcBBXMAIAAAAABUC7P/neUIHHoZtq0jFVBHY75tSFYr1Y5S16YN5XxC1QVsACAAAAAAgvxRbXDisNnLY3pfsjDdnFLtkvYUC4lhA68eBXc7KAwAAzgyAH0AAAAFZAAgAAAAAFJ8AtHcjia/9Y5pLEc3qVgH5xKiXw12G9Kn2A1EY8McBXMAIAAAAAAxe7Bdw7eUSBk/oAawa7uicTEDgXLymRNhBy1LAxhDvwVsACAAAAAAxKPaIBKVx3jTA+R/el7P7AZ7efrmTGjJs3Hj/YdMddwAAzgzAH0AAAAFZAAgAAAAAO8uwQUaKFb6vqR3Sv3Wn4QAonC2exOC9lGG1juqP5DtBXMAIAAAAABZf1KyJgQg8/Rf5c02DgDK2aQu0rNCOvaL60ohDHyY+gVsACAAAAAAqyEjfKC8lYoIfoXYHUqHZPoaA6EK5BAZy5dxXZmay4kAAzg0AH0AAAAFZAAgAAAAAE8YtqyRsGCeiR6hhiyisR/hccmK4nZqIMzO4lUBmEFzBXMAIAAAAAC1UYOSKqAeG1UJiKjWFVskRhuFKpj9Ezy+lICZvFlN5AVsACAAAAAA6Ct9nNMKyRazn1OKnRKagm746CGu+jyhbL1qJnZxGi0AAzg1AH0AAAAFZAAgAAAAAPhCrMausDx1QUIEqp9rUdRKyM6a9AAx7jQ3ILIu8wNIBXMAIAAAAACmH8lotGCiF2q9VQxhsS+7LAZv79VUAsOUALaGxE/EpAVsACAAAAAAnc1xCKfdvbUEc8F7XZqlNn1C+hZTtC0I9I3LL06iaNkAAzg2AH0AAAAFZAAgAAAAAOBi/GAYFcstMSJPgp3VkMiuuUUCrZytvqYaU8dwm8v2BXMAIAAAAACEZSZVyD3pKzGlbdwlYmWQhHHTV5SnNLknl2Gw8IaUTQVsACAAAAAAfsLZsEDcWSuNsIo/TD1ReyQW75HPMgmuKZuWFOLKRLoAAzg3AH0AAAAFZAAgAAAAAIQuup+YGfH3mflzWopN8J1X8o8a0d9CSGIvrA5HOzraBXMAIAAAAADYvNLURXsC2ITMqK14LABQBI+hZZ5wNf24JMcKLW+84AVsACAAAAAACzfjbTBH7IwDU91OqLAz94RFkoqBOkzKAqQb55gT4/MAAzg4AH0AAAAFZAAgAAAAAKsh0ADyOnVocFrOrf6MpTrNvAj8iaiE923DPryu124gBXMAIAAAAADg24a8NVE1GyScc6tmnTbmu5ulzO+896fE92lN08MeswVsACAAAAAAaPxcOIxnU7But88/yadOuDJDMcCywwrRitaxMODT4msAAzg5AH0AAAAFZAAgAAAAAKkVC2Y6HtRmv72tDnPUSjJBvse7SxLqnr09/Uuj9sVVBXMAIAAAAABYNFUkH7ylPMN+Bc3HWX1e0flGYNbtJNCY9SltJCW/UAVsACAAAAAAZYK/f9H4OeihmpiFMH7Wm7uLvs2s92zNA8wyrNZTsuMAAzkwAH0AAAAFZAAgAAAAADDggcwcb/Yn1Kk39sOHsv7BO/MfP3m/AJzjGH506Wf9BXMAIAAAAAAYZIsdjICS0+BDyRUPnrSAZfPrwtuMaEDEn0/ijLNQmAVsACAAAAAAGPnYVvo2ulO9z4LGd/69NAklfIcZqZvFX2KK0s+FcTUAAzkxAH0AAAAFZAAgAAAAAEWY7dEUOJBgjOoWVht1wLehsWAzB3rSOBtLgTuM2HC8BXMAIAAAAAAAoswiHRROurjwUW8u8D5EUT+67yvrgpB/j6PzBDAfVwVsACAAAAAA6NhRTYFL/Sz4tao7vpPjLNgAJ0FX6P/IyMW65qT6YsMAAzkyAH0AAAAFZAAgAAAAAPZaapeAUUFPA7JTCMOWHJa9lnPFh0/gXfAPjA1ezm4ZBXMAIAAAAACmJvLY2nivw7/b3DOKH/X7bBXjJwoowqb1GtEFO3OYgAVsACAAAAAA/JcUoyKacCB1NfmH8vYqC1f7rd13KShrQqV2r9QBP44AAzkzAH0AAAAFZAAgAAAAAK00u6jadxCZAiA+fTsPVDsnW5p5LCr4+kZZZOTDuZlfBXMAIAAAAAAote4zTEYMDgaaQbAdN8Dzv93ljPLdGjJzvnRn3KXgtQVsACAAAAAAxXd9Mh6R3mnJy8m7UfqMKi6oD5DlZpkaOz6bEjMOdiwAAzk0AH0AAAAFZAAgAAAAAFbgabdyymiEVYYwtJSWa7lfl/oYuj/SukzJeDOR6wPVBXMAIAAAAADAFGFjS1vPbN6mQEhkDYTD6V2V23Ys9gUEUMGNvMPkaAVsACAAAAAAL/D5Sze/ZoEanZLK0IeEkhgVkxEjMWVCfmJaD3a8uNIAAzk1AH0AAAAFZAAgAAAAABNMR6UBv2E627CqLtQ/eDYx7OEwQ7JrR4mSHFa1N8tLBXMAIAAAAAAxH4gucI4UmNVB7625C6hFSVCuIpJO3lusJlPuL8H5EQVsACAAAAAAVLHNg0OUVqZ7WGOP53BkTap9FOw9dr1P4J8HxqFqU04AAzk2AH0AAAAFZAAgAAAAAG8cd6WBneNunlqrQ2EmNf35W7OGObGq9WL4ePX+LUDmBXMAIAAAAAAjJ2+sX87NSis9hBsgb1QprVRnO7Bf+GObCGoUqyPE4wVsACAAAAAAs9c9SM49/pWmyUQKslpt3RTMBNSRppfNO0JBvUqHPg0AAzk3AH0AAAAFZAAgAAAAAFWOUGkUpy8yf6gB3dio/aOfRKh7XuhvsUj48iESFJrGBXMAIAAAAAAY7sCDMcrUXvNuL6dO0m11WyijzXZvPIcOKob6IpC4PQVsACAAAAAAJOP+EHz6awDb1qK2bZQ3kTV7wsj5Daj/IGAWh4g7omAAAzk4AH0AAAAFZAAgAAAAAGUrIdKxOihwNmo6B+aG+Ag1qa0+iqdksHOjQj+Oy9bZBXMAIAAAAABwa5dbI2KmzBDNBTQBEkjZv4sPaeRkRNejcjdVymRFKQVsACAAAAAA4ml/nm0gJNTcJ4vuD+T2Qfq2fQZlibJp/j6MOGDrbHMAAzk5AH0AAAAFZAAgAAAAAOx89xV/hRk64/CkM9N2EMK6aldII0c8smdcsZ46NbP8BXMAIAAAAADBF6tfQ+7q9kTuLyuyrSnDgmrdmrXkdhl980i1KHuGHgVsACAAAAAACUqiFqHZdGbwAA+hN0YUE5zFg+H+dabIB4dj5/75W/YAAzEwMAB9AAAABWQAIAAAAADJDdC9aEFl4Y8J/awHbnXGHjfP+VXQilPHJg7ewaJI7AVzACAAAAAAE+tqRl6EcBMXvbr4GDiNIYObTsYpa1n6BJk9EjIJVicFbAAgAAAAAJVc+HYYqa0m1Hq6OiRX8c0iRnJYOt6AJAJoG0sG3GMSAAMxMDEAfQAAAAVkACAAAAAA3F9rjEKhpoHuTULVGgfUsGGwJs3bISrXkFP1v6KoQLgFcwAgAAAAAIBf0tXw96Z/Ds0XSIHX/zk3MzUR/7WZR/J6FpxRWChtBWwAIAAAAABWrjGlvKYuTS2s8L9rYy8Hf0juFGJfwQmxVIjkTmFIGQADMTAyAH0AAAAFZAAgAAAAAOYIYoWkX7dGuyKfi3XssUlc7u/gWzqrR9KMkikKVdmSBXMAIAAAAABVF2OYjRTGi9Tw8XCAwZWLpX35Yl271TlNWp6N/nROhAVsACAAAAAA0nWwYzXQ1+EkDvnGq+SMlq20z+j32Su+i/A95SggPb4AAzEwMwB9AAAABWQAIAAAAACMtPm12YtdEAvqu6Eji1yuRXnu1RJP6h0l7pH3lSH4MwVzACAAAAAAENyCFfyUAh1veQBGx+cxiB7Sasrj41jzCGflZkB5cRMFbAAgAAAAAKdI2LMqISr/T5vuJPg6ZRBm5fVi2aQCc4ra3A4+AjbDAAMxMDQAfQAAAAVkACAAAAAAvlI4lDcs6GB1cnm/Tzo014CXWqidCdyE5t2lknWQd4QFcwAgAAAAAD60SpNc4O2KT7J0llKdSpcX1/Xxs97N715a1HsTFkmBBWwAIAAAAABuuRkJWAH1CynggBt1/5sPh9PoGiqTlS24D/OE2uHXLQADMTA1AH0AAAAFZAAgAAAAAKl8zcHJRDjSjJeV/WvMxulW1zrTFtaeBy/aKKhadc6UBXMAIAAAAADBdWQl5SBIvtZZLIHszePwkO14W1mQ0izUk2Ov21cPNAVsACAAAAAAHErCYycpqiIcCZHdmPL1hi+ovLQk4TAvENpfLdTRamQAAzEwNgB9AAAABWQAIAAAAABb6LXDWqCp1beQgQjj8I3sRTtFhlrmiBi+h/+ikmrvugVzACAAAAAA9stpgTecT7uTyaGNs3K9Bp0A7R0QaIAOfscyMXHBPX8FbAAgAAAAAHUt+McyXrJ1H8SwnHNVO181Ki8vDAM1f7XI26mg95ZDAAMxMDcAfQAAAAVkACAAAAAA97NTT+81PhDhgptNtp4epzA0tP4iNb9j1AWkiiiKGM8FcwAgAAAAAKPbHg7ise16vxmdPCzksA/2Mn/qST0L9Xe8vnQugVkcBWwAIAAAAABB0EMXfvju4JU/mUH/OvxWbPEl9NJkcEp4iCbkXI41fAADMTA4AH0AAAAFZAAgAAAAAMqpayM2XotEFmm0gwQd9rIzApy0X+7HfOhNk6VU7F5lBXMAIAAAAACJR9+q5T9qFHXFNgGbZnPubG8rkO6cwWhzITQTmd6VgwVsACAAAAAAOZLQ6o7e4mVfDzbpQioa4d3RoTvqwgnbmc5Qh2wsZuoAAzEwOQB9AAAABWQAIAAAAADQnslvt6Hm2kJPmqsTVYQHE/wWeZ4bE1XSkt7TKy0r1gVzACAAAAAA8URTA4ZMrhHPvlp53TH6FDCzS+0+61qHm5XK6UiOrKEFbAAgAAAAAHQbgTCdZcbdA0avaTmZXUKnIS7Nwf1tNrcXDCw+PdBRAAMxMTAAfQAAAAVkACAAAAAAhujlgFPFczsdCGXtQ/002Ck8YWQHHzvWvUHrkbjv4rwFcwAgAAAAALbV0lLGcSGfE7mDM3n/fgEvi+ifjl7WZ5b3aqjDNvx9BWwAIAAAAACbceTZy8E3QA1pHmPN5kTlOx3EO8kJM5PUjTVftw1VpgADMTExAH0AAAAFZAAgAAAAABm/6pF96j26Jm7z5KkY1y33zcAEXLx2n0DwC03bs/ixBXMAIAAAAAD01OMvTZI/mqMgxIhA5nLs068mW+GKl3OW3ilf2D8+LgVsACAAAAAAaLvJDrqBESTNZSdcXsd+8GXPl8ZkUsGpeYuyYVv/kygAAzExMgB9AAAABWQAIAAAAACfw9/te4GkHZAapC9sDMHHHZgmlTrccyJDPFciOMSOcwVzACAAAAAAIIC1ZpHObvmMwUfqDRPl4C1aeuHwujM1G/yJbvybMNAFbAAgAAAAAAs9x1SnVpMfNv5Bm1aXGwHmbbI9keWa9HRD35XuCBK5AAMxMTMAfQAAAAVkACAAAAAAkxHJRbnShpPOylLoDdNShfILeA1hChKFQY9qQyZ5VmsFcwAgAAAAAKidrY+rC3hTY+YWu2a7fuMH2RD/XaiTIBW1hrxNCQOJBWwAIAAAAACW0kkqMIzIFMn7g+R0MI8l15fr3k/w/mHtY5n6SYTEwAADMTE0AH0AAAAFZAAgAAAAAByuYl8dBvfaZ0LO/81JW4hYypeNmvLMaxsIdvqMPrWoBXMAIAAAAABNddwobOUJzm9HOUD8BMZJqkNCUCqstHZkC76FIdNg9AVsACAAAAAAQQOkIQtkyNavqCnhQbNg3HfqrJdsAGaoxSJePJl1qXsAAzExNQB9AAAABWQAIAAAAABxMy7X5hf7AXGDz3Y/POu1ZpkMlNcSvSP92NOO/Gs7wAVzACAAAAAAHJshWo2T5wU2zvqCyJzcJQKQaHFHpCpMc9oWBXkpUPoFbAAgAAAAAGeiJKzlUXAvL0gOlW+Hz1mSa2HsV4RGmyLmCHlzbAkoAAMxMTYAfQAAAAVkACAAAAAAlqbslixl7Zw3bRlibZbe/WmKw23k8uKeIzPKYEtbIy0FcwAgAAAAAHEKwpUxkxOfef5HYvulXPmdbzTivwdwrSYIHDeNRcpcBWwAIAAAAADuPckac21Hrg/h0kt5ShJwVEZ9rx6SOHd2+HDjqxEWTQADMTE3AH0AAAAFZAAgAAAAAMXrXx0saZ+5gORmwM2FLuZG6iuO2YS+1IGPoAtDKoKBBXMAIAAAAADIQsxCr8CfFKaBcx8kIeSywnGh7JHjKRJ9vJd9x79y7wVsACAAAAAAcvBV+SykDYhmRFyVYwFYB9oBKBSHr55Jdz2cXeowsUQAAzExOAB9AAAABWQAIAAAAAAm83FA9yDUpwkbKTihe7m53u+DivS9BU2b4vQMtCVQ2AVzACAAAAAAz3m1UB/AbZPa4QSKFDnUgHaT78+6iGOFAtouiBorEgEFbAAgAAAAAIgbpyYtJj5513Z5XYqviH/HXG/5+mqR52iBbfqMmDtZAAMxMTkAfQAAAAVkACAAAAAAJRzYK0PUwr9RPG2/7yID0WgcTJPB2Xjccp5LAPDYunkFcwAgAAAAAIIh24h3DrltAzNFhF+MEmPrZtzr1PhCofhChZqfCW+jBWwAIAAAAAAzRNXtL5o9VXMk5D5ylI0odPDJDSZZry1wfN+TedH70gADMTIwAH0AAAAFZAAgAAAAAHSaHWs/dnmI9sc7nB50VB2Bzs0kHapMHCQdyVEYY30TBXMAIAAAAACkV22lhEjWv/9/DubfHBAcwJggKI5mIbSK5L2nyqloqQVsACAAAAAAS19m7DccQxgryOsBJ3GsCs37yfQqNi1G+S6fCXpEhn4AAzEyMQB9AAAABWQAIAAAAAAC/I4TQRtCl12YZmdGz17X4GqSQgfwCPgRBwdHmdwu+QVzACAAAAAAx8f3z2ut/RAZhleari4vCEE+tNIn4ikjoUwzitfQ588FbAAgAAAAAJci0w1ZB8W2spJQ+kMpod6HSCtSR2jrabOH+B0fj3A4AAMxMjIAfQAAAAVkACAAAAAADGB5yU2XT0fse/MPWgvBvZikVxrl5pf3S5K1hceKWooFcwAgAAAAAIxTmlLHMjNaVDEfJbXvRez0SEPWFREBJCT6qTHsrljoBWwAIAAAAAAlswzAl81+0DteibwHD+CG5mZJrfHXa9NnEFRtXybzzwADMTIzAH0AAAAFZAAgAAAAABmO7QD9vxWMmFjIHz13lyOeV6vHT6mYCsWxF7hb/yOjBXMAIAAAAACT9lmgkiqzuWG24afuzYiCeK9gmJqacmxAruIukd0xEAVsACAAAAAAZa0/FI/GkZR7CtX18Xg9Tn9zfxkD0UoaSt+pIO5t1t4AAzEyNAB9AAAABWQAIAAAAAAfPUoy7QyZKhIIURso+mkP9qr1izbjETqF5s22GwjCjAVzACAAAAAAvLMsIDQ/go4VUxeh50UHmsvMvfx51cwyONnRD2odvC0FbAAgAAAAAKMb+1CodEalAFnDrEL1Ndt8ztamZ+9134m9Kp3GQgd+AAMxMjUAfQAAAAVkACAAAAAAE3ZqUar0Bq2zWbARE0bAv98jBlK9UJ73/xcwdMWWlSkFcwAgAAAAAK4M+MmC+9sFiFsumMyJZQKxWmmJiuG9H7IzKw083xxkBWwAIAAAAAAqkAONzhvMhkyL1D/6h7QQxEkdhC3p2WjXH+VGq5qCqQADMTI2AH0AAAAFZAAgAAAAAMo8FJiOq63cAmyk2O7eI7GcbQh/1j4RrMTqly3rexftBXMAIAAAAADjVmpd0WiRGTw/gAqEgGolt2EI7Csv14vKdmYoMD0aAgVsACAAAAAA07XQBzBUQMNw7F2/YxJjZNuPVpHTTgbLd1oGk77+bygAAzEyNwB9AAAABWQAIAAAAACu5IGaIx7A3Jvly/kzlCsSA4s3iJwuIl8jEdRH0k93NwVzACAAAAAA9NRUyxYE+t0Xyosyt6vIfMFW/vBoYg6sR+jBNs4JAxIFbAAgAAAAAAzyZ91dx+0oMlOVAjRGiMrPySikY/U9eMEB4WJb3uWtAAMxMjgAfQAAAAVkACAAAAAALkRy0GJInXYLA+cgjs6Myb0a+Gu9hgXhHvhLNoGWfckFcwAgAAAAANbALyt9zCSvwnLaWCd2/y2eoB7qkWTvv1Ldu8r40JPuBWwAIAAAAAD4Fl5bV5sz4isIE9bX+lmAp+aAKaZgVYVZeVfrItkCZAADMTI5AH0AAAAFZAAgAAAAAGoUK/DSWhT8LZhszSUqDbTrp8cSA7rdqmADKL+MILtTBXMAIAAAAABHnEE9bVa6lvhfhEMkkV2kzSSxH/sMW/FIJuw3CzWs6wVsACAAAAAAanavcBdqZxgRGKvEK95wTmeL1K1CeDSXZsXUAs81uOgAAzEzMAB9AAAABWQAIAAAAAC922ZDQE3h2fQKibGMZ9hV0WNlmrPYYSdtaSyYxsWYqgVzACAAAAAAagMovciKK6WVjIc2cCj8nK5O/gVOFFVeVAJpRp89tmQFbAAgAAAAAKcTFfPQzaFiAtSFhqbN02sCE1BKWJSrRfGN5L6oZwzkAAMxMzEAfQAAAAVkACAAAAAAtK+JqX3K/z2txjAU15DgX4y90DS2YLfIJFolCOkJJJwFcwAgAAAAAMnR5V7gfX7MNqqUdL5AkWlkhyFXaBRVNej+Rcn8lrQkBWwAIAAAAAA2cDNRXZuiC241TGRvdFyctJnrNcdbZOP9zHio81tkngADMTMyAH0AAAAFZAAgAAAAAAeGrIMK/bac6kPczxbvRYqKMkcpeI2FjdMpD91FDWIvBXMAIAAAAAAix62z1LeS8yvSXCl5gHSIomjyx76fF3S1lp9k900hygVsACAAAAAAiYwzf2m71aWFD5ajcXyW2JX2EzQOkBroTGMg29nLPYIAAzEzMwB9AAAABWQAIAAAAACphf298InM0Us4HT8o1W1MGw0D/02vd7Jh+U0h7qaFaQVzACAAAAAAFXtk7YpqsOJxsqGWSIL+YcBE96G3Zz9D31gPqDW94y8FbAAgAAAAAAOrS1KVA94rjB1jZ1pPocpCeBG+B14RzWoHqVDpp7JbAAMxMzQAfQAAAAVkACAAAAAATLDS2cuDVM3yDMuWNgk2iGKBTzPpfJMbvxVOSY39ZfcFcwAgAAAAAPT5wRi2cLHIUflXzm6EQB/m7xdThP80ir1VV/JBBqvxBWwAIAAAAAB9lEtZS0aXCFbCtSbhnis27S5IPcfWGygHW8AHn3QqzwADMTM1AH0AAAAFZAAgAAAAAJNjExiZVX7jfFGfYpQu16qxLN0YPqVU/5CQ/Y67YSinBXMAIAAAAABMpm2+6KrkRUlXzQoMPHrQmIO6dkQz66tYdfTeA3dKqQVsACAAAAAAFXobHiMLvNZuEPr8jtewCX2J93EZG3JNeyVg92fue6YAAzEzNgB9AAAABWQAIAAAAABlFkYtLCx901X6QVVMkSn6Z7k30UF4xHaA0OZJJ9bdyQVzACAAAAAATez+F9GHcGzTp7jjv4feboUNb8JCkIp4EqcPFisnq7MFbAAgAAAAACE7JvOpBgMoZ7kRd4QbxIhxukPTUxXpzhjnBHiR7XoRAAMxMzcAfQAAAAVkACAAAAAA8NJKN0IxZnruhswGQkiruv8Ih0EMwDcSZx/Xasup9dkFcwAgAAAAAKaJZRxzA+Igeydvuk6cSwUHXcrmT4PjhuPu//FslpdnBWwAIAAAAAD53Rok1Vq/PMAnXmarqoHJ0PEyYUBmVESa9hIpCv/G9QADMTM4AH0AAAAFZAAgAAAAABHxHdEClz7hbSSgE58+dWLlSMJnoPz+jFxp4bB1GmLQBXMAIAAAAAD3nSvT6aGD+A110J/NwEfp0nPutlmuB5B+wA3CC3noGAVsACAAAAAA3Apjd+TapONB7k5wBVwTWgn8t+Sq2oyyU5/+as109RcAAzEzOQB9AAAABWQAIAAAAAC/o8qW/ifk3KuJ01VFkyNLgQafxB5/bGs2G5VyyVafOwVzACAAAAAA1bMqAFGDHSl6BYNLbxApvkAv2K1/oafywiX0MDz1dGUFbAAgAAAAAHJXLlId3edFoniLD/9K2A5973MeP2Ro31flDyqm3l5QAAMxNDAAfQAAAAVkACAAAAAAY2V8I1bz3a1AxTtmED6UhdhA09huFkuuEX8R+d/WDPUFcwAgAAAAAPTVoNRiI76tcRKqd+JBBVyy4+YcKST42p0QX2BtmQ2VBWwAIAAAAACcxt9hg14WqPNiDv1MkqVljM2e2KJEv53lA17LhV6ZigADMTQxAH0AAAAFZAAgAAAAAO2kSsW0WGN9AOtK4xK2SHrGhWiaAbMEKT4iZkRpaDN/BXMAIAAAAABKGzQcPM8LT2dwOggxoWjv/1imYWabbG/G4kBw8OWaxAVsACAAAAAAC9hLK1dScQTAqg+YAG3ObdPzg2Xet57HmOFpGmyUR9UAAzE0MgB9AAAABWQAIAAAAAAiCwzNEEaH/mDam68IdDftnhthyUFdb+ZCNSBQ91WlHQVzACAAAAAA7tHyHcxCzmbJeFYZyPm4mEgkTGKOvwY4MX82OvH0Jn8FbAAgAAAAAAb5IAbZ1hXCNegQ+S+C9i/Z8y6sS8KeU04V6hXa2ml6AAMxNDMAfQAAAAVkACAAAAAAGuCHVNJSuoVkpPOnS5s89GuA+BLi2IPBUr2Bg1sWEPIFcwAgAAAAAEl1gncS5/xO7bQ/KQSstRV3rOT2SW6nV92ZANeG2SR6BWwAIAAAAAA9LOcKmhek8F2wAh8yvT/vjp2gaouuO+Hmv10lwAeWPAADMTQ0AH0AAAAFZAAgAAAAAMfxz7gEaoCdPvXrubDhCZUS0ARLZc1svgbXgMDlVBPgBXMAIAAAAAB6a5dDA3fuT5Vz2KvAcbUEFX/+B7Nw2p1QqbPoQ5TTuAVsACAAAAAAcf/y75UOuI62A6vWH7bYr/5Jz+nirZVYK/81trN6XOQAAzE0NQB9AAAABWQAIAAAAACnYsqF/VzmjIImC9+dqrHO1TM6lJ6fRwM0mM6Wf6paOwVzACAAAAAA5tgZzch8uDCR1ky3SllVaKVpxAlbrhvlNDTazZZRZOAFbAAgAAAAALeGiLJS4z2zhgVpxzyPdRYyACP9QzQBOob34YrIZumCAAMxNDYAfQAAAAVkACAAAAAAEC0sIVmadtW4YMuRXH7RpAhXclsd+3bmqGXCMeaT014FcwAgAAAAABPpXh0uzpsJJB+IRUNajmMB9WGwswfpw5T9xk3Xj6ANBWwAIAAAAAAmf+NYh9TZ/QRu3w/GQz66n7DtfbJijN3G7KzeL8lstAADMTQ3AH0AAAAFZAAgAAAAABaIB3n49Xm9cOafSrQsE0WCcYp8rMIO/qVwIlMF5YLRBXMAIAAAAAC9EyWJV3xOu9bzgdJ/yX+ko7qLf1u3AxNMataW2C9EzQVsACAAAAAAvVbDkLxXx2DcMLifIQ3K0IIJcLcAG9DUrNfI6aoUjNcAAzE0OAB9AAAABWQAIAAAAAA5rZItA/cocRnngYqcJ3nBXQ+l688aKz3EQyLbYYunPAVzACAAAAAAwKyA+L7TgxztPClLrIMk2JXR+w7c04N3ZOqPgjvrIvsFbAAgAAAAACzvZ33h6aWEe8hmo+1f6OXJ72FY5hvWaUuha64ZV3KFAAMxNDkAfQAAAAVkACAAAAAA3htn7oHJ0YYpIrs+Mzyh85Ys67HwAdv5LQl1mCdoMWkFcwAgAAAAAEHjCtNNLenHuSIYux6ezAHsXDaj2DlTF67ToDhDDe6HBWwAIAAAAAD+P4H0sk9jOd+7vOANt2/1Ectb+4ZRGPE8GkHWNXW3MgADMTUwAH0AAAAFZAAgAAAAAEnt18Km/nqggfIJWxzTr9r3hnXNaueG6XO9A5G11LnGBXMAIAAAAAD7QxzGMN/ard5TfFLecE6uusMmXG2+RBsBR+/NCQHUwAVsACAAAAAAQEZ1ZZ8GC8rdbg7s87OM5Gr9qkTXS9+P5DuAZxj5Gl4AAzE1MQB9AAAABWQAIAAAAAAVAKK/GoY8AACu/hyMpO4hdLq6JnEyWNzkyci9sbaD/wVzACAAAAAA2HmeqpMlvvBpV2zQTYIRmsc4MFlfHRwLof0ycJgMg/MFbAAgAAAAACdltCeWi5E/q1Li1eXLChpM2D9QQSGLBZ82NklQSc0oAAMxNTIAfQAAAAVkACAAAAAAhHyq1GQC/GiMwpYjcsfkNxolJ10ARKjIjfkW1Wipzi0FcwAgAAAAAD/uaGWxTDq87F8XZ6CrFI+RNa8yMqfSZdqK00Kj833BBWwAIAAAAAD6aEdOO0CsQGagioOCvANPCEHSpJ8BSixlPBq5ERhB7AADMTUzAH0AAAAFZAAgAAAAABAJJxHoZD+MQBWqm9UM9Dd3z5ZohIZGWRaRVRsMptKQBXMAIAAAAADrE/ca+gqj/SH4oao4wE4qn2ovoTydzcMbDbrfnUs3zAVsACAAAAAAeNCIQN6hVnGJinytQRFGlQ2ocoprXNqpia+BSxzl+uwAAzE1NAB9AAAABWQAIAAAAAAv01wz7VG9mTepjXQi6Zma+7b/OVBaKVkWNbgDLr1mFgVzACAAAAAA0I5sxz8r6wkCp5Tgvr+iL4p6MxSOq5d3e1kZG+0b7NkFbAAgAAAAAIA32v6oGkAOS96HexGouNTex+tLahtx9QF2dgGClk6WAAMxNTUAfQAAAAVkACAAAAAAWXecRwxSon68xaa9THXnRDw5ZfzARKnvvjTjtbae6T0FcwAgAAAAAPh0UfUMEo7eILCMv2tiJQe1bF9qtXq7GJtC6H5Va4fIBWwAIAAAAADqFr1ThRrTXNgIOrJWScO9mk86Ufi95IDu5gi4vP+HWQADMTU2AH0AAAAFZAAgAAAAAEY5WL8/LpX36iAB1wlQrMO/xHVjoO9BePVzbUlBYo+bBXMAIAAAAABoKcpadDXUARedDvTmzUzWPe1jTuvD0z9oIcZmKuiSXwVsACAAAAAAJuJbwuaMrAFoI+jU/IYr+k4RzAqITrOjAd3HWCpJHqEAAzE1NwB9AAAABWQAIAAAAADnJnWqsfx0xqNnqfFGCxIplVu8mXjaHTViJT9+y2RuTgVzACAAAAAAWAaSCwIXDwdYxWf2NZTly/iKVfG/KDjHUcA1BokN5sMFbAAgAAAAAJVxavipE0H4/JQvhagdytXBZ8qGooeXpkbPQ1RfYMVHAAMxNTgAfQAAAAVkACAAAAAAsPG7LaIpJvcwqcbtfFUpIjj+vpNj70Zjaw3eV9T+QYsFcwAgAAAAAJQ71zi0NlCyY8ZQs3IasJ4gB1PmWx57HpnlCf3+hmhqBWwAIAAAAACD58TO6d+71GaOoS+r73rAxliAO9GMs4Uc8JbOTmC0OwADMTU5AH0AAAAFZAAgAAAAAAGiSqKaQDakMi1W87rFAhkogfRAevnwQ41onWNUJKtuBXMAIAAAAAASgiDpXfGh7E47KkOD8MAcX8+BnDShlnU5JAGdnPdqOAVsACAAAAAAI+2TTQIgbFq4Yr3lkzGwhG/tqChP7hRAx2W0fNaH6jcAAzE2MAB9AAAABWQAIAAAAAB7L4EnhjKA5xJD3ORhH2wOA1BvpnQ+7IjRYi+jjVEaJAVzACAAAAAAuhBIm0nL3FJnVJId+7CKDASEo+l2E89Z9/5aWSITK4AFbAAgAAAAALtSICOzQDfV9d+gZuYxpEj6cCeHnKTT+2G3ceP2H65kAAMxNjEAfQAAAAVkACAAAAAAaROn1NaDZFOGEWw724dsXBAm6bgmL5i0cki6QZQNrOoFcwAgAAAAANVT8R6UvhrAlyqYlxtmnvkR4uYK/hlvyQmBu/LP6/3ZBWwAIAAAAAD+aHNMP/X+jcRHyUtrCNkk1KfMtoD3GTmShS8pWGLt+AADMTYyAH0AAAAFZAAgAAAAADqSR5e0/Th59LrauDA7OnGD1Xr3H3NokfVxzDWOFaN7BXMAIAAAAACt30faNwTWRbvmykDpiDYUOCwA6QDbBBYBFWS7rdOB4AVsACAAAAAAF7SvnjjRk5v2flFOKaBAEDvjXaL1cpjsQLtK2fv9zdQAAzE2MwB9AAAABWQAIAAAAADmtb1ZgpZjSeodPG/hIVlsnS8hoRRwRbrTVx89VwL62AVzACAAAAAAi38e1g6sEyVfSDkzZbaZXGxKI/zKNbMasOl2LYoWrq8FbAAgAAAAAALACk0KcCDN/Kv8WuazY8ORtUGkOZ5Dsm0ys1oOppp/AAMxNjQAfQAAAAVkACAAAAAAf/f7AWVgBxoKjr7YsEQ4w/fqSvuQWV2HMiA3rQ7ur0sFcwAgAAAAADkkeJozP6FFhUdRIN74H4UhIHue+eVbOs1NvbdWYFQrBWwAIAAAAAB55FlHAkmTzAYj/TWrGkRJw2EhrVWUnZXDoMYjyfB/ZwADMTY1AH0AAAAFZAAgAAAAAI2WEOymtuFpdKi4ctanPLnlQud+yMKKb8p/nfKmIy56BXMAIAAAAADVKrJmhjr1rfF3p+T+tl7UFd1B7+BfJRk0e7a4im7ozgVsACAAAAAA5E7Ti3PnFiBQoCcb/DN7V1uM3Xd6VKiexPKntssFL7kAAzE2NgB9AAAABWQAIAAAAAAuHU9Qd79hjyvKOujGanSGDIQlxzsql8JytTZhEnPw+AVzACAAAAAAjF2gV/4+sOHVgDd/oR5wDi9zL7NGpGD+NsEpGXy/a4QFbAAgAAAAAJzMoyojYV6Ed/LpVN5zge93Odv3U7JgP7wxeRaJZGTdAAMxNjcAfQAAAAVkACAAAAAA7dQDkt3iyWYCT94d7yqUtPPwp4qkC0ddu+HFdHgVKEkFcwAgAAAAANuYvtvZBTEq4Rm9+5eb7VuFopowkrAuv86PGP8Q8/QvBWwAIAAAAACeqXoAOQOE4j0zRMlkVd8plaW0RX1npsFvB38Xmzv7sAADMTY4AH0AAAAFZAAgAAAAAAwnZSDhL4tNGYxlHPhKYB8s28dY5ScSwiKZm3UhT8U3BXMAIAAAAABDoY6dhivufTURQExyC9Gx3ocpl09bgbbQLChj3qVGbgVsACAAAAAAF+1nS7O0v85s3CCy+9HkdeoEfm2C6ZiNbPMMnSfsMHUAAzE2OQB9AAAABWQAIAAAAAC2VuRdaC4ZJmLdNOvD6R2tnvkyARteqXouJmI46V306QVzACAAAAAAMn1Z6B35wFTX9mEYAPM+IiJ5hauEwfD0CyIvBrxHg7IFbAAgAAAAAOG6DvDZkT9B/xZWmjao2AevN7MMbs3Oh9YJeSd/hZ+hAAMxNzAAfQAAAAVkACAAAAAAVerb7qVNy457rNOHOgDSKyWl5ojun7iWrv1uHPXrIZQFcwAgAAAAAIDcYS9j5z+gx0xdJj09L7876r/vjvKTi/d3bXDE3PhyBWwAIAAAAADuhVLqb1Bkrx8aNymS+bx2cL8GvLFNH4SAi690DUgnWQADMTcxAH0AAAAFZAAgAAAAAH/E44yLxKCJjuSmU9A8SEhbmkDOx1PqqtYcZtgOzJdrBXMAIAAAAABgLh9v2HjBbogrRoQ82LS6KjZQnzjxyJH4PH+F3jupSAVsACAAAAAAIlO46ehXp4TqpDV0t6op++KO+uWBFh8iFORZjmx2IjkAAzE3MgB9AAAABWQAIAAAAAAlNUdDL+f/SSQ5074mrq0JNh7CTXwTbbhsQyDwWeDVMwVzACAAAAAANIH2IlSNG0kUw4qz0budjcWn8mNR9cJlYUqPYdonucAFbAAgAAAAAJMrOUOyiu5Y3sV76zwEFct8L7+i8WGlQI2+8z2W2kzaAAMxNzMAfQAAAAVkACAAAAAASZ+CvUDtlk/R4HAQ3a+PHrKeY/8ifAfh0oXYFqliu80FcwAgAAAAAJelpzPgM65OZFt/mvGGpwibclQ49wH+1gbUGzd9OindBWwAIAAAAAD9qeDchteEpVXWcycmD9kl9449C1dOw0r60TBm5jK+cQADMTc0AH0AAAAFZAAgAAAAAN9fkoUVbvFV2vMNMAkak4gYfEnzwKI3eDM3pnDK5q3lBXMAIAAAAACnDkgVNVNUlbQ9RhR6Aot2nVy+U4km6+GHPkLr631jEAVsACAAAAAANzg/BnkvkmvOr8nS4omF+q9EG/4oisB+ul4YHi938hwAAzE3NQB9AAAABWQAIAAAAAASyK3b1nmNCMptVEGOjwoxYLLS9fYWm/Zxilqea0jpEQVzACAAAAAADDHsGrbqlKGEpxlvfyqOJKQJjwJrzsrB7k3HG0AUJbkFbAAgAAAAAKwx3S4XfDZh4+LuI9jf7XgUh5qiefNv87JD4qvVRfPSAAMxNzYAfQAAAAVkACAAAAAAlSP9iK31GlcG9MKGbLmq+VXMslURr+As736rrVNXcsUFcwAgAAAAAAvbj0zfq9zzi8XReheKFbCB+h9IsOLgXPPpI5vrEJNZBWwAIAAAAABXvoZhaQE7ogWjeBjceVkp03N20cKYP3TA8vuNsgpfAgADMTc3AH0AAAAFZAAgAAAAAOJNORH8Bev97gVU7y6bznOxJ+E6Qoykur1QP76hG1/7BXMAIAAAAAC+C1PtOOrSZgzBAGhr+dPe/kR0JUw9GTwLVNr61xC1aAVsACAAAAAAeA/L8MQIXkamaObtMPLpoDoi5FypA5WAPtMeMrgi0eQAAzE3OAB9AAAABWQAIAAAAAAKcHzLUomavInN6upPkyWhAqYQACP/vdVCIYpiy6U6HgVzACAAAAAATsR4KItY6R2+U7Gg6sJdaEcf58gjd1OulyWovIqfxKcFbAAgAAAAAFbm10ko67ahboAejQdAV0U2uA5OhZYdb8XUFJ8OL46LAAMxNzkAfQAAAAVkACAAAAAAqTOLiMpCdR59tLZzzIPqJvbCNvz2XQL9ust0qYaehtcFcwAgAAAAAArefox/3k5xGOeiw2m6NUdzuGxmPwcu5IFcj+jMwHgHBWwAIAAAAADLZGFJ7MQd5JXMgMXjqZO5LDLxcFClcXPlnRMWRn+1oAADMTgwAH0AAAAFZAAgAAAAAIPSqSeVzSRgNVNmrPYHmUMgykCY27NbdDUNhE5kx/SgBXMAIAAAAAAhX90nNfxyXmZe/+btZ7q6xMX4PFyj0paM1ccJ/5IUUQVsACAAAAAA419oHmD2W0SYoOMwhrhrp8jf68fg9hTkaRdCuVd3CN0AAzE4MQB9AAAABWQAIAAAAACLn5DxiqAosHGXIAY96FwFKjeqrzXWf3VJIQMwx1fl4gVzACAAAAAAindvU27nveutopdvuHmzdENBbeGFtI3Qcsr07jxmvm8FbAAgAAAAAPvl9pBStQvP4OGkN5v0MghUY6djm9n7XdKKfrW0l1sMAAMxODIAfQAAAAVkACAAAAAA7i2S6rHRSPBwZEn59yxaS7HiYBOmObIkeyCcFU42kf8FcwAgAAAAAGb3RSEyBmgarkTvyLWtOLJcPwCKbCRkESG4RZjVmY4iBWwAIAAAAADB2/wo5CSHR4ANtifY6ZRXNTO5+O8qP82DfAiAeanpZwADMTgzAH0AAAAFZAAgAAAAAFz+M+H/Z94mdPW5oP51B4HWptp1rxcMWAjnlHvWJDWrBXMAIAAAAACBFEOQyL7ZHu4Cq33QvXkmKuH5ibG/Md3RaED9CtG5HwVsACAAAAAAfggtJTprQ/yZzj7y5z9KvXsdeXMWP0yUXMMJqpOwI88AAzE4NAB9AAAABWQAIAAAAAAE7c2x3Z3aM1XGfLNk/XQ9jCazNRbGhVm7H8c2NjS5ywVzACAAAAAARJ9h8fdcwA19velF3L/Wcvi2rCzewlKZ2nA0p8bT9uwFbAAgAAAAAJtWe6b4wK2Hae2dZm/OEpYQnvoZjz4Sz5IgJC2wInecAAMxODUAfQAAAAVkACAAAAAAVoRt9B9dNVvIMGN+ea5TzRzQC+lqSZ8dd/170zU5o9cFcwAgAAAAAEwM95XZin5mv2yhCI8+ugtKuvRVmNgzzIQN0yi1+9aIBWwAIAAAAAAMGBq72n00rox3uqhxSB98mkenTGCdbbUF1gXrgottzgADMTg2AH0AAAAFZAAgAAAAAKRDkjyWv/etlYT4GyoXrmBED2FgZHnhc+l9Wsl06cH2BXMAIAAAAABohlpm3K850Vndf3NmNE0hHqDlNbSR8/IvMidQ3LnIZAVsACAAAAAAW42nGHa6q2MCAaaPVwaIDfr8QLyQwjKq23onZJYsqVsAAzE4NwB9AAAABWQAIAAAAAC3DFh5oklLCNLY90bgWm68dFXz65JpAZSp1K99MBTPAQVzACAAAAAAQgZecmxEUZVHoptEQClDwAf8smI3WynQ/i+JBP0g+kQFbAAgAAAAAEUSQGVnAPISD6voD0DiBUqyWKgt2rta0tjmoe+LNt6IAAMxODgAfQAAAAVkACAAAAAAQ5WKvWSB503qeNlOI2Tpjd5blheNr6OBO8pfJfPNstcFcwAgAAAAAKwHgQLSDJ5NwLBQbY5OnblQIsVDpGV7q3RCbFLD1U4/BWwAIAAAAACQ5nED99LnpbqXZuUOUjnO2HTphEAFBjLD4OZeDEYybgADMTg5AH0AAAAFZAAgAAAAAGfhFY3RGRm5ZgWRQef1tXxHBq5Y6fXaLAR4yJhrTBplBXMAIAAAAACKEF0ApLoB6lP2UqTFsTQYNc9OdDrs/vziPGzttGVLKQVsACAAAAAArOO6FyfNRyBi0sPT5iye7M8d16MTLcwRfodZq4uCYKEAAzE5MAB9AAAABWQAIAAAAAAIM73gPcgzgotYHLeMa2zAU4mFsr7CbILUZWfnuKSwagVzACAAAAAAJCSu98uV8xv88f2BIOWzt6p+6EjQStMBdkGPUkgN79cFbAAgAAAAAMGqPGMPxXbmYbVfSa/japvUljht1zZT33TY7ZjAiuPfAAMxOTEAfQAAAAVkACAAAAAAkWmHCUsiMy1pwZTHxVPBzPTrWFBUDqHNrVqcyyt7nO8FcwAgAAAAAMv2CebFRG/br7USELR98sIdgE9OQCRBGV5JZCO+uPMgBWwAIAAAAABt7qSmn3gxJu7aswsbUiwvO+G6lXj/Xhx+J/zQyZxzLAADMTkyAH0AAAAFZAAgAAAAAGInUYv0lP/rK7McM8taEHXRefk8Q2AunrvWqdfSV7UaBXMAIAAAAACE+WPxJ3gan7iRTbIxXXx+bKVcaf8kP4JD8DcwU0aL7wVsACAAAAAAUC4eTprX4DUZn2X+UXYU6QjtiXk+u57yoOPBbPQUmDkAAzE5MwB9AAAABWQAIAAAAACmHlg2ud3cplXlTsNTpvNnY6Qm1Fce0m899COamoDjaQVzACAAAAAArtJQeJIlepBWRU2aYar7+YGYVQ7dfDc1oxgTmA8r9q0FbAAgAAAAAOk45vg5VqZHAFCO3i0Z52SZi5RADf8NXwf68T5yad/DAAMxOTQAfQAAAAVkACAAAAAApzcWSAbZWV/Rq+ylRNqqlJqNVR4fhXrz4633/MQOQgcFcwAgAAAAAN/jz/bsEleiuCl+li83EWlG6UMHA8CyaOMRKCkXkSCPBWwAIAAAAAC3Sd+Qg+uFDKpGZHbrQgokXHQ1az1aFl4YK343OB6hcQAAEmNtAAAAAAAAAAAAABBwYXlsb2FkSWQAAAAAABBmaXJzdE9wZXJhdG9yAAEAAAASc3AAAQAAAAAAAAAQdGYAAQAAABNtbgD/////Y46NN8CHrb4J7f/fE214AP////9jjo03wIetvgnt/18A", - "subType": "06" - } - } - } - } - update: { "$set": {"encryptedDecimalNoPrecision": { $$type: "binData" }} } - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: findAndModify - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": { - "$numberInt": "0" - }, - "encryptedDecimalNoPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "rbf3AeBEv4wWFAKknqDxRW5cLNkFvbIs6iJjc6LShQY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "n+XAuFnP8Dov9TnhGFxNx0K/MnVM9WbJ7RouEu0ndO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yRXojuVdn5GQtD97qYlaCL6cOLmZ7Cvcb3wFjkLUIdM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DuIkdRPITRs55I4SZmgomAHCIsDQmXRhW8+MOznkzSk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SsBk+Et1lTbU+QRPx+xyJ/jMkmfG+QCvQEpip2YYrzA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "crCIzOd8KhHvvUlX7M1v9bhvU4pLdTc+X2SuqoKU5Ek=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YOWdCw4UrqnxkAaVjqmC4sKQDMVMHEpFGnlxpxdaU6E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "M3SShp81Ff8tQ632qKbv9MUcN6wjDaBReI0VXNu6Xh4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gzHlSPxpM0hT75kQvWFzGlOxKvDoiKQZOr19V6l2zXI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s3JnppOGYw9SL2Q1kMAZs948v2F5PrpXjGei/HioDWs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cG6+3Gk/zEH68P/uuuwiAUVCuyJwa1LeV+t29FlPPAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dupdvR3AyJtM+g9NDKiaLVOtGca387JQp8w+V03m7Ig=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JqEQc5svj2jTvZ6LLA5ivE+kTb/0aRemSEmxk4G7Zrg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "szcXXXKnob+p3SoM4yED2R920LeJ7cVsclPMFTe4CeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o1QoGVXmuBdHwHm7aCtGMlMVKrjFdYvJXpoq6uhIAZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Jfm5wPlqqLCJRGQIqRq2NGmpn7s0Vrih2H3YAOoI2YU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zMHLb8ARbsYo8Ld05bqnGFf1Usha6EGb8QKwdSAyps0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yQdtq9lh5pugL7/i0Bj/PuZUUBUIzf+7wj1rl5y736w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wGWVZdO7qIuyDg/BqDgqjgoQ02h5YYgwXQB1oCin2NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "by9HMLj6NTEpgztZ5HSN6GxImkXPcaFINYDzgZY33X8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tWo0vbasi7bXmn/MsOx13VC1IsWtpx/nYp0uj4iMzdA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tQQpndUYd5O87lOtrGjH3wl9VsOK0ray7RMasL90sBM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cQjXEDCMsOpKLLf+vlTgIHA+cbSJdzqhbSX9Wvh95aA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7yMpU48IxK9SzP2cx3VnTownGEwFmeFofuuFT97SuuY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kSOx1kz0CmBgzKQHZlo65ZUY1DIv9A99JRm+Us2y6Ew=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ubQpdPBe6/xvtr+AcXdfYLSvYCR4ot0tivehkCsupb4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xal+iCJ6FTefRQToyoNksc9NCZShyn04NDGi4IYrcoM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "d7jU4iOK50xHxlkSifcxlZFCM46TSgQzoYivxG3HNLY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJvl2nsBLBVzL3pp6sKWCL4UXeh3q/roYBJjSb74ve0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OIUCaKRvIx9t1w6Hxlz1IcQTdPNCfdRNwnnTm10W+X0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A9tvzsiElotOUVIB4CqfQp9mAwqvTM35YkmAR170aHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lI8gpK7hpb7c9x4RQugsxMnQay5LZJmwslZdvMx/dcE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dNCzh40U0XvdKnSDi3HRQOWQftEsDVqc4uUvsVFGoq8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IP+iwEBWBwVVZIdpaMu8k5+soFCz+TZkYn3drKZ9grE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnqyh6e0y5svHkJDShlN9CHV0WvMBE4QbtJpQw5ZCXc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "elEl42tbVDoRTLjAhZUFEtXiut4b3PVhg/1ZLZSQdtE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vHuu2FxwclMHqyE6JBYbTYgbEkB0dqb/JuaxsvfwsmY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xTf7NCe3Gf8QpE78HR5OknlLTKfs9J+RN9UZpH6fnso=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XiWSasRnJAulGR6+LCVD3mwRObXylqYWR9jvpywq12c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MZMxEQ5ikx0PG1YFIExv0UnTZogsvgeOEZTpzvBDn4w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yZMyMZBDrWbAhvnic7vvIYhmO9m5H2iuv0c8KNZrBzY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xxM14hTPY5j0vvcK2C7YAEjzdsfUTFHozHC0hEo1bxI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+01rqR1xVwkpGXcstbk1ItJqFVjH6Q8MGxEN3Cm9Y1A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xOpLV0Z2VTRJ3iWtnWZcsyjXubTIkYWo31cO+HV1o1k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BWUOLqgLBqc5NwxVlSV5H3KFQPXbCp7mdo+jF+8cJqY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fuQb1S6xZDGlrEbK+kI23aL53PP1PVNwqICnZNt9Yzg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfscnoibFttahLdPVC4Ee+47ewGFKpDSU7M6HX19bKE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rpSW2awybNVeKtat91VFxqbINoTfNhPfQAu+d73Xtf8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9M/CP9ccOIIj2LLFmE0GFDO0Ban2wsNalEXfM6+h+1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WrEMG49l1ye4MhXs5ZS9tz8P6h+hDvthIg/2wW9ne1Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ImNhbfeyfH8qIEeA5ic0s3dAQBdzzTBS+CPsNih9vZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dWP33YDSn04UKJN2ogh2Rui0iW/0q2y18OCDRVcfyoo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lYv0isAtfGh6H9tdp3cp2eHU7q2J+uk7QrgcxtK3w7Y=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VGMoamB/+7zTOYcY/pqJc96xlv2PdW4hwsIAEIslTDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yNeBWMF7BnD9wVwz2PgJsvWr77QiVvvWUvJF0+fqBug=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfpvObJ+tJBXSvqeN7vlOfmhYign635lciYAJIjUtY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dsen4NqjzVGjpjufiTMs3+gqeD09EbnuogPgxrJECwg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pxCWVM3sn19NsFEpgHbgLa+PmYlhN3mMiP0Wk8kJhYw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q11KNvJszjYIB9n9HcC+N4uz11a3eRj1L3BH9scKMDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A1PmkgcEToWh1JiVWE6mI5jUu7poxWWuCUt/cgRUUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qJo3Hu4PJeanL7XEaWXO/n3YsodhZyd+MJOOmB9Kpd8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BkBKLO8URFscfRY9Bav/1+L9mLohDgNr/MkZtGiraIs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rZq5WA3Hx3xthOyHAJXK//f8pE2qbz7YKu3TIMp9GFY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X07a/Lm80p5xd4RFs1dNmw+90tmPDPdGiAKVZkxd4zY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6YrBn2ofIw1b5ooakrLOwF41BWrps8OO0H9WH4/rtlE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0l86Ag5OszXpa78SlOUV3K9nff5iC1p0mRXtLg9M1s4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Hn6yuxFHodeyu7ISlhYrbSf9pTiH4TDEvbYLWjTwFO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zdf4y2etKBuIpkEU1zMwoCkCsdisfXZCh8QPamm+drY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rOQ9oMdiK5xxGH+jPzOvwVqdGGnF3+HkJXxn81s6hp4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "61aKKsE3+BJHHWYvs3xSIBvlRmKswmaOo5rygQJguUg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KuDb/GIzqDM8wv7m7m8AECiWJbae5EKKtJRugZx7kR0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Q+t8t2TmNUiCIorVr9F3AlVnX+Mpt2ZYvN+s8UGict8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJRZIpKxUgHyL83kW8cvfjkxN3z6WoNnUg+SQw+LK+k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnUsYjip8SvW0+m9mR5WWTkpK+p6uwJ6yBUAlBnFKMk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PArHlz+yPRYDycAP/PgnI/AkP8Wgmfg++Vf4UG1Bf0E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wnIh53Q3jeK8jEBe1n8kJLa89/H0BxO26ZU8SRIAs9Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4F8U59gzBLGhq58PEWQk2nch+R0Va7eTUoxMneReUIA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ihKagIW3uT1dm22ROr/g5QaCpxZVj2+Fs/YSdM2Noco=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EJtUOOwjkrPUi9mavYAi+Gom9Y2DuFll7aDwo4mq0M0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dIkr8dbaVRQFskAVT6B286BbcBBt1pZPEOcTZqk4ZcI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aYVAcZYkH/Tieoa1XOjE/zCy5AJcVTHjS0NG2QB7muA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sBidL6y8TenseetpioIAAtn0lK/7C8MoW4JXpVYi3z8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0Dd2klU/t4R86c2WJcJDAd57k/N7OjvYSO5Vf8KH8sw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I3jZ92WEVmZmgaIkLbuWhBxl7EM6bEjiEttgBJunArA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aGHoQMlgJoGvArjfIbc3nnkoc8SWBxcrN7hSmjMRzos=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "bpiWPnF/KVBQr5F6MEwc5ZZayzIRvQOLDAm4ntwOi8g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tI7QVKbE6avWgDD9h4QKyFlnTxFCwd2iLySKakxNR/I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XGsge0CnoaXgE3rcpKm8AEeku5QVfokS3kcI+JKV1lk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JQxlryW2Q5WOwfrjAnaZxDvC83Dg6sjRVP5zegf2WiM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YFuHKJOfoqp1iGVxoFjx7bLYgVdsN4GuUFxEgO9HJ5s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Z6vUdiCR18ylKomf08uxcQHeRtmyav7/Ecvzz4av3k4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SPGo1Ib5AiP/tSllL7Z5PAypvnKdwJLzt8imfIMSEJQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "m94Nh6PFFQFLIib9Cu5LAKavhXnagSHG6F5EF8lD96I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pfEkQI98mB+gm1+JbmVurPAODMFPJ4E8DnqfVyUWbSo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DNj3OVRLbr43s0vd+rgWghOL3FqeO/60npdojC8Ry/M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kAYIQrjHVu49W8FTxyxJeiLVRWWjC9fPcBn+Hx1F+Ss=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aCSO7UVOpoQvu/iridarxkxV1SVxU1i9HVSYXUAeXk4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Gh6hTP/yj1IKlXQ+Q69KTfMlGZjEcXoRLGbQHNFo/1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/gDgIFQ4tAlJk3GN48IS5Qa5IPmErwGk8CHxAbp6gs0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PICyimwPjxpusyKxNssOOwUotAUbygpyEtORsVGXT8g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4lu+cBHyAUvuxC6JUNyHLzHsCogGSWFFnUCkDwfQdgI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pSndkmoNUJwXjgkbkgOrT5f9nSvuoMEZOkwAN9ElRaE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tyW+D4i26QihNM5MuBM+wnt5AdWGSJaJ4X5ydc9iWTU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9Syjr8RoxUgPKr+O5rsCu07AvcebA4P8IVKyS1NVLWc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "67tPfDYnK2tmrioI51fOBG0ygajcV0pLo5+Zm/rEW7U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "y0EiPRxYTuS1eVTIaPQUQBBxwkyxNckbePvKgChwd0M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NWd+2veAaeXQgR3vCvzlI4R1WW67D5YsVLdoXfdb8qg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PY5RQqKQsL2GqBBSPNOEVpojNFRX/NijCghIpxD6CZk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lcvwTyEjFlssCJtdjRpdN6oY+C7bxZY+WA+QAqzj9zg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWE7XRNylvTwO/9Fv56dNqUaQWMmESNS/GNIwgBaEI0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ijwlrUeS8nRYqK1F8kiCYF0mNDolEZS+/lJO1Lg93C8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8KzV+qYGYuIjoNj8eEpnTuHrMYuhzphl80rS6wrODuU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wDyTLjSEFF895hSQsHvmoEQVS6KIkZOtq1c9dVogm9I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SGrtPuMYCjUrfKF0Pq/thdaQzmGBMUvlwN3ORIu9tHU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KySHON3hIoUk4xWcwTqk6IL0kgjzjxgMBObVIkCGvk4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hBIdS9j0XJPeT4ot73ngELkpUoSixvRBvdOL9z48jY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Tx6um0q9HjS5ZvlFhvukpI6ORnyrXMWVW1OoxvgqII0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zFKlyfX5H81+d4A4J3FKn4T5JfG+OWtR06ddyX4Mxas=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cGgCDuPV7MeMMYEDpgOupqyNP4BQ4H7rBnd2QygumgM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IPaUoy98v11EoglTpJ4kBlEawoZ8y7BPwzjLYBpkvHQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Pfo4Am6tOWAyZNn8G9W5HWWGC3ZWmX0igI/RRB870Ro=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fnTSjd7bC1Udoq6iM7UDnHAC/lsIXSHp/Gy332qw+/I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fApBgVRrTDyEumkeWs5p3ag9KB48SbU4Si0dl7Ns9rc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QxudfBItgoCnUj5NXVnSmWH3HK76YtKkMmzn4lyyUYY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sSOvwhKa29Wq94bZ5jGIiJQGbG1uBrKSBfOYBz/oZeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FdaMgwwJ0NKsqmPZLC5oE+/0D74Dfpvig3LaI5yW5Fs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sRWBy12IERN43BSZIrnBfC9+zFBUdvjTlkqIH81NGt4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/4tIRpxKhoOwnXAiFn1Z7Xmric4USOIfKvTYQXk3QTc=", - "subType": "00" - } - } - ] - } - - - { - "_id": { - "$numberInt": "1" - }, - "encryptedDecimalNoPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "Mr/laWHUijZT5VT3x2a7crb7wgd/UXOGz8jr8BVqBpM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wXVD/HSbBljko0jJcaxJ1nrzs2+pchLQqYR3vywS8SU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VDCpBYsJIxTfcI6Zgf7FTmKMxUffQv+Ys8zt5dlK76I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zYDslUwOUVNwTYkETfjceH/PU3bac9X3UuQyYJ19qK0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rAOmHSz18Jx107xpbv9fYcPOmh/KPAqge0PAtuhIRnc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BFOB1OGVUen7VsOuS0g8Ti7oDsTt2Yj/k/7ta8YAdGM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2fckE5SPs0GU+akDkUEM6mm0EtcV3WDE/sQsnTtodlk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "mi9+aNjuwIvaMpSHENvKzKRAmX9cYguo2mXLvOoftHQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "K6TWn4VcWWkz/gkUkLmbtwkG7SNeABICmLDnoYJFlLU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Z+2/cEtGU0Fq7QJFNGA/0y4aWAsw0ncG6X0LYRqwS3c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rrSIf+lgcNZFbbUkS9BmE045jRWBpcBJXHzfMVEFuzE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KlHL3Kyje1/LMIfgbCqw1SolxffJvvgsYBV5y77wxuA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hzJ1YBoETmYeCh352dBmG8d8Wse/bUcqojTWpWQlgsc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lSdcllDXx8MA+s0GULjDA1lQkcV0L8/aHtZ6dM2pZ2c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "HGr7JLTTA7ksAnlmjSIwwdBVvgr3fv46/FTdiCPYpos=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "mMr25v1VwOEVZ8xaNUTHJCcsYqV+kwK6RzGYilxPtJ4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "129hJbziPJzNo0IoTU3bECdge0FtaPW8dm4dyNVNwYU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "doiLJ96qoo+v7NqIAZLq6BI5axV8Id8gT5vyJ1ZZ0PM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cW/Lcul3xYmfyvI/0x/+ybN78aQmBK1XIGs1EEU09N8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1aVIwzu9N5EJV9yEES+/g6hOTH7cA2NTcLIc59cu0wU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kw5tyl7Ew0r1wFyrN1mB9FiVW2hK2BxxxUuJDNWjyjQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ADAY2YBrm6RJBDY/eLLcfNxmSJku+mefz74gH66oyco=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8gkqB1LojzPrstpFG7RHYmWxXpIlPDTqWnNsXH7XDRU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "TESfVQMDQjfTZmHmUeYUE2XrokJ6CcrsKx/GmypGjOw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qFM+HFVQ539S0Ouynd1fBHoemFxtU9PRxE5+Dq7Ljy4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jPiFgUZteSmOg4wf3bsEKCZzcnxmMoILsgp/GaZD+dM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YaWUgJhYgPNN7TkFK16H8SsQS226JguaVhOIQxZwQNQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x90/Qk3AgyaFsvWf2KUCu5XF3j76WFSjt/GrnG01060=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ZGWybWL/xlEdMYRFCZDUoz10sywTf7U/7wufsb78lH0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8l4ganN66jIcdxfHAdYLaym/mdzUUQ8TViw3MDRySPc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "c8p5XEGTqxqvRGVlR+nkxw9uUdoqDqTB0jlYQ361qMA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1ZGFLlpQBcU3zIUg8MmgWwFKVz/SaA7eSYFrfe3Hb70=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "34529174M77rHr3Ftn9r8jU4a5ztYtyVhMn1wryZSkU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YkQ4pxFWzc49MS0vZM6S8mNo4wAwo21rePBeF3C+9mI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MhOf4mYY00KKVhptOcXf0bXB7WfuuM801MRJg4vXPgc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7pbbD8ihNIYIBJ3tAUPGzHpFPpIeCTAk5L88qCB0/9w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "C9Q5PoNJTQo6pmNzXEEXUEqH22//UUWY1gqILcIywec=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "AqGVk1QjDNDLYWGRBX/nv9QdGR2SEgXZEhF0EWBAiSE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/sGI3VCbJUKATULJmhTayPOeVW+5MjWSvVCqS77sRbU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yOtbL0ih7gsuoxVtRrACMz+4N5uo7jIR7zzmtih2Beo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uA6dkb2Iyg9Su8UNDvZzkPx33kPZtWr/CCuEY+XgzUM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1DoSFPdHIplqZk+DyWAmEPckWwXw/GdB25NLmzeEZhk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OfDVS0T3ZuIXI/LNbTp6C9UbPIWLKiMy6Wx+9tqNl+g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "3PZjHXbmG6GtPz+iapKtQ3yY4PoFFgjIy+fV2xQv1YU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kaoLN0BoBWsmqE7kKkJQejATmLShd8qffcAmlhsxsGY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vpiw9KgQdegGmp7IJnSGX2miujRLU0xzs0ITTqbPW7c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NuXFf7xGUefYjIUTuMxNUTCfVHrF8oL0AT7dPv5Plk4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8Tz53LxtfEBJ9eR+d2690kwNsqPV6XyKo2PlqZCbUrc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "e6zsOmHSyV8tyQtSX6BSwui6wK9v1xG3giY/IILJQ2w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2fedFMCxa2DzmIpfbDKGXhQg0PPwbUv6vIWdwwlvhms=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yEJKMFnWXTC8tJUfzCInzQRByNEPjHxpw4L4m8No91Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YbFuWwOiFuQyOzIJXDbOkCWC2DyrG+248TBuVCa1pXU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "w7IkwGdrguwDrar5+w0Z3va5wXyZ4VXJkDMISyRjPGo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YmJUoILTRJPhyIyWyXJTsQ6KSZHHbEpwPVup6Ldm/Ko=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FvMjcwVZJmfh6FP/yBg2wgskK+KHD8YVUY6WtrE8xbg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "h4HCtD4HyYz0nci49IVAa10Z4NJD/FHnRMV4sRX6qro=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "nC7BpXCmym+a0Is2kReM9cYN2M1Eh5rVo8fjms14Oiw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1qtVWaeVo649ZZZtN8gXbwLgMWGLhz8beODbvru0I7Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Ej+mC0QFyMNIiSjR939S+iGBm7dm+1xObu5IcF/OpbU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UQ8LbUG3cMegbr9yKfKanAPQE1EfPkFciVDrNqZ5GHY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4iI3mXIDjnX+ralk1HhJY43mZx2uTJM7hsv9MQzTX7E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0WQCcs3rvsasgohERHHCaBM4Iy6yomS4qJ5To3/yYiw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qDCTVPoue1/DOAGNAlUstdA9Sid8MgEY4e5EzHcVHRk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9F9Mus0UnlzHb8E8ImxgXtz6SU98YXD0JqswOKw/Bzs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pctHpHKVBBcsahQ6TNh6/1V1ZrqOtKSAPtATV6BJqh0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vfR3C/4cPkVdxtNaqtF/v635ONbhTf5WbwJM6s4EXNE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ejP43xUBIex6szDcqExAFpx1IE/Ksi5ywJ84GKDFRrs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jbP4AWYd3S2f3ejmMG7dS5IbrFol48UUoT+ve3JLN6U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CiDifI7958sUjNqJUBQULeyF7x0Up3loPWvYKw9uAuw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "e2dQFsiHqd2BFHNhlSxocjd+cPs4wkcUW/CnCz4KNuM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PJFckVmzBipqaEqsuP2mkjhJE4qhw36NhfQ9DcOHyEU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "S3MeuJhET/B8VcfZYDR9fvX0nscDj416jdDekhmK11s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CGVHZRXpuNtQviDB2Kj03Q8uvs4w3RwTgV847R7GwPw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yUGgmgyLrxbEpDVy89XN3c2cmFpZXWWmuJ/35zVZ+Jw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "inb6Q97mL1a9onfNTT8v9wsoi/fz7KXKq3p8j90AU9c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CCyYx/4npq9xGO1lsCo8ZJhFO9/tN7DB+/DTE778rYg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "LNnYw4fwbiAZu0kBdAHPEm/OFnreS+oArdB5O/l/I98=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "P006SxmUS/RjiQJVYPdMFnNo3827GIEmSzagggkg05Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "oyvwY+WsnYV6UHuPki1o0ILJ2jN4uyXf9yaUNtZJyBA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "36Lk3RHWh1wmtCWC/Yj6jNIo17U5y6SofAgQjzjVxD8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vOOo8FqeHnuO9mqOYjIb4vgwIwVyXZ5Y+bY5d9tGFUM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "bJiDJjwQRNxqxlGjRm5lLziFhcfTDCnQ/qU1V85qcRg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2Qgrm1n0wUELAQnpkEiIHB856yv76q8jLbpiucetcm0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "5ciPOYxTK0WDwwYyfs7yiVymwtYQXDELLxmM4JLl4/o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "31dC2WUSIOKQc4jwT6PikfeYTwi80mTlh7P31T5KNQU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YluTV2Mu53EGCKLcWfHZb0BM/IPW2xJdG3vYlDMEsM4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dh/8lGo2Ek6KukSwutH6Q35iy8TgV0FN0SJqe0ZVHN8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EVw6HpIs3BKen2qY2gz4y5dw1JpXilfh07msZfQqJpc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FYolLla9L8EZMROEdWetozroU40Dnmwwx2jIMrr7c1A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8M6k4QIutSIj6CM41vvkQtuFsaGrjoR9SZJVSLbfGKQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9LM0VoddDNHway442MqY+Z7vohB2UHau/cddshhzf40=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "66i8Ytco4Yq/FMl6pIRZazz3CZlu8fO2OI6Pne0pvHU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2a/HgX+MjZxjXtSvHgF1yEpHMJBkl8Caee8XrJtn0WM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "frhBM662c4ZVG7mWP8K/HhRjd01lydW/cPcHnDjifqc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6k1T7Q1t668PBqv6fwpVnT1HWh7Am5LtbKvwPJKcpGU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UlJ5Edfusp8S/Pyhw6KTglIejmbr1HO0zUeHn/qFETA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jsxsB+1ECB3assUdoC333do9tYH+LglHmVSJHy4N8Hg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2nzIQxGYF7j3bGsIesECEOqhObKs/9ywknPHeJ3yges=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xJYKtuWrX90JrJVoYtnwP7Ce59XQGFYoalxpNfBXEH0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NLI5lriBTleGCELcHBtNnmnvwSRkHHaLOX4cKboMgTw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hUOQV0RmE5aJdJww1AR9rirJG4zOYPo+6cCkgn/BGvQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "h4G2Of76AgxcUziBwCyH+ayMOpdBWzg4yFrTfehSC2c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VuamM75RzGfQpj2/Y1jSVuQLrhy6OAwlZxjuQLB/9Ss=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kn9+hLq7hvw02xr9vrplOCDXKBTuFhfbX7d5v/l85Pg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fAiGqKyLZpGngBYFbtYUYt8LUrJ49vYafiboifTDjxs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BxRILymgfVJCczqjUIWXcfrfSgrrYkxTM5VTg0HkZLY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CrFY/PzfPU2zsFkGLu/dI6mEeizZzCR+uYgjZBAHro0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "AEbrIuwvXLTtYgMjOqnGQ8y8axUn5Ukrn7UZRSyfQVw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ouWeVH3PEFg+dKWlXc6BmqirJOaVWjJbMzZbCsce4dA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+hd6xFB+EG+kVP7WH4uMd1CLaWMnt5xJRaY/Guuga9Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zmpGalfAOL3gmcUMJYcLYIRT/2VDO/1Dw4KdYZoNcng=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2PbHAoM/46J2UIZ/vyksKzmVVfxA7YUyIxWeL/N/vBk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7fD9x+zk5MVFesb59Klqiwwmve7P5ON/5COURXj5smE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tlrNQ4jaq051iaWonuv1sSrYhKkL1LtNZuHsvATha3s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fBodm28iClNpvlRyVq0dOdXQ08S7/N3aDwid+PdWvRo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "O+/nnRqT3Zv7yMMGug8GhKHaWy6u7BfRGtZoj0sdN1c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "5AZZ/RTMY4Photnm/cpXZr/HnFRi3eljacMsipkJLHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "oFVyo/kgoMxBIk2VE52ySSimeyU+Gr0EfCwapXnTpKA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Z8v59DfcnviA0mzvnUk+URVO0UuqAWvtarEgJva/n1c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "P64GOntZ+zBJEHkigoh9FSxSO+rJTqR20z5aiGQ9an4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xMbSuDPfWuO/Dm7wuVl06GnzG9uzTlJJX9vFy7boGlY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kXPB19mRClxdH2UsHwlttS6lLU2uHvzuZgZz7kC45jU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NDVjVYXAw4k0w4tFzvs7QDq39aaU3HQor4I2XMKKnCk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uKw/+ErVfpTO1dGUfd3T/eWfZW3nUxXCdBGdjvHtZ88=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "av0uxEzWkizYWm0QUM/MN1hLibnxPvCWJKwjOV4yVQY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ERwUC47dvgOBzIsEESMIioLYbFOxOe8PtJTnmDkKuHM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2gseKlG5Le12fS/vj4eaED4lturF16kAgJ1TpW3HxEE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7Cvg0Y3j/5i2F1TeXxlMmU7xwif5dCmwkZAOrVC5K2Y=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-InsertFind.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-InsertFind.json deleted file mode 100644 index 5a2adf6907..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-InsertFind.json +++ /dev/null @@ -1,1893 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalNoPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range Decimal. Insert and Find.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDecimalNoPrecision": { - "$gt": { - "$numberDecimal": "0" - } - } - } - }, - "result": [ - { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1" - } - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalNoPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalNoPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "encryptedDecimalNoPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - }, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalNoPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": { - "$numberInt": "0" - }, - "encryptedDecimalNoPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "rbf3AeBEv4wWFAKknqDxRW5cLNkFvbIs6iJjc6LShQY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "n+XAuFnP8Dov9TnhGFxNx0K/MnVM9WbJ7RouEu0ndO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yRXojuVdn5GQtD97qYlaCL6cOLmZ7Cvcb3wFjkLUIdM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DuIkdRPITRs55I4SZmgomAHCIsDQmXRhW8+MOznkzSk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SsBk+Et1lTbU+QRPx+xyJ/jMkmfG+QCvQEpip2YYrzA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "crCIzOd8KhHvvUlX7M1v9bhvU4pLdTc+X2SuqoKU5Ek=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YOWdCw4UrqnxkAaVjqmC4sKQDMVMHEpFGnlxpxdaU6E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "M3SShp81Ff8tQ632qKbv9MUcN6wjDaBReI0VXNu6Xh4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gzHlSPxpM0hT75kQvWFzGlOxKvDoiKQZOr19V6l2zXI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s3JnppOGYw9SL2Q1kMAZs948v2F5PrpXjGei/HioDWs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cG6+3Gk/zEH68P/uuuwiAUVCuyJwa1LeV+t29FlPPAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dupdvR3AyJtM+g9NDKiaLVOtGca387JQp8w+V03m7Ig=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JqEQc5svj2jTvZ6LLA5ivE+kTb/0aRemSEmxk4G7Zrg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "szcXXXKnob+p3SoM4yED2R920LeJ7cVsclPMFTe4CeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o1QoGVXmuBdHwHm7aCtGMlMVKrjFdYvJXpoq6uhIAZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Jfm5wPlqqLCJRGQIqRq2NGmpn7s0Vrih2H3YAOoI2YU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zMHLb8ARbsYo8Ld05bqnGFf1Usha6EGb8QKwdSAyps0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yQdtq9lh5pugL7/i0Bj/PuZUUBUIzf+7wj1rl5y736w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wGWVZdO7qIuyDg/BqDgqjgoQ02h5YYgwXQB1oCin2NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "by9HMLj6NTEpgztZ5HSN6GxImkXPcaFINYDzgZY33X8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tWo0vbasi7bXmn/MsOx13VC1IsWtpx/nYp0uj4iMzdA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tQQpndUYd5O87lOtrGjH3wl9VsOK0ray7RMasL90sBM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cQjXEDCMsOpKLLf+vlTgIHA+cbSJdzqhbSX9Wvh95aA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7yMpU48IxK9SzP2cx3VnTownGEwFmeFofuuFT97SuuY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kSOx1kz0CmBgzKQHZlo65ZUY1DIv9A99JRm+Us2y6Ew=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ubQpdPBe6/xvtr+AcXdfYLSvYCR4ot0tivehkCsupb4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xal+iCJ6FTefRQToyoNksc9NCZShyn04NDGi4IYrcoM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "d7jU4iOK50xHxlkSifcxlZFCM46TSgQzoYivxG3HNLY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJvl2nsBLBVzL3pp6sKWCL4UXeh3q/roYBJjSb74ve0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OIUCaKRvIx9t1w6Hxlz1IcQTdPNCfdRNwnnTm10W+X0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A9tvzsiElotOUVIB4CqfQp9mAwqvTM35YkmAR170aHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lI8gpK7hpb7c9x4RQugsxMnQay5LZJmwslZdvMx/dcE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dNCzh40U0XvdKnSDi3HRQOWQftEsDVqc4uUvsVFGoq8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IP+iwEBWBwVVZIdpaMu8k5+soFCz+TZkYn3drKZ9grE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnqyh6e0y5svHkJDShlN9CHV0WvMBE4QbtJpQw5ZCXc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "elEl42tbVDoRTLjAhZUFEtXiut4b3PVhg/1ZLZSQdtE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vHuu2FxwclMHqyE6JBYbTYgbEkB0dqb/JuaxsvfwsmY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xTf7NCe3Gf8QpE78HR5OknlLTKfs9J+RN9UZpH6fnso=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XiWSasRnJAulGR6+LCVD3mwRObXylqYWR9jvpywq12c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MZMxEQ5ikx0PG1YFIExv0UnTZogsvgeOEZTpzvBDn4w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yZMyMZBDrWbAhvnic7vvIYhmO9m5H2iuv0c8KNZrBzY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xxM14hTPY5j0vvcK2C7YAEjzdsfUTFHozHC0hEo1bxI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+01rqR1xVwkpGXcstbk1ItJqFVjH6Q8MGxEN3Cm9Y1A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xOpLV0Z2VTRJ3iWtnWZcsyjXubTIkYWo31cO+HV1o1k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BWUOLqgLBqc5NwxVlSV5H3KFQPXbCp7mdo+jF+8cJqY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fuQb1S6xZDGlrEbK+kI23aL53PP1PVNwqICnZNt9Yzg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfscnoibFttahLdPVC4Ee+47ewGFKpDSU7M6HX19bKE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rpSW2awybNVeKtat91VFxqbINoTfNhPfQAu+d73Xtf8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9M/CP9ccOIIj2LLFmE0GFDO0Ban2wsNalEXfM6+h+1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WrEMG49l1ye4MhXs5ZS9tz8P6h+hDvthIg/2wW9ne1Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ImNhbfeyfH8qIEeA5ic0s3dAQBdzzTBS+CPsNih9vZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dWP33YDSn04UKJN2ogh2Rui0iW/0q2y18OCDRVcfyoo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lYv0isAtfGh6H9tdp3cp2eHU7q2J+uk7QrgcxtK3w7Y=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VGMoamB/+7zTOYcY/pqJc96xlv2PdW4hwsIAEIslTDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yNeBWMF7BnD9wVwz2PgJsvWr77QiVvvWUvJF0+fqBug=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfpvObJ+tJBXSvqeN7vlOfmhYign635lciYAJIjUtY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dsen4NqjzVGjpjufiTMs3+gqeD09EbnuogPgxrJECwg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pxCWVM3sn19NsFEpgHbgLa+PmYlhN3mMiP0Wk8kJhYw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q11KNvJszjYIB9n9HcC+N4uz11a3eRj1L3BH9scKMDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A1PmkgcEToWh1JiVWE6mI5jUu7poxWWuCUt/cgRUUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qJo3Hu4PJeanL7XEaWXO/n3YsodhZyd+MJOOmB9Kpd8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BkBKLO8URFscfRY9Bav/1+L9mLohDgNr/MkZtGiraIs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rZq5WA3Hx3xthOyHAJXK//f8pE2qbz7YKu3TIMp9GFY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X07a/Lm80p5xd4RFs1dNmw+90tmPDPdGiAKVZkxd4zY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6YrBn2ofIw1b5ooakrLOwF41BWrps8OO0H9WH4/rtlE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0l86Ag5OszXpa78SlOUV3K9nff5iC1p0mRXtLg9M1s4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Hn6yuxFHodeyu7ISlhYrbSf9pTiH4TDEvbYLWjTwFO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zdf4y2etKBuIpkEU1zMwoCkCsdisfXZCh8QPamm+drY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rOQ9oMdiK5xxGH+jPzOvwVqdGGnF3+HkJXxn81s6hp4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "61aKKsE3+BJHHWYvs3xSIBvlRmKswmaOo5rygQJguUg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KuDb/GIzqDM8wv7m7m8AECiWJbae5EKKtJRugZx7kR0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Q+t8t2TmNUiCIorVr9F3AlVnX+Mpt2ZYvN+s8UGict8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJRZIpKxUgHyL83kW8cvfjkxN3z6WoNnUg+SQw+LK+k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnUsYjip8SvW0+m9mR5WWTkpK+p6uwJ6yBUAlBnFKMk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PArHlz+yPRYDycAP/PgnI/AkP8Wgmfg++Vf4UG1Bf0E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wnIh53Q3jeK8jEBe1n8kJLa89/H0BxO26ZU8SRIAs9Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4F8U59gzBLGhq58PEWQk2nch+R0Va7eTUoxMneReUIA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ihKagIW3uT1dm22ROr/g5QaCpxZVj2+Fs/YSdM2Noco=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EJtUOOwjkrPUi9mavYAi+Gom9Y2DuFll7aDwo4mq0M0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dIkr8dbaVRQFskAVT6B286BbcBBt1pZPEOcTZqk4ZcI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aYVAcZYkH/Tieoa1XOjE/zCy5AJcVTHjS0NG2QB7muA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sBidL6y8TenseetpioIAAtn0lK/7C8MoW4JXpVYi3z8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0Dd2klU/t4R86c2WJcJDAd57k/N7OjvYSO5Vf8KH8sw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I3jZ92WEVmZmgaIkLbuWhBxl7EM6bEjiEttgBJunArA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aGHoQMlgJoGvArjfIbc3nnkoc8SWBxcrN7hSmjMRzos=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "bpiWPnF/KVBQr5F6MEwc5ZZayzIRvQOLDAm4ntwOi8g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tI7QVKbE6avWgDD9h4QKyFlnTxFCwd2iLySKakxNR/I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XGsge0CnoaXgE3rcpKm8AEeku5QVfokS3kcI+JKV1lk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JQxlryW2Q5WOwfrjAnaZxDvC83Dg6sjRVP5zegf2WiM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YFuHKJOfoqp1iGVxoFjx7bLYgVdsN4GuUFxEgO9HJ5s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Z6vUdiCR18ylKomf08uxcQHeRtmyav7/Ecvzz4av3k4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SPGo1Ib5AiP/tSllL7Z5PAypvnKdwJLzt8imfIMSEJQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "m94Nh6PFFQFLIib9Cu5LAKavhXnagSHG6F5EF8lD96I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pfEkQI98mB+gm1+JbmVurPAODMFPJ4E8DnqfVyUWbSo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DNj3OVRLbr43s0vd+rgWghOL3FqeO/60npdojC8Ry/M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kAYIQrjHVu49W8FTxyxJeiLVRWWjC9fPcBn+Hx1F+Ss=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aCSO7UVOpoQvu/iridarxkxV1SVxU1i9HVSYXUAeXk4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Gh6hTP/yj1IKlXQ+Q69KTfMlGZjEcXoRLGbQHNFo/1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/gDgIFQ4tAlJk3GN48IS5Qa5IPmErwGk8CHxAbp6gs0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PICyimwPjxpusyKxNssOOwUotAUbygpyEtORsVGXT8g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4lu+cBHyAUvuxC6JUNyHLzHsCogGSWFFnUCkDwfQdgI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pSndkmoNUJwXjgkbkgOrT5f9nSvuoMEZOkwAN9ElRaE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tyW+D4i26QihNM5MuBM+wnt5AdWGSJaJ4X5ydc9iWTU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9Syjr8RoxUgPKr+O5rsCu07AvcebA4P8IVKyS1NVLWc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "67tPfDYnK2tmrioI51fOBG0ygajcV0pLo5+Zm/rEW7U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "y0EiPRxYTuS1eVTIaPQUQBBxwkyxNckbePvKgChwd0M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NWd+2veAaeXQgR3vCvzlI4R1WW67D5YsVLdoXfdb8qg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PY5RQqKQsL2GqBBSPNOEVpojNFRX/NijCghIpxD6CZk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lcvwTyEjFlssCJtdjRpdN6oY+C7bxZY+WA+QAqzj9zg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWE7XRNylvTwO/9Fv56dNqUaQWMmESNS/GNIwgBaEI0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ijwlrUeS8nRYqK1F8kiCYF0mNDolEZS+/lJO1Lg93C8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8KzV+qYGYuIjoNj8eEpnTuHrMYuhzphl80rS6wrODuU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wDyTLjSEFF895hSQsHvmoEQVS6KIkZOtq1c9dVogm9I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SGrtPuMYCjUrfKF0Pq/thdaQzmGBMUvlwN3ORIu9tHU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KySHON3hIoUk4xWcwTqk6IL0kgjzjxgMBObVIkCGvk4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hBIdS9j0XJPeT4ot73ngELkpUoSixvRBvdOL9z48jY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Tx6um0q9HjS5ZvlFhvukpI6ORnyrXMWVW1OoxvgqII0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zFKlyfX5H81+d4A4J3FKn4T5JfG+OWtR06ddyX4Mxas=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cGgCDuPV7MeMMYEDpgOupqyNP4BQ4H7rBnd2QygumgM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IPaUoy98v11EoglTpJ4kBlEawoZ8y7BPwzjLYBpkvHQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Pfo4Am6tOWAyZNn8G9W5HWWGC3ZWmX0igI/RRB870Ro=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fnTSjd7bC1Udoq6iM7UDnHAC/lsIXSHp/Gy332qw+/I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fApBgVRrTDyEumkeWs5p3ag9KB48SbU4Si0dl7Ns9rc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QxudfBItgoCnUj5NXVnSmWH3HK76YtKkMmzn4lyyUYY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sSOvwhKa29Wq94bZ5jGIiJQGbG1uBrKSBfOYBz/oZeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FdaMgwwJ0NKsqmPZLC5oE+/0D74Dfpvig3LaI5yW5Fs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sRWBy12IERN43BSZIrnBfC9+zFBUdvjTlkqIH81NGt4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/4tIRpxKhoOwnXAiFn1Z7Xmric4USOIfKvTYQXk3QTc=", - "subType": "00" - } - } - ] - }, - { - "_id": { - "$numberInt": "1" - }, - "encryptedDecimalNoPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "RGTjNVEsNJb+DG7DpPOam8rQWD5HZAMpRyiTQaw7tk8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I93Md7QNPGmEEGYU1+VVCqBPBEvXdqHPtTJtMOn06Yk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "GecBFQ1PemlECWZWCl7f74vmsL6eB6mzQ9n6tK6FYfs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QpjhZl+O1ORifgtCZuWAdcP6OKL7IZ2cA46v8FJcV28=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RlQWwhU+uVv0a+9IB5cUkEfvHBvOw3B1Sx6WfPWMqes=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ubb81XTC7U+4tcNzf1oYvOY6gR5hC2Izqx54f4GuJ0E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6M4Q5NMQ9TqNnjzGOxIkiUIY8TEL0I3XD1QnhefQUqU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BtInzk9t2FFMCEY6AQ7zN8jwrrZEs2irSv6q0Q4NaIw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6vxXfETu9cuBIpRBo3jUUU04mJIH/aAhLX8K6VI5Xv0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wXPCdS+q23zi1bkPnaVG2j0PsVtxdeSLJ//h6J1x8RU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KY3KkfBAsN2l80wbpj41G0gwBR5KmmFnZcagg7D3ENk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tI8NFAxXCX4VOnY5X73K6KI/Yspd3aR94KV39MhJlAw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "nFxH0UC3mATKA6Vboz+QX/hAjj19kF/SH6H5Cne7qC0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q8hYqIYaIi7nOdG/7qQZYnz8Bsacfi66M1nVku4SH08=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4saA92R4arp4anvD9xFtze+sNcQqTEhPHyl1h70A8NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DbIziOBRRyeQS6RtBR09E37LV+CTKrEjGoRMLSpG6eE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Fv80Plp/7w2gnVqrwawLd6qhJ10G4NCDm3re67cNq4Y=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "T/T2oiQCBBES4YN7EodzPRdabZSFlYIClHBym+bQUZE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ZQgHD3l46Ujqtbnj1VbbeM29C9wJzOhz+yZ/7XdSrxk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ltlFKzWvyZvHxDFOYDd/XXJ6kUiJj0ln2HTCEz2o4Z4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "flW8A7bltC1u8bzx0WJtxosGJdOVsJFfbx33jxnpFGg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SXO+92QbMKwUSG2t27ciunV1c3VvFkUuDmSczpRe008=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+KioGs1GM+xRBzFE67ePTWj04KMSE5/Y6qUF7nJ5kvU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L3xNVbh6YH+RzqABN+5Jgb7T234Efpn766DmUvxIxgg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hPF+60mBYPjh21dEmPlBhKgyc9S2qLtTkypYvnqP2Fc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EletRsETy2HcjaPIm2c8CkT7ch/P3pJJDC8hasepcSU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "r5bMXUaNKqLPxZ+TG9HYTG4aSDgcpim27rN8rQFkM0w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0Q7Erdr8+/S0wUEDDIqlS5XjBVWvhZY65K0uUDb6+Ns=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xEcnhXy35hbXNVBPOOt3TUHbxvKfQ48KjA9b6/rbMqQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "T8bEpiQNgsEudXvyKE9SZlSvbpV/LUaslsdqgSFltyo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hIoiaF2YjnxDbODfhFEB+JGZ5nf8suD3Shck5bwQ3N0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qnA6qzejeRJ0rsZaZ0zOvKAaXyxt5lpscKQNYFZNl4k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "anAKCL2DN/le2VaP0n2ucYSEH/DaaEH/8Sa4OqTZsRA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JCZlBJaFm618oWYSnT9Jr1MtwFVw4BZjOzO+5yWgR90=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yxyk4n9762WzcDVGnTn4jCqUnSMIVCrLDIjCX1QVj34=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fDI6fdKvDJwim5/CQwWZEzcrXE3LHgy7FTtffcC7tXE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Vex+gcz5T+WkzsVZQrkqUR2ryyZbnaOGuWpYvjN0zCw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8TLEXz+Gbbp6llHpZXVjLsdlYY9f6hrKpHVpyfDe0RY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7fTyt5BrunypS65TfOzFW2E2qdIuT4SLeDeGlbQoJCs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8fKGrkqN0/KuSjyXgDBmRauDKrSa//JBKRWHEB9xBf4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s4codmG7uN4ss6P357jL21lazEe90M9GOK5WrOknSV0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RkSpua8XF+NUdxVDU90EbLUTTyZFX3tt3atBTroFaRk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "LnTCuCDyAHK5B9KXzjtwGmWB+qergQk2OCjnIx9MI2A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cBFh0virAX4pVXf/udIGI2951i0+0aZAdJcBVGtYnT4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "G54X6myQXWZ5fw/G31en3QbdgfXzL9+hFTtJpnWMqDI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EdsiiuezcsFJFnYIyGjCOhnqMj1BOwTB5EFxN+ERUkg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dVH9MXLtk0WTwGQ3xmrhOqfropMUkDW3o6paNPGl3NU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sB3HqXKWY3pKbuEH8BTbfNIGfbY+7/ZbOc3XC+JRNNI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WHyDk62Xhqbo4/iie2aLIM4x2uuAjv6102dJSHI58oM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pNUFuHpeNRDUZ/NrtII2c6sNc9eGR1lIUlIyXKERA+0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UPa+pdCqnN0bfAptdzldQOSd01gidrDKy8KhWrpSKAI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "l+7dOAlo+HUffMqFYXL6pgUFeTbwOM9CjKQLxEoLtc4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SRnDXV/rN6C8xwMutv9E1luv3DOUio3VkgPr8Cpm7Ew=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QcH6gl+gX7xZ7OWhUNQMbndJy0Piz49pDo6RsnLkVSA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "t+uL4DnfsI/Zll/KXWW1cOKX3Hu8WIkm3pt9efCVSAQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "myutHDctku/+Uug/nD8gRbYvmx/IovtoAAC2/fz2oHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6C+cjD0e0nSCP6cPqQYbNG7SlOd6Mfvi8hyfm7Ng+D8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zg01JSoOj9oBKT0S1ldJucXzY5AKgreS+h2xJreWTOs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7qQ80/FjodHl1m1py/Oii0/9C/xWbLdhaRXQ+kkCP10=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YwWMNH07vL6c5Nhg+MRnVByhzUunu8y0VLM9z/XvR5U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Dle8bU98+fudAbc14SToZFkwvV3tcYVsjDug0NWljpc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "J+eKL1vPJmlzltvhI6Li5Fz/TJmi3Ng+ehRTcs46API=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zB3XzfFygLwC3WHkj0up+VbEd25KKoce1vOpG/5bwK4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vnVnmOnL+z2pqwE+A6cVKS0Iwy4F4/2IiElJca9bUQM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+lG5r/Fpqry3BtFuvY67+RntmHAMDoLVOSGc6ZoXPb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L5MXQertqc6uj7ADe8aWKbd1sYHPCE7P1VYVg9Zc3VI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "imKONuZgopt0bhM3GMX2WVPwQYMTobuUUEdhcLfHs4c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "eOkU1J1uVbiVFWBerbXsSIVcF2nqiicTkFy4x7kFHB8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gI0uDhXeoH/UatDQKEf4qo8FHzWZDhb/wuWTqbq/ID4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cOkd5Aa3btYhtojE/smsF/PJnULqQ4NNqTkU6KXTFmo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "AWNJMs1MTe294oFipp8Y6P0CjpkZ4qCZoClQF3XcHq8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6gJtlzXOFhGYrVbTuRMmvMlDTwXdNtR9aGBlHZPwIMw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "LEmwVGA/xsEG7UrcOoYLFu6KCXgijzFznenknuDacm8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "mIRFPTXRrGaPtp/Ydij2jgkRe4uoUvAKxW2d8b9zYL0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "B+Uv2u48WALOO0L311z+eryjYQzKJVMfdHMZPhOAFmY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "INXXp0wDyVCq+NtfIrrC2ciETmyW/dWB/48/u4yLEZ4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "se7DGo8XrlrQDLEcco1tZrQt9kDe+0RTyl2bw/quG4w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vr0m2+Zk9lbN6UgWCyn8xJWJOokU3IDYab5U5q1+CgQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XI+eJ8Gy2JktG1gICgoj1qpsfy1tKmH0kglWbaQH6DA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A+UCuNnuAUqnQzspA6TVqUPRmtZmpSex5HFw7THRxs0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xaH2Ehfljd19uo0Fvb3iwkdaiWEVQd2YPoitgEPkhSM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "S/iZBJGcc8+qZxyMtab65MMBoSglybwk3x58Nb86gnY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "w14ZE5qqY5YgkS4Zcs9YNbrQbY1XfGOOHNn9bOYnFVQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0MhGd/jEF1vjkKGp+ZMn9SjLK54jkp9W4Hg+Sp/oxaI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "92QZ73e/NRTYgCm4aifaKth6aAsKnLLccBc0zx/qUTY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WOjzemCgFJOiGIp81RSVh/tFlzSTj9eFWcBnsiv2Ycs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DrsP9CmfKPjw5yLL8bnSeAxfNzAwlb+Z8OqCiKgBY7o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lMogqg8veBv6mri3/drMe9afJiKMvevkmGcw9BedfLo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "TxqwNcY8Tg2MPpNdkPBwvfpuTttSYRHU26DGECKYQ9o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "l0u1b4b4vYACWIwfnB7PZac4oDEgjQZCzHruNPTgAIY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "iVSGQ+cCfhbWIrY/v/WBORK92elu9gfRKyGhr6r/k00=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yK1forG50diEXte8ECzjfpHeYsPyuQ/dgxbxn/nzY5k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gIfTLCD3VwnOwkC0zPXWTqaITxX6ZplA69PO2a6zolc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "O/Zxlgh3WqpzJ7+Sd8XWMVID4/GXJUUWaSqfgDUi3b0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ZQ6yv368zwahUqSUYH/StL0Qgz/TwS1CzlMjVDvCciI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "m2rPEYkjwyiKdonMrKlcF7hya4lFOAUwEePJ3SgrNx8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Mq0yl5iVKlq71bT/dT/fXOWf2n90bTnXFnOdGDN0JOc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6qDGMXipPLC2O6EAAMjO2F9xx4rdqZso4IkPpH2304U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jvQHRQQa2RIszE2LX2Hv2LbRhYawJ6qmtRt8HZzFQXg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ovJXQrkZlpeHRciKyE/WWNm5O389gRgzx1W+Dw596X4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "a4kgRNvYctGYqyQv9qScL/WkljTYVylJ9pE9KDULlxU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qV4Q48vPiCJMTjljotzYKI/zfExWpkKOSHGcAjGyDig=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jtI7zbBF+QW/aYYTkn90zzyHLXLgmy7l1bzgMb2oqic=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q0KmJl9txPdn962UNvnfe6UFhdk9YaFZuTm33F+csso=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ULNdEqeZJgtmNOhN/Y9INzsE9AnxWYwOMn+pIbRXIFs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "R4oz9+wkdjpKe5tE1jpG7IURAnfvS5fLP4LrD5cZfTE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qG5Z7VhwSu/HT/YFTgDzyAAzJKq51xPw2HeEV5btYC4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OM/1DmIIZ5Qyhtq8TGkHTBEMVKjAnKRZMRXYtTG8ctc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2R5vZbljLXnDFA99YfGuRB7pAdPJVKsT25zLNMC0fUk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OMbavF2EmdAz1fHkLV3ctFEUDfriKhoT2gidwHZ9z1o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MWT4Zrw3/vVvTYMa1Is5Pjr3wEwnBfnEAPPUAHKQhNU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tBkRPfG9yxfKocQx5pAJX0oEHKPL0Tgtr+0UYe09InE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lqxpnDR/H0YgH7RcfKoNoaaRhe1SIazIeMbQ1fu9y3Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "utT1UdR22PWOTrOkZauztX613lAplV4eh/ejTRb7ZSk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "S+Y2yFyKi/a6FXhih4yGo29X8I8OT6/zwEoX6NMKT4o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QSjVppg29x6oS5yBg8OFjrFt0tuTpWCuKxfIy0k8YnE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "y3r6/Xsfvsl3HksXlVYkJgHUqpQGfICxg3x9f8Zw1qM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BSltHzEwDjFN4du9rDHAPvl22atlcTioEtt+gC5L1tk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0arGXjSN0006UnXbrWsGqhvBair569DeFDUME3Df3rA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s/DumaMad08S+PBUUcrS+v42K0z8HgcdiQtrFAEu2Qs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EzJ8Y8N0OQBTlnvrK82PdevDNZZO4E6CNgYVu8Cj6Ks=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VA4vr8jBPI5QdiPrULzzZjBMIUbG3V7Slg5zm0bFcKc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YAOvEB2ZLtq9LQiFViBHWaxxWVVonC2rNYj9tN9s3L0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hgaHMo9aAGS+nBwvqnTjZO+YkiQPY1c1XcIYeaYKHyI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YvaoLt3ZpH0atB0tNzwMjpoxRYJXl0DqSjisMJiGVBE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EMmW6CptFsiLoPOi5/uAJQ2FmeLg6mCpuVLLrRWk7Mc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1jQsNMarSnarlYmXEuoFokeBMg/090qUD9wqo1Zn8Gs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hupXNKhRpJxpyDAAP1TgJ5JMZh9lhbMk6s7D7dMS3C8=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-InsertFind.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-InsertFind.yml deleted file mode 100644 index 0007eeff67..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-InsertFind.yml +++ /dev/null @@ -1,1668 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - # Tests for Decimal (without precision) must only run against a replica set. Decimal (without precision) queries are expected to take a long time and may exceed the default mongos timeout. - topology: [ "replicaset" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDecimalNoPrecision', 'bsonType': 'decimal', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range Decimal. Insert and Find." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDecimalNoPrecision: { $numberDecimal: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDecimalNoPrecision: { $numberDecimal: "1" } } - - name: find - arguments: - filter: { encryptedDecimalNoPrecision: { $gt: { $numberDecimal: "0" } } } - result: [*doc1] - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedDecimalNoPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedDecimalNoPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: - "encryptedDecimalNoPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": { - "$numberInt": "0" - }, - "encryptedDecimalNoPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "rbf3AeBEv4wWFAKknqDxRW5cLNkFvbIs6iJjc6LShQY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "n+XAuFnP8Dov9TnhGFxNx0K/MnVM9WbJ7RouEu0ndO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yRXojuVdn5GQtD97qYlaCL6cOLmZ7Cvcb3wFjkLUIdM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DuIkdRPITRs55I4SZmgomAHCIsDQmXRhW8+MOznkzSk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SsBk+Et1lTbU+QRPx+xyJ/jMkmfG+QCvQEpip2YYrzA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "crCIzOd8KhHvvUlX7M1v9bhvU4pLdTc+X2SuqoKU5Ek=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YOWdCw4UrqnxkAaVjqmC4sKQDMVMHEpFGnlxpxdaU6E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "M3SShp81Ff8tQ632qKbv9MUcN6wjDaBReI0VXNu6Xh4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gzHlSPxpM0hT75kQvWFzGlOxKvDoiKQZOr19V6l2zXI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s3JnppOGYw9SL2Q1kMAZs948v2F5PrpXjGei/HioDWs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cG6+3Gk/zEH68P/uuuwiAUVCuyJwa1LeV+t29FlPPAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dupdvR3AyJtM+g9NDKiaLVOtGca387JQp8w+V03m7Ig=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JqEQc5svj2jTvZ6LLA5ivE+kTb/0aRemSEmxk4G7Zrg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "szcXXXKnob+p3SoM4yED2R920LeJ7cVsclPMFTe4CeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o1QoGVXmuBdHwHm7aCtGMlMVKrjFdYvJXpoq6uhIAZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Jfm5wPlqqLCJRGQIqRq2NGmpn7s0Vrih2H3YAOoI2YU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zMHLb8ARbsYo8Ld05bqnGFf1Usha6EGb8QKwdSAyps0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yQdtq9lh5pugL7/i0Bj/PuZUUBUIzf+7wj1rl5y736w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wGWVZdO7qIuyDg/BqDgqjgoQ02h5YYgwXQB1oCin2NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "by9HMLj6NTEpgztZ5HSN6GxImkXPcaFINYDzgZY33X8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tWo0vbasi7bXmn/MsOx13VC1IsWtpx/nYp0uj4iMzdA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tQQpndUYd5O87lOtrGjH3wl9VsOK0ray7RMasL90sBM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cQjXEDCMsOpKLLf+vlTgIHA+cbSJdzqhbSX9Wvh95aA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7yMpU48IxK9SzP2cx3VnTownGEwFmeFofuuFT97SuuY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kSOx1kz0CmBgzKQHZlo65ZUY1DIv9A99JRm+Us2y6Ew=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ubQpdPBe6/xvtr+AcXdfYLSvYCR4ot0tivehkCsupb4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xal+iCJ6FTefRQToyoNksc9NCZShyn04NDGi4IYrcoM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "d7jU4iOK50xHxlkSifcxlZFCM46TSgQzoYivxG3HNLY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJvl2nsBLBVzL3pp6sKWCL4UXeh3q/roYBJjSb74ve0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OIUCaKRvIx9t1w6Hxlz1IcQTdPNCfdRNwnnTm10W+X0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A9tvzsiElotOUVIB4CqfQp9mAwqvTM35YkmAR170aHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lI8gpK7hpb7c9x4RQugsxMnQay5LZJmwslZdvMx/dcE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dNCzh40U0XvdKnSDi3HRQOWQftEsDVqc4uUvsVFGoq8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IP+iwEBWBwVVZIdpaMu8k5+soFCz+TZkYn3drKZ9grE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnqyh6e0y5svHkJDShlN9CHV0WvMBE4QbtJpQw5ZCXc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "elEl42tbVDoRTLjAhZUFEtXiut4b3PVhg/1ZLZSQdtE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vHuu2FxwclMHqyE6JBYbTYgbEkB0dqb/JuaxsvfwsmY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xTf7NCe3Gf8QpE78HR5OknlLTKfs9J+RN9UZpH6fnso=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XiWSasRnJAulGR6+LCVD3mwRObXylqYWR9jvpywq12c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MZMxEQ5ikx0PG1YFIExv0UnTZogsvgeOEZTpzvBDn4w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yZMyMZBDrWbAhvnic7vvIYhmO9m5H2iuv0c8KNZrBzY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xxM14hTPY5j0vvcK2C7YAEjzdsfUTFHozHC0hEo1bxI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+01rqR1xVwkpGXcstbk1ItJqFVjH6Q8MGxEN3Cm9Y1A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xOpLV0Z2VTRJ3iWtnWZcsyjXubTIkYWo31cO+HV1o1k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BWUOLqgLBqc5NwxVlSV5H3KFQPXbCp7mdo+jF+8cJqY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fuQb1S6xZDGlrEbK+kI23aL53PP1PVNwqICnZNt9Yzg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfscnoibFttahLdPVC4Ee+47ewGFKpDSU7M6HX19bKE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rpSW2awybNVeKtat91VFxqbINoTfNhPfQAu+d73Xtf8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9M/CP9ccOIIj2LLFmE0GFDO0Ban2wsNalEXfM6+h+1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WrEMG49l1ye4MhXs5ZS9tz8P6h+hDvthIg/2wW9ne1Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ImNhbfeyfH8qIEeA5ic0s3dAQBdzzTBS+CPsNih9vZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dWP33YDSn04UKJN2ogh2Rui0iW/0q2y18OCDRVcfyoo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lYv0isAtfGh6H9tdp3cp2eHU7q2J+uk7QrgcxtK3w7Y=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VGMoamB/+7zTOYcY/pqJc96xlv2PdW4hwsIAEIslTDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yNeBWMF7BnD9wVwz2PgJsvWr77QiVvvWUvJF0+fqBug=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfpvObJ+tJBXSvqeN7vlOfmhYign635lciYAJIjUtY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dsen4NqjzVGjpjufiTMs3+gqeD09EbnuogPgxrJECwg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pxCWVM3sn19NsFEpgHbgLa+PmYlhN3mMiP0Wk8kJhYw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q11KNvJszjYIB9n9HcC+N4uz11a3eRj1L3BH9scKMDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A1PmkgcEToWh1JiVWE6mI5jUu7poxWWuCUt/cgRUUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qJo3Hu4PJeanL7XEaWXO/n3YsodhZyd+MJOOmB9Kpd8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BkBKLO8URFscfRY9Bav/1+L9mLohDgNr/MkZtGiraIs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rZq5WA3Hx3xthOyHAJXK//f8pE2qbz7YKu3TIMp9GFY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X07a/Lm80p5xd4RFs1dNmw+90tmPDPdGiAKVZkxd4zY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6YrBn2ofIw1b5ooakrLOwF41BWrps8OO0H9WH4/rtlE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0l86Ag5OszXpa78SlOUV3K9nff5iC1p0mRXtLg9M1s4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Hn6yuxFHodeyu7ISlhYrbSf9pTiH4TDEvbYLWjTwFO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zdf4y2etKBuIpkEU1zMwoCkCsdisfXZCh8QPamm+drY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rOQ9oMdiK5xxGH+jPzOvwVqdGGnF3+HkJXxn81s6hp4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "61aKKsE3+BJHHWYvs3xSIBvlRmKswmaOo5rygQJguUg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KuDb/GIzqDM8wv7m7m8AECiWJbae5EKKtJRugZx7kR0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Q+t8t2TmNUiCIorVr9F3AlVnX+Mpt2ZYvN+s8UGict8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJRZIpKxUgHyL83kW8cvfjkxN3z6WoNnUg+SQw+LK+k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnUsYjip8SvW0+m9mR5WWTkpK+p6uwJ6yBUAlBnFKMk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PArHlz+yPRYDycAP/PgnI/AkP8Wgmfg++Vf4UG1Bf0E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wnIh53Q3jeK8jEBe1n8kJLa89/H0BxO26ZU8SRIAs9Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4F8U59gzBLGhq58PEWQk2nch+R0Va7eTUoxMneReUIA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ihKagIW3uT1dm22ROr/g5QaCpxZVj2+Fs/YSdM2Noco=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EJtUOOwjkrPUi9mavYAi+Gom9Y2DuFll7aDwo4mq0M0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dIkr8dbaVRQFskAVT6B286BbcBBt1pZPEOcTZqk4ZcI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aYVAcZYkH/Tieoa1XOjE/zCy5AJcVTHjS0NG2QB7muA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sBidL6y8TenseetpioIAAtn0lK/7C8MoW4JXpVYi3z8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0Dd2klU/t4R86c2WJcJDAd57k/N7OjvYSO5Vf8KH8sw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I3jZ92WEVmZmgaIkLbuWhBxl7EM6bEjiEttgBJunArA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aGHoQMlgJoGvArjfIbc3nnkoc8SWBxcrN7hSmjMRzos=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "bpiWPnF/KVBQr5F6MEwc5ZZayzIRvQOLDAm4ntwOi8g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tI7QVKbE6avWgDD9h4QKyFlnTxFCwd2iLySKakxNR/I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XGsge0CnoaXgE3rcpKm8AEeku5QVfokS3kcI+JKV1lk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JQxlryW2Q5WOwfrjAnaZxDvC83Dg6sjRVP5zegf2WiM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YFuHKJOfoqp1iGVxoFjx7bLYgVdsN4GuUFxEgO9HJ5s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Z6vUdiCR18ylKomf08uxcQHeRtmyav7/Ecvzz4av3k4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SPGo1Ib5AiP/tSllL7Z5PAypvnKdwJLzt8imfIMSEJQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "m94Nh6PFFQFLIib9Cu5LAKavhXnagSHG6F5EF8lD96I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pfEkQI98mB+gm1+JbmVurPAODMFPJ4E8DnqfVyUWbSo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DNj3OVRLbr43s0vd+rgWghOL3FqeO/60npdojC8Ry/M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kAYIQrjHVu49W8FTxyxJeiLVRWWjC9fPcBn+Hx1F+Ss=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aCSO7UVOpoQvu/iridarxkxV1SVxU1i9HVSYXUAeXk4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Gh6hTP/yj1IKlXQ+Q69KTfMlGZjEcXoRLGbQHNFo/1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/gDgIFQ4tAlJk3GN48IS5Qa5IPmErwGk8CHxAbp6gs0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PICyimwPjxpusyKxNssOOwUotAUbygpyEtORsVGXT8g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4lu+cBHyAUvuxC6JUNyHLzHsCogGSWFFnUCkDwfQdgI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pSndkmoNUJwXjgkbkgOrT5f9nSvuoMEZOkwAN9ElRaE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tyW+D4i26QihNM5MuBM+wnt5AdWGSJaJ4X5ydc9iWTU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9Syjr8RoxUgPKr+O5rsCu07AvcebA4P8IVKyS1NVLWc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "67tPfDYnK2tmrioI51fOBG0ygajcV0pLo5+Zm/rEW7U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "y0EiPRxYTuS1eVTIaPQUQBBxwkyxNckbePvKgChwd0M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NWd+2veAaeXQgR3vCvzlI4R1WW67D5YsVLdoXfdb8qg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PY5RQqKQsL2GqBBSPNOEVpojNFRX/NijCghIpxD6CZk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lcvwTyEjFlssCJtdjRpdN6oY+C7bxZY+WA+QAqzj9zg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWE7XRNylvTwO/9Fv56dNqUaQWMmESNS/GNIwgBaEI0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ijwlrUeS8nRYqK1F8kiCYF0mNDolEZS+/lJO1Lg93C8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8KzV+qYGYuIjoNj8eEpnTuHrMYuhzphl80rS6wrODuU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wDyTLjSEFF895hSQsHvmoEQVS6KIkZOtq1c9dVogm9I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SGrtPuMYCjUrfKF0Pq/thdaQzmGBMUvlwN3ORIu9tHU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KySHON3hIoUk4xWcwTqk6IL0kgjzjxgMBObVIkCGvk4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hBIdS9j0XJPeT4ot73ngELkpUoSixvRBvdOL9z48jY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Tx6um0q9HjS5ZvlFhvukpI6ORnyrXMWVW1OoxvgqII0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zFKlyfX5H81+d4A4J3FKn4T5JfG+OWtR06ddyX4Mxas=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cGgCDuPV7MeMMYEDpgOupqyNP4BQ4H7rBnd2QygumgM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IPaUoy98v11EoglTpJ4kBlEawoZ8y7BPwzjLYBpkvHQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Pfo4Am6tOWAyZNn8G9W5HWWGC3ZWmX0igI/RRB870Ro=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fnTSjd7bC1Udoq6iM7UDnHAC/lsIXSHp/Gy332qw+/I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fApBgVRrTDyEumkeWs5p3ag9KB48SbU4Si0dl7Ns9rc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QxudfBItgoCnUj5NXVnSmWH3HK76YtKkMmzn4lyyUYY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sSOvwhKa29Wq94bZ5jGIiJQGbG1uBrKSBfOYBz/oZeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FdaMgwwJ0NKsqmPZLC5oE+/0D74Dfpvig3LaI5yW5Fs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sRWBy12IERN43BSZIrnBfC9+zFBUdvjTlkqIH81NGt4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/4tIRpxKhoOwnXAiFn1Z7Xmric4USOIfKvTYQXk3QTc=", - "subType": "00" - } - } - ] - } - - - { - "_id": { - "$numberInt": "1" - }, - "encryptedDecimalNoPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "RGTjNVEsNJb+DG7DpPOam8rQWD5HZAMpRyiTQaw7tk8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I93Md7QNPGmEEGYU1+VVCqBPBEvXdqHPtTJtMOn06Yk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "GecBFQ1PemlECWZWCl7f74vmsL6eB6mzQ9n6tK6FYfs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QpjhZl+O1ORifgtCZuWAdcP6OKL7IZ2cA46v8FJcV28=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RlQWwhU+uVv0a+9IB5cUkEfvHBvOw3B1Sx6WfPWMqes=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ubb81XTC7U+4tcNzf1oYvOY6gR5hC2Izqx54f4GuJ0E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6M4Q5NMQ9TqNnjzGOxIkiUIY8TEL0I3XD1QnhefQUqU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BtInzk9t2FFMCEY6AQ7zN8jwrrZEs2irSv6q0Q4NaIw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6vxXfETu9cuBIpRBo3jUUU04mJIH/aAhLX8K6VI5Xv0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wXPCdS+q23zi1bkPnaVG2j0PsVtxdeSLJ//h6J1x8RU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KY3KkfBAsN2l80wbpj41G0gwBR5KmmFnZcagg7D3ENk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tI8NFAxXCX4VOnY5X73K6KI/Yspd3aR94KV39MhJlAw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "nFxH0UC3mATKA6Vboz+QX/hAjj19kF/SH6H5Cne7qC0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q8hYqIYaIi7nOdG/7qQZYnz8Bsacfi66M1nVku4SH08=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4saA92R4arp4anvD9xFtze+sNcQqTEhPHyl1h70A8NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DbIziOBRRyeQS6RtBR09E37LV+CTKrEjGoRMLSpG6eE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Fv80Plp/7w2gnVqrwawLd6qhJ10G4NCDm3re67cNq4Y=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "T/T2oiQCBBES4YN7EodzPRdabZSFlYIClHBym+bQUZE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ZQgHD3l46Ujqtbnj1VbbeM29C9wJzOhz+yZ/7XdSrxk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ltlFKzWvyZvHxDFOYDd/XXJ6kUiJj0ln2HTCEz2o4Z4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "flW8A7bltC1u8bzx0WJtxosGJdOVsJFfbx33jxnpFGg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SXO+92QbMKwUSG2t27ciunV1c3VvFkUuDmSczpRe008=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+KioGs1GM+xRBzFE67ePTWj04KMSE5/Y6qUF7nJ5kvU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L3xNVbh6YH+RzqABN+5Jgb7T234Efpn766DmUvxIxgg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hPF+60mBYPjh21dEmPlBhKgyc9S2qLtTkypYvnqP2Fc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EletRsETy2HcjaPIm2c8CkT7ch/P3pJJDC8hasepcSU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "r5bMXUaNKqLPxZ+TG9HYTG4aSDgcpim27rN8rQFkM0w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0Q7Erdr8+/S0wUEDDIqlS5XjBVWvhZY65K0uUDb6+Ns=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xEcnhXy35hbXNVBPOOt3TUHbxvKfQ48KjA9b6/rbMqQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "T8bEpiQNgsEudXvyKE9SZlSvbpV/LUaslsdqgSFltyo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hIoiaF2YjnxDbODfhFEB+JGZ5nf8suD3Shck5bwQ3N0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qnA6qzejeRJ0rsZaZ0zOvKAaXyxt5lpscKQNYFZNl4k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "anAKCL2DN/le2VaP0n2ucYSEH/DaaEH/8Sa4OqTZsRA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JCZlBJaFm618oWYSnT9Jr1MtwFVw4BZjOzO+5yWgR90=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yxyk4n9762WzcDVGnTn4jCqUnSMIVCrLDIjCX1QVj34=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fDI6fdKvDJwim5/CQwWZEzcrXE3LHgy7FTtffcC7tXE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Vex+gcz5T+WkzsVZQrkqUR2ryyZbnaOGuWpYvjN0zCw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8TLEXz+Gbbp6llHpZXVjLsdlYY9f6hrKpHVpyfDe0RY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7fTyt5BrunypS65TfOzFW2E2qdIuT4SLeDeGlbQoJCs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8fKGrkqN0/KuSjyXgDBmRauDKrSa//JBKRWHEB9xBf4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s4codmG7uN4ss6P357jL21lazEe90M9GOK5WrOknSV0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RkSpua8XF+NUdxVDU90EbLUTTyZFX3tt3atBTroFaRk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "LnTCuCDyAHK5B9KXzjtwGmWB+qergQk2OCjnIx9MI2A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cBFh0virAX4pVXf/udIGI2951i0+0aZAdJcBVGtYnT4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "G54X6myQXWZ5fw/G31en3QbdgfXzL9+hFTtJpnWMqDI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EdsiiuezcsFJFnYIyGjCOhnqMj1BOwTB5EFxN+ERUkg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dVH9MXLtk0WTwGQ3xmrhOqfropMUkDW3o6paNPGl3NU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sB3HqXKWY3pKbuEH8BTbfNIGfbY+7/ZbOc3XC+JRNNI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WHyDk62Xhqbo4/iie2aLIM4x2uuAjv6102dJSHI58oM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pNUFuHpeNRDUZ/NrtII2c6sNc9eGR1lIUlIyXKERA+0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UPa+pdCqnN0bfAptdzldQOSd01gidrDKy8KhWrpSKAI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "l+7dOAlo+HUffMqFYXL6pgUFeTbwOM9CjKQLxEoLtc4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SRnDXV/rN6C8xwMutv9E1luv3DOUio3VkgPr8Cpm7Ew=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QcH6gl+gX7xZ7OWhUNQMbndJy0Piz49pDo6RsnLkVSA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "t+uL4DnfsI/Zll/KXWW1cOKX3Hu8WIkm3pt9efCVSAQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "myutHDctku/+Uug/nD8gRbYvmx/IovtoAAC2/fz2oHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6C+cjD0e0nSCP6cPqQYbNG7SlOd6Mfvi8hyfm7Ng+D8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zg01JSoOj9oBKT0S1ldJucXzY5AKgreS+h2xJreWTOs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7qQ80/FjodHl1m1py/Oii0/9C/xWbLdhaRXQ+kkCP10=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YwWMNH07vL6c5Nhg+MRnVByhzUunu8y0VLM9z/XvR5U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Dle8bU98+fudAbc14SToZFkwvV3tcYVsjDug0NWljpc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "J+eKL1vPJmlzltvhI6Li5Fz/TJmi3Ng+ehRTcs46API=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zB3XzfFygLwC3WHkj0up+VbEd25KKoce1vOpG/5bwK4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vnVnmOnL+z2pqwE+A6cVKS0Iwy4F4/2IiElJca9bUQM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+lG5r/Fpqry3BtFuvY67+RntmHAMDoLVOSGc6ZoXPb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L5MXQertqc6uj7ADe8aWKbd1sYHPCE7P1VYVg9Zc3VI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "imKONuZgopt0bhM3GMX2WVPwQYMTobuUUEdhcLfHs4c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "eOkU1J1uVbiVFWBerbXsSIVcF2nqiicTkFy4x7kFHB8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gI0uDhXeoH/UatDQKEf4qo8FHzWZDhb/wuWTqbq/ID4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cOkd5Aa3btYhtojE/smsF/PJnULqQ4NNqTkU6KXTFmo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "AWNJMs1MTe294oFipp8Y6P0CjpkZ4qCZoClQF3XcHq8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6gJtlzXOFhGYrVbTuRMmvMlDTwXdNtR9aGBlHZPwIMw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "LEmwVGA/xsEG7UrcOoYLFu6KCXgijzFznenknuDacm8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "mIRFPTXRrGaPtp/Ydij2jgkRe4uoUvAKxW2d8b9zYL0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "B+Uv2u48WALOO0L311z+eryjYQzKJVMfdHMZPhOAFmY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "INXXp0wDyVCq+NtfIrrC2ciETmyW/dWB/48/u4yLEZ4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "se7DGo8XrlrQDLEcco1tZrQt9kDe+0RTyl2bw/quG4w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vr0m2+Zk9lbN6UgWCyn8xJWJOokU3IDYab5U5q1+CgQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XI+eJ8Gy2JktG1gICgoj1qpsfy1tKmH0kglWbaQH6DA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A+UCuNnuAUqnQzspA6TVqUPRmtZmpSex5HFw7THRxs0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xaH2Ehfljd19uo0Fvb3iwkdaiWEVQd2YPoitgEPkhSM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "S/iZBJGcc8+qZxyMtab65MMBoSglybwk3x58Nb86gnY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "w14ZE5qqY5YgkS4Zcs9YNbrQbY1XfGOOHNn9bOYnFVQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0MhGd/jEF1vjkKGp+ZMn9SjLK54jkp9W4Hg+Sp/oxaI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "92QZ73e/NRTYgCm4aifaKth6aAsKnLLccBc0zx/qUTY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WOjzemCgFJOiGIp81RSVh/tFlzSTj9eFWcBnsiv2Ycs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DrsP9CmfKPjw5yLL8bnSeAxfNzAwlb+Z8OqCiKgBY7o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lMogqg8veBv6mri3/drMe9afJiKMvevkmGcw9BedfLo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "TxqwNcY8Tg2MPpNdkPBwvfpuTttSYRHU26DGECKYQ9o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "l0u1b4b4vYACWIwfnB7PZac4oDEgjQZCzHruNPTgAIY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "iVSGQ+cCfhbWIrY/v/WBORK92elu9gfRKyGhr6r/k00=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yK1forG50diEXte8ECzjfpHeYsPyuQ/dgxbxn/nzY5k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gIfTLCD3VwnOwkC0zPXWTqaITxX6ZplA69PO2a6zolc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "O/Zxlgh3WqpzJ7+Sd8XWMVID4/GXJUUWaSqfgDUi3b0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ZQ6yv368zwahUqSUYH/StL0Qgz/TwS1CzlMjVDvCciI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "m2rPEYkjwyiKdonMrKlcF7hya4lFOAUwEePJ3SgrNx8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Mq0yl5iVKlq71bT/dT/fXOWf2n90bTnXFnOdGDN0JOc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6qDGMXipPLC2O6EAAMjO2F9xx4rdqZso4IkPpH2304U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jvQHRQQa2RIszE2LX2Hv2LbRhYawJ6qmtRt8HZzFQXg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ovJXQrkZlpeHRciKyE/WWNm5O389gRgzx1W+Dw596X4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "a4kgRNvYctGYqyQv9qScL/WkljTYVylJ9pE9KDULlxU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qV4Q48vPiCJMTjljotzYKI/zfExWpkKOSHGcAjGyDig=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jtI7zbBF+QW/aYYTkn90zzyHLXLgmy7l1bzgMb2oqic=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q0KmJl9txPdn962UNvnfe6UFhdk9YaFZuTm33F+csso=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ULNdEqeZJgtmNOhN/Y9INzsE9AnxWYwOMn+pIbRXIFs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "R4oz9+wkdjpKe5tE1jpG7IURAnfvS5fLP4LrD5cZfTE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qG5Z7VhwSu/HT/YFTgDzyAAzJKq51xPw2HeEV5btYC4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OM/1DmIIZ5Qyhtq8TGkHTBEMVKjAnKRZMRXYtTG8ctc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2R5vZbljLXnDFA99YfGuRB7pAdPJVKsT25zLNMC0fUk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OMbavF2EmdAz1fHkLV3ctFEUDfriKhoT2gidwHZ9z1o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MWT4Zrw3/vVvTYMa1Is5Pjr3wEwnBfnEAPPUAHKQhNU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tBkRPfG9yxfKocQx5pAJX0oEHKPL0Tgtr+0UYe09InE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lqxpnDR/H0YgH7RcfKoNoaaRhe1SIazIeMbQ1fu9y3Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "utT1UdR22PWOTrOkZauztX613lAplV4eh/ejTRb7ZSk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "S+Y2yFyKi/a6FXhih4yGo29X8I8OT6/zwEoX6NMKT4o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QSjVppg29x6oS5yBg8OFjrFt0tuTpWCuKxfIy0k8YnE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "y3r6/Xsfvsl3HksXlVYkJgHUqpQGfICxg3x9f8Zw1qM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BSltHzEwDjFN4du9rDHAPvl22atlcTioEtt+gC5L1tk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0arGXjSN0006UnXbrWsGqhvBair569DeFDUME3Df3rA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s/DumaMad08S+PBUUcrS+v42K0z8HgcdiQtrFAEu2Qs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EzJ8Y8N0OQBTlnvrK82PdevDNZZO4E6CNgYVu8Cj6Ks=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VA4vr8jBPI5QdiPrULzzZjBMIUbG3V7Slg5zm0bFcKc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YAOvEB2ZLtq9LQiFViBHWaxxWVVonC2rNYj9tN9s3L0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hgaHMo9aAGS+nBwvqnTjZO+YkiQPY1c1XcIYeaYKHyI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YvaoLt3ZpH0atB0tNzwMjpoxRYJXl0DqSjisMJiGVBE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EMmW6CptFsiLoPOi5/uAJQ2FmeLg6mCpuVLLrRWk7Mc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1jQsNMarSnarlYmXEuoFokeBMg/090qUD9wqo1Zn8Gs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hupXNKhRpJxpyDAAP1TgJ5JMZh9lhbMk6s7D7dMS3C8=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Update.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Update.json deleted file mode 100644 index b840d38347..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Update.json +++ /dev/null @@ -1,1910 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalNoPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range Decimal. Update.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$numberDecimal": "1" - } - } - } - }, - { - "name": "updateOne", - "arguments": { - "filter": { - "encryptedDecimalNoPrecision": { - "$gt": { - "$numberDecimal": "0" - } - } - }, - "update": { - "$set": { - "encryptedDecimalNoPrecision": { - "$numberDecimal": "2" - } - } - } - }, - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedDecimalNoPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalNoPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedDecimalNoPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalNoPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command_name": "update", - "command": { - "update": "default", - "ordered": true, - "updates": [ - { - "q": { - "encryptedDecimalNoPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - }, - "u": { - "$set": { - "encryptedDecimalNoPrecision": { - "$$type": "binData" - } - } - } - } - ], - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalNoPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - }, - "$db": "default" - } - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": { - "$numberInt": "0" - }, - "encryptedDecimalNoPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "rbf3AeBEv4wWFAKknqDxRW5cLNkFvbIs6iJjc6LShQY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "n+XAuFnP8Dov9TnhGFxNx0K/MnVM9WbJ7RouEu0ndO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yRXojuVdn5GQtD97qYlaCL6cOLmZ7Cvcb3wFjkLUIdM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DuIkdRPITRs55I4SZmgomAHCIsDQmXRhW8+MOznkzSk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SsBk+Et1lTbU+QRPx+xyJ/jMkmfG+QCvQEpip2YYrzA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "crCIzOd8KhHvvUlX7M1v9bhvU4pLdTc+X2SuqoKU5Ek=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YOWdCw4UrqnxkAaVjqmC4sKQDMVMHEpFGnlxpxdaU6E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "M3SShp81Ff8tQ632qKbv9MUcN6wjDaBReI0VXNu6Xh4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gzHlSPxpM0hT75kQvWFzGlOxKvDoiKQZOr19V6l2zXI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s3JnppOGYw9SL2Q1kMAZs948v2F5PrpXjGei/HioDWs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cG6+3Gk/zEH68P/uuuwiAUVCuyJwa1LeV+t29FlPPAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dupdvR3AyJtM+g9NDKiaLVOtGca387JQp8w+V03m7Ig=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JqEQc5svj2jTvZ6LLA5ivE+kTb/0aRemSEmxk4G7Zrg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "szcXXXKnob+p3SoM4yED2R920LeJ7cVsclPMFTe4CeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o1QoGVXmuBdHwHm7aCtGMlMVKrjFdYvJXpoq6uhIAZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Jfm5wPlqqLCJRGQIqRq2NGmpn7s0Vrih2H3YAOoI2YU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zMHLb8ARbsYo8Ld05bqnGFf1Usha6EGb8QKwdSAyps0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yQdtq9lh5pugL7/i0Bj/PuZUUBUIzf+7wj1rl5y736w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wGWVZdO7qIuyDg/BqDgqjgoQ02h5YYgwXQB1oCin2NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "by9HMLj6NTEpgztZ5HSN6GxImkXPcaFINYDzgZY33X8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tWo0vbasi7bXmn/MsOx13VC1IsWtpx/nYp0uj4iMzdA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tQQpndUYd5O87lOtrGjH3wl9VsOK0ray7RMasL90sBM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cQjXEDCMsOpKLLf+vlTgIHA+cbSJdzqhbSX9Wvh95aA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7yMpU48IxK9SzP2cx3VnTownGEwFmeFofuuFT97SuuY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kSOx1kz0CmBgzKQHZlo65ZUY1DIv9A99JRm+Us2y6Ew=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ubQpdPBe6/xvtr+AcXdfYLSvYCR4ot0tivehkCsupb4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xal+iCJ6FTefRQToyoNksc9NCZShyn04NDGi4IYrcoM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "d7jU4iOK50xHxlkSifcxlZFCM46TSgQzoYivxG3HNLY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJvl2nsBLBVzL3pp6sKWCL4UXeh3q/roYBJjSb74ve0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OIUCaKRvIx9t1w6Hxlz1IcQTdPNCfdRNwnnTm10W+X0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A9tvzsiElotOUVIB4CqfQp9mAwqvTM35YkmAR170aHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lI8gpK7hpb7c9x4RQugsxMnQay5LZJmwslZdvMx/dcE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dNCzh40U0XvdKnSDi3HRQOWQftEsDVqc4uUvsVFGoq8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IP+iwEBWBwVVZIdpaMu8k5+soFCz+TZkYn3drKZ9grE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnqyh6e0y5svHkJDShlN9CHV0WvMBE4QbtJpQw5ZCXc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "elEl42tbVDoRTLjAhZUFEtXiut4b3PVhg/1ZLZSQdtE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vHuu2FxwclMHqyE6JBYbTYgbEkB0dqb/JuaxsvfwsmY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xTf7NCe3Gf8QpE78HR5OknlLTKfs9J+RN9UZpH6fnso=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XiWSasRnJAulGR6+LCVD3mwRObXylqYWR9jvpywq12c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MZMxEQ5ikx0PG1YFIExv0UnTZogsvgeOEZTpzvBDn4w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yZMyMZBDrWbAhvnic7vvIYhmO9m5H2iuv0c8KNZrBzY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xxM14hTPY5j0vvcK2C7YAEjzdsfUTFHozHC0hEo1bxI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+01rqR1xVwkpGXcstbk1ItJqFVjH6Q8MGxEN3Cm9Y1A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xOpLV0Z2VTRJ3iWtnWZcsyjXubTIkYWo31cO+HV1o1k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BWUOLqgLBqc5NwxVlSV5H3KFQPXbCp7mdo+jF+8cJqY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fuQb1S6xZDGlrEbK+kI23aL53PP1PVNwqICnZNt9Yzg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfscnoibFttahLdPVC4Ee+47ewGFKpDSU7M6HX19bKE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rpSW2awybNVeKtat91VFxqbINoTfNhPfQAu+d73Xtf8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9M/CP9ccOIIj2LLFmE0GFDO0Ban2wsNalEXfM6+h+1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WrEMG49l1ye4MhXs5ZS9tz8P6h+hDvthIg/2wW9ne1Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ImNhbfeyfH8qIEeA5ic0s3dAQBdzzTBS+CPsNih9vZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dWP33YDSn04UKJN2ogh2Rui0iW/0q2y18OCDRVcfyoo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lYv0isAtfGh6H9tdp3cp2eHU7q2J+uk7QrgcxtK3w7Y=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VGMoamB/+7zTOYcY/pqJc96xlv2PdW4hwsIAEIslTDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yNeBWMF7BnD9wVwz2PgJsvWr77QiVvvWUvJF0+fqBug=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfpvObJ+tJBXSvqeN7vlOfmhYign635lciYAJIjUtY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dsen4NqjzVGjpjufiTMs3+gqeD09EbnuogPgxrJECwg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pxCWVM3sn19NsFEpgHbgLa+PmYlhN3mMiP0Wk8kJhYw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q11KNvJszjYIB9n9HcC+N4uz11a3eRj1L3BH9scKMDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A1PmkgcEToWh1JiVWE6mI5jUu7poxWWuCUt/cgRUUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qJo3Hu4PJeanL7XEaWXO/n3YsodhZyd+MJOOmB9Kpd8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BkBKLO8URFscfRY9Bav/1+L9mLohDgNr/MkZtGiraIs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rZq5WA3Hx3xthOyHAJXK//f8pE2qbz7YKu3TIMp9GFY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X07a/Lm80p5xd4RFs1dNmw+90tmPDPdGiAKVZkxd4zY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6YrBn2ofIw1b5ooakrLOwF41BWrps8OO0H9WH4/rtlE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0l86Ag5OszXpa78SlOUV3K9nff5iC1p0mRXtLg9M1s4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Hn6yuxFHodeyu7ISlhYrbSf9pTiH4TDEvbYLWjTwFO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zdf4y2etKBuIpkEU1zMwoCkCsdisfXZCh8QPamm+drY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rOQ9oMdiK5xxGH+jPzOvwVqdGGnF3+HkJXxn81s6hp4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "61aKKsE3+BJHHWYvs3xSIBvlRmKswmaOo5rygQJguUg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KuDb/GIzqDM8wv7m7m8AECiWJbae5EKKtJRugZx7kR0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Q+t8t2TmNUiCIorVr9F3AlVnX+Mpt2ZYvN+s8UGict8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJRZIpKxUgHyL83kW8cvfjkxN3z6WoNnUg+SQw+LK+k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnUsYjip8SvW0+m9mR5WWTkpK+p6uwJ6yBUAlBnFKMk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PArHlz+yPRYDycAP/PgnI/AkP8Wgmfg++Vf4UG1Bf0E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wnIh53Q3jeK8jEBe1n8kJLa89/H0BxO26ZU8SRIAs9Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4F8U59gzBLGhq58PEWQk2nch+R0Va7eTUoxMneReUIA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ihKagIW3uT1dm22ROr/g5QaCpxZVj2+Fs/YSdM2Noco=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EJtUOOwjkrPUi9mavYAi+Gom9Y2DuFll7aDwo4mq0M0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dIkr8dbaVRQFskAVT6B286BbcBBt1pZPEOcTZqk4ZcI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aYVAcZYkH/Tieoa1XOjE/zCy5AJcVTHjS0NG2QB7muA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sBidL6y8TenseetpioIAAtn0lK/7C8MoW4JXpVYi3z8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0Dd2klU/t4R86c2WJcJDAd57k/N7OjvYSO5Vf8KH8sw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I3jZ92WEVmZmgaIkLbuWhBxl7EM6bEjiEttgBJunArA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aGHoQMlgJoGvArjfIbc3nnkoc8SWBxcrN7hSmjMRzos=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "bpiWPnF/KVBQr5F6MEwc5ZZayzIRvQOLDAm4ntwOi8g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tI7QVKbE6avWgDD9h4QKyFlnTxFCwd2iLySKakxNR/I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XGsge0CnoaXgE3rcpKm8AEeku5QVfokS3kcI+JKV1lk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JQxlryW2Q5WOwfrjAnaZxDvC83Dg6sjRVP5zegf2WiM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YFuHKJOfoqp1iGVxoFjx7bLYgVdsN4GuUFxEgO9HJ5s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Z6vUdiCR18ylKomf08uxcQHeRtmyav7/Ecvzz4av3k4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SPGo1Ib5AiP/tSllL7Z5PAypvnKdwJLzt8imfIMSEJQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "m94Nh6PFFQFLIib9Cu5LAKavhXnagSHG6F5EF8lD96I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pfEkQI98mB+gm1+JbmVurPAODMFPJ4E8DnqfVyUWbSo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DNj3OVRLbr43s0vd+rgWghOL3FqeO/60npdojC8Ry/M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kAYIQrjHVu49W8FTxyxJeiLVRWWjC9fPcBn+Hx1F+Ss=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aCSO7UVOpoQvu/iridarxkxV1SVxU1i9HVSYXUAeXk4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Gh6hTP/yj1IKlXQ+Q69KTfMlGZjEcXoRLGbQHNFo/1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/gDgIFQ4tAlJk3GN48IS5Qa5IPmErwGk8CHxAbp6gs0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PICyimwPjxpusyKxNssOOwUotAUbygpyEtORsVGXT8g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4lu+cBHyAUvuxC6JUNyHLzHsCogGSWFFnUCkDwfQdgI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pSndkmoNUJwXjgkbkgOrT5f9nSvuoMEZOkwAN9ElRaE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tyW+D4i26QihNM5MuBM+wnt5AdWGSJaJ4X5ydc9iWTU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9Syjr8RoxUgPKr+O5rsCu07AvcebA4P8IVKyS1NVLWc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "67tPfDYnK2tmrioI51fOBG0ygajcV0pLo5+Zm/rEW7U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "y0EiPRxYTuS1eVTIaPQUQBBxwkyxNckbePvKgChwd0M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NWd+2veAaeXQgR3vCvzlI4R1WW67D5YsVLdoXfdb8qg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PY5RQqKQsL2GqBBSPNOEVpojNFRX/NijCghIpxD6CZk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lcvwTyEjFlssCJtdjRpdN6oY+C7bxZY+WA+QAqzj9zg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWE7XRNylvTwO/9Fv56dNqUaQWMmESNS/GNIwgBaEI0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ijwlrUeS8nRYqK1F8kiCYF0mNDolEZS+/lJO1Lg93C8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8KzV+qYGYuIjoNj8eEpnTuHrMYuhzphl80rS6wrODuU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wDyTLjSEFF895hSQsHvmoEQVS6KIkZOtq1c9dVogm9I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SGrtPuMYCjUrfKF0Pq/thdaQzmGBMUvlwN3ORIu9tHU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KySHON3hIoUk4xWcwTqk6IL0kgjzjxgMBObVIkCGvk4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hBIdS9j0XJPeT4ot73ngELkpUoSixvRBvdOL9z48jY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Tx6um0q9HjS5ZvlFhvukpI6ORnyrXMWVW1OoxvgqII0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zFKlyfX5H81+d4A4J3FKn4T5JfG+OWtR06ddyX4Mxas=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cGgCDuPV7MeMMYEDpgOupqyNP4BQ4H7rBnd2QygumgM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IPaUoy98v11EoglTpJ4kBlEawoZ8y7BPwzjLYBpkvHQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Pfo4Am6tOWAyZNn8G9W5HWWGC3ZWmX0igI/RRB870Ro=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fnTSjd7bC1Udoq6iM7UDnHAC/lsIXSHp/Gy332qw+/I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fApBgVRrTDyEumkeWs5p3ag9KB48SbU4Si0dl7Ns9rc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QxudfBItgoCnUj5NXVnSmWH3HK76YtKkMmzn4lyyUYY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sSOvwhKa29Wq94bZ5jGIiJQGbG1uBrKSBfOYBz/oZeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FdaMgwwJ0NKsqmPZLC5oE+/0D74Dfpvig3LaI5yW5Fs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sRWBy12IERN43BSZIrnBfC9+zFBUdvjTlkqIH81NGt4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/4tIRpxKhoOwnXAiFn1Z7Xmric4USOIfKvTYQXk3QTc=", - "subType": "00" - } - } - ] - }, - { - "_id": { - "$numberInt": "1" - }, - "encryptedDecimalNoPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "Mr/laWHUijZT5VT3x2a7crb7wgd/UXOGz8jr8BVqBpM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wXVD/HSbBljko0jJcaxJ1nrzs2+pchLQqYR3vywS8SU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VDCpBYsJIxTfcI6Zgf7FTmKMxUffQv+Ys8zt5dlK76I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zYDslUwOUVNwTYkETfjceH/PU3bac9X3UuQyYJ19qK0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rAOmHSz18Jx107xpbv9fYcPOmh/KPAqge0PAtuhIRnc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BFOB1OGVUen7VsOuS0g8Ti7oDsTt2Yj/k/7ta8YAdGM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2fckE5SPs0GU+akDkUEM6mm0EtcV3WDE/sQsnTtodlk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "mi9+aNjuwIvaMpSHENvKzKRAmX9cYguo2mXLvOoftHQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "K6TWn4VcWWkz/gkUkLmbtwkG7SNeABICmLDnoYJFlLU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Z+2/cEtGU0Fq7QJFNGA/0y4aWAsw0ncG6X0LYRqwS3c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rrSIf+lgcNZFbbUkS9BmE045jRWBpcBJXHzfMVEFuzE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KlHL3Kyje1/LMIfgbCqw1SolxffJvvgsYBV5y77wxuA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hzJ1YBoETmYeCh352dBmG8d8Wse/bUcqojTWpWQlgsc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lSdcllDXx8MA+s0GULjDA1lQkcV0L8/aHtZ6dM2pZ2c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "HGr7JLTTA7ksAnlmjSIwwdBVvgr3fv46/FTdiCPYpos=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "mMr25v1VwOEVZ8xaNUTHJCcsYqV+kwK6RzGYilxPtJ4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "129hJbziPJzNo0IoTU3bECdge0FtaPW8dm4dyNVNwYU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "doiLJ96qoo+v7NqIAZLq6BI5axV8Id8gT5vyJ1ZZ0PM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cW/Lcul3xYmfyvI/0x/+ybN78aQmBK1XIGs1EEU09N8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1aVIwzu9N5EJV9yEES+/g6hOTH7cA2NTcLIc59cu0wU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kw5tyl7Ew0r1wFyrN1mB9FiVW2hK2BxxxUuJDNWjyjQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ADAY2YBrm6RJBDY/eLLcfNxmSJku+mefz74gH66oyco=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8gkqB1LojzPrstpFG7RHYmWxXpIlPDTqWnNsXH7XDRU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "TESfVQMDQjfTZmHmUeYUE2XrokJ6CcrsKx/GmypGjOw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qFM+HFVQ539S0Ouynd1fBHoemFxtU9PRxE5+Dq7Ljy4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jPiFgUZteSmOg4wf3bsEKCZzcnxmMoILsgp/GaZD+dM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YaWUgJhYgPNN7TkFK16H8SsQS226JguaVhOIQxZwQNQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x90/Qk3AgyaFsvWf2KUCu5XF3j76WFSjt/GrnG01060=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ZGWybWL/xlEdMYRFCZDUoz10sywTf7U/7wufsb78lH0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8l4ganN66jIcdxfHAdYLaym/mdzUUQ8TViw3MDRySPc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "c8p5XEGTqxqvRGVlR+nkxw9uUdoqDqTB0jlYQ361qMA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1ZGFLlpQBcU3zIUg8MmgWwFKVz/SaA7eSYFrfe3Hb70=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "34529174M77rHr3Ftn9r8jU4a5ztYtyVhMn1wryZSkU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YkQ4pxFWzc49MS0vZM6S8mNo4wAwo21rePBeF3C+9mI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MhOf4mYY00KKVhptOcXf0bXB7WfuuM801MRJg4vXPgc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7pbbD8ihNIYIBJ3tAUPGzHpFPpIeCTAk5L88qCB0/9w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "C9Q5PoNJTQo6pmNzXEEXUEqH22//UUWY1gqILcIywec=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "AqGVk1QjDNDLYWGRBX/nv9QdGR2SEgXZEhF0EWBAiSE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/sGI3VCbJUKATULJmhTayPOeVW+5MjWSvVCqS77sRbU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yOtbL0ih7gsuoxVtRrACMz+4N5uo7jIR7zzmtih2Beo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uA6dkb2Iyg9Su8UNDvZzkPx33kPZtWr/CCuEY+XgzUM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1DoSFPdHIplqZk+DyWAmEPckWwXw/GdB25NLmzeEZhk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OfDVS0T3ZuIXI/LNbTp6C9UbPIWLKiMy6Wx+9tqNl+g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "3PZjHXbmG6GtPz+iapKtQ3yY4PoFFgjIy+fV2xQv1YU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kaoLN0BoBWsmqE7kKkJQejATmLShd8qffcAmlhsxsGY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vpiw9KgQdegGmp7IJnSGX2miujRLU0xzs0ITTqbPW7c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NuXFf7xGUefYjIUTuMxNUTCfVHrF8oL0AT7dPv5Plk4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8Tz53LxtfEBJ9eR+d2690kwNsqPV6XyKo2PlqZCbUrc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "e6zsOmHSyV8tyQtSX6BSwui6wK9v1xG3giY/IILJQ2w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2fedFMCxa2DzmIpfbDKGXhQg0PPwbUv6vIWdwwlvhms=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yEJKMFnWXTC8tJUfzCInzQRByNEPjHxpw4L4m8No91Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YbFuWwOiFuQyOzIJXDbOkCWC2DyrG+248TBuVCa1pXU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "w7IkwGdrguwDrar5+w0Z3va5wXyZ4VXJkDMISyRjPGo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YmJUoILTRJPhyIyWyXJTsQ6KSZHHbEpwPVup6Ldm/Ko=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FvMjcwVZJmfh6FP/yBg2wgskK+KHD8YVUY6WtrE8xbg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "h4HCtD4HyYz0nci49IVAa10Z4NJD/FHnRMV4sRX6qro=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "nC7BpXCmym+a0Is2kReM9cYN2M1Eh5rVo8fjms14Oiw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1qtVWaeVo649ZZZtN8gXbwLgMWGLhz8beODbvru0I7Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Ej+mC0QFyMNIiSjR939S+iGBm7dm+1xObu5IcF/OpbU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UQ8LbUG3cMegbr9yKfKanAPQE1EfPkFciVDrNqZ5GHY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4iI3mXIDjnX+ralk1HhJY43mZx2uTJM7hsv9MQzTX7E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0WQCcs3rvsasgohERHHCaBM4Iy6yomS4qJ5To3/yYiw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qDCTVPoue1/DOAGNAlUstdA9Sid8MgEY4e5EzHcVHRk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9F9Mus0UnlzHb8E8ImxgXtz6SU98YXD0JqswOKw/Bzs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pctHpHKVBBcsahQ6TNh6/1V1ZrqOtKSAPtATV6BJqh0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vfR3C/4cPkVdxtNaqtF/v635ONbhTf5WbwJM6s4EXNE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ejP43xUBIex6szDcqExAFpx1IE/Ksi5ywJ84GKDFRrs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jbP4AWYd3S2f3ejmMG7dS5IbrFol48UUoT+ve3JLN6U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CiDifI7958sUjNqJUBQULeyF7x0Up3loPWvYKw9uAuw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "e2dQFsiHqd2BFHNhlSxocjd+cPs4wkcUW/CnCz4KNuM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PJFckVmzBipqaEqsuP2mkjhJE4qhw36NhfQ9DcOHyEU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "S3MeuJhET/B8VcfZYDR9fvX0nscDj416jdDekhmK11s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CGVHZRXpuNtQviDB2Kj03Q8uvs4w3RwTgV847R7GwPw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yUGgmgyLrxbEpDVy89XN3c2cmFpZXWWmuJ/35zVZ+Jw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "inb6Q97mL1a9onfNTT8v9wsoi/fz7KXKq3p8j90AU9c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CCyYx/4npq9xGO1lsCo8ZJhFO9/tN7DB+/DTE778rYg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "LNnYw4fwbiAZu0kBdAHPEm/OFnreS+oArdB5O/l/I98=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "P006SxmUS/RjiQJVYPdMFnNo3827GIEmSzagggkg05Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "oyvwY+WsnYV6UHuPki1o0ILJ2jN4uyXf9yaUNtZJyBA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "36Lk3RHWh1wmtCWC/Yj6jNIo17U5y6SofAgQjzjVxD8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vOOo8FqeHnuO9mqOYjIb4vgwIwVyXZ5Y+bY5d9tGFUM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "bJiDJjwQRNxqxlGjRm5lLziFhcfTDCnQ/qU1V85qcRg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2Qgrm1n0wUELAQnpkEiIHB856yv76q8jLbpiucetcm0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "5ciPOYxTK0WDwwYyfs7yiVymwtYQXDELLxmM4JLl4/o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "31dC2WUSIOKQc4jwT6PikfeYTwi80mTlh7P31T5KNQU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YluTV2Mu53EGCKLcWfHZb0BM/IPW2xJdG3vYlDMEsM4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dh/8lGo2Ek6KukSwutH6Q35iy8TgV0FN0SJqe0ZVHN8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EVw6HpIs3BKen2qY2gz4y5dw1JpXilfh07msZfQqJpc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FYolLla9L8EZMROEdWetozroU40Dnmwwx2jIMrr7c1A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8M6k4QIutSIj6CM41vvkQtuFsaGrjoR9SZJVSLbfGKQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9LM0VoddDNHway442MqY+Z7vohB2UHau/cddshhzf40=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "66i8Ytco4Yq/FMl6pIRZazz3CZlu8fO2OI6Pne0pvHU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2a/HgX+MjZxjXtSvHgF1yEpHMJBkl8Caee8XrJtn0WM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "frhBM662c4ZVG7mWP8K/HhRjd01lydW/cPcHnDjifqc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6k1T7Q1t668PBqv6fwpVnT1HWh7Am5LtbKvwPJKcpGU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UlJ5Edfusp8S/Pyhw6KTglIejmbr1HO0zUeHn/qFETA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jsxsB+1ECB3assUdoC333do9tYH+LglHmVSJHy4N8Hg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2nzIQxGYF7j3bGsIesECEOqhObKs/9ywknPHeJ3yges=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xJYKtuWrX90JrJVoYtnwP7Ce59XQGFYoalxpNfBXEH0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NLI5lriBTleGCELcHBtNnmnvwSRkHHaLOX4cKboMgTw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hUOQV0RmE5aJdJww1AR9rirJG4zOYPo+6cCkgn/BGvQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "h4G2Of76AgxcUziBwCyH+ayMOpdBWzg4yFrTfehSC2c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VuamM75RzGfQpj2/Y1jSVuQLrhy6OAwlZxjuQLB/9Ss=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kn9+hLq7hvw02xr9vrplOCDXKBTuFhfbX7d5v/l85Pg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fAiGqKyLZpGngBYFbtYUYt8LUrJ49vYafiboifTDjxs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BxRILymgfVJCczqjUIWXcfrfSgrrYkxTM5VTg0HkZLY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CrFY/PzfPU2zsFkGLu/dI6mEeizZzCR+uYgjZBAHro0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "AEbrIuwvXLTtYgMjOqnGQ8y8axUn5Ukrn7UZRSyfQVw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ouWeVH3PEFg+dKWlXc6BmqirJOaVWjJbMzZbCsce4dA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+hd6xFB+EG+kVP7WH4uMd1CLaWMnt5xJRaY/Guuga9Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zmpGalfAOL3gmcUMJYcLYIRT/2VDO/1Dw4KdYZoNcng=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2PbHAoM/46J2UIZ/vyksKzmVVfxA7YUyIxWeL/N/vBk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7fD9x+zk5MVFesb59Klqiwwmve7P5ON/5COURXj5smE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tlrNQ4jaq051iaWonuv1sSrYhKkL1LtNZuHsvATha3s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fBodm28iClNpvlRyVq0dOdXQ08S7/N3aDwid+PdWvRo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "O+/nnRqT3Zv7yMMGug8GhKHaWy6u7BfRGtZoj0sdN1c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "5AZZ/RTMY4Photnm/cpXZr/HnFRi3eljacMsipkJLHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "oFVyo/kgoMxBIk2VE52ySSimeyU+Gr0EfCwapXnTpKA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Z8v59DfcnviA0mzvnUk+URVO0UuqAWvtarEgJva/n1c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "P64GOntZ+zBJEHkigoh9FSxSO+rJTqR20z5aiGQ9an4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xMbSuDPfWuO/Dm7wuVl06GnzG9uzTlJJX9vFy7boGlY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kXPB19mRClxdH2UsHwlttS6lLU2uHvzuZgZz7kC45jU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NDVjVYXAw4k0w4tFzvs7QDq39aaU3HQor4I2XMKKnCk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uKw/+ErVfpTO1dGUfd3T/eWfZW3nUxXCdBGdjvHtZ88=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "av0uxEzWkizYWm0QUM/MN1hLibnxPvCWJKwjOV4yVQY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ERwUC47dvgOBzIsEESMIioLYbFOxOe8PtJTnmDkKuHM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2gseKlG5Le12fS/vj4eaED4lturF16kAgJ1TpW3HxEE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7Cvg0Y3j/5i2F1TeXxlMmU7xwif5dCmwkZAOrVC5K2Y=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Update.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Update.yml deleted file mode 100644 index b1d1c4c00e..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Decimal-Update.yml +++ /dev/null @@ -1,1685 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - # Tests for Decimal (without precision) must only run against a replica set. Decimal (without precision) queries are expected to take a long time and may exceed the default mongos timeout. - topology: [ "replicaset" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDecimalNoPrecision', 'bsonType': 'decimal', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range Decimal. Update." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDecimalNoPrecision: { $numberDecimal: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDecimalNoPrecision: { $numberDecimal: "1" } } - - name: updateOne - arguments: - filter: { encryptedDecimalNoPrecision: { $gt: { $numberDecimal: "0" } } } - update: { "$set": { "encryptedDecimalNoPrecision": { $numberDecimal: "2" } }} - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedDecimalNoPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedDecimalNoPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command_name: update - command: - "update": "default" - "ordered": true - "updates": [ - { - "q": { - "encryptedDecimalNoPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - }, - "u": { - "$set": { - "encryptedDecimalNoPrecision": { $$type: "binData" } - } - } - } - ] - encryptionInformation: - type: 1 - schema: - "default.default": - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - "$db": "default" - - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": { - "$numberInt": "0" - }, - "encryptedDecimalNoPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "rbf3AeBEv4wWFAKknqDxRW5cLNkFvbIs6iJjc6LShQY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "n+XAuFnP8Dov9TnhGFxNx0K/MnVM9WbJ7RouEu0ndO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yRXojuVdn5GQtD97qYlaCL6cOLmZ7Cvcb3wFjkLUIdM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DuIkdRPITRs55I4SZmgomAHCIsDQmXRhW8+MOznkzSk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SsBk+Et1lTbU+QRPx+xyJ/jMkmfG+QCvQEpip2YYrzA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "crCIzOd8KhHvvUlX7M1v9bhvU4pLdTc+X2SuqoKU5Ek=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YOWdCw4UrqnxkAaVjqmC4sKQDMVMHEpFGnlxpxdaU6E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "M3SShp81Ff8tQ632qKbv9MUcN6wjDaBReI0VXNu6Xh4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gzHlSPxpM0hT75kQvWFzGlOxKvDoiKQZOr19V6l2zXI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s3JnppOGYw9SL2Q1kMAZs948v2F5PrpXjGei/HioDWs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cG6+3Gk/zEH68P/uuuwiAUVCuyJwa1LeV+t29FlPPAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dupdvR3AyJtM+g9NDKiaLVOtGca387JQp8w+V03m7Ig=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JqEQc5svj2jTvZ6LLA5ivE+kTb/0aRemSEmxk4G7Zrg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "szcXXXKnob+p3SoM4yED2R920LeJ7cVsclPMFTe4CeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o1QoGVXmuBdHwHm7aCtGMlMVKrjFdYvJXpoq6uhIAZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Jfm5wPlqqLCJRGQIqRq2NGmpn7s0Vrih2H3YAOoI2YU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zMHLb8ARbsYo8Ld05bqnGFf1Usha6EGb8QKwdSAyps0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yQdtq9lh5pugL7/i0Bj/PuZUUBUIzf+7wj1rl5y736w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wGWVZdO7qIuyDg/BqDgqjgoQ02h5YYgwXQB1oCin2NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "by9HMLj6NTEpgztZ5HSN6GxImkXPcaFINYDzgZY33X8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tWo0vbasi7bXmn/MsOx13VC1IsWtpx/nYp0uj4iMzdA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tQQpndUYd5O87lOtrGjH3wl9VsOK0ray7RMasL90sBM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cQjXEDCMsOpKLLf+vlTgIHA+cbSJdzqhbSX9Wvh95aA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7yMpU48IxK9SzP2cx3VnTownGEwFmeFofuuFT97SuuY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kSOx1kz0CmBgzKQHZlo65ZUY1DIv9A99JRm+Us2y6Ew=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ubQpdPBe6/xvtr+AcXdfYLSvYCR4ot0tivehkCsupb4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xal+iCJ6FTefRQToyoNksc9NCZShyn04NDGi4IYrcoM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "d7jU4iOK50xHxlkSifcxlZFCM46TSgQzoYivxG3HNLY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJvl2nsBLBVzL3pp6sKWCL4UXeh3q/roYBJjSb74ve0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OIUCaKRvIx9t1w6Hxlz1IcQTdPNCfdRNwnnTm10W+X0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A9tvzsiElotOUVIB4CqfQp9mAwqvTM35YkmAR170aHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lI8gpK7hpb7c9x4RQugsxMnQay5LZJmwslZdvMx/dcE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dNCzh40U0XvdKnSDi3HRQOWQftEsDVqc4uUvsVFGoq8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IP+iwEBWBwVVZIdpaMu8k5+soFCz+TZkYn3drKZ9grE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnqyh6e0y5svHkJDShlN9CHV0WvMBE4QbtJpQw5ZCXc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "elEl42tbVDoRTLjAhZUFEtXiut4b3PVhg/1ZLZSQdtE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vHuu2FxwclMHqyE6JBYbTYgbEkB0dqb/JuaxsvfwsmY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xTf7NCe3Gf8QpE78HR5OknlLTKfs9J+RN9UZpH6fnso=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XiWSasRnJAulGR6+LCVD3mwRObXylqYWR9jvpywq12c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MZMxEQ5ikx0PG1YFIExv0UnTZogsvgeOEZTpzvBDn4w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yZMyMZBDrWbAhvnic7vvIYhmO9m5H2iuv0c8KNZrBzY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xxM14hTPY5j0vvcK2C7YAEjzdsfUTFHozHC0hEo1bxI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+01rqR1xVwkpGXcstbk1ItJqFVjH6Q8MGxEN3Cm9Y1A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xOpLV0Z2VTRJ3iWtnWZcsyjXubTIkYWo31cO+HV1o1k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BWUOLqgLBqc5NwxVlSV5H3KFQPXbCp7mdo+jF+8cJqY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fuQb1S6xZDGlrEbK+kI23aL53PP1PVNwqICnZNt9Yzg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfscnoibFttahLdPVC4Ee+47ewGFKpDSU7M6HX19bKE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rpSW2awybNVeKtat91VFxqbINoTfNhPfQAu+d73Xtf8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9M/CP9ccOIIj2LLFmE0GFDO0Ban2wsNalEXfM6+h+1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WrEMG49l1ye4MhXs5ZS9tz8P6h+hDvthIg/2wW9ne1Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ImNhbfeyfH8qIEeA5ic0s3dAQBdzzTBS+CPsNih9vZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dWP33YDSn04UKJN2ogh2Rui0iW/0q2y18OCDRVcfyoo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lYv0isAtfGh6H9tdp3cp2eHU7q2J+uk7QrgcxtK3w7Y=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VGMoamB/+7zTOYcY/pqJc96xlv2PdW4hwsIAEIslTDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yNeBWMF7BnD9wVwz2PgJsvWr77QiVvvWUvJF0+fqBug=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfpvObJ+tJBXSvqeN7vlOfmhYign635lciYAJIjUtY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dsen4NqjzVGjpjufiTMs3+gqeD09EbnuogPgxrJECwg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pxCWVM3sn19NsFEpgHbgLa+PmYlhN3mMiP0Wk8kJhYw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q11KNvJszjYIB9n9HcC+N4uz11a3eRj1L3BH9scKMDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A1PmkgcEToWh1JiVWE6mI5jUu7poxWWuCUt/cgRUUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qJo3Hu4PJeanL7XEaWXO/n3YsodhZyd+MJOOmB9Kpd8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BkBKLO8URFscfRY9Bav/1+L9mLohDgNr/MkZtGiraIs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rZq5WA3Hx3xthOyHAJXK//f8pE2qbz7YKu3TIMp9GFY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X07a/Lm80p5xd4RFs1dNmw+90tmPDPdGiAKVZkxd4zY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6YrBn2ofIw1b5ooakrLOwF41BWrps8OO0H9WH4/rtlE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0l86Ag5OszXpa78SlOUV3K9nff5iC1p0mRXtLg9M1s4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Hn6yuxFHodeyu7ISlhYrbSf9pTiH4TDEvbYLWjTwFO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zdf4y2etKBuIpkEU1zMwoCkCsdisfXZCh8QPamm+drY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rOQ9oMdiK5xxGH+jPzOvwVqdGGnF3+HkJXxn81s6hp4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "61aKKsE3+BJHHWYvs3xSIBvlRmKswmaOo5rygQJguUg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KuDb/GIzqDM8wv7m7m8AECiWJbae5EKKtJRugZx7kR0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Q+t8t2TmNUiCIorVr9F3AlVnX+Mpt2ZYvN+s8UGict8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJRZIpKxUgHyL83kW8cvfjkxN3z6WoNnUg+SQw+LK+k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnUsYjip8SvW0+m9mR5WWTkpK+p6uwJ6yBUAlBnFKMk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PArHlz+yPRYDycAP/PgnI/AkP8Wgmfg++Vf4UG1Bf0E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wnIh53Q3jeK8jEBe1n8kJLa89/H0BxO26ZU8SRIAs9Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4F8U59gzBLGhq58PEWQk2nch+R0Va7eTUoxMneReUIA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ihKagIW3uT1dm22ROr/g5QaCpxZVj2+Fs/YSdM2Noco=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EJtUOOwjkrPUi9mavYAi+Gom9Y2DuFll7aDwo4mq0M0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dIkr8dbaVRQFskAVT6B286BbcBBt1pZPEOcTZqk4ZcI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aYVAcZYkH/Tieoa1XOjE/zCy5AJcVTHjS0NG2QB7muA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sBidL6y8TenseetpioIAAtn0lK/7C8MoW4JXpVYi3z8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0Dd2klU/t4R86c2WJcJDAd57k/N7OjvYSO5Vf8KH8sw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I3jZ92WEVmZmgaIkLbuWhBxl7EM6bEjiEttgBJunArA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aGHoQMlgJoGvArjfIbc3nnkoc8SWBxcrN7hSmjMRzos=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "bpiWPnF/KVBQr5F6MEwc5ZZayzIRvQOLDAm4ntwOi8g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tI7QVKbE6avWgDD9h4QKyFlnTxFCwd2iLySKakxNR/I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XGsge0CnoaXgE3rcpKm8AEeku5QVfokS3kcI+JKV1lk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JQxlryW2Q5WOwfrjAnaZxDvC83Dg6sjRVP5zegf2WiM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YFuHKJOfoqp1iGVxoFjx7bLYgVdsN4GuUFxEgO9HJ5s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Z6vUdiCR18ylKomf08uxcQHeRtmyav7/Ecvzz4av3k4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SPGo1Ib5AiP/tSllL7Z5PAypvnKdwJLzt8imfIMSEJQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "m94Nh6PFFQFLIib9Cu5LAKavhXnagSHG6F5EF8lD96I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pfEkQI98mB+gm1+JbmVurPAODMFPJ4E8DnqfVyUWbSo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DNj3OVRLbr43s0vd+rgWghOL3FqeO/60npdojC8Ry/M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kAYIQrjHVu49W8FTxyxJeiLVRWWjC9fPcBn+Hx1F+Ss=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "aCSO7UVOpoQvu/iridarxkxV1SVxU1i9HVSYXUAeXk4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Gh6hTP/yj1IKlXQ+Q69KTfMlGZjEcXoRLGbQHNFo/1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/gDgIFQ4tAlJk3GN48IS5Qa5IPmErwGk8CHxAbp6gs0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PICyimwPjxpusyKxNssOOwUotAUbygpyEtORsVGXT8g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4lu+cBHyAUvuxC6JUNyHLzHsCogGSWFFnUCkDwfQdgI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pSndkmoNUJwXjgkbkgOrT5f9nSvuoMEZOkwAN9ElRaE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tyW+D4i26QihNM5MuBM+wnt5AdWGSJaJ4X5ydc9iWTU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9Syjr8RoxUgPKr+O5rsCu07AvcebA4P8IVKyS1NVLWc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "67tPfDYnK2tmrioI51fOBG0ygajcV0pLo5+Zm/rEW7U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "y0EiPRxYTuS1eVTIaPQUQBBxwkyxNckbePvKgChwd0M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NWd+2veAaeXQgR3vCvzlI4R1WW67D5YsVLdoXfdb8qg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PY5RQqKQsL2GqBBSPNOEVpojNFRX/NijCghIpxD6CZk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lcvwTyEjFlssCJtdjRpdN6oY+C7bxZY+WA+QAqzj9zg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWE7XRNylvTwO/9Fv56dNqUaQWMmESNS/GNIwgBaEI0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ijwlrUeS8nRYqK1F8kiCYF0mNDolEZS+/lJO1Lg93C8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8KzV+qYGYuIjoNj8eEpnTuHrMYuhzphl80rS6wrODuU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wDyTLjSEFF895hSQsHvmoEQVS6KIkZOtq1c9dVogm9I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SGrtPuMYCjUrfKF0Pq/thdaQzmGBMUvlwN3ORIu9tHU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KySHON3hIoUk4xWcwTqk6IL0kgjzjxgMBObVIkCGvk4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hBIdS9j0XJPeT4ot73ngELkpUoSixvRBvdOL9z48jY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Tx6um0q9HjS5ZvlFhvukpI6ORnyrXMWVW1OoxvgqII0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zFKlyfX5H81+d4A4J3FKn4T5JfG+OWtR06ddyX4Mxas=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cGgCDuPV7MeMMYEDpgOupqyNP4BQ4H7rBnd2QygumgM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IPaUoy98v11EoglTpJ4kBlEawoZ8y7BPwzjLYBpkvHQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Pfo4Am6tOWAyZNn8G9W5HWWGC3ZWmX0igI/RRB870Ro=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fnTSjd7bC1Udoq6iM7UDnHAC/lsIXSHp/Gy332qw+/I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fApBgVRrTDyEumkeWs5p3ag9KB48SbU4Si0dl7Ns9rc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QxudfBItgoCnUj5NXVnSmWH3HK76YtKkMmzn4lyyUYY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sSOvwhKa29Wq94bZ5jGIiJQGbG1uBrKSBfOYBz/oZeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FdaMgwwJ0NKsqmPZLC5oE+/0D74Dfpvig3LaI5yW5Fs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "sRWBy12IERN43BSZIrnBfC9+zFBUdvjTlkqIH81NGt4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/4tIRpxKhoOwnXAiFn1Z7Xmric4USOIfKvTYQXk3QTc=", - "subType": "00" - } - } - ] - } - - - { - "_id": { - "$numberInt": "1" - }, - "encryptedDecimalNoPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "Mr/laWHUijZT5VT3x2a7crb7wgd/UXOGz8jr8BVqBpM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wXVD/HSbBljko0jJcaxJ1nrzs2+pchLQqYR3vywS8SU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VDCpBYsJIxTfcI6Zgf7FTmKMxUffQv+Ys8zt5dlK76I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zYDslUwOUVNwTYkETfjceH/PU3bac9X3UuQyYJ19qK0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rAOmHSz18Jx107xpbv9fYcPOmh/KPAqge0PAtuhIRnc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BFOB1OGVUen7VsOuS0g8Ti7oDsTt2Yj/k/7ta8YAdGM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2fckE5SPs0GU+akDkUEM6mm0EtcV3WDE/sQsnTtodlk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "mi9+aNjuwIvaMpSHENvKzKRAmX9cYguo2mXLvOoftHQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "K6TWn4VcWWkz/gkUkLmbtwkG7SNeABICmLDnoYJFlLU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Z+2/cEtGU0Fq7QJFNGA/0y4aWAsw0ncG6X0LYRqwS3c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rrSIf+lgcNZFbbUkS9BmE045jRWBpcBJXHzfMVEFuzE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KlHL3Kyje1/LMIfgbCqw1SolxffJvvgsYBV5y77wxuA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hzJ1YBoETmYeCh352dBmG8d8Wse/bUcqojTWpWQlgsc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lSdcllDXx8MA+s0GULjDA1lQkcV0L8/aHtZ6dM2pZ2c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "HGr7JLTTA7ksAnlmjSIwwdBVvgr3fv46/FTdiCPYpos=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "mMr25v1VwOEVZ8xaNUTHJCcsYqV+kwK6RzGYilxPtJ4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "129hJbziPJzNo0IoTU3bECdge0FtaPW8dm4dyNVNwYU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "doiLJ96qoo+v7NqIAZLq6BI5axV8Id8gT5vyJ1ZZ0PM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cW/Lcul3xYmfyvI/0x/+ybN78aQmBK1XIGs1EEU09N8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1aVIwzu9N5EJV9yEES+/g6hOTH7cA2NTcLIc59cu0wU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kw5tyl7Ew0r1wFyrN1mB9FiVW2hK2BxxxUuJDNWjyjQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ADAY2YBrm6RJBDY/eLLcfNxmSJku+mefz74gH66oyco=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8gkqB1LojzPrstpFG7RHYmWxXpIlPDTqWnNsXH7XDRU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "TESfVQMDQjfTZmHmUeYUE2XrokJ6CcrsKx/GmypGjOw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qFM+HFVQ539S0Ouynd1fBHoemFxtU9PRxE5+Dq7Ljy4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jPiFgUZteSmOg4wf3bsEKCZzcnxmMoILsgp/GaZD+dM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YaWUgJhYgPNN7TkFK16H8SsQS226JguaVhOIQxZwQNQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x90/Qk3AgyaFsvWf2KUCu5XF3j76WFSjt/GrnG01060=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ZGWybWL/xlEdMYRFCZDUoz10sywTf7U/7wufsb78lH0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8l4ganN66jIcdxfHAdYLaym/mdzUUQ8TViw3MDRySPc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "c8p5XEGTqxqvRGVlR+nkxw9uUdoqDqTB0jlYQ361qMA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1ZGFLlpQBcU3zIUg8MmgWwFKVz/SaA7eSYFrfe3Hb70=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "34529174M77rHr3Ftn9r8jU4a5ztYtyVhMn1wryZSkU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YkQ4pxFWzc49MS0vZM6S8mNo4wAwo21rePBeF3C+9mI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MhOf4mYY00KKVhptOcXf0bXB7WfuuM801MRJg4vXPgc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7pbbD8ihNIYIBJ3tAUPGzHpFPpIeCTAk5L88qCB0/9w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "C9Q5PoNJTQo6pmNzXEEXUEqH22//UUWY1gqILcIywec=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "AqGVk1QjDNDLYWGRBX/nv9QdGR2SEgXZEhF0EWBAiSE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/sGI3VCbJUKATULJmhTayPOeVW+5MjWSvVCqS77sRbU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yOtbL0ih7gsuoxVtRrACMz+4N5uo7jIR7zzmtih2Beo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uA6dkb2Iyg9Su8UNDvZzkPx33kPZtWr/CCuEY+XgzUM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1DoSFPdHIplqZk+DyWAmEPckWwXw/GdB25NLmzeEZhk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OfDVS0T3ZuIXI/LNbTp6C9UbPIWLKiMy6Wx+9tqNl+g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "3PZjHXbmG6GtPz+iapKtQ3yY4PoFFgjIy+fV2xQv1YU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kaoLN0BoBWsmqE7kKkJQejATmLShd8qffcAmlhsxsGY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vpiw9KgQdegGmp7IJnSGX2miujRLU0xzs0ITTqbPW7c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NuXFf7xGUefYjIUTuMxNUTCfVHrF8oL0AT7dPv5Plk4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8Tz53LxtfEBJ9eR+d2690kwNsqPV6XyKo2PlqZCbUrc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "e6zsOmHSyV8tyQtSX6BSwui6wK9v1xG3giY/IILJQ2w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2fedFMCxa2DzmIpfbDKGXhQg0PPwbUv6vIWdwwlvhms=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yEJKMFnWXTC8tJUfzCInzQRByNEPjHxpw4L4m8No91Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YbFuWwOiFuQyOzIJXDbOkCWC2DyrG+248TBuVCa1pXU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "w7IkwGdrguwDrar5+w0Z3va5wXyZ4VXJkDMISyRjPGo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YmJUoILTRJPhyIyWyXJTsQ6KSZHHbEpwPVup6Ldm/Ko=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FvMjcwVZJmfh6FP/yBg2wgskK+KHD8YVUY6WtrE8xbg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "h4HCtD4HyYz0nci49IVAa10Z4NJD/FHnRMV4sRX6qro=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "nC7BpXCmym+a0Is2kReM9cYN2M1Eh5rVo8fjms14Oiw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1qtVWaeVo649ZZZtN8gXbwLgMWGLhz8beODbvru0I7Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Ej+mC0QFyMNIiSjR939S+iGBm7dm+1xObu5IcF/OpbU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UQ8LbUG3cMegbr9yKfKanAPQE1EfPkFciVDrNqZ5GHY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4iI3mXIDjnX+ralk1HhJY43mZx2uTJM7hsv9MQzTX7E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0WQCcs3rvsasgohERHHCaBM4Iy6yomS4qJ5To3/yYiw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qDCTVPoue1/DOAGNAlUstdA9Sid8MgEY4e5EzHcVHRk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9F9Mus0UnlzHb8E8ImxgXtz6SU98YXD0JqswOKw/Bzs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pctHpHKVBBcsahQ6TNh6/1V1ZrqOtKSAPtATV6BJqh0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vfR3C/4cPkVdxtNaqtF/v635ONbhTf5WbwJM6s4EXNE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ejP43xUBIex6szDcqExAFpx1IE/Ksi5ywJ84GKDFRrs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jbP4AWYd3S2f3ejmMG7dS5IbrFol48UUoT+ve3JLN6U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CiDifI7958sUjNqJUBQULeyF7x0Up3loPWvYKw9uAuw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "e2dQFsiHqd2BFHNhlSxocjd+cPs4wkcUW/CnCz4KNuM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PJFckVmzBipqaEqsuP2mkjhJE4qhw36NhfQ9DcOHyEU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "S3MeuJhET/B8VcfZYDR9fvX0nscDj416jdDekhmK11s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CGVHZRXpuNtQviDB2Kj03Q8uvs4w3RwTgV847R7GwPw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yUGgmgyLrxbEpDVy89XN3c2cmFpZXWWmuJ/35zVZ+Jw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "inb6Q97mL1a9onfNTT8v9wsoi/fz7KXKq3p8j90AU9c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CCyYx/4npq9xGO1lsCo8ZJhFO9/tN7DB+/DTE778rYg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "LNnYw4fwbiAZu0kBdAHPEm/OFnreS+oArdB5O/l/I98=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "P006SxmUS/RjiQJVYPdMFnNo3827GIEmSzagggkg05Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "oyvwY+WsnYV6UHuPki1o0ILJ2jN4uyXf9yaUNtZJyBA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "36Lk3RHWh1wmtCWC/Yj6jNIo17U5y6SofAgQjzjVxD8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vOOo8FqeHnuO9mqOYjIb4vgwIwVyXZ5Y+bY5d9tGFUM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "bJiDJjwQRNxqxlGjRm5lLziFhcfTDCnQ/qU1V85qcRg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2Qgrm1n0wUELAQnpkEiIHB856yv76q8jLbpiucetcm0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "5ciPOYxTK0WDwwYyfs7yiVymwtYQXDELLxmM4JLl4/o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "31dC2WUSIOKQc4jwT6PikfeYTwi80mTlh7P31T5KNQU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YluTV2Mu53EGCKLcWfHZb0BM/IPW2xJdG3vYlDMEsM4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dh/8lGo2Ek6KukSwutH6Q35iy8TgV0FN0SJqe0ZVHN8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EVw6HpIs3BKen2qY2gz4y5dw1JpXilfh07msZfQqJpc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FYolLla9L8EZMROEdWetozroU40Dnmwwx2jIMrr7c1A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "8M6k4QIutSIj6CM41vvkQtuFsaGrjoR9SZJVSLbfGKQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9LM0VoddDNHway442MqY+Z7vohB2UHau/cddshhzf40=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "66i8Ytco4Yq/FMl6pIRZazz3CZlu8fO2OI6Pne0pvHU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2a/HgX+MjZxjXtSvHgF1yEpHMJBkl8Caee8XrJtn0WM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "frhBM662c4ZVG7mWP8K/HhRjd01lydW/cPcHnDjifqc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6k1T7Q1t668PBqv6fwpVnT1HWh7Am5LtbKvwPJKcpGU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UlJ5Edfusp8S/Pyhw6KTglIejmbr1HO0zUeHn/qFETA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jsxsB+1ECB3assUdoC333do9tYH+LglHmVSJHy4N8Hg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2nzIQxGYF7j3bGsIesECEOqhObKs/9ywknPHeJ3yges=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xJYKtuWrX90JrJVoYtnwP7Ce59XQGFYoalxpNfBXEH0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NLI5lriBTleGCELcHBtNnmnvwSRkHHaLOX4cKboMgTw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hUOQV0RmE5aJdJww1AR9rirJG4zOYPo+6cCkgn/BGvQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "h4G2Of76AgxcUziBwCyH+ayMOpdBWzg4yFrTfehSC2c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VuamM75RzGfQpj2/Y1jSVuQLrhy6OAwlZxjuQLB/9Ss=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kn9+hLq7hvw02xr9vrplOCDXKBTuFhfbX7d5v/l85Pg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fAiGqKyLZpGngBYFbtYUYt8LUrJ49vYafiboifTDjxs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BxRILymgfVJCczqjUIWXcfrfSgrrYkxTM5VTg0HkZLY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CrFY/PzfPU2zsFkGLu/dI6mEeizZzCR+uYgjZBAHro0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "AEbrIuwvXLTtYgMjOqnGQ8y8axUn5Ukrn7UZRSyfQVw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ouWeVH3PEFg+dKWlXc6BmqirJOaVWjJbMzZbCsce4dA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+hd6xFB+EG+kVP7WH4uMd1CLaWMnt5xJRaY/Guuga9Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zmpGalfAOL3gmcUMJYcLYIRT/2VDO/1Dw4KdYZoNcng=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2PbHAoM/46J2UIZ/vyksKzmVVfxA7YUyIxWeL/N/vBk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7fD9x+zk5MVFesb59Klqiwwmve7P5ON/5COURXj5smE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tlrNQ4jaq051iaWonuv1sSrYhKkL1LtNZuHsvATha3s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fBodm28iClNpvlRyVq0dOdXQ08S7/N3aDwid+PdWvRo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "O+/nnRqT3Zv7yMMGug8GhKHaWy6u7BfRGtZoj0sdN1c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "5AZZ/RTMY4Photnm/cpXZr/HnFRi3eljacMsipkJLHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "oFVyo/kgoMxBIk2VE52ySSimeyU+Gr0EfCwapXnTpKA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Z8v59DfcnviA0mzvnUk+URVO0UuqAWvtarEgJva/n1c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "P64GOntZ+zBJEHkigoh9FSxSO+rJTqR20z5aiGQ9an4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xMbSuDPfWuO/Dm7wuVl06GnzG9uzTlJJX9vFy7boGlY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kXPB19mRClxdH2UsHwlttS6lLU2uHvzuZgZz7kC45jU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NDVjVYXAw4k0w4tFzvs7QDq39aaU3HQor4I2XMKKnCk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uKw/+ErVfpTO1dGUfd3T/eWfZW3nUxXCdBGdjvHtZ88=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "av0uxEzWkizYWm0QUM/MN1hLibnxPvCWJKwjOV4yVQY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ERwUC47dvgOBzIsEESMIioLYbFOxOe8PtJTnmDkKuHM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2gseKlG5Le12fS/vj4eaED4lturF16kAgJ1TpW3HxEE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7Cvg0Y3j/5i2F1TeXxlMmU7xwif5dCmwkZAOrVC5K2Y=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Aggregate.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Aggregate.json deleted file mode 100644 index 271f57b125..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Aggregate.json +++ /dev/null @@ -1,584 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDecimal": "0.0" - }, - "max": { - "$numberDecimal": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range DecimalPrecision. Aggregate.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDecimalPrecision": { - "$gt": { - "$numberDecimal": "0" - } - } - } - } - ] - }, - "result": [ - { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1" - } - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedDecimalPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDecimal": "0.0" - }, - "max": { - "$numberDecimal": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedDecimalPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDecimal": "0.0" - }, - "max": { - "$numberDecimal": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "default", - "pipeline": [ - { - "$match": { - "encryptedDecimalPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - } - } - ], - "cursor": {}, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDecimal": "0.0" - }, - "max": { - "$numberDecimal": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "aggregate" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": { - "$numberInt": "0" - }, - "encryptedDecimalPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "Dri0CXmL78L2DOgk9w0DwxHOMGMzih7m6l59vgy+WWo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "b7d8mRzD1kI1tdc7uNL+YAUonJ6pODLsRLkArfEKSkM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Xg8C1/A0KJaXOw4i+26Rv03/CydaaunOzXh0CIT+gn8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UoKUDw2wJYToUCcFaIs03YQSTksYR0MIOTJllwODqKc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "c/5cwAT0C5jber2xlJnWD3a5tVDy0nRtr5HG02hoFOY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wSUrRXavAGaajNeqC5mEUH1K67oYl5Wy9RNIzKjwLAM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6vrp4wWDtHEgHWR99I70WVDzevg1Fk/Pw5U8gUDa0OU=", - "subType": "00" - } - } - ] - }, - { - "_id": { - "$numberInt": "1" - }, - "encryptedDecimalPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "mVZb+Ra0EYjQ4Zrh9X//E2T8MRj7NMqm5GUJXhRrBEI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FA74j21GUEJb1DJBOpR9nVnjaDZnd8yAQNuaW9Qi26g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kJv//KVkbrobIBf+QeWC5jxn20mx/P0R1N6aCSMgKM8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zB+Whi9IUUGxfLEe+lGuIzLX4LFbIhaIAm5lRk65QTc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ybO1QU3CgvhO8JgRXH+HxKszWcpl5aGDYYVa75fHa1g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X3Y3eSAbbMg//JgiHHiFpYOpV61t8kkDexI+CQyitH4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SlNHXyqVFGDPrX/2ppwog6l4pwj3PKda2TkZbqgfSfA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "McjV8xwTF3xI7863DYOBdyvIv6UpzThl6v9vBRk05bI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MgwakFvPyBlwqFTbhWUF79URJQWFoJTGotlEVSPPUsQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DyBERpMSD5lEM5Nhpcn4WGgxgn/mkUVJp+PYSLX5jsE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I43iazc0xj1WVbYB/V+uTL/tughN1bBlxh1iypBnNsA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wjOBa/ATMuOywFmuPgC0GF/oeLqu0Z7eK5udzkTPbis=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gRQVwiR+m+0Vg8ZDXqrQQcVnTyobwCXNaA4BCJVXtMc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WUZ6huwx0ZbLb0R00uiC9FOJzsUocUN8qE5+YRenkvQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7s79aKEuPgQcS/YPOOVcYNZvHIo7FFsWtFCrnDKXefA=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Aggregate.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Aggregate.yml deleted file mode 100644 index e6d153a08d..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Aggregate.yml +++ /dev/null @@ -1,317 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDecimalPrecision', 'bsonType': 'decimal', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberDecimal': '0.0'}, 'max': {'$numberDecimal': '200.0'}, 'precision': {'$numberInt': '2'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range DecimalPrecision. Aggregate." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDecimalPrecision: { $numberDecimal: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDecimalPrecision: { $numberDecimal: "1" } } - - name: aggregate - arguments: - pipeline: [{ $match: { "encryptedDecimalPrecision": { $gt: {$numberDecimal: "0" }} } }] - result: [*doc1] - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedDecimalPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedDecimalPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - aggregate: *collection_name - pipeline: [ - { - "$match": { - "encryptedDecimalPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - } - } - ] - cursor: {} - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: aggregate - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": { - "$numberInt": "0" - }, - "encryptedDecimalPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "Dri0CXmL78L2DOgk9w0DwxHOMGMzih7m6l59vgy+WWo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "b7d8mRzD1kI1tdc7uNL+YAUonJ6pODLsRLkArfEKSkM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Xg8C1/A0KJaXOw4i+26Rv03/CydaaunOzXh0CIT+gn8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UoKUDw2wJYToUCcFaIs03YQSTksYR0MIOTJllwODqKc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "c/5cwAT0C5jber2xlJnWD3a5tVDy0nRtr5HG02hoFOY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wSUrRXavAGaajNeqC5mEUH1K67oYl5Wy9RNIzKjwLAM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6vrp4wWDtHEgHWR99I70WVDzevg1Fk/Pw5U8gUDa0OU=", - "subType": "00" - } - } - ] - } - - - { - "_id": { - "$numberInt": "1" - }, - "encryptedDecimalPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "mVZb+Ra0EYjQ4Zrh9X//E2T8MRj7NMqm5GUJXhRrBEI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FA74j21GUEJb1DJBOpR9nVnjaDZnd8yAQNuaW9Qi26g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kJv//KVkbrobIBf+QeWC5jxn20mx/P0R1N6aCSMgKM8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zB+Whi9IUUGxfLEe+lGuIzLX4LFbIhaIAm5lRk65QTc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ybO1QU3CgvhO8JgRXH+HxKszWcpl5aGDYYVa75fHa1g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X3Y3eSAbbMg//JgiHHiFpYOpV61t8kkDexI+CQyitH4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SlNHXyqVFGDPrX/2ppwog6l4pwj3PKda2TkZbqgfSfA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "McjV8xwTF3xI7863DYOBdyvIv6UpzThl6v9vBRk05bI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MgwakFvPyBlwqFTbhWUF79URJQWFoJTGotlEVSPPUsQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DyBERpMSD5lEM5Nhpcn4WGgxgn/mkUVJp+PYSLX5jsE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I43iazc0xj1WVbYB/V+uTL/tughN1bBlxh1iypBnNsA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wjOBa/ATMuOywFmuPgC0GF/oeLqu0Z7eK5udzkTPbis=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gRQVwiR+m+0Vg8ZDXqrQQcVnTyobwCXNaA4BCJVXtMc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WUZ6huwx0ZbLb0R00uiC9FOJzsUocUN8qE5+YRenkvQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7s79aKEuPgQcS/YPOOVcYNZvHIo7FFsWtFCrnDKXefA=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Correctness.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Correctness.json deleted file mode 100644 index 8954445887..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Correctness.json +++ /dev/null @@ -1,1650 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDecimal": "0.0" - }, - "max": { - "$numberDecimal": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "Find with $gt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDecimalPrecision": { - "$gt": { - "$numberDecimal": "0.0" - } - } - } - }, - "result": [ - { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - ] - } - ] - }, - { - "description": "Find with $gte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDecimalPrecision": { - "$gte": { - "$numberDecimal": "0.0" - } - } - }, - "sort": { - "_id": 1 - } - }, - "result": [ - { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - }, - { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - ] - } - ] - }, - { - "description": "Find with $gt with no results", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDecimalPrecision": { - "$gt": { - "$numberDecimal": "1.0" - } - } - } - }, - "result": [] - } - ] - }, - { - "description": "Find with $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDecimalPrecision": { - "$lt": { - "$numberDecimal": "1.0" - } - } - } - }, - "result": [ - { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - ] - } - ] - }, - { - "description": "Find with $lte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDecimalPrecision": { - "$lte": { - "$numberDecimal": "1.0" - } - } - }, - "sort": { - "_id": 1 - } - }, - "result": [ - { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - }, - { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - ] - } - ] - }, - { - "description": "Find with $lt below min", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDecimalPrecision": { - "$lt": { - "$numberDecimal": "0.0" - } - } - } - }, - "result": { - "errorContains": "must be greater than the range minimum" - } - } - ] - }, - { - "description": "Find with $gt above max", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDecimalPrecision": { - "$gt": { - "$numberDecimal": "200.0" - } - } - } - }, - "result": { - "errorContains": "must be less than the range max" - } - } - ] - }, - { - "description": "Find with $gt and $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDecimalPrecision": { - "$gt": { - "$numberDecimal": "0.0" - }, - "$lt": { - "$numberDecimal": "2.0" - } - } - } - }, - "result": [ - { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - ] - } - ] - }, - { - "description": "Find with equality", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - }, - "result": [ - { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - ] - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - }, - "result": [ - { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - ] - } - ] - }, - { - "description": "Find with full range", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDecimalPrecision": { - "$gte": { - "$numberDecimal": "0.0" - }, - "$lte": { - "$numberDecimal": "200.0" - } - } - }, - "sort": { - "_id": 1 - } - }, - "result": [ - { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - }, - { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - ] - } - ] - }, - { - "description": "Find with $in", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDecimalPrecision": { - "$in": [ - { - "$numberDecimal": "0.0" - } - ] - } - } - }, - "result": [ - { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - ] - } - ] - }, - { - "description": "Insert out of range", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "-1" - } - } - }, - "result": { - "errorContains": "value must be greater than or equal to the minimum value" - } - } - ] - }, - { - "description": "Insert min and max", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 200, - "encryptedDecimalPrecision": { - "$numberDecimal": "200.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": {}, - "sort": { - "_id": 1 - } - }, - "result": [ - { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - }, - { - "_id": 200, - "encryptedDecimalPrecision": { - "$numberDecimal": "200.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $gte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDecimalPrecision": { - "$gte": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "$sort": { - "_id": 1 - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - }, - { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $gt with no results", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDecimalPrecision": { - "$gt": { - "$numberDecimal": "1.0" - } - } - } - } - ] - }, - "result": [] - } - ] - }, - { - "description": "Aggregate with $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDecimalPrecision": { - "$lt": { - "$numberDecimal": "1.0" - } - } - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $lte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDecimalPrecision": { - "$lte": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "$sort": { - "_id": 1 - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - }, - { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $lt below min", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDecimalPrecision": { - "$lt": { - "$numberDecimal": "0.0" - } - } - } - } - ] - }, - "result": { - "errorContains": "must be greater than the range minimum" - } - } - ] - }, - { - "description": "Aggregate with $gt above max", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDecimalPrecision": { - "$gt": { - "$numberDecimal": "200.0" - } - } - } - } - ] - }, - "result": { - "errorContains": "must be less than the range max" - } - } - ] - }, - { - "description": "Aggregate with $gt and $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDecimalPrecision": { - "$gt": { - "$numberDecimal": "0.0" - }, - "$lt": { - "$numberDecimal": "2.0" - } - } - } - } - ] - }, - "result": [ - { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with equality", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - ] - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - } - ] - }, - "result": [ - { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with full range", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDecimalPrecision": { - "$gte": { - "$numberDecimal": "0.0" - }, - "$lte": { - "$numberDecimal": "200.0" - } - } - } - }, - { - "$sort": { - "_id": 1 - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - }, - { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $in", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDecimalPrecision": { - "$in": [ - { - "$numberDecimal": "0.0" - } - ] - } - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0.0" - } - } - ] - } - ] - }, - { - "description": "Wrong type: Insert Int", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberInt": "0" - } - } - }, - "result": { - "errorContains": "cannot encrypt element" - } - } - ] - }, - { - "description": "Wrong type: Find Int", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "find", - "arguments": { - "filter": { - "encryptedDecimalPrecision": { - "$gte": { - "$numberInt": "0" - } - } - }, - "sort": { - "_id": 1 - } - }, - "result": { - "errorContains": "field type is not supported" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Correctness.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Correctness.yml deleted file mode 100644 index cd1ced0b8f..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Correctness.yml +++ /dev/null @@ -1,424 +0,0 @@ -# Test correctness results. -# Does not include command monitoring expectations or outcome assertions to make tests more readable. - -# Requires libmongocrypt 1.8.0. -runOn: - - minServerVersion: "8.0.0" - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDecimalPrecision', 'bsonType': 'decimal', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberDecimal': '0.0'}, 'max': {'$numberDecimal': '200.0'}, 'precision': {'$numberInt': '2'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "Find with $gt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDecimalPrecision: { $numberDecimal: "0.0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDecimalPrecision: { $numberDecimal: "1.0" } } - - name: find - arguments: - filter: { encryptedDecimalPrecision: { $gt: { $numberDecimal: "0.0" } }} - result: [*doc1] - - - description: "Find with $gte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDecimalPrecision: { $gte: { $numberDecimal: "0.0" } }} - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: [*doc0, *doc1] - - - description: "Find with $gt with no results" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDecimalPrecision: { $gt: { $numberDecimal: "1.0" } }} - result: [] - - - description: "Find with $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDecimalPrecision: { $lt: { $numberDecimal: "1.0" } }} - result: [*doc0] - - - description: "Find with $lte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDecimalPrecision: { $lte: { $numberDecimal: "1.0" } }} - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: [*doc0, *doc1] - - - description: "Find with $lt below min" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDecimalPrecision: { $lt: { $numberDecimal: "0.0" } }} - result: - errorContains: must be greater than the range minimum - - - description: "Find with $gt above max" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDecimalPrecision: { $gt: { $numberDecimal: "200.0" } }} - result: - errorContains: must be less than the range max - - - description: "Find with $gt and $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDecimalPrecision: { $gt: { $numberDecimal: "0.0" }, $lt: { $numberDecimal: "2.0"} }} - result: [*doc1] - - - description: "Find with equality" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDecimalPrecision: { $numberDecimal: "0.0" } } - result: [*doc0] - - name: find - arguments: - filter: { encryptedDecimalPrecision: { $numberDecimal: "1.0" } } - result: [*doc1] - - - description: "Find with full range" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDecimalPrecision: { $gte: {$numberDecimal: "0.0"}, $lte: {$numberDecimal: "200.0"} } } - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: [*doc0, *doc1] - - - description: "Find with $in" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDecimalPrecision: { $in: [ {$numberDecimal: "0.0"} ] } } - result: [*doc0] - - - description: "Insert out of range" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: { _id: 0, encryptedDecimalPrecision: { $numberDecimal: "-1" }} - result: - errorContains: value must be greater than or equal to the minimum value - - - description: "Insert min and max" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: *doc0 - - name: insertOne - arguments: - document: &doc200 { _id: 200, encryptedDecimalPrecision: { $numberDecimal: "200.0" }} - - name: find - arguments: - filter: {} - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: [*doc0, *doc200] - - - description: "Aggregate with $gte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDecimalPrecision: { $gte: { $numberDecimal: "0.0" } }} } - # sort so results from range queries are ordered. - - { $sort: { _id: 1 }} - result: [*doc0, *doc1] - - - description: "Aggregate with $gt with no results" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDecimalPrecision: { $gt: { $numberDecimal: "1.0" } }} } - result: [] - - - description: "Aggregate with $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDecimalPrecision: { $lt: { $numberDecimal: "1.0" } }} } - result: [*doc0] - - - description: "Aggregate with $lte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDecimalPrecision: { $lte: { $numberDecimal: "1.0" } }} } - # sort so results from range queries are ordered. - - { $sort: { _id: 1 }} - result: [*doc0, *doc1] - - - description: "Aggregate with $lt below min" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDecimalPrecision: { $lt: { $numberDecimal: "0.0" } }} } - result: - errorContains: must be greater than the range minimum - - - description: "Aggregate with $gt above max" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDecimalPrecision: { $gt: { $numberDecimal: "200.0" } }} } - result: - errorContains: must be less than the range max - - - description: "Aggregate with $gt and $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDecimalPrecision: { $gt: { $numberDecimal: "0.0" }, $lt: { $numberDecimal: "2.0"} }} } - result: [*doc1] - - - description: "Aggregate with equality" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDecimalPrecision: { $numberDecimal: "0.0" } } } - result: [*doc0] - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDecimalPrecision: { $numberDecimal: "1.0" } } } - result: [*doc1] - - - description: "Aggregate with full range" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDecimalPrecision: { $gte: {$numberDecimal: "0.0"}, $lte: {$numberDecimal: "200.0"} } } } - # sort so results from range queries are ordered. - - { $sort: { _id: 1 }} - result: [*doc0, *doc1] - - - description: "Aggregate with $in" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDecimalPrecision: { $in: [ {$numberDecimal: "0.0"} ] } } } - result: [*doc0] - - - description: "Wrong type: Insert Int" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: { _id: 0, encryptedDecimalPrecision: { $numberInt: "0" }} } - result: - # Expect an error from mongocryptd. - errorContains: "cannot encrypt element" - - - description: "Wrong type: Find Int" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: find - arguments: - filter: { encryptedDecimalPrecision: { $gte: { $numberInt: "0" } }} - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: - # expect an error from libmongocrypt. - errorContains: "field type is not supported" \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Delete.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Delete.json deleted file mode 100644 index 7b3d5d8225..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Delete.json +++ /dev/null @@ -1,476 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDecimal": "0.0" - }, - "max": { - "$numberDecimal": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range DecimalPrecision. Delete.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1" - } - } - } - }, - { - "name": "deleteOne", - "arguments": { - "filter": { - "encryptedDecimalPrecision": { - "$gt": { - "$numberDecimal": "0" - } - } - } - }, - "result": { - "deletedCount": 1 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedDecimalPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDecimal": "0.0" - }, - "max": { - "$numberDecimal": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedDecimalPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDecimal": "0.0" - }, - "max": { - "$numberDecimal": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "delete": "default", - "deletes": [ - { - "q": { - "encryptedDecimalPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - }, - "limit": 1 - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDecimal": "0.0" - }, - "max": { - "$numberDecimal": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "delete" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": { - "$numberInt": "0" - }, - "encryptedDecimalPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "Dri0CXmL78L2DOgk9w0DwxHOMGMzih7m6l59vgy+WWo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "b7d8mRzD1kI1tdc7uNL+YAUonJ6pODLsRLkArfEKSkM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Xg8C1/A0KJaXOw4i+26Rv03/CydaaunOzXh0CIT+gn8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UoKUDw2wJYToUCcFaIs03YQSTksYR0MIOTJllwODqKc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "c/5cwAT0C5jber2xlJnWD3a5tVDy0nRtr5HG02hoFOY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wSUrRXavAGaajNeqC5mEUH1K67oYl5Wy9RNIzKjwLAM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6vrp4wWDtHEgHWR99I70WVDzevg1Fk/Pw5U8gUDa0OU=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Delete.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Delete.yml deleted file mode 100644 index af78be2dc2..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Delete.yml +++ /dev/null @@ -1,220 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDecimalPrecision', 'bsonType': 'decimal', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberDecimal': '0.0'}, 'max': {'$numberDecimal': '200.0'}, 'precision': {'$numberInt': '2'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range DecimalPrecision. Delete." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDecimalPrecision: { $numberDecimal: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDecimalPrecision: { $numberDecimal: "1" } } - - name: deleteOne - arguments: - filter: { "encryptedDecimalPrecision": { $gt: {$numberDecimal: "0" }} } - result: - deletedCount: 1 - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedDecimalPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedDecimalPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - delete: *collection_name - deletes: [ - { - "q": { - "encryptedDecimalPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - }, - "limit": 1 - } - ] - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: delete - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": { - "$numberInt": "0" - }, - "encryptedDecimalPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "Dri0CXmL78L2DOgk9w0DwxHOMGMzih7m6l59vgy+WWo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "b7d8mRzD1kI1tdc7uNL+YAUonJ6pODLsRLkArfEKSkM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Xg8C1/A0KJaXOw4i+26Rv03/CydaaunOzXh0CIT+gn8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UoKUDw2wJYToUCcFaIs03YQSTksYR0MIOTJllwODqKc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "c/5cwAT0C5jber2xlJnWD3a5tVDy0nRtr5HG02hoFOY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wSUrRXavAGaajNeqC5mEUH1K67oYl5Wy9RNIzKjwLAM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6vrp4wWDtHEgHWR99I70WVDzevg1Fk/Pw5U8gUDa0OU=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-FindOneAndUpdate.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-FindOneAndUpdate.json deleted file mode 100644 index af371f7b3f..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-FindOneAndUpdate.json +++ /dev/null @@ -1,588 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDecimal": "0.0" - }, - "max": { - "$numberDecimal": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range DecimalPrecision. FindOneAndUpdate.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1" - } - } - } - }, - { - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "encryptedDecimalPrecision": { - "$gt": { - "$numberDecimal": "0" - } - } - }, - "update": { - "$set": { - "encryptedDecimalPrecision": { - "$numberDecimal": "2" - } - } - }, - "returnDocument": "Before" - }, - "result": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedDecimalPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDecimal": "0.0" - }, - "max": { - "$numberDecimal": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedDecimalPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDecimal": "0.0" - }, - "max": { - "$numberDecimal": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "findAndModify": "default", - "query": { - "encryptedDecimalPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - }, - "update": { - "$set": { - "encryptedDecimalPrecision": { - "$$type": "binData" - } - } - }, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDecimal": "0.0" - }, - "max": { - "$numberDecimal": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "findAndModify" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": { - "$numberInt": "0" - }, - "encryptedDecimalPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "Dri0CXmL78L2DOgk9w0DwxHOMGMzih7m6l59vgy+WWo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "b7d8mRzD1kI1tdc7uNL+YAUonJ6pODLsRLkArfEKSkM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Xg8C1/A0KJaXOw4i+26Rv03/CydaaunOzXh0CIT+gn8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UoKUDw2wJYToUCcFaIs03YQSTksYR0MIOTJllwODqKc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "c/5cwAT0C5jber2xlJnWD3a5tVDy0nRtr5HG02hoFOY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wSUrRXavAGaajNeqC5mEUH1K67oYl5Wy9RNIzKjwLAM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6vrp4wWDtHEgHWR99I70WVDzevg1Fk/Pw5U8gUDa0OU=", - "subType": "00" - } - } - ] - }, - { - "_id": { - "$numberInt": "1" - }, - "encryptedDecimalPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "V6knyt7Zq2CG3++l75UtBx2m32iGAPjHiAe439Bf02w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "F08nMDWDZc+DbWM7XCEJNNCEYyinRmrvGP7EWhmp4is=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cXH4688amcDc8kZOJq4UP8cE3R58Zl7e+Qo/1jyspps=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uURBxvTp3FBCVkd+LPqyuY7d6rMW6SGIJQEPY/wtkZI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jG3hax1L3RBp9t38vUt53FsBxgr/+Si/vVISpAylYpE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kwtIW8MhH9Ky5xNjBx8gFA/SHh2YVphie7g5FGBzals=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FHflwFuEMu4xX0ZApHi+pdlBH+oevAtXckCUb5Wv0xU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0OKSXELxPP85SBVwDGf3LtMEQCJ8TTkFUl/+6jlkdb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "25j9sQXZCihCmHKvTHgaBsAVZFcGPn7JjHdrCGlwyyw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uEw0lpQtBppR3vqV9j9+NQRSBF1BzZukb8c9IhyWvxc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zVhZ7Q59O087ji49oMJvBIgeir2oqvUpnh4p53GcTow=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dowrzKs+qJhRMZyKDbhjXbuX43FbmUKOaw9I8YlOZDw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ep5B6cska6THLIF7Mn3tn3RvV9EiwLSt0eZM/CLRUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "URNp/YmmDh5wIZUfAzzgPyJeMNiVx9PMsz52DZRujGY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wlM4IAQhhKQEzoVqS8b1Ddd50GB95OFb9LnzOwyjCP4=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-FindOneAndUpdate.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-FindOneAndUpdate.yml deleted file mode 100644 index ac1de049fd..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-FindOneAndUpdate.yml +++ /dev/null @@ -1,315 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDecimalPrecision', 'bsonType': 'decimal', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberDecimal': '0.0'}, 'max': {'$numberDecimal': '200.0'}, 'precision': {'$numberInt': '2'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range DecimalPrecision. FindOneAndUpdate." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDecimalPrecision: { $numberDecimal: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDecimalPrecision: { $numberDecimal: "1" } } - - name: findOneAndUpdate - arguments: - filter: { encryptedDecimalPrecision: { $gt: {$numberDecimal: "0"}} } - update: { "$set": { "encryptedDecimalPrecision": {$numberDecimal: "2"}}} - returnDocument: Before - result: *doc1 - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedDecimalPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedDecimalPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - findAndModify: *collection_name - query: { - "encryptedDecimalPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - } - update: { "$set": {"encryptedDecimalPrecision": { $$type: "binData" }} } - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: findAndModify - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": { - "$numberInt": "0" - }, - "encryptedDecimalPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "Dri0CXmL78L2DOgk9w0DwxHOMGMzih7m6l59vgy+WWo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "b7d8mRzD1kI1tdc7uNL+YAUonJ6pODLsRLkArfEKSkM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Xg8C1/A0KJaXOw4i+26Rv03/CydaaunOzXh0CIT+gn8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UoKUDw2wJYToUCcFaIs03YQSTksYR0MIOTJllwODqKc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "c/5cwAT0C5jber2xlJnWD3a5tVDy0nRtr5HG02hoFOY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wSUrRXavAGaajNeqC5mEUH1K67oYl5Wy9RNIzKjwLAM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6vrp4wWDtHEgHWR99I70WVDzevg1Fk/Pw5U8gUDa0OU=", - "subType": "00" - } - } - ] - } - - - { - "_id": { - "$numberInt": "1" - }, - "encryptedDecimalPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "V6knyt7Zq2CG3++l75UtBx2m32iGAPjHiAe439Bf02w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "F08nMDWDZc+DbWM7XCEJNNCEYyinRmrvGP7EWhmp4is=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cXH4688amcDc8kZOJq4UP8cE3R58Zl7e+Qo/1jyspps=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uURBxvTp3FBCVkd+LPqyuY7d6rMW6SGIJQEPY/wtkZI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jG3hax1L3RBp9t38vUt53FsBxgr/+Si/vVISpAylYpE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kwtIW8MhH9Ky5xNjBx8gFA/SHh2YVphie7g5FGBzals=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FHflwFuEMu4xX0ZApHi+pdlBH+oevAtXckCUb5Wv0xU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0OKSXELxPP85SBVwDGf3LtMEQCJ8TTkFUl/+6jlkdb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "25j9sQXZCihCmHKvTHgaBsAVZFcGPn7JjHdrCGlwyyw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uEw0lpQtBppR3vqV9j9+NQRSBF1BzZukb8c9IhyWvxc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zVhZ7Q59O087ji49oMJvBIgeir2oqvUpnh4p53GcTow=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dowrzKs+qJhRMZyKDbhjXbuX43FbmUKOaw9I8YlOZDw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ep5B6cska6THLIF7Mn3tn3RvV9EiwLSt0eZM/CLRUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "URNp/YmmDh5wIZUfAzzgPyJeMNiVx9PMsz52DZRujGY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wlM4IAQhhKQEzoVqS8b1Ddd50GB95OFb9LnzOwyjCP4=", - "subType": "00" - } - } - ] - } diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-InsertFind.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-InsertFind.json deleted file mode 100644 index bbe81f87ad..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-InsertFind.json +++ /dev/null @@ -1,571 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDecimal": "0.0" - }, - "max": { - "$numberDecimal": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range DecimalPrecision. Insert and Find.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDecimalPrecision": { - "$gt": { - "$numberDecimal": "0" - } - } - } - }, - "result": [ - { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1" - } - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedDecimalPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDecimal": "0.0" - }, - "max": { - "$numberDecimal": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedDecimalPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDecimal": "0.0" - }, - "max": { - "$numberDecimal": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "encryptedDecimalPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - }, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDecimal": "0.0" - }, - "max": { - "$numberDecimal": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedDecimalPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "Dri0CXmL78L2DOgk9w0DwxHOMGMzih7m6l59vgy+WWo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "b7d8mRzD1kI1tdc7uNL+YAUonJ6pODLsRLkArfEKSkM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Xg8C1/A0KJaXOw4i+26Rv03/CydaaunOzXh0CIT+gn8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UoKUDw2wJYToUCcFaIs03YQSTksYR0MIOTJllwODqKc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "c/5cwAT0C5jber2xlJnWD3a5tVDy0nRtr5HG02hoFOY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wSUrRXavAGaajNeqC5mEUH1K67oYl5Wy9RNIzKjwLAM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6vrp4wWDtHEgHWR99I70WVDzevg1Fk/Pw5U8gUDa0OU=", - "subType": "00" - } - } - ] - }, - { - "_id": 1, - "encryptedDecimalPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "mVZb+Ra0EYjQ4Zrh9X//E2T8MRj7NMqm5GUJXhRrBEI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FA74j21GUEJb1DJBOpR9nVnjaDZnd8yAQNuaW9Qi26g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kJv//KVkbrobIBf+QeWC5jxn20mx/P0R1N6aCSMgKM8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zB+Whi9IUUGxfLEe+lGuIzLX4LFbIhaIAm5lRk65QTc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ybO1QU3CgvhO8JgRXH+HxKszWcpl5aGDYYVa75fHa1g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X3Y3eSAbbMg//JgiHHiFpYOpV61t8kkDexI+CQyitH4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SlNHXyqVFGDPrX/2ppwog6l4pwj3PKda2TkZbqgfSfA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "McjV8xwTF3xI7863DYOBdyvIv6UpzThl6v9vBRk05bI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MgwakFvPyBlwqFTbhWUF79URJQWFoJTGotlEVSPPUsQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DyBERpMSD5lEM5Nhpcn4WGgxgn/mkUVJp+PYSLX5jsE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I43iazc0xj1WVbYB/V+uTL/tughN1bBlxh1iypBnNsA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wjOBa/ATMuOywFmuPgC0GF/oeLqu0Z7eK5udzkTPbis=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gRQVwiR+m+0Vg8ZDXqrQQcVnTyobwCXNaA4BCJVXtMc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WUZ6huwx0ZbLb0R00uiC9FOJzsUocUN8qE5+YRenkvQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7s79aKEuPgQcS/YPOOVcYNZvHIo7FFsWtFCrnDKXefA=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-InsertFind.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-InsertFind.yml deleted file mode 100644 index ca04f412a6..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-InsertFind.yml +++ /dev/null @@ -1,307 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDecimalPrecision', 'bsonType': 'decimal', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberDecimal': '0.0'}, 'max': {'$numberDecimal': '200.0'}, 'precision': {'$numberInt': '2'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range DecimalPrecision. Insert and Find." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDecimalPrecision: { $numberDecimal: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDecimalPrecision: { $numberDecimal: "1" } } - - name: find - arguments: - filter: { encryptedDecimalPrecision: { $gt: { $numberDecimal: "0" } } } - result: [*doc1] - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedDecimalPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedDecimalPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: - "encryptedDecimalPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedDecimalPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "Dri0CXmL78L2DOgk9w0DwxHOMGMzih7m6l59vgy+WWo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "b7d8mRzD1kI1tdc7uNL+YAUonJ6pODLsRLkArfEKSkM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Xg8C1/A0KJaXOw4i+26Rv03/CydaaunOzXh0CIT+gn8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UoKUDw2wJYToUCcFaIs03YQSTksYR0MIOTJllwODqKc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "c/5cwAT0C5jber2xlJnWD3a5tVDy0nRtr5HG02hoFOY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wSUrRXavAGaajNeqC5mEUH1K67oYl5Wy9RNIzKjwLAM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6vrp4wWDtHEgHWR99I70WVDzevg1Fk/Pw5U8gUDa0OU=", - "subType": "00" - } - } - ] - } - - - { - "_id": 1, - "encryptedDecimalPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "mVZb+Ra0EYjQ4Zrh9X//E2T8MRj7NMqm5GUJXhRrBEI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FA74j21GUEJb1DJBOpR9nVnjaDZnd8yAQNuaW9Qi26g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kJv//KVkbrobIBf+QeWC5jxn20mx/P0R1N6aCSMgKM8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zB+Whi9IUUGxfLEe+lGuIzLX4LFbIhaIAm5lRk65QTc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ybO1QU3CgvhO8JgRXH+HxKszWcpl5aGDYYVa75fHa1g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X3Y3eSAbbMg//JgiHHiFpYOpV61t8kkDexI+CQyitH4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SlNHXyqVFGDPrX/2ppwog6l4pwj3PKda2TkZbqgfSfA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "McjV8xwTF3xI7863DYOBdyvIv6UpzThl6v9vBRk05bI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MgwakFvPyBlwqFTbhWUF79URJQWFoJTGotlEVSPPUsQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DyBERpMSD5lEM5Nhpcn4WGgxgn/mkUVJp+PYSLX5jsE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I43iazc0xj1WVbYB/V+uTL/tughN1bBlxh1iypBnNsA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wjOBa/ATMuOywFmuPgC0GF/oeLqu0Z7eK5udzkTPbis=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gRQVwiR+m+0Vg8ZDXqrQQcVnTyobwCXNaA4BCJVXtMc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WUZ6huwx0ZbLb0R00uiC9FOJzsUocUN8qE5+YRenkvQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7s79aKEuPgQcS/YPOOVcYNZvHIo7FFsWtFCrnDKXefA=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Update.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Update.json deleted file mode 100644 index 987bdf1aa6..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Update.json +++ /dev/null @@ -1,588 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDecimal": "0.0" - }, - "max": { - "$numberDecimal": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range DecimalPrecision. Update.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDecimalPrecision": { - "$numberDecimal": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDecimalPrecision": { - "$numberDecimal": "1" - } - } - } - }, - { - "name": "updateOne", - "arguments": { - "filter": { - "encryptedDecimalPrecision": { - "$gt": { - "$numberDecimal": "0" - } - } - }, - "update": { - "$set": { - "encryptedDecimalPrecision": { - "$numberDecimal": "2" - } - } - } - }, - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedDecimalPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDecimal": "0.0" - }, - "max": { - "$numberDecimal": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedDecimalPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDecimal": "0.0" - }, - "max": { - "$numberDecimal": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command_name": "update", - "command": { - "update": "default", - "ordered": true, - "updates": [ - { - "q": { - "encryptedDecimalPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - }, - "u": { - "$set": { - "encryptedDecimalPrecision": { - "$$type": "binData" - } - } - } - } - ], - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDecimalPrecision", - "bsonType": "decimal", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDecimal": "0.0" - }, - "max": { - "$numberDecimal": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - }, - "$db": "default" - } - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedDecimalPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "Dri0CXmL78L2DOgk9w0DwxHOMGMzih7m6l59vgy+WWo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "b7d8mRzD1kI1tdc7uNL+YAUonJ6pODLsRLkArfEKSkM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Xg8C1/A0KJaXOw4i+26Rv03/CydaaunOzXh0CIT+gn8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UoKUDw2wJYToUCcFaIs03YQSTksYR0MIOTJllwODqKc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "c/5cwAT0C5jber2xlJnWD3a5tVDy0nRtr5HG02hoFOY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wSUrRXavAGaajNeqC5mEUH1K67oYl5Wy9RNIzKjwLAM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6vrp4wWDtHEgHWR99I70WVDzevg1Fk/Pw5U8gUDa0OU=", - "subType": "00" - } - } - ] - }, - { - "_id": 1, - "encryptedDecimalPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "V6knyt7Zq2CG3++l75UtBx2m32iGAPjHiAe439Bf02w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "F08nMDWDZc+DbWM7XCEJNNCEYyinRmrvGP7EWhmp4is=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cXH4688amcDc8kZOJq4UP8cE3R58Zl7e+Qo/1jyspps=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uURBxvTp3FBCVkd+LPqyuY7d6rMW6SGIJQEPY/wtkZI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jG3hax1L3RBp9t38vUt53FsBxgr/+Si/vVISpAylYpE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kwtIW8MhH9Ky5xNjBx8gFA/SHh2YVphie7g5FGBzals=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FHflwFuEMu4xX0ZApHi+pdlBH+oevAtXckCUb5Wv0xU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0OKSXELxPP85SBVwDGf3LtMEQCJ8TTkFUl/+6jlkdb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "25j9sQXZCihCmHKvTHgaBsAVZFcGPn7JjHdrCGlwyyw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uEw0lpQtBppR3vqV9j9+NQRSBF1BzZukb8c9IhyWvxc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zVhZ7Q59O087ji49oMJvBIgeir2oqvUpnh4p53GcTow=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dowrzKs+qJhRMZyKDbhjXbuX43FbmUKOaw9I8YlOZDw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ep5B6cska6THLIF7Mn3tn3RvV9EiwLSt0eZM/CLRUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "URNp/YmmDh5wIZUfAzzgPyJeMNiVx9PMsz52DZRujGY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wlM4IAQhhKQEzoVqS8b1Ddd50GB95OFb9LnzOwyjCP4=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Update.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Update.yml deleted file mode 100644 index b8ca8df782..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DecimalPrecision-Update.yml +++ /dev/null @@ -1,324 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDecimalPrecision', 'bsonType': 'decimal', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberDecimal': '0.0'}, 'max': {'$numberDecimal': '200.0'}, 'precision': {'$numberInt': '2'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range DecimalPrecision. Update." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDecimalPrecision: { $numberDecimal: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDecimalPrecision: { $numberDecimal: "1" } } - - name: updateOne - arguments: - filter: { encryptedDecimalPrecision: { $gt: { $numberDecimal: "0" } } } - update: { "$set": { "encryptedDecimalPrecision": { $numberDecimal: "2" } }} - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedDecimalPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedDecimalPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command_name: update - command: - "update": "default" - "ordered": true - "updates": [ - { - "q": { - "encryptedDecimalPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - }, - "u": { - "$set": { - "encryptedDecimalPrecision": { $$type: "binData" } - } - } - } - ] - encryptionInformation: - type: 1 - schema: - "default.default": - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - "$db": "default" - - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedDecimalPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "Dri0CXmL78L2DOgk9w0DwxHOMGMzih7m6l59vgy+WWo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "b7d8mRzD1kI1tdc7uNL+YAUonJ6pODLsRLkArfEKSkM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Xg8C1/A0KJaXOw4i+26Rv03/CydaaunOzXh0CIT+gn8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UoKUDw2wJYToUCcFaIs03YQSTksYR0MIOTJllwODqKc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "c/5cwAT0C5jber2xlJnWD3a5tVDy0nRtr5HG02hoFOY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wSUrRXavAGaajNeqC5mEUH1K67oYl5Wy9RNIzKjwLAM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6vrp4wWDtHEgHWR99I70WVDzevg1Fk/Pw5U8gUDa0OU=", - "subType": "00" - } - } - ] - } - - - { - "_id": 1, - "encryptedDecimalPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "V6knyt7Zq2CG3++l75UtBx2m32iGAPjHiAe439Bf02w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "F08nMDWDZc+DbWM7XCEJNNCEYyinRmrvGP7EWhmp4is=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cXH4688amcDc8kZOJq4UP8cE3R58Zl7e+Qo/1jyspps=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uURBxvTp3FBCVkd+LPqyuY7d6rMW6SGIJQEPY/wtkZI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jG3hax1L3RBp9t38vUt53FsBxgr/+Si/vVISpAylYpE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kwtIW8MhH9Ky5xNjBx8gFA/SHh2YVphie7g5FGBzals=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FHflwFuEMu4xX0ZApHi+pdlBH+oevAtXckCUb5Wv0xU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0OKSXELxPP85SBVwDGf3LtMEQCJ8TTkFUl/+6jlkdb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "25j9sQXZCihCmHKvTHgaBsAVZFcGPn7JjHdrCGlwyyw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uEw0lpQtBppR3vqV9j9+NQRSBF1BzZukb8c9IhyWvxc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zVhZ7Q59O087ji49oMJvBIgeir2oqvUpnh4p53GcTow=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dowrzKs+qJhRMZyKDbhjXbuX43FbmUKOaw9I8YlOZDw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ep5B6cska6THLIF7Mn3tn3RvV9EiwLSt0eZM/CLRUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "URNp/YmmDh5wIZUfAzzgPyJeMNiVx9PMsz52DZRujGY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wlM4IAQhhKQEzoVqS8b1Ddd50GB95OFb9LnzOwyjCP4=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Defaults.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Defaults.json deleted file mode 100644 index c2a119cb7f..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Defaults.json +++ /dev/null @@ -1,381 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range applies defaults for trimFactor and sparsity", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedInt": { - "$gt": { - "$numberInt": "0" - } - } - } - }, - "result": [ - { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedInt": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedInt": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "encryptedInt": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - }, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - } - } - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedInt": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - } - ] - }, - { - "_id": { - "$numberInt": "1" - }, - "encryptedInt": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "25j9sQXZCihCmHKvTHgaBsAVZFcGPn7JjHdrCGlwyyw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SlNHXyqVFGDPrX/2ppwog6l4pwj3PKda2TkZbqgfSfA=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Defaults.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Defaults.yml deleted file mode 100644 index 91fb9eb77c..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Defaults.yml +++ /dev/null @@ -1,157 +0,0 @@ -# Test "range" field with defaults for `trimFactor` and `sparsity`. -# Test requires libmongocrypt with changes in MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - topology: [ "replicaset", "sharded", "load-balanced" ] # Exclude "standalone". QE collections are not supported on standalone. -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - # Exclude `trimFactor` and `sparsity` - "contention": { "$numberLong": "0" }, - "min": { "$numberInt": "0" }, - "max": { "$numberInt": "200" } - } - } - ] -} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range applies defaults for trimFactor and sparsity" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedInt: { $numberInt: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedInt: { $numberInt: "1" } } - - name: find - arguments: - filter: { encryptedInt: { $gt: { $numberInt: "0" } } } - result: [*doc1] - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedInt": { $$type: "binData" } } - ordered: true - encryptionInformation: &encryptionInformation - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedInt": { $$type: "binData" } } - ordered: true - encryptionInformation: *encryptionInformation - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: - "encryptedInt": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - encryptionInformation: *encryptionInformation - command_name: find - outcome: - collection: - data: - - - { - "_id": 0, - "encryptedInt": { $$type: "binData" }, - # Expected contents of `__safeContent__` require MONGOCRYPT-698 to apply expected `trimFactor`. - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - } - ] - } - - - { - "_id": { - "$numberInt": "1" - }, - "encryptedInt": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "25j9sQXZCihCmHKvTHgaBsAVZFcGPn7JjHdrCGlwyyw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SlNHXyqVFGDPrX/2ppwog6l4pwj3PKda2TkZbqgfSfA=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Aggregate.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Aggregate.json deleted file mode 100644 index daa7f4e973..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Aggregate.json +++ /dev/null @@ -1,1132 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoubleNoPrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range Double. Aggregate.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDoubleNoPrecision": { - "$gt": { - "$numberDouble": "0" - } - } - } - } - ] - }, - "result": [ - { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1" - } - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoubleNoPrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoubleNoPrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "default", - "pipeline": [ - { - "$match": { - "encryptedDoubleNoPrecision": { - "$gt": { - "$binary": { - "base64": "DbMkAAADcGF5bG9hZABXJAAABGcAQyQAAAMwAH0AAAAFZAAgAAAAAHgYoMGjEE6fAlAhICv0+doHcVX8CmMVxyq7+jlyGrvmBXMAIAAAAAC/5MQZgTHuIr/O5Z3mXPvqrom5JTQ8IeSpQGhO9sB+8gVsACAAAAAAuPSXVmJUAUpTQg/A9Bu1hYczZF58KEhVofakygbsvJQAAzEAfQAAAAVkACAAAAAA2kiWNvEc4zunJ1jzvuClFC9hjZMYruKCqAaxq+oY8EAFcwAgAAAAACofIS72Cm6s866UCk+evTH3CvKBj/uZd72sAL608rzTBWwAIAAAAADuCQ/M2xLeALF0UFZtJb22QGOhHmJv6xoO+kZIHcDeiAADMgB9AAAABWQAIAAAAABkfoBGmU3hjYBvQbjNW19kfXneBQsQQPRfUL3UAwI2cAVzACAAAAAAUpK2BUOqX/DGdX5YJniEZMWkofxHqeAbXceEGJxhp8AFbAAgAAAAAKUaLzIldNIZv6RHE+FwbMjzcNHqPESwF/37mm43VPrsAAMzAH0AAAAFZAAgAAAAAFNprhQ3ZwIcYbuzLolAT5n/vc14P9kUUQComDu6eFyKBXMAIAAAAAAcx9z9pk32YbPV/sfPZl9ALIEVsqoLXgqWLVK/tP+heAVsACAAAAAA/qxvuvJbAHwwhfrPVpmCFzNvg2cU/NXaWgqgYUZpgXwAAzQAfQAAAAVkACAAAAAAODI+pB2pCuB+YmNEUAgtMfNdt3DmSkrJ96gRzLphgb8FcwAgAAAAAAT7dewFDxUDECQ3zVq75/cUN4IP+zsqhkP5+czUwlJIBWwAIAAAAACFGeOtd5zBXTJ4JYonkn/HXZfHipUlqGwIRUcH/VTatwADNQB9AAAABWQAIAAAAACNAk+yTZ4Ewk1EnotQK8O3h1gg9I7pr9q2+4po1iJVgAVzACAAAAAAUj/LesmtEsgqYVzMJ67umVA11hJTdDXwbxDoQ71vWyUFbAAgAAAAABlnhpgTQ0WjLb5u0b/vEydrCeFjVynKd7aqb+UnvVLeAAM2AH0AAAAFZAAgAAAAAD/FIrGYFDjyYmVb7oTMVwweWP7A6F9LnyIuNO4MjBnXBXMAIAAAAACIZgJCQRZu7NhuNMyOqCn1tf+DfU1qm10TPCfj5JYV3wVsACAAAAAA5hmY4ptuNxULGf87SUFXQWGAONsL9U29duh8xqsHtxoAAzcAfQAAAAVkACAAAAAAciRW40ORJLVwchOEpz87Svb+5toAFM6LxDWv928ECwQFcwAgAAAAAN0dipyESIkszfjRzdDi8kAGaa2Hf4wrPAtiWwboZLuxBWwAIAAAAAANr4o/+l1OIbbaX5lZ3fQ/WIeOcEXjNI1F0WbSgQrzaQADOAB9AAAABWQAIAAAAACZqAyCzYQupJ95mrBJX54yIz9VY7I0WrxpNYElCI4dTQVzACAAAAAA/eyJb6d1xfE+jJlVXMTD3HS/NEYENPVKAuj56Dr2dSEFbAAgAAAAANkSt154Or/JKb31VvbZFV46RPgUp8ff/hcPORL7PpFBAAM5AH0AAAAFZAAgAAAAAI5bm3YO0Xgf0VT+qjVTTfvckecM3Cwqj7DTKZXf8/NXBXMAIAAAAAD/m+h8fBhWaHm6Ykuz0WX1xL4Eme3ErLObyEVJf8NCywVsACAAAAAAfb1VZZCqs2ivYbRzX4p5CtaCkKW+g20Pr57FWXzEZi8AAzEwAH0AAAAFZAAgAAAAANqo4+p6qdtCzcB4BX1wQ6llU7eFBnuu4MtZwp4B6mDlBXMAIAAAAAAGiz+VaukMZ+6IH4jtn4KWWdKK4/W+O+gRioQDrfzpMgVsACAAAAAAG4YYkTp80EKo59mlHExDodRQFR7njhR5dmISwUJ6ukAAAzExAH0AAAAFZAAgAAAAAPrFXmHP2Y4YAm7b/aqsdn/DPoDkv7B8egWkfe23XsM1BXMAIAAAAAAGhwpKAr7skeqHm3oseSbO7qKNhmYsuUrECBxJ5k+D2AVsACAAAAAAAqPQi9luYAu3GrFCEsVjd9z2zIDcp6SPTR2w6KQEr+IAAzEyAH0AAAAFZAAgAAAAABzjYxwAjXxXc0Uxv18rH8I3my0Aguow0kTwKyxbrm+cBXMAIAAAAADVbqJVr6IdokuhXkEtXF0C2gINLiAjMVN20lE20Vmp2QVsACAAAAAAD7K1Fx4gFaaizkIUrf+EGXQeG7QX1jadhGc6Ji471H8AAzEzAH0AAAAFZAAgAAAAAFMm2feF2fFCm/UC6AfIyepX/xJDSmnnolQIBnHcPmb5BXMAIAAAAABLI11kFrQoaNVZFmq/38aRNImPOjdJh0Lo6irI8M/AaAVsACAAAAAAOWul0oVqJ9CejD2RqphhTC98DJeRQy5EwbNerU2+4l8AAzE0AH0AAAAFZAAgAAAAAJvXB3KyNiNtQko4SSzo/9b2qmM2zU9CQTTDfLSBWMgRBXMAIAAAAAAvjuVP7KsLRDeqVqRziTKpBrjVyqKiIbO9Gw8Wl2wFTAVsACAAAAAADlE+oc1ins+paNcaOZJhBlKlObDJ4VQORWjFYocM4LgAAzE1AH0AAAAFZAAgAAAAAPGdcxDiid8z8XYnfdDivNMYVPgBKdGOUw6UStU+48CdBXMAIAAAAAARj6g1Ap0eEfuCZ4X2TsEw+Djrhto3fA5nLwPaY0vCTgVsACAAAAAAoHqiwGOUkBu8SX5U1yHho+UIFdSN2MdQN5s6bQ0EsJYAAzE2AH0AAAAFZAAgAAAAAP5rGPrYGt3aKob5f/ldP0qrW7bmWvqnKY4QwdDWz400BXMAIAAAAADTQkW2ymaaf/bhteOOGmSrIR97bAnJx+yN3yMj1bTeewVsACAAAAAADyQnHGH2gF4w4L8axUsSTf6Ubk7L5/eoFOJk12MtZAoAAzE3AH0AAAAFZAAgAAAAAAlz6wJze5UkIxKpJOZFGCOf3v2KByWyI6NB6JM9wNcBBXMAIAAAAABUC7P/neUIHHoZtq0jFVBHY75tSFYr1Y5S16YN5XxC1QVsACAAAAAAgvxRbXDisNnLY3pfsjDdnFLtkvYUC4lhA68eBXc7KAwAAzE4AH0AAAAFZAAgAAAAAFJ8AtHcjia/9Y5pLEc3qVgH5xKiXw12G9Kn2A1EY8McBXMAIAAAAAAxe7Bdw7eUSBk/oAawa7uicTEDgXLymRNhBy1LAxhDvwVsACAAAAAAxKPaIBKVx3jTA+R/el7P7AZ7efrmTGjJs3Hj/YdMddwAAzE5AH0AAAAFZAAgAAAAAO8uwQUaKFb6vqR3Sv3Wn4QAonC2exOC9lGG1juqP5DtBXMAIAAAAABZf1KyJgQg8/Rf5c02DgDK2aQu0rNCOvaL60ohDHyY+gVsACAAAAAAqyEjfKC8lYoIfoXYHUqHZPoaA6EK5BAZy5dxXZmay4kAAzIwAH0AAAAFZAAgAAAAAE8YtqyRsGCeiR6hhiyisR/hccmK4nZqIMzO4lUBmEFzBXMAIAAAAAC1UYOSKqAeG1UJiKjWFVskRhuFKpj9Ezy+lICZvFlN5AVsACAAAAAA6Ct9nNMKyRazn1OKnRKagm746CGu+jyhbL1qJnZxGi0AAzIxAH0AAAAFZAAgAAAAAPhCrMausDx1QUIEqp9rUdRKyM6a9AAx7jQ3ILIu8wNIBXMAIAAAAACmH8lotGCiF2q9VQxhsS+7LAZv79VUAsOUALaGxE/EpAVsACAAAAAAnc1xCKfdvbUEc8F7XZqlNn1C+hZTtC0I9I3LL06iaNkAAzIyAH0AAAAFZAAgAAAAAOBi/GAYFcstMSJPgp3VkMiuuUUCrZytvqYaU8dwm8v2BXMAIAAAAACEZSZVyD3pKzGlbdwlYmWQhHHTV5SnNLknl2Gw8IaUTQVsACAAAAAAfsLZsEDcWSuNsIo/TD1ReyQW75HPMgmuKZuWFOLKRLoAAzIzAH0AAAAFZAAgAAAAAIQuup+YGfH3mflzWopN8J1X8o8a0d9CSGIvrA5HOzraBXMAIAAAAADYvNLURXsC2ITMqK14LABQBI+hZZ5wNf24JMcKLW+84AVsACAAAAAACzfjbTBH7IwDU91OqLAz94RFkoqBOkzKAqQb55gT4/MAAzI0AH0AAAAFZAAgAAAAAKsh0ADyOnVocFrOrf6MpTrNvAj8iaiE923DPryu124gBXMAIAAAAADg24a8NVE1GyScc6tmnTbmu5ulzO+896fE92lN08MeswVsACAAAAAAaPxcOIxnU7But88/yadOuDJDMcCywwrRitaxMODT4msAAzI1AH0AAAAFZAAgAAAAAKkVC2Y6HtRmv72tDnPUSjJBvse7SxLqnr09/Uuj9sVVBXMAIAAAAABYNFUkH7ylPMN+Bc3HWX1e0flGYNbtJNCY9SltJCW/UAVsACAAAAAAZYK/f9H4OeihmpiFMH7Wm7uLvs2s92zNA8wyrNZTsuMAAzI2AH0AAAAFZAAgAAAAADDggcwcb/Yn1Kk39sOHsv7BO/MfP3m/AJzjGH506Wf9BXMAIAAAAAAYZIsdjICS0+BDyRUPnrSAZfPrwtuMaEDEn0/ijLNQmAVsACAAAAAAGPnYVvo2ulO9z4LGd/69NAklfIcZqZvFX2KK0s+FcTUAAzI3AH0AAAAFZAAgAAAAAEWY7dEUOJBgjOoWVht1wLehsWAzB3rSOBtLgTuM2HC8BXMAIAAAAAAAoswiHRROurjwUW8u8D5EUT+67yvrgpB/j6PzBDAfVwVsACAAAAAA6NhRTYFL/Sz4tao7vpPjLNgAJ0FX6P/IyMW65qT6YsMAAzI4AH0AAAAFZAAgAAAAAPZaapeAUUFPA7JTCMOWHJa9lnPFh0/gXfAPjA1ezm4ZBXMAIAAAAACmJvLY2nivw7/b3DOKH/X7bBXjJwoowqb1GtEFO3OYgAVsACAAAAAA/JcUoyKacCB1NfmH8vYqC1f7rd13KShrQqV2r9QBP44AAzI5AH0AAAAFZAAgAAAAAK00u6jadxCZAiA+fTsPVDsnW5p5LCr4+kZZZOTDuZlfBXMAIAAAAAAote4zTEYMDgaaQbAdN8Dzv93ljPLdGjJzvnRn3KXgtQVsACAAAAAAxXd9Mh6R3mnJy8m7UfqMKi6oD5DlZpkaOz6bEjMOdiwAAzMwAH0AAAAFZAAgAAAAAFbgabdyymiEVYYwtJSWa7lfl/oYuj/SukzJeDOR6wPVBXMAIAAAAADAFGFjS1vPbN6mQEhkDYTD6V2V23Ys9gUEUMGNvMPkaAVsACAAAAAAL/D5Sze/ZoEanZLK0IeEkhgVkxEjMWVCfmJaD3a8uNIAAzMxAH0AAAAFZAAgAAAAABNMR6UBv2E627CqLtQ/eDYx7OEwQ7JrR4mSHFa1N8tLBXMAIAAAAAAxH4gucI4UmNVB7625C6hFSVCuIpJO3lusJlPuL8H5EQVsACAAAAAAVLHNg0OUVqZ7WGOP53BkTap9FOw9dr1P4J8HxqFqU04AAzMyAH0AAAAFZAAgAAAAAG8cd6WBneNunlqrQ2EmNf35W7OGObGq9WL4ePX+LUDmBXMAIAAAAAAjJ2+sX87NSis9hBsgb1QprVRnO7Bf+GObCGoUqyPE4wVsACAAAAAAs9c9SM49/pWmyUQKslpt3RTMBNSRppfNO0JBvUqHPg0AAzMzAH0AAAAFZAAgAAAAAFWOUGkUpy8yf6gB3dio/aOfRKh7XuhvsUj48iESFJrGBXMAIAAAAAAY7sCDMcrUXvNuL6dO0m11WyijzXZvPIcOKob6IpC4PQVsACAAAAAAJOP+EHz6awDb1qK2bZQ3kTV7wsj5Daj/IGAWh4g7omAAAzM0AH0AAAAFZAAgAAAAAGUrIdKxOihwNmo6B+aG+Ag1qa0+iqdksHOjQj+Oy9bZBXMAIAAAAABwa5dbI2KmzBDNBTQBEkjZv4sPaeRkRNejcjdVymRFKQVsACAAAAAA4ml/nm0gJNTcJ4vuD+T2Qfq2fQZlibJp/j6MOGDrbHMAAzM1AH0AAAAFZAAgAAAAAOx89xV/hRk64/CkM9N2EMK6aldII0c8smdcsZ46NbP8BXMAIAAAAADBF6tfQ+7q9kTuLyuyrSnDgmrdmrXkdhl980i1KHuGHgVsACAAAAAACUqiFqHZdGbwAA+hN0YUE5zFg+H+dabIB4dj5/75W/YAAzM2AH0AAAAFZAAgAAAAAMkN0L1oQWXhjwn9rAdudcYeN8/5VdCKU8cmDt7BokjsBXMAIAAAAAAT62pGXoRwExe9uvgYOI0hg5tOxilrWfoEmT0SMglWJwVsACAAAAAAlVz4dhiprSbUero6JFfxzSJGclg63oAkAmgbSwbcYxIAAzM3AH0AAAAFZAAgAAAAANxfa4xCoaaB7k1C1RoH1LBhsCbN2yEq15BT9b+iqEC4BXMAIAAAAACAX9LV8Pemfw7NF0iB1/85NzM1Ef+1mUfyehacUVgobQVsACAAAAAAVq4xpbymLk0trPC/a2MvB39I7hRiX8EJsVSI5E5hSBkAAzM4AH0AAAAFZAAgAAAAAOYIYoWkX7dGuyKfi3XssUlc7u/gWzqrR9KMkikKVdmSBXMAIAAAAABVF2OYjRTGi9Tw8XCAwZWLpX35Yl271TlNWp6N/nROhAVsACAAAAAA0nWwYzXQ1+EkDvnGq+SMlq20z+j32Su+i/A95SggPb4AAzM5AH0AAAAFZAAgAAAAAIy0+bXZi10QC+q7oSOLXK5Fee7VEk/qHSXukfeVIfgzBXMAIAAAAAAQ3IIV/JQCHW95AEbH5zGIHtJqyuPjWPMIZ+VmQHlxEwVsACAAAAAAp0jYsyohKv9Pm+4k+DplEGbl9WLZpAJzitrcDj4CNsMAAzQwAH0AAAAFZAAgAAAAAL5SOJQ3LOhgdXJ5v086NNeAl1qonQnchObdpZJ1kHeEBXMAIAAAAAA+tEqTXODtik+ydJZSnUqXF9f18bPeze9eWtR7ExZJgQVsACAAAAAAbrkZCVgB9Qsp4IAbdf+bD4fT6Boqk5UtuA/zhNrh1y0AAzQxAH0AAAAFZAAgAAAAAKl8zcHJRDjSjJeV/WvMxulW1zrTFtaeBy/aKKhadc6UBXMAIAAAAADBdWQl5SBIvtZZLIHszePwkO14W1mQ0izUk2Ov21cPNAVsACAAAAAAHErCYycpqiIcCZHdmPL1hi+ovLQk4TAvENpfLdTRamQAAzQyAH0AAAAFZAAgAAAAAFvotcNaoKnVt5CBCOPwjexFO0WGWuaIGL6H/6KSau+6BXMAIAAAAAD2y2mBN5xPu5PJoY2zcr0GnQDtHRBogA5+xzIxccE9fwVsACAAAAAAdS34xzJesnUfxLCcc1U7XzUqLy8MAzV/tcjbqaD3lkMAAzQzAH0AAAAFZAAgAAAAAPezU0/vNT4Q4YKbTbaeHqcwNLT+IjW/Y9QFpIooihjPBXMAIAAAAACj2x4O4rHter8ZnTws5LAP9jJ/6kk9C/V3vL50LoFZHAVsACAAAAAAQdBDF3747uCVP5lB/zr8VmzxJfTSZHBKeIgm5FyONXwAAzQ0AH0AAAAFZAAgAAAAAMqpayM2XotEFmm0gwQd9rIzApy0X+7HfOhNk6VU7F5lBXMAIAAAAACJR9+q5T9qFHXFNgGbZnPubG8rkO6cwWhzITQTmd6VgwVsACAAAAAAOZLQ6o7e4mVfDzbpQioa4d3RoTvqwgnbmc5Qh2wsZuoAAzQ1AH0AAAAFZAAgAAAAANCeyW+3oebaQk+aqxNVhAcT/BZ5nhsTVdKS3tMrLSvWBXMAIAAAAADxRFMDhkyuEc++WnndMfoUMLNL7T7rWoeblcrpSI6soQVsACAAAAAAdBuBMJ1lxt0DRq9pOZldQqchLs3B/W02txcMLD490FEAAzQ2AH0AAAAFZAAgAAAAAIbo5YBTxXM7HQhl7UP9NNgpPGFkBx871r1B65G47+K8BXMAIAAAAAC21dJSxnEhnxO5gzN5/34BL4von45e1meW92qowzb8fQVsACAAAAAAm3Hk2cvBN0ANaR5jzeZE5TsdxDvJCTOT1I01X7cNVaYAAzQ3AH0AAAAFZAAgAAAAABm/6pF96j26Jm7z5KkY1y33zcAEXLx2n0DwC03bs/ixBXMAIAAAAAD01OMvTZI/mqMgxIhA5nLs068mW+GKl3OW3ilf2D8+LgVsACAAAAAAaLvJDrqBESTNZSdcXsd+8GXPl8ZkUsGpeYuyYVv/kygAAzQ4AH0AAAAFZAAgAAAAAJ/D3+17gaQdkBqkL2wMwccdmCaVOtxzIkM8VyI4xI5zBXMAIAAAAAAggLVmkc5u+YzBR+oNE+XgLVp64fC6MzUb/Ilu/Jsw0AVsACAAAAAACz3HVKdWkx82/kGbVpcbAeZtsj2R5Zr0dEPfle4IErkAAzQ5AH0AAAAFZAAgAAAAAJMRyUW50oaTzspS6A3TUoXyC3gNYQoShUGPakMmeVZrBXMAIAAAAACona2Pqwt4U2PmFrtmu37jB9kQ/12okyAVtYa8TQkDiQVsACAAAAAAltJJKjCMyBTJ+4PkdDCPJdeX695P8P5h7WOZ+kmExMAAAzUwAH0AAAAFZAAgAAAAAByuYl8dBvfaZ0LO/81JW4hYypeNmvLMaxsIdvqMPrWoBXMAIAAAAABNddwobOUJzm9HOUD8BMZJqkNCUCqstHZkC76FIdNg9AVsACAAAAAAQQOkIQtkyNavqCnhQbNg3HfqrJdsAGaoxSJePJl1qXsAAzUxAH0AAAAFZAAgAAAAAHEzLtfmF/sBcYPPdj8867VmmQyU1xK9I/3Y0478azvABXMAIAAAAAAcmyFajZPnBTbO+oLInNwlApBocUekKkxz2hYFeSlQ+gVsACAAAAAAZ6IkrOVRcC8vSA6Vb4fPWZJrYexXhEabIuYIeXNsCSgAAzUyAH0AAAAFZAAgAAAAAJam7JYsZe2cN20ZYm2W3v1pisNt5PLiniMzymBLWyMtBXMAIAAAAABxCsKVMZMTn3n+R2L7pVz5nW804r8HcK0mCBw3jUXKXAVsACAAAAAA7j3JGnNtR64P4dJLeUoScFRGfa8ekjh3dvhw46sRFk0AAzUzAH0AAAAFZAAgAAAAAMXrXx0saZ+5gORmwM2FLuZG6iuO2YS+1IGPoAtDKoKBBXMAIAAAAADIQsxCr8CfFKaBcx8kIeSywnGh7JHjKRJ9vJd9x79y7wVsACAAAAAAcvBV+SykDYhmRFyVYwFYB9oBKBSHr55Jdz2cXeowsUQAAzU0AH0AAAAFZAAgAAAAACbzcUD3INSnCRspOKF7ubne74OK9L0FTZvi9Ay0JVDYBXMAIAAAAADPebVQH8Btk9rhBIoUOdSAdpPvz7qIY4UC2i6IGisSAQVsACAAAAAAiBunJi0mPnnXdnldiq+If8dcb/n6apHnaIFt+oyYO1kAAzU1AH0AAAAFZAAgAAAAACUc2CtD1MK/UTxtv+8iA9FoHEyTwdl43HKeSwDw2Lp5BXMAIAAAAACCIduIdw65bQMzRYRfjBJj62bc69T4QqH4QoWanwlvowVsACAAAAAAM0TV7S+aPVVzJOQ+cpSNKHTwyQ0mWa8tcHzfk3nR+9IAAzU2AH0AAAAFZAAgAAAAAHSaHWs/dnmI9sc7nB50VB2Bzs0kHapMHCQdyVEYY30TBXMAIAAAAACkV22lhEjWv/9/DubfHBAcwJggKI5mIbSK5L2nyqloqQVsACAAAAAAS19m7DccQxgryOsBJ3GsCs37yfQqNi1G+S6fCXpEhn4AAzU3AH0AAAAFZAAgAAAAAAL8jhNBG0KXXZhmZ0bPXtfgapJCB/AI+BEHB0eZ3C75BXMAIAAAAADHx/fPa639EBmGV5quLi8IQT600ifiKSOhTDOK19DnzwVsACAAAAAAlyLTDVkHxbayklD6Qymh3odIK1JHaOtps4f4HR+PcDgAAzU4AH0AAAAFZAAgAAAAAAxgeclNl09H7HvzD1oLwb2YpFca5eaX90uStYXHilqKBXMAIAAAAACMU5pSxzIzWlQxHyW170Xs9EhD1hURASQk+qkx7K5Y6AVsACAAAAAAJbMMwJfNftA7Xom8Bw/ghuZmSa3x12vTZxBUbV8m888AAzU5AH0AAAAFZAAgAAAAABmO7QD9vxWMmFjIHz13lyOeV6vHT6mYCsWxF7hb/yOjBXMAIAAAAACT9lmgkiqzuWG24afuzYiCeK9gmJqacmxAruIukd0xEAVsACAAAAAAZa0/FI/GkZR7CtX18Xg9Tn9zfxkD0UoaSt+pIO5t1t4AAzYwAH0AAAAFZAAgAAAAAB89SjLtDJkqEghRGyj6aQ/2qvWLNuMROoXmzbYbCMKMBXMAIAAAAAC8sywgND+CjhVTF6HnRQeay8y9/HnVzDI42dEPah28LQVsACAAAAAAoxv7UKh0RqUAWcOsQvU123zO1qZn73Xfib0qncZCB34AAzYxAH0AAAAFZAAgAAAAABN2alGq9Aats1mwERNGwL/fIwZSvVCe9/8XMHTFlpUpBXMAIAAAAACuDPjJgvvbBYhbLpjMiWUCsVppiYrhvR+yMysNPN8cZAVsACAAAAAAKpADjc4bzIZMi9Q/+oe0EMRJHYQt6dlo1x/lRquagqkAAzYyAH0AAAAFZAAgAAAAAL8YB6VAqGBiWD4CBv16IBscg5J7VQCTZu87n6pj+86KBXMAIAAAAAAmxm8e68geeyAdUjSMWBHzUjneVB0pG9TBXIoE6467hAVsACAAAAAAV76JZAlYpgC/Zl8awx2ArCg1uuyy2XVTSkp0wUMi/7UAAzYzAH0AAAAFZAAgAAAAAL4yLkCTV5Dmxa5toBu4JT8ge/cITAaURIOuFuOtFUkeBXMAIAAAAAAXoFNQOMGkAj7qEJP0wQafmFSXgWGeorDVbwyOxWLIsgVsACAAAAAAc4Un6dtIFe+AQ+RSfNWs3q63RTHhmyc+5GKRRdpWRv8AAzY0AH0AAAAFZAAgAAAAAEU8DoUp46YtYjNFS9kNXwdYxQ9IW27vCTb+VcqqfnKNBXMAIAAAAADe7vBOgYReE8X78k5ARuUnv4GmzPZzg6SbConf4L2G3wVsACAAAAAA78YHWVkp6HbZ0zS4UL2z/2pj9vPDcMDt7zTv6NcRsVsAAzY1AH0AAAAFZAAgAAAAAPa4yKTtkUtySuWo1ZQsp2QXtPb5SYqzA5vYDnS1P6c0BXMAIAAAAADKnF58R1sXlHlsHIvCBR3YWW/qk54z9CTDhZydkD1cOQVsACAAAAAAHW3ERalTFWKMzjuXF3nFh0pSrQxM/ojnPbPhc4v5MaQAAzY2AH0AAAAFZAAgAAAAAN5WJnMBmfgpuQPyonmY5X6OdRvuHw4nhsnGRnFAQ95VBXMAIAAAAACwftzu7KVV1rmGKwXtJjs3cJ1gE3apr8+N0SAg1F2cHwVsACAAAAAATDW0reyaCjbJuVLJzbSLx1OBuBoQu+090kgW4RurVacAAzY3AH0AAAAFZAAgAAAAACHvDsaPhoSb6DeGnKQ1QOpGYAgK82qpnqwcmzSeWaJHBXMAIAAAAABRq3C5+dOfnkAHM5Mg5hPB3O4jhwQlBgQWLA7Ph5bhgwVsACAAAAAAqkC8zYASvkVrp0pqmDyFCkPaDmD/ePAJpMuNOCBhni8AAzY4AH0AAAAFZAAgAAAAAOBePJvccPMJmy515KB1AkXF5Pi8NOG4V8psWy0SPRP+BXMAIAAAAAB3dOJG9xIDtEKCRzeNnPS3bFZepMj8UKBobKpSoCPqpgVsACAAAAAAPG3IxQVOdZrr509ggm5FKizWWoZPuVtOgOIGZ3m+pdEAAzY5AH0AAAAFZAAgAAAAABUvRrDQKEXLMdhnzXRdhiL6AGNs2TojPky+YVLXs+JnBXMAIAAAAAD1kYicbEEcPzD4QtuSYQQWDPq8fuUWGddpWayKn3dT9QVsACAAAAAA9+Sf7PbyFcY45hP9oTfjQiOUS3vEIAT8C0vOHymwYSUAAzcwAH0AAAAFZAAgAAAAAOvSnpujeKNen4pqc2HR63C5s5oJ1Vf4CsbKoYQvkwl5BXMAIAAAAACw2+vAMdibzd2YVVNfk81yXkFZP0WLJ82JBxJmXnYE+QVsACAAAAAArQ/E1ACyhK4ZyLqH9mNkCU7WClqRQTGyW9tciSGG/EMAAzcxAH0AAAAFZAAgAAAAAAo0xfGG7tJ3GWhgPVhW5Zn239nTD3PadShCNRc9TwdNBXMAIAAAAADZh243oOhenu0s/P/5KZLBDh9ADqKHtSWcXpO9D2sIjgVsACAAAAAAlgTPaoQKz+saU8rwCT3UiNOdG6hdpjzFx9GBn08ZkBEAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAABbW4A////////7/8BbXgA////////738A", - "subType": "06" - } - } - } - } - } - ], - "cursor": {}, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoubleNoPrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "aggregate" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "6YrBn2ofIw1b5ooakrLOwF41BWrps8OO0H9WH4/rtlE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "n+XAuFnP8Dov9TnhGFxNx0K/MnVM9WbJ7RouEu0ndO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yRXojuVdn5GQtD97qYlaCL6cOLmZ7Cvcb3wFjkLUIdM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DuIkdRPITRs55I4SZmgomAHCIsDQmXRhW8+MOznkzSk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SsBk+Et1lTbU+QRPx+xyJ/jMkmfG+QCvQEpip2YYrzA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "crCIzOd8KhHvvUlX7M1v9bhvU4pLdTc+X2SuqoKU5Ek=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YOWdCw4UrqnxkAaVjqmC4sKQDMVMHEpFGnlxpxdaU6E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "M3SShp81Ff8tQ632qKbv9MUcN6wjDaBReI0VXNu6Xh4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gzHlSPxpM0hT75kQvWFzGlOxKvDoiKQZOr19V6l2zXI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s3JnppOGYw9SL2Q1kMAZs948v2F5PrpXjGei/HioDWs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cG6+3Gk/zEH68P/uuuwiAUVCuyJwa1LeV+t29FlPPAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dupdvR3AyJtM+g9NDKiaLVOtGca387JQp8w+V03m7Ig=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JqEQc5svj2jTvZ6LLA5ivE+kTb/0aRemSEmxk4G7Zrg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "szcXXXKnob+p3SoM4yED2R920LeJ7cVsclPMFTe4CeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o1QoGVXmuBdHwHm7aCtGMlMVKrjFdYvJXpoq6uhIAZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Jfm5wPlqqLCJRGQIqRq2NGmpn7s0Vrih2H3YAOoI2YU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zMHLb8ARbsYo8Ld05bqnGFf1Usha6EGb8QKwdSAyps0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yQdtq9lh5pugL7/i0Bj/PuZUUBUIzf+7wj1rl5y736w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wGWVZdO7qIuyDg/BqDgqjgoQ02h5YYgwXQB1oCin2NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "by9HMLj6NTEpgztZ5HSN6GxImkXPcaFINYDzgZY33X8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tWo0vbasi7bXmn/MsOx13VC1IsWtpx/nYp0uj4iMzdA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tQQpndUYd5O87lOtrGjH3wl9VsOK0ray7RMasL90sBM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cQjXEDCMsOpKLLf+vlTgIHA+cbSJdzqhbSX9Wvh95aA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7yMpU48IxK9SzP2cx3VnTownGEwFmeFofuuFT97SuuY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kSOx1kz0CmBgzKQHZlo65ZUY1DIv9A99JRm+Us2y6Ew=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ubQpdPBe6/xvtr+AcXdfYLSvYCR4ot0tivehkCsupb4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xal+iCJ6FTefRQToyoNksc9NCZShyn04NDGi4IYrcoM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "d7jU4iOK50xHxlkSifcxlZFCM46TSgQzoYivxG3HNLY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJvl2nsBLBVzL3pp6sKWCL4UXeh3q/roYBJjSb74ve0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OIUCaKRvIx9t1w6Hxlz1IcQTdPNCfdRNwnnTm10W+X0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A9tvzsiElotOUVIB4CqfQp9mAwqvTM35YkmAR170aHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lI8gpK7hpb7c9x4RQugsxMnQay5LZJmwslZdvMx/dcE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dNCzh40U0XvdKnSDi3HRQOWQftEsDVqc4uUvsVFGoq8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IP+iwEBWBwVVZIdpaMu8k5+soFCz+TZkYn3drKZ9grE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnqyh6e0y5svHkJDShlN9CHV0WvMBE4QbtJpQw5ZCXc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "elEl42tbVDoRTLjAhZUFEtXiut4b3PVhg/1ZLZSQdtE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vHuu2FxwclMHqyE6JBYbTYgbEkB0dqb/JuaxsvfwsmY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xTf7NCe3Gf8QpE78HR5OknlLTKfs9J+RN9UZpH6fnso=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XiWSasRnJAulGR6+LCVD3mwRObXylqYWR9jvpywq12c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MZMxEQ5ikx0PG1YFIExv0UnTZogsvgeOEZTpzvBDn4w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yZMyMZBDrWbAhvnic7vvIYhmO9m5H2iuv0c8KNZrBzY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xxM14hTPY5j0vvcK2C7YAEjzdsfUTFHozHC0hEo1bxI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+01rqR1xVwkpGXcstbk1ItJqFVjH6Q8MGxEN3Cm9Y1A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xOpLV0Z2VTRJ3iWtnWZcsyjXubTIkYWo31cO+HV1o1k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BWUOLqgLBqc5NwxVlSV5H3KFQPXbCp7mdo+jF+8cJqY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fuQb1S6xZDGlrEbK+kI23aL53PP1PVNwqICnZNt9Yzg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfscnoibFttahLdPVC4Ee+47ewGFKpDSU7M6HX19bKE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rpSW2awybNVeKtat91VFxqbINoTfNhPfQAu+d73Xtf8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9M/CP9ccOIIj2LLFmE0GFDO0Ban2wsNalEXfM6+h+1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WrEMG49l1ye4MhXs5ZS9tz8P6h+hDvthIg/2wW9ne1Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ImNhbfeyfH8qIEeA5ic0s3dAQBdzzTBS+CPsNih9vZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dWP33YDSn04UKJN2ogh2Rui0iW/0q2y18OCDRVcfyoo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lYv0isAtfGh6H9tdp3cp2eHU7q2J+uk7QrgcxtK3w7Y=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VGMoamB/+7zTOYcY/pqJc96xlv2PdW4hwsIAEIslTDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yNeBWMF7BnD9wVwz2PgJsvWr77QiVvvWUvJF0+fqBug=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfpvObJ+tJBXSvqeN7vlOfmhYign635lciYAJIjUtY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dsen4NqjzVGjpjufiTMs3+gqeD09EbnuogPgxrJECwg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pxCWVM3sn19NsFEpgHbgLa+PmYlhN3mMiP0Wk8kJhYw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q11KNvJszjYIB9n9HcC+N4uz11a3eRj1L3BH9scKMDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A1PmkgcEToWh1JiVWE6mI5jUu7poxWWuCUt/cgRUUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qJo3Hu4PJeanL7XEaWXO/n3YsodhZyd+MJOOmB9Kpd8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BkBKLO8URFscfRY9Bav/1+L9mLohDgNr/MkZtGiraIs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rZq5WA3Hx3xthOyHAJXK//f8pE2qbz7YKu3TIMp9GFY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X07a/Lm80p5xd4RFs1dNmw+90tmPDPdGiAKVZkxd4zY=", - "subType": "00" - } - } - ] - }, - { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "2FIZh/9N+NeJEQwxYIX5ikQT85xJzulBNReXk8PnG/s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I93Md7QNPGmEEGYU1+VVCqBPBEvXdqHPtTJtMOn06Yk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "GecBFQ1PemlECWZWCl7f74vmsL6eB6mzQ9n6tK6FYfs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QpjhZl+O1ORifgtCZuWAdcP6OKL7IZ2cA46v8FJcV28=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FWXI/yZ1M+2fIboeMCDMlp+I2NwPQDtoM/wWselOPYw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uk26nvN/LdRLaBphiBgIZzT0sSpoO1z0RdDWRm/xrSA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hiiYSH1KZovAULc7rlmEU74wCjzDR+mm6ZnsgvFQjMw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hRzvMvWPX0sJme+wck67lwbKDFaWOa+Eyef+JSdc1s4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PSx5D+zqC9c295dguX4+EobT4IEzfffdfjzC8DWpB5Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QzfXQCVTjPQv2h21v95HYPq8uCsVJ2tPnjv79gAaM9M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XcGDO/dlTcEMLqwcm55UmOqK+KpBmbzZO1LIzX7GPaQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Lf+o4E7YB5ynzUPC6KTyW0lj6Cg9oLIu1Sdd1ODHctA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wAuVn02LAVo5Y+TUocvkoenFYWzpu38k0NmGZOsAjS4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yJGDtveLbbo/0HtCtiTSsvVI/0agg/U1bFaQ0yhK12o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KsEy0zgYcmkM+O/fWF9z3aJGIk22XCk+Aw96HB6JU68=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "p+AnMI5ZxdJMSIEJmXXya+FeH5yubmOdViwUO89j0Rc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/jLix56jzeywBtNuGw55lCXyebQoSIhbful0hOKxKDY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fvDvSPomtJsl1S3+8/tzFCE8scHIdJY5hB9CdTEsoFo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "oV5hOJzPXxfTuRdKIlF4uYEoMDuqH+G7/3qgndDr0PM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "3ALwcvLj3VOfgD6OqXAO13h1ZkOv46R6+Oy6SUKh53I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gxaB9FJj0IM+InhvAjwWaex3UIZ9SAnDiUd5WHSY/l0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "66NPvDygJzKJqddfNuDuNOpvGajjFRtvhkwfUkiYmXw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1dWcQIocRAcO9XnXYqbhl83jc0RgjQpsrWd8dC27trg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "npos0Uf1DT3ztSCjPVY9EImlRnTHB1KLrvmVSqBQ/8E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "TEI9qBx/tK1l1H0v1scMG8Srmtwo5VxWHADPBSlWrXk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "3wUN2ypQKoj+5ASkeIK9ycxhahVxyTmGopigoUAlyYs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o/oksSnUS+nIq6ozWTbB5bJh+NoaPj8deAA23uxiWCk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KExYPruhA31e8xuSwvfUfDcyY/H2Va6taUd0k4yFgLc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/x+dNfxdd/lkx8Z8VZVfoYl7LPoaZ/iKEzZXBrAtIJc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DE4cmjFLPqZlmRomO0qQiruUBtzoCe8ZdNRcfNH92pU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "M6EKNcLPw/iojAChgYUSieaBYWcbsjKtB94SaHOr8vk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+qP49lDPeyhaduTvXJgtJEqHNEYANVu9Bg3Bxz7Td9w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ruMrC2VIS+VKbJwCFb3bfkaLTju9nE+yPONV9s0M0Vo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EbjDlSB5JKnDKff4d8hOmaOwJ7B9Q6NQFisLj+DPC+0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "C/yYOTB94edyqAbiQNu8/H7FoG3yRRjHDkMykz4+Mv0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CBxqrejG+qQQq2YTd6iP/06kiu2CxxzBFaZK3Ofb1CM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2ZOQ/fpho+AbDENWBZaln7wRoepIRdhyT648dr8O5cU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EghIgEPz01+myPgj8oid+PgncvobvC7vjvG3THEEQ0M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "92CysZYNF8riwAMhdrIPKxfODw9p07cKQy/Snn8XmVY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VO0LeTBQmsEf7sCHzTnZwUPNTqRZ49R8V5E9XnZ/5N4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "exs8BQMJq7U6ZXYgIizT7XN+X/hOmmn4YEuzev9zgSI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qHpS4k1I+gPniNp4CA8TY8lLN36vBYmgbKMFpbYMEqg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+7lWKCKAWFw6gPZdHE6E8KIfI14/fSvtWUmllb5WLi0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YiH/US0q6679hWblFDDKNqUjCgggoU8sUCssTIF1QbU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YgwkKElEubNfvXL9hJxzqQUQtHiXN/OCGxNL1MUZZlM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hZFST4INZTTuhvJlGJeMwlUAK270UCOTCDeBAnN4a7g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "24I1Zw35AuGnK3CqJhbCwYb0IPuu5sCRrM5iyeITOLc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vgD12JB4Q1S/kGPSQ1KOgp386KnG1GbM/5+60oRGcGw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+wNE+OL+CB9d4AUJdVxd56jUJCAXmmk9fapuB2TAc4g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uhQh1B2Pe4RkNw/kPEcgaLenuikKoRf1iyfZhpXdodc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "eu8gjAUIp8ybO204AgeOq5v1neI1yljqy5v3I6lo1lM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7QG6oVbASBAjrnCPxzzUNnuFSFNlKhbuBafkF8pr7Is=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PUS1xb2oHSDTdYltutoSSxBiJ1NjxH3l2kA4P1CZLEs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XPMh/JDC/O93gJJCwwgJDb8ssWZvRvezNmKmyn3nIfk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jWz+KGwMk/GOvFAK2rOxF3OjxeZAWfmUQ1HGJ7icw4A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o7XbW68pc6flYigf3LW4WAGUWxpeqxaQLkHUhUR9RZ8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "nqR+g60+5U0okbqJadSqGgnC+j1JcP8rwMcfzOs2ACI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Hz43qVK95tSfbYFtaE/8fE97XMk1RiO8XpWjwZHB80o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "noZUWlZ8M6KXU5rkifyo8/duw5IL7/fXbJvT7bNmW9k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WONVHCuPSanXDRQQ/3tmyJ0Vq+Lu/4hRaMUf0g0kSuw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UEaj6vQRoIghE8Movd8AGXhtwIOXlP4cBsECIUvE5Y8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "D3n2YcO8+PB4C8brDo7kxKjF9Y844rVkdRMLTgsQkrw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "C+YA0G9KjxZVaWwOMuh/dcnHnHAlYnbFrRl0IEpmsY0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rUnmbmQanxrbFPYYrwyQ53x66OSt27yAvF+s48ezKDc=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Aggregate.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Aggregate.yml deleted file mode 100644 index 23453decfc..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Aggregate.yml +++ /dev/null @@ -1,901 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDoubleNoPrecision', 'bsonType': 'double', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range Double. Aggregate." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDoubleNoPrecision: { $numberDouble: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDoubleNoPrecision: { $numberDouble: "1" } } - - name: aggregate - arguments: - pipeline: [{ $match: { "encryptedDoubleNoPrecision": { $gt: {$numberDouble: "0" }} } }] - result: [*doc1] - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedDoubleNoPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedDoubleNoPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - aggregate: *collection_name - pipeline: [ - { - "$match": { - "encryptedDoubleNoPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - } - } - ] - cursor: {} - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: aggregate - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedDoubleNoPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "6YrBn2ofIw1b5ooakrLOwF41BWrps8OO0H9WH4/rtlE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "n+XAuFnP8Dov9TnhGFxNx0K/MnVM9WbJ7RouEu0ndO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yRXojuVdn5GQtD97qYlaCL6cOLmZ7Cvcb3wFjkLUIdM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DuIkdRPITRs55I4SZmgomAHCIsDQmXRhW8+MOznkzSk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SsBk+Et1lTbU+QRPx+xyJ/jMkmfG+QCvQEpip2YYrzA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "crCIzOd8KhHvvUlX7M1v9bhvU4pLdTc+X2SuqoKU5Ek=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YOWdCw4UrqnxkAaVjqmC4sKQDMVMHEpFGnlxpxdaU6E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "M3SShp81Ff8tQ632qKbv9MUcN6wjDaBReI0VXNu6Xh4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gzHlSPxpM0hT75kQvWFzGlOxKvDoiKQZOr19V6l2zXI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s3JnppOGYw9SL2Q1kMAZs948v2F5PrpXjGei/HioDWs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cG6+3Gk/zEH68P/uuuwiAUVCuyJwa1LeV+t29FlPPAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dupdvR3AyJtM+g9NDKiaLVOtGca387JQp8w+V03m7Ig=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JqEQc5svj2jTvZ6LLA5ivE+kTb/0aRemSEmxk4G7Zrg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "szcXXXKnob+p3SoM4yED2R920LeJ7cVsclPMFTe4CeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o1QoGVXmuBdHwHm7aCtGMlMVKrjFdYvJXpoq6uhIAZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Jfm5wPlqqLCJRGQIqRq2NGmpn7s0Vrih2H3YAOoI2YU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zMHLb8ARbsYo8Ld05bqnGFf1Usha6EGb8QKwdSAyps0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yQdtq9lh5pugL7/i0Bj/PuZUUBUIzf+7wj1rl5y736w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wGWVZdO7qIuyDg/BqDgqjgoQ02h5YYgwXQB1oCin2NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "by9HMLj6NTEpgztZ5HSN6GxImkXPcaFINYDzgZY33X8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tWo0vbasi7bXmn/MsOx13VC1IsWtpx/nYp0uj4iMzdA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tQQpndUYd5O87lOtrGjH3wl9VsOK0ray7RMasL90sBM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cQjXEDCMsOpKLLf+vlTgIHA+cbSJdzqhbSX9Wvh95aA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7yMpU48IxK9SzP2cx3VnTownGEwFmeFofuuFT97SuuY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kSOx1kz0CmBgzKQHZlo65ZUY1DIv9A99JRm+Us2y6Ew=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ubQpdPBe6/xvtr+AcXdfYLSvYCR4ot0tivehkCsupb4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xal+iCJ6FTefRQToyoNksc9NCZShyn04NDGi4IYrcoM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "d7jU4iOK50xHxlkSifcxlZFCM46TSgQzoYivxG3HNLY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJvl2nsBLBVzL3pp6sKWCL4UXeh3q/roYBJjSb74ve0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OIUCaKRvIx9t1w6Hxlz1IcQTdPNCfdRNwnnTm10W+X0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A9tvzsiElotOUVIB4CqfQp9mAwqvTM35YkmAR170aHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lI8gpK7hpb7c9x4RQugsxMnQay5LZJmwslZdvMx/dcE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dNCzh40U0XvdKnSDi3HRQOWQftEsDVqc4uUvsVFGoq8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IP+iwEBWBwVVZIdpaMu8k5+soFCz+TZkYn3drKZ9grE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnqyh6e0y5svHkJDShlN9CHV0WvMBE4QbtJpQw5ZCXc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "elEl42tbVDoRTLjAhZUFEtXiut4b3PVhg/1ZLZSQdtE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vHuu2FxwclMHqyE6JBYbTYgbEkB0dqb/JuaxsvfwsmY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xTf7NCe3Gf8QpE78HR5OknlLTKfs9J+RN9UZpH6fnso=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XiWSasRnJAulGR6+LCVD3mwRObXylqYWR9jvpywq12c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MZMxEQ5ikx0PG1YFIExv0UnTZogsvgeOEZTpzvBDn4w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yZMyMZBDrWbAhvnic7vvIYhmO9m5H2iuv0c8KNZrBzY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xxM14hTPY5j0vvcK2C7YAEjzdsfUTFHozHC0hEo1bxI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+01rqR1xVwkpGXcstbk1ItJqFVjH6Q8MGxEN3Cm9Y1A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xOpLV0Z2VTRJ3iWtnWZcsyjXubTIkYWo31cO+HV1o1k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BWUOLqgLBqc5NwxVlSV5H3KFQPXbCp7mdo+jF+8cJqY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fuQb1S6xZDGlrEbK+kI23aL53PP1PVNwqICnZNt9Yzg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfscnoibFttahLdPVC4Ee+47ewGFKpDSU7M6HX19bKE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rpSW2awybNVeKtat91VFxqbINoTfNhPfQAu+d73Xtf8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9M/CP9ccOIIj2LLFmE0GFDO0Ban2wsNalEXfM6+h+1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WrEMG49l1ye4MhXs5ZS9tz8P6h+hDvthIg/2wW9ne1Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ImNhbfeyfH8qIEeA5ic0s3dAQBdzzTBS+CPsNih9vZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dWP33YDSn04UKJN2ogh2Rui0iW/0q2y18OCDRVcfyoo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lYv0isAtfGh6H9tdp3cp2eHU7q2J+uk7QrgcxtK3w7Y=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VGMoamB/+7zTOYcY/pqJc96xlv2PdW4hwsIAEIslTDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yNeBWMF7BnD9wVwz2PgJsvWr77QiVvvWUvJF0+fqBug=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfpvObJ+tJBXSvqeN7vlOfmhYign635lciYAJIjUtY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dsen4NqjzVGjpjufiTMs3+gqeD09EbnuogPgxrJECwg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pxCWVM3sn19NsFEpgHbgLa+PmYlhN3mMiP0Wk8kJhYw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q11KNvJszjYIB9n9HcC+N4uz11a3eRj1L3BH9scKMDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A1PmkgcEToWh1JiVWE6mI5jUu7poxWWuCUt/cgRUUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qJo3Hu4PJeanL7XEaWXO/n3YsodhZyd+MJOOmB9Kpd8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BkBKLO8URFscfRY9Bav/1+L9mLohDgNr/MkZtGiraIs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rZq5WA3Hx3xthOyHAJXK//f8pE2qbz7YKu3TIMp9GFY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X07a/Lm80p5xd4RFs1dNmw+90tmPDPdGiAKVZkxd4zY=", - "subType": "00" - } - } - ] - } - - - { - "_id": 1, - "encryptedDoubleNoPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "2FIZh/9N+NeJEQwxYIX5ikQT85xJzulBNReXk8PnG/s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I93Md7QNPGmEEGYU1+VVCqBPBEvXdqHPtTJtMOn06Yk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "GecBFQ1PemlECWZWCl7f74vmsL6eB6mzQ9n6tK6FYfs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QpjhZl+O1ORifgtCZuWAdcP6OKL7IZ2cA46v8FJcV28=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FWXI/yZ1M+2fIboeMCDMlp+I2NwPQDtoM/wWselOPYw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uk26nvN/LdRLaBphiBgIZzT0sSpoO1z0RdDWRm/xrSA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hiiYSH1KZovAULc7rlmEU74wCjzDR+mm6ZnsgvFQjMw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hRzvMvWPX0sJme+wck67lwbKDFaWOa+Eyef+JSdc1s4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PSx5D+zqC9c295dguX4+EobT4IEzfffdfjzC8DWpB5Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QzfXQCVTjPQv2h21v95HYPq8uCsVJ2tPnjv79gAaM9M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XcGDO/dlTcEMLqwcm55UmOqK+KpBmbzZO1LIzX7GPaQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Lf+o4E7YB5ynzUPC6KTyW0lj6Cg9oLIu1Sdd1ODHctA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wAuVn02LAVo5Y+TUocvkoenFYWzpu38k0NmGZOsAjS4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yJGDtveLbbo/0HtCtiTSsvVI/0agg/U1bFaQ0yhK12o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KsEy0zgYcmkM+O/fWF9z3aJGIk22XCk+Aw96HB6JU68=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "p+AnMI5ZxdJMSIEJmXXya+FeH5yubmOdViwUO89j0Rc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/jLix56jzeywBtNuGw55lCXyebQoSIhbful0hOKxKDY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fvDvSPomtJsl1S3+8/tzFCE8scHIdJY5hB9CdTEsoFo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "oV5hOJzPXxfTuRdKIlF4uYEoMDuqH+G7/3qgndDr0PM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "3ALwcvLj3VOfgD6OqXAO13h1ZkOv46R6+Oy6SUKh53I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gxaB9FJj0IM+InhvAjwWaex3UIZ9SAnDiUd5WHSY/l0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "66NPvDygJzKJqddfNuDuNOpvGajjFRtvhkwfUkiYmXw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1dWcQIocRAcO9XnXYqbhl83jc0RgjQpsrWd8dC27trg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "npos0Uf1DT3ztSCjPVY9EImlRnTHB1KLrvmVSqBQ/8E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "TEI9qBx/tK1l1H0v1scMG8Srmtwo5VxWHADPBSlWrXk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "3wUN2ypQKoj+5ASkeIK9ycxhahVxyTmGopigoUAlyYs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o/oksSnUS+nIq6ozWTbB5bJh+NoaPj8deAA23uxiWCk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KExYPruhA31e8xuSwvfUfDcyY/H2Va6taUd0k4yFgLc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/x+dNfxdd/lkx8Z8VZVfoYl7LPoaZ/iKEzZXBrAtIJc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DE4cmjFLPqZlmRomO0qQiruUBtzoCe8ZdNRcfNH92pU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "M6EKNcLPw/iojAChgYUSieaBYWcbsjKtB94SaHOr8vk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+qP49lDPeyhaduTvXJgtJEqHNEYANVu9Bg3Bxz7Td9w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ruMrC2VIS+VKbJwCFb3bfkaLTju9nE+yPONV9s0M0Vo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EbjDlSB5JKnDKff4d8hOmaOwJ7B9Q6NQFisLj+DPC+0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "C/yYOTB94edyqAbiQNu8/H7FoG3yRRjHDkMykz4+Mv0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CBxqrejG+qQQq2YTd6iP/06kiu2CxxzBFaZK3Ofb1CM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2ZOQ/fpho+AbDENWBZaln7wRoepIRdhyT648dr8O5cU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EghIgEPz01+myPgj8oid+PgncvobvC7vjvG3THEEQ0M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "92CysZYNF8riwAMhdrIPKxfODw9p07cKQy/Snn8XmVY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VO0LeTBQmsEf7sCHzTnZwUPNTqRZ49R8V5E9XnZ/5N4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "exs8BQMJq7U6ZXYgIizT7XN+X/hOmmn4YEuzev9zgSI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qHpS4k1I+gPniNp4CA8TY8lLN36vBYmgbKMFpbYMEqg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+7lWKCKAWFw6gPZdHE6E8KIfI14/fSvtWUmllb5WLi0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YiH/US0q6679hWblFDDKNqUjCgggoU8sUCssTIF1QbU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YgwkKElEubNfvXL9hJxzqQUQtHiXN/OCGxNL1MUZZlM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hZFST4INZTTuhvJlGJeMwlUAK270UCOTCDeBAnN4a7g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "24I1Zw35AuGnK3CqJhbCwYb0IPuu5sCRrM5iyeITOLc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vgD12JB4Q1S/kGPSQ1KOgp386KnG1GbM/5+60oRGcGw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+wNE+OL+CB9d4AUJdVxd56jUJCAXmmk9fapuB2TAc4g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uhQh1B2Pe4RkNw/kPEcgaLenuikKoRf1iyfZhpXdodc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "eu8gjAUIp8ybO204AgeOq5v1neI1yljqy5v3I6lo1lM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7QG6oVbASBAjrnCPxzzUNnuFSFNlKhbuBafkF8pr7Is=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PUS1xb2oHSDTdYltutoSSxBiJ1NjxH3l2kA4P1CZLEs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XPMh/JDC/O93gJJCwwgJDb8ssWZvRvezNmKmyn3nIfk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jWz+KGwMk/GOvFAK2rOxF3OjxeZAWfmUQ1HGJ7icw4A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o7XbW68pc6flYigf3LW4WAGUWxpeqxaQLkHUhUR9RZ8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "nqR+g60+5U0okbqJadSqGgnC+j1JcP8rwMcfzOs2ACI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Hz43qVK95tSfbYFtaE/8fE97XMk1RiO8XpWjwZHB80o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "noZUWlZ8M6KXU5rkifyo8/duw5IL7/fXbJvT7bNmW9k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WONVHCuPSanXDRQQ/3tmyJ0Vq+Lu/4hRaMUf0g0kSuw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UEaj6vQRoIghE8Movd8AGXhtwIOXlP4cBsECIUvE5Y8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "D3n2YcO8+PB4C8brDo7kxKjF9Y844rVkdRMLTgsQkrw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "C+YA0G9KjxZVaWwOMuh/dcnHnHAlYnbFrRl0IEpmsY0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rUnmbmQanxrbFPYYrwyQ53x66OSt27yAvF+s48ezKDc=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Correctness.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Correctness.json deleted file mode 100644 index edb336743c..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Correctness.json +++ /dev/null @@ -1,1160 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoubleNoPrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "Find with $gt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDoubleNoPrecision": { - "$gt": { - "$numberDouble": "0.0" - } - } - } - }, - "result": [ - { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - ] - } - ] - }, - { - "description": "Find with $gte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDoubleNoPrecision": { - "$gte": { - "$numberDouble": "0.0" - } - } - }, - "sort": { - "_id": 1 - } - }, - "result": [ - { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - }, - { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - ] - } - ] - }, - { - "description": "Find with $gt with no results", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDoubleNoPrecision": { - "$gt": { - "$numberDouble": "1.0" - } - } - } - }, - "result": [] - } - ] - }, - { - "description": "Find with $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDoubleNoPrecision": { - "$lt": { - "$numberDouble": "1.0" - } - } - } - }, - "result": [ - { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - } - ] - } - ] - }, - { - "description": "Find with $lte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDoubleNoPrecision": { - "$lte": { - "$numberDouble": "1.0" - } - } - }, - "sort": { - "_id": 1 - } - }, - "result": [ - { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - }, - { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - ] - } - ] - }, - { - "description": "Find with $gt and $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDoubleNoPrecision": { - "$gt": { - "$numberDouble": "0.0" - }, - "$lt": { - "$numberDouble": "2.0" - } - } - } - }, - "result": [ - { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - ] - } - ] - }, - { - "description": "Find with equality", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - } - }, - "result": [ - { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - } - ] - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - }, - "result": [ - { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - ] - } - ] - }, - { - "description": "Find with $in", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDoubleNoPrecision": { - "$in": [ - { - "$numberDouble": "0.0" - } - ] - } - } - }, - "result": [ - { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $gte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDoubleNoPrecision": { - "$gte": { - "$numberDouble": "0.0" - } - } - } - }, - { - "$sort": { - "_id": 1 - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - }, - { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $gt with no results", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDoubleNoPrecision": { - "$gt": { - "$numberDouble": "1.0" - } - } - } - } - ] - }, - "result": [] - } - ] - }, - { - "description": "Aggregate with $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDoubleNoPrecision": { - "$lt": { - "$numberDouble": "1.0" - } - } - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $lte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDoubleNoPrecision": { - "$lte": { - "$numberDouble": "1.0" - } - } - } - }, - { - "$sort": { - "_id": 1 - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - }, - { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $gt and $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDoubleNoPrecision": { - "$gt": { - "$numberDouble": "0.0" - }, - "$lt": { - "$numberDouble": "2.0" - } - } - } - } - ] - }, - "result": [ - { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with equality", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - } - ] - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - } - ] - }, - "result": [ - { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $in", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDoubleNoPrecision": { - "$in": [ - { - "$numberDouble": "0.0" - } - ] - } - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0.0" - } - } - ] - } - ] - }, - { - "description": "Wrong type: Insert Int", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberInt": "0" - } - } - }, - "result": { - "errorContains": "cannot encrypt element" - } - } - ] - }, - { - "description": "Wrong type: Find Int", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "find", - "arguments": { - "filter": { - "encryptedDoubleNoPrecision": { - "$gte": { - "$numberInt": "0" - } - } - }, - "sort": { - "_id": 1 - } - }, - "result": { - "errorContains": "field type is not supported" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Correctness.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Correctness.yml deleted file mode 100644 index 54a116e5ce..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Correctness.yml +++ /dev/null @@ -1,292 +0,0 @@ -# Test correctness results. -# Does not include command monitoring expectations or outcome assertions to make tests more readable. - -# Requires libmongocrypt 1.8.0. -runOn: - - minServerVersion: "8.0.0" - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDoubleNoPrecision', 'bsonType': 'double', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "Find with $gt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDoubleNoPrecision: { $numberDouble: "0.0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDoubleNoPrecision: { $numberDouble: "1.0" } } - - name: find - arguments: - filter: { encryptedDoubleNoPrecision: { $gt: { $numberDouble: "0.0" } }} - result: [*doc1] - - - description: "Find with $gte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDoubleNoPrecision: { $gte: { $numberDouble: "0.0" } }} - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: [*doc0, *doc1] - - - description: "Find with $gt with no results" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDoubleNoPrecision: { $gt: { $numberDouble: "1.0" } }} - result: [] - - - description: "Find with $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDoubleNoPrecision: { $lt: { $numberDouble: "1.0" } }} - result: [*doc0] - - - description: "Find with $lte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDoubleNoPrecision: { $lte: { $numberDouble: "1.0" } }} - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: [*doc0, *doc1] - - - description: "Find with $gt and $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDoubleNoPrecision: { $gt: { $numberDouble: "0.0" }, $lt: { $numberDouble: "2.0"} }} - result: [*doc1] - - - description: "Find with equality" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDoubleNoPrecision: { $numberDouble: "0.0" } } - result: [*doc0] - - name: find - arguments: - filter: { encryptedDoubleNoPrecision: { $numberDouble: "1.0" } } - result: [*doc1] - - - description: "Find with $in" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDoubleNoPrecision: { $in: [ {$numberDouble: "0.0"} ] } } - result: [*doc0] - - - description: "Aggregate with $gte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDoubleNoPrecision: { $gte: { $numberDouble: "0.0" } }} } - # sort so results from range queries are ordered. - - { $sort: { _id: 1 }} - result: [*doc0, *doc1] - - - description: "Aggregate with $gt with no results" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDoubleNoPrecision: { $gt: { $numberDouble: "1.0" } }} } - result: [] - - - description: "Aggregate with $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDoubleNoPrecision: { $lt: { $numberDouble: "1.0" } }} } - result: [*doc0] - - - description: "Aggregate with $lte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDoubleNoPrecision: { $lte: { $numberDouble: "1.0" } }} } - # sort so results from range queries are ordered. - - { $sort: { _id: 1 }} - result: [*doc0, *doc1] - - - description: "Aggregate with $gt and $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDoubleNoPrecision: { $gt: { $numberDouble: "0.0" }, $lt: { $numberDouble: "2.0"} }} } - result: [*doc1] - - - description: "Aggregate with equality" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDoubleNoPrecision: { $numberDouble: "0.0" } } } - result: [*doc0] - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDoubleNoPrecision: { $numberDouble: "1.0" } } } - result: [*doc1] - - - description: "Aggregate with $in" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDoubleNoPrecision: { $in: [ {$numberDouble: "0.0"} ] } } } - result: [*doc0] - - - description: "Wrong type: Insert Int" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: { _id: 0, encryptedDoubleNoPrecision: { $numberInt: "0" }} } - result: - # Expect an error from mongocryptd. - errorContains: "cannot encrypt element" - - - description: "Wrong type: Find Int" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: find - arguments: - filter: { encryptedDoubleNoPrecision: { $gte: { $numberInt: "0" } }} - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: - # expect an error from libmongocrypt. - errorContains: "field type is not supported" \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Delete.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Delete.json deleted file mode 100644 index 4a9c1f27b5..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Delete.json +++ /dev/null @@ -1,732 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoubleNoPrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range Double. Delete.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1" - } - } - } - }, - { - "name": "deleteOne", - "arguments": { - "filter": { - "encryptedDoubleNoPrecision": { - "$gt": { - "$numberDouble": "0" - } - } - } - }, - "result": { - "deletedCount": 1 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoubleNoPrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoubleNoPrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "delete": "default", - "deletes": [ - { - "q": { - "encryptedDoubleNoPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - }, - "limit": 1 - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoubleNoPrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "delete" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "6YrBn2ofIw1b5ooakrLOwF41BWrps8OO0H9WH4/rtlE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "n+XAuFnP8Dov9TnhGFxNx0K/MnVM9WbJ7RouEu0ndO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yRXojuVdn5GQtD97qYlaCL6cOLmZ7Cvcb3wFjkLUIdM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DuIkdRPITRs55I4SZmgomAHCIsDQmXRhW8+MOznkzSk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SsBk+Et1lTbU+QRPx+xyJ/jMkmfG+QCvQEpip2YYrzA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "crCIzOd8KhHvvUlX7M1v9bhvU4pLdTc+X2SuqoKU5Ek=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YOWdCw4UrqnxkAaVjqmC4sKQDMVMHEpFGnlxpxdaU6E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "M3SShp81Ff8tQ632qKbv9MUcN6wjDaBReI0VXNu6Xh4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gzHlSPxpM0hT75kQvWFzGlOxKvDoiKQZOr19V6l2zXI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s3JnppOGYw9SL2Q1kMAZs948v2F5PrpXjGei/HioDWs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cG6+3Gk/zEH68P/uuuwiAUVCuyJwa1LeV+t29FlPPAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dupdvR3AyJtM+g9NDKiaLVOtGca387JQp8w+V03m7Ig=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JqEQc5svj2jTvZ6LLA5ivE+kTb/0aRemSEmxk4G7Zrg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "szcXXXKnob+p3SoM4yED2R920LeJ7cVsclPMFTe4CeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o1QoGVXmuBdHwHm7aCtGMlMVKrjFdYvJXpoq6uhIAZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Jfm5wPlqqLCJRGQIqRq2NGmpn7s0Vrih2H3YAOoI2YU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zMHLb8ARbsYo8Ld05bqnGFf1Usha6EGb8QKwdSAyps0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yQdtq9lh5pugL7/i0Bj/PuZUUBUIzf+7wj1rl5y736w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wGWVZdO7qIuyDg/BqDgqjgoQ02h5YYgwXQB1oCin2NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "by9HMLj6NTEpgztZ5HSN6GxImkXPcaFINYDzgZY33X8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tWo0vbasi7bXmn/MsOx13VC1IsWtpx/nYp0uj4iMzdA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tQQpndUYd5O87lOtrGjH3wl9VsOK0ray7RMasL90sBM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cQjXEDCMsOpKLLf+vlTgIHA+cbSJdzqhbSX9Wvh95aA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7yMpU48IxK9SzP2cx3VnTownGEwFmeFofuuFT97SuuY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kSOx1kz0CmBgzKQHZlo65ZUY1DIv9A99JRm+Us2y6Ew=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ubQpdPBe6/xvtr+AcXdfYLSvYCR4ot0tivehkCsupb4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xal+iCJ6FTefRQToyoNksc9NCZShyn04NDGi4IYrcoM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "d7jU4iOK50xHxlkSifcxlZFCM46TSgQzoYivxG3HNLY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJvl2nsBLBVzL3pp6sKWCL4UXeh3q/roYBJjSb74ve0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OIUCaKRvIx9t1w6Hxlz1IcQTdPNCfdRNwnnTm10W+X0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A9tvzsiElotOUVIB4CqfQp9mAwqvTM35YkmAR170aHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lI8gpK7hpb7c9x4RQugsxMnQay5LZJmwslZdvMx/dcE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dNCzh40U0XvdKnSDi3HRQOWQftEsDVqc4uUvsVFGoq8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IP+iwEBWBwVVZIdpaMu8k5+soFCz+TZkYn3drKZ9grE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnqyh6e0y5svHkJDShlN9CHV0WvMBE4QbtJpQw5ZCXc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "elEl42tbVDoRTLjAhZUFEtXiut4b3PVhg/1ZLZSQdtE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vHuu2FxwclMHqyE6JBYbTYgbEkB0dqb/JuaxsvfwsmY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xTf7NCe3Gf8QpE78HR5OknlLTKfs9J+RN9UZpH6fnso=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XiWSasRnJAulGR6+LCVD3mwRObXylqYWR9jvpywq12c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MZMxEQ5ikx0PG1YFIExv0UnTZogsvgeOEZTpzvBDn4w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yZMyMZBDrWbAhvnic7vvIYhmO9m5H2iuv0c8KNZrBzY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xxM14hTPY5j0vvcK2C7YAEjzdsfUTFHozHC0hEo1bxI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+01rqR1xVwkpGXcstbk1ItJqFVjH6Q8MGxEN3Cm9Y1A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xOpLV0Z2VTRJ3iWtnWZcsyjXubTIkYWo31cO+HV1o1k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BWUOLqgLBqc5NwxVlSV5H3KFQPXbCp7mdo+jF+8cJqY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fuQb1S6xZDGlrEbK+kI23aL53PP1PVNwqICnZNt9Yzg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfscnoibFttahLdPVC4Ee+47ewGFKpDSU7M6HX19bKE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rpSW2awybNVeKtat91VFxqbINoTfNhPfQAu+d73Xtf8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9M/CP9ccOIIj2LLFmE0GFDO0Ban2wsNalEXfM6+h+1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WrEMG49l1ye4MhXs5ZS9tz8P6h+hDvthIg/2wW9ne1Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ImNhbfeyfH8qIEeA5ic0s3dAQBdzzTBS+CPsNih9vZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dWP33YDSn04UKJN2ogh2Rui0iW/0q2y18OCDRVcfyoo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lYv0isAtfGh6H9tdp3cp2eHU7q2J+uk7QrgcxtK3w7Y=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VGMoamB/+7zTOYcY/pqJc96xlv2PdW4hwsIAEIslTDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yNeBWMF7BnD9wVwz2PgJsvWr77QiVvvWUvJF0+fqBug=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfpvObJ+tJBXSvqeN7vlOfmhYign635lciYAJIjUtY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dsen4NqjzVGjpjufiTMs3+gqeD09EbnuogPgxrJECwg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pxCWVM3sn19NsFEpgHbgLa+PmYlhN3mMiP0Wk8kJhYw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q11KNvJszjYIB9n9HcC+N4uz11a3eRj1L3BH9scKMDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A1PmkgcEToWh1JiVWE6mI5jUu7poxWWuCUt/cgRUUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qJo3Hu4PJeanL7XEaWXO/n3YsodhZyd+MJOOmB9Kpd8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BkBKLO8URFscfRY9Bav/1+L9mLohDgNr/MkZtGiraIs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rZq5WA3Hx3xthOyHAJXK//f8pE2qbz7YKu3TIMp9GFY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X07a/Lm80p5xd4RFs1dNmw+90tmPDPdGiAKVZkxd4zY=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Delete.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Delete.yml deleted file mode 100644 index ff71e8f1d9..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Delete.yml +++ /dev/null @@ -1,512 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDoubleNoPrecision', 'bsonType': 'double', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range Double. Delete." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDoubleNoPrecision: { $numberDouble: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDoubleNoPrecision: { $numberDouble: "1" } } - - name: deleteOne - arguments: - filter: { "encryptedDoubleNoPrecision": { $gt: {$numberDouble: "0" }} } - result: - deletedCount: 1 - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedDoubleNoPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedDoubleNoPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - delete: *collection_name - deletes: [ - { - "q": { - "encryptedDoubleNoPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - }, - "limit": 1 - } - ] - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: delete - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedDoubleNoPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "6YrBn2ofIw1b5ooakrLOwF41BWrps8OO0H9WH4/rtlE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "n+XAuFnP8Dov9TnhGFxNx0K/MnVM9WbJ7RouEu0ndO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yRXojuVdn5GQtD97qYlaCL6cOLmZ7Cvcb3wFjkLUIdM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DuIkdRPITRs55I4SZmgomAHCIsDQmXRhW8+MOznkzSk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SsBk+Et1lTbU+QRPx+xyJ/jMkmfG+QCvQEpip2YYrzA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "crCIzOd8KhHvvUlX7M1v9bhvU4pLdTc+X2SuqoKU5Ek=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YOWdCw4UrqnxkAaVjqmC4sKQDMVMHEpFGnlxpxdaU6E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "M3SShp81Ff8tQ632qKbv9MUcN6wjDaBReI0VXNu6Xh4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gzHlSPxpM0hT75kQvWFzGlOxKvDoiKQZOr19V6l2zXI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s3JnppOGYw9SL2Q1kMAZs948v2F5PrpXjGei/HioDWs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cG6+3Gk/zEH68P/uuuwiAUVCuyJwa1LeV+t29FlPPAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dupdvR3AyJtM+g9NDKiaLVOtGca387JQp8w+V03m7Ig=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JqEQc5svj2jTvZ6LLA5ivE+kTb/0aRemSEmxk4G7Zrg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "szcXXXKnob+p3SoM4yED2R920LeJ7cVsclPMFTe4CeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o1QoGVXmuBdHwHm7aCtGMlMVKrjFdYvJXpoq6uhIAZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Jfm5wPlqqLCJRGQIqRq2NGmpn7s0Vrih2H3YAOoI2YU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zMHLb8ARbsYo8Ld05bqnGFf1Usha6EGb8QKwdSAyps0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yQdtq9lh5pugL7/i0Bj/PuZUUBUIzf+7wj1rl5y736w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wGWVZdO7qIuyDg/BqDgqjgoQ02h5YYgwXQB1oCin2NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "by9HMLj6NTEpgztZ5HSN6GxImkXPcaFINYDzgZY33X8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tWo0vbasi7bXmn/MsOx13VC1IsWtpx/nYp0uj4iMzdA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tQQpndUYd5O87lOtrGjH3wl9VsOK0ray7RMasL90sBM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cQjXEDCMsOpKLLf+vlTgIHA+cbSJdzqhbSX9Wvh95aA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7yMpU48IxK9SzP2cx3VnTownGEwFmeFofuuFT97SuuY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kSOx1kz0CmBgzKQHZlo65ZUY1DIv9A99JRm+Us2y6Ew=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ubQpdPBe6/xvtr+AcXdfYLSvYCR4ot0tivehkCsupb4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xal+iCJ6FTefRQToyoNksc9NCZShyn04NDGi4IYrcoM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "d7jU4iOK50xHxlkSifcxlZFCM46TSgQzoYivxG3HNLY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJvl2nsBLBVzL3pp6sKWCL4UXeh3q/roYBJjSb74ve0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OIUCaKRvIx9t1w6Hxlz1IcQTdPNCfdRNwnnTm10W+X0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A9tvzsiElotOUVIB4CqfQp9mAwqvTM35YkmAR170aHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lI8gpK7hpb7c9x4RQugsxMnQay5LZJmwslZdvMx/dcE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dNCzh40U0XvdKnSDi3HRQOWQftEsDVqc4uUvsVFGoq8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IP+iwEBWBwVVZIdpaMu8k5+soFCz+TZkYn3drKZ9grE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnqyh6e0y5svHkJDShlN9CHV0WvMBE4QbtJpQw5ZCXc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "elEl42tbVDoRTLjAhZUFEtXiut4b3PVhg/1ZLZSQdtE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vHuu2FxwclMHqyE6JBYbTYgbEkB0dqb/JuaxsvfwsmY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xTf7NCe3Gf8QpE78HR5OknlLTKfs9J+RN9UZpH6fnso=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XiWSasRnJAulGR6+LCVD3mwRObXylqYWR9jvpywq12c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MZMxEQ5ikx0PG1YFIExv0UnTZogsvgeOEZTpzvBDn4w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yZMyMZBDrWbAhvnic7vvIYhmO9m5H2iuv0c8KNZrBzY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xxM14hTPY5j0vvcK2C7YAEjzdsfUTFHozHC0hEo1bxI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+01rqR1xVwkpGXcstbk1ItJqFVjH6Q8MGxEN3Cm9Y1A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xOpLV0Z2VTRJ3iWtnWZcsyjXubTIkYWo31cO+HV1o1k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BWUOLqgLBqc5NwxVlSV5H3KFQPXbCp7mdo+jF+8cJqY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fuQb1S6xZDGlrEbK+kI23aL53PP1PVNwqICnZNt9Yzg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfscnoibFttahLdPVC4Ee+47ewGFKpDSU7M6HX19bKE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rpSW2awybNVeKtat91VFxqbINoTfNhPfQAu+d73Xtf8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9M/CP9ccOIIj2LLFmE0GFDO0Ban2wsNalEXfM6+h+1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WrEMG49l1ye4MhXs5ZS9tz8P6h+hDvthIg/2wW9ne1Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ImNhbfeyfH8qIEeA5ic0s3dAQBdzzTBS+CPsNih9vZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dWP33YDSn04UKJN2ogh2Rui0iW/0q2y18OCDRVcfyoo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lYv0isAtfGh6H9tdp3cp2eHU7q2J+uk7QrgcxtK3w7Y=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VGMoamB/+7zTOYcY/pqJc96xlv2PdW4hwsIAEIslTDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yNeBWMF7BnD9wVwz2PgJsvWr77QiVvvWUvJF0+fqBug=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfpvObJ+tJBXSvqeN7vlOfmhYign635lciYAJIjUtY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dsen4NqjzVGjpjufiTMs3+gqeD09EbnuogPgxrJECwg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pxCWVM3sn19NsFEpgHbgLa+PmYlhN3mMiP0Wk8kJhYw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q11KNvJszjYIB9n9HcC+N4uz11a3eRj1L3BH9scKMDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A1PmkgcEToWh1JiVWE6mI5jUu7poxWWuCUt/cgRUUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qJo3Hu4PJeanL7XEaWXO/n3YsodhZyd+MJOOmB9Kpd8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BkBKLO8URFscfRY9Bav/1+L9mLohDgNr/MkZtGiraIs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rZq5WA3Hx3xthOyHAJXK//f8pE2qbz7YKu3TIMp9GFY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X07a/Lm80p5xd4RFs1dNmw+90tmPDPdGiAKVZkxd4zY=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-FindOneAndUpdate.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-FindOneAndUpdate.json deleted file mode 100644 index d7860de83e..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-FindOneAndUpdate.json +++ /dev/null @@ -1,1136 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoubleNoPrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range Double. FindOneAndUpdate.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1" - } - } - } - }, - { - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "encryptedDoubleNoPrecision": { - "$gt": { - "$numberDouble": "0" - } - } - }, - "update": { - "$set": { - "encryptedDoubleNoPrecision": { - "$numberDouble": "2" - } - } - }, - "returnDocument": "Before" - }, - "result": { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoubleNoPrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoubleNoPrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "findAndModify": "default", - "query": { - "encryptedDoubleNoPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - }, - "update": { - "$set": { - "encryptedDoubleNoPrecision": { - "$$type": "binData" - } - } - }, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoubleNoPrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "findAndModify" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "6YrBn2ofIw1b5ooakrLOwF41BWrps8OO0H9WH4/rtlE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "n+XAuFnP8Dov9TnhGFxNx0K/MnVM9WbJ7RouEu0ndO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yRXojuVdn5GQtD97qYlaCL6cOLmZ7Cvcb3wFjkLUIdM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DuIkdRPITRs55I4SZmgomAHCIsDQmXRhW8+MOznkzSk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SsBk+Et1lTbU+QRPx+xyJ/jMkmfG+QCvQEpip2YYrzA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "crCIzOd8KhHvvUlX7M1v9bhvU4pLdTc+X2SuqoKU5Ek=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YOWdCw4UrqnxkAaVjqmC4sKQDMVMHEpFGnlxpxdaU6E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "M3SShp81Ff8tQ632qKbv9MUcN6wjDaBReI0VXNu6Xh4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gzHlSPxpM0hT75kQvWFzGlOxKvDoiKQZOr19V6l2zXI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s3JnppOGYw9SL2Q1kMAZs948v2F5PrpXjGei/HioDWs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cG6+3Gk/zEH68P/uuuwiAUVCuyJwa1LeV+t29FlPPAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dupdvR3AyJtM+g9NDKiaLVOtGca387JQp8w+V03m7Ig=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JqEQc5svj2jTvZ6LLA5ivE+kTb/0aRemSEmxk4G7Zrg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "szcXXXKnob+p3SoM4yED2R920LeJ7cVsclPMFTe4CeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o1QoGVXmuBdHwHm7aCtGMlMVKrjFdYvJXpoq6uhIAZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Jfm5wPlqqLCJRGQIqRq2NGmpn7s0Vrih2H3YAOoI2YU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zMHLb8ARbsYo8Ld05bqnGFf1Usha6EGb8QKwdSAyps0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yQdtq9lh5pugL7/i0Bj/PuZUUBUIzf+7wj1rl5y736w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wGWVZdO7qIuyDg/BqDgqjgoQ02h5YYgwXQB1oCin2NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "by9HMLj6NTEpgztZ5HSN6GxImkXPcaFINYDzgZY33X8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tWo0vbasi7bXmn/MsOx13VC1IsWtpx/nYp0uj4iMzdA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tQQpndUYd5O87lOtrGjH3wl9VsOK0ray7RMasL90sBM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cQjXEDCMsOpKLLf+vlTgIHA+cbSJdzqhbSX9Wvh95aA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7yMpU48IxK9SzP2cx3VnTownGEwFmeFofuuFT97SuuY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kSOx1kz0CmBgzKQHZlo65ZUY1DIv9A99JRm+Us2y6Ew=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ubQpdPBe6/xvtr+AcXdfYLSvYCR4ot0tivehkCsupb4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xal+iCJ6FTefRQToyoNksc9NCZShyn04NDGi4IYrcoM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "d7jU4iOK50xHxlkSifcxlZFCM46TSgQzoYivxG3HNLY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJvl2nsBLBVzL3pp6sKWCL4UXeh3q/roYBJjSb74ve0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OIUCaKRvIx9t1w6Hxlz1IcQTdPNCfdRNwnnTm10W+X0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A9tvzsiElotOUVIB4CqfQp9mAwqvTM35YkmAR170aHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lI8gpK7hpb7c9x4RQugsxMnQay5LZJmwslZdvMx/dcE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dNCzh40U0XvdKnSDi3HRQOWQftEsDVqc4uUvsVFGoq8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IP+iwEBWBwVVZIdpaMu8k5+soFCz+TZkYn3drKZ9grE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnqyh6e0y5svHkJDShlN9CHV0WvMBE4QbtJpQw5ZCXc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "elEl42tbVDoRTLjAhZUFEtXiut4b3PVhg/1ZLZSQdtE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vHuu2FxwclMHqyE6JBYbTYgbEkB0dqb/JuaxsvfwsmY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xTf7NCe3Gf8QpE78HR5OknlLTKfs9J+RN9UZpH6fnso=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XiWSasRnJAulGR6+LCVD3mwRObXylqYWR9jvpywq12c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MZMxEQ5ikx0PG1YFIExv0UnTZogsvgeOEZTpzvBDn4w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yZMyMZBDrWbAhvnic7vvIYhmO9m5H2iuv0c8KNZrBzY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xxM14hTPY5j0vvcK2C7YAEjzdsfUTFHozHC0hEo1bxI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+01rqR1xVwkpGXcstbk1ItJqFVjH6Q8MGxEN3Cm9Y1A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xOpLV0Z2VTRJ3iWtnWZcsyjXubTIkYWo31cO+HV1o1k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BWUOLqgLBqc5NwxVlSV5H3KFQPXbCp7mdo+jF+8cJqY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fuQb1S6xZDGlrEbK+kI23aL53PP1PVNwqICnZNt9Yzg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfscnoibFttahLdPVC4Ee+47ewGFKpDSU7M6HX19bKE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rpSW2awybNVeKtat91VFxqbINoTfNhPfQAu+d73Xtf8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9M/CP9ccOIIj2LLFmE0GFDO0Ban2wsNalEXfM6+h+1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WrEMG49l1ye4MhXs5ZS9tz8P6h+hDvthIg/2wW9ne1Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ImNhbfeyfH8qIEeA5ic0s3dAQBdzzTBS+CPsNih9vZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dWP33YDSn04UKJN2ogh2Rui0iW/0q2y18OCDRVcfyoo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lYv0isAtfGh6H9tdp3cp2eHU7q2J+uk7QrgcxtK3w7Y=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VGMoamB/+7zTOYcY/pqJc96xlv2PdW4hwsIAEIslTDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yNeBWMF7BnD9wVwz2PgJsvWr77QiVvvWUvJF0+fqBug=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfpvObJ+tJBXSvqeN7vlOfmhYign635lciYAJIjUtY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dsen4NqjzVGjpjufiTMs3+gqeD09EbnuogPgxrJECwg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pxCWVM3sn19NsFEpgHbgLa+PmYlhN3mMiP0Wk8kJhYw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q11KNvJszjYIB9n9HcC+N4uz11a3eRj1L3BH9scKMDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A1PmkgcEToWh1JiVWE6mI5jUu7poxWWuCUt/cgRUUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qJo3Hu4PJeanL7XEaWXO/n3YsodhZyd+MJOOmB9Kpd8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BkBKLO8URFscfRY9Bav/1+L9mLohDgNr/MkZtGiraIs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rZq5WA3Hx3xthOyHAJXK//f8pE2qbz7YKu3TIMp9GFY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X07a/Lm80p5xd4RFs1dNmw+90tmPDPdGiAKVZkxd4zY=", - "subType": "00" - } - } - ] - }, - { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "HI88j1zrIsFoijIXKybr9mYubNV5uVeODyLHFH4Ueco=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wXVD/HSbBljko0jJcaxJ1nrzs2+pchLQqYR3vywS8SU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KhscCh+tt/pp8lxtKZQSPPUU94RvJYPKG/sjtzIa4Ws=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RISnuNrTTVNW5HnwCgQJ301pFw8DOcYrAMQIwVwjOkI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Ra5zukLh2boua0Bh74qA+mtIoixGXlsNsxiJqHtqdTI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "eqr0v+NNWXWszi9ni8qH58Q6gw5x737tJvH3lPaNHO4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "d42QupriWIwGrFAquXNFi0ehEuidIbHLFZtg1Sm2nN8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2azRVxaaTIJKcgY2FU012gcyP8Y05cRDpfUaMnCBaQU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "3nlgkM4K/AAcHesRYYdEu24UGetHodVnVfHzw4yxZBM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hqy91FNmAAac2zUaPO6eWFkx0/37rOWGrwXN+fzL0tU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "akX+fmscSDSF9pB5MPj56iaJPtohr0hfXNk/OPWsGv8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1ZvUb10Q7cN4cNLktd5yNjqgtawsYnkbeVBZV6WuY/I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "otCwtuKiY4hCyXvYzXvo10OcnzZppebo38KsAlq49QM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Mty8EscckeT/dhMfrPFyDbLnmMOcYRUQ3mLK4KTu6V8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tnvgLLkJINO7csREYu4dEVe1ICrBeu7OP+HdfoX3M2E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kOefsHgEVhkJ17UuP7Dxogy6sAQbzf1SFPKCj6XRlrQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "F+JQ79xavpaHdJzdhvwyHbzdZJLNHAymc/+67La3gao=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NCZ9zp5rDRceENuSgAfTLEyKg0YgmXAhK0B8WSj7+Pw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wL1CJ7cYR5slx8mHq++uMdjDfkt9037lQTUztEMF56M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "txefkzTMITZE+XvvRFZ7QcgwDT/7m8jNmxRk4QBaoZI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jFunW3v1tSYMyZtQQD28eEy9qqDp4Kqo7gMN29N4bfQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QMO915KUiS3X3R1bU1YoafVM2s0NeHo3EjgTA9PnGwY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "nwdKJEXdilzvb7494vbuDJ+y6SrfJahza1dYIsHIWVI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vpWMX+T/VXXajFo0UbuYjtp0AEzBU0Y+lP+ih2EQ7mg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1lmzG0J1DhKDRhhq5y5Buygu4G8eV2X0t7kUY90EohM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SiKqpXqO0trwhFvBWK274hMklpCgMhNs/JY84yyn/NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7cPGPYCKPTay+ZR9Gx6oOueduOgaFrSuAXmNDpDHXdI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4THEYvAkjs2Fh7FIe5LC45P4i4N0L7ob67UOVbhp6Nk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "B+UGsChLLZR7iqnt8yq91OgmTgwiUKTJhFxY4NT0O6c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X1uYwBCsCg1H+PnKdwtBqXlt0zKEURi8bOM940GcPfk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xYOgT5l7shlNXCwHlguovmDkcEnF8dXyYlTyYrgZ8GE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vFMTZqV8bh1+gcKzTkXweMddJlgdUnwX0DWzUUaMok4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4HI0y9FrtleZxZ7M6INdNhLelrQ2Rv/+ykWCBl+tMC8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jpJ0bBE474OUkn1vUiLWumIBtYmwc7J5+LQU/nyeLQc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jQTPeXZvdxY/DjtPfYfKUArIDsf0E9MVFy2O26sv1ec=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QLLto0ExR2ZYMGqlyaMZc/hXFFTlwmgtKbiVq/xJIeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yBJNviU1nchbGbhx6InXCVRXa90sEepz1EwbYuKXu2U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jpEf0vHxrPu9gTJutNXSi2g/2Mc4WXFEN7yHonZEb7A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "E09kLFckMYwNuhggMxmPtwndyvIAx+Vl+b2CV6FP75s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "N+ue6/cLPb5NssmJCCeo18LlbKPz6r2z20AsnTKRvOo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yVQNZP8hhsvNGyDph2QP2qTNdXZTiIEVineKg+Qf33o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cSC9uI+9c5S8X+0G7amVyug1p0ZlgBsbEDYYyezBevQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1NpZGjoQzuQtekj80Rifxe9HbE08W07dfwxaFHaVn84=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "5Ghuq/8l11Ug9Uf/RTwf9On3OxOwIXUcb9soiy4J7/w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0LWKaEty6ywxLFhDaAqulqfMnYc+tgPfH4apyEeKg80=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OwSthmCBtt6NIAoAh7aCbj82Yr/+9t8U7WuBQhFT3AQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "iYiyg6/1isqbMdvFPIGucu3cNM4NAZNtJhHpGZ4eM+c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "waBgs8jWuGJPIF5zCRh6OmIyfK5GCBQgTMfmKSR2wyY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1Jdtbe2BKJXPU2G9ywOrlODZ/cNYEQlKzAW3aMe1Hy4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xaLEnNUS/2ySerBpb9dN/D31t+wYcKekwTfkwtni0Mc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "bIVBrOhOvr6cL55Tr24+B+CC9MiG7U6K54aAr2IXXuw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6Cdq5wroGu2TEFnekuT7LhOpd/K/+PcipIljcHU9QL4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "K5l64vI4S/pLviLW6Pl0U3iQkI3ge0xg4RAHcEsyKJo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "bzhuvZ0Ls22yIOX+Hz51eAHlSuDbWR/e0u4EhfdpHbc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Qv+fr6uD4o0bZRp69QJCFL6zvn3G82c7L+N1IFzj7H0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XAmISMbD3aEyQT+BQEphCKFNa0F0GDKFuhM9cGceKoQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4VLCokntMfm1AogpUnYGvhV7nllWSo3mS3hVESMy+hA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xiXNLj/CipEH63Vb5cidi8q9X47EF4f3HtJSOH7mfM8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4XlCYfYBjI9XA5zOSgTiEBYcZsdwyXL+f5XtH2xUIOc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "k6DfQy7ZYJIkEly2B5hjOZznL4NcgMkllZjJLb7yq7w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ZzM6gwWesa3lxbZVZthpPFs2s3GV0RZREE2zOMhBRBo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "US+jeMeeOd7J0wR0efJtq2/18lcO8YFvhT4O3DeaonQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "b6iSxiI1FM9SzxuG1bHqGA1i4+3GOi0/SPW00XB4L7o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kn3LsxAVkzIZKK9I6fi0Cctr0yjXOYgaQWMCoj4hLpM=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-FindOneAndUpdate.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-FindOneAndUpdate.yml deleted file mode 100644 index 48f018e468..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-FindOneAndUpdate.yml +++ /dev/null @@ -1,899 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDoubleNoPrecision', 'bsonType': 'double', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range Double. FindOneAndUpdate." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDoubleNoPrecision: { $numberDouble: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDoubleNoPrecision: { $numberDouble: "1" } } - - name: findOneAndUpdate - arguments: - filter: { encryptedDoubleNoPrecision: { $gt: {$numberDouble: "0"}} } - update: { "$set": { "encryptedDoubleNoPrecision": {$numberDouble: "2"}}} - returnDocument: Before - result: *doc1 - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedDoubleNoPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedDoubleNoPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - findAndModify: *collection_name - query: { - "encryptedDoubleNoPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - } - update: { "$set": {"encryptedDoubleNoPrecision": { $$type: "binData" }} } - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: findAndModify - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedDoubleNoPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "6YrBn2ofIw1b5ooakrLOwF41BWrps8OO0H9WH4/rtlE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "n+XAuFnP8Dov9TnhGFxNx0K/MnVM9WbJ7RouEu0ndO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yRXojuVdn5GQtD97qYlaCL6cOLmZ7Cvcb3wFjkLUIdM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DuIkdRPITRs55I4SZmgomAHCIsDQmXRhW8+MOznkzSk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SsBk+Et1lTbU+QRPx+xyJ/jMkmfG+QCvQEpip2YYrzA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "crCIzOd8KhHvvUlX7M1v9bhvU4pLdTc+X2SuqoKU5Ek=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YOWdCw4UrqnxkAaVjqmC4sKQDMVMHEpFGnlxpxdaU6E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "M3SShp81Ff8tQ632qKbv9MUcN6wjDaBReI0VXNu6Xh4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gzHlSPxpM0hT75kQvWFzGlOxKvDoiKQZOr19V6l2zXI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s3JnppOGYw9SL2Q1kMAZs948v2F5PrpXjGei/HioDWs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cG6+3Gk/zEH68P/uuuwiAUVCuyJwa1LeV+t29FlPPAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dupdvR3AyJtM+g9NDKiaLVOtGca387JQp8w+V03m7Ig=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JqEQc5svj2jTvZ6LLA5ivE+kTb/0aRemSEmxk4G7Zrg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "szcXXXKnob+p3SoM4yED2R920LeJ7cVsclPMFTe4CeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o1QoGVXmuBdHwHm7aCtGMlMVKrjFdYvJXpoq6uhIAZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Jfm5wPlqqLCJRGQIqRq2NGmpn7s0Vrih2H3YAOoI2YU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zMHLb8ARbsYo8Ld05bqnGFf1Usha6EGb8QKwdSAyps0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yQdtq9lh5pugL7/i0Bj/PuZUUBUIzf+7wj1rl5y736w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wGWVZdO7qIuyDg/BqDgqjgoQ02h5YYgwXQB1oCin2NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "by9HMLj6NTEpgztZ5HSN6GxImkXPcaFINYDzgZY33X8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tWo0vbasi7bXmn/MsOx13VC1IsWtpx/nYp0uj4iMzdA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tQQpndUYd5O87lOtrGjH3wl9VsOK0ray7RMasL90sBM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cQjXEDCMsOpKLLf+vlTgIHA+cbSJdzqhbSX9Wvh95aA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7yMpU48IxK9SzP2cx3VnTownGEwFmeFofuuFT97SuuY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kSOx1kz0CmBgzKQHZlo65ZUY1DIv9A99JRm+Us2y6Ew=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ubQpdPBe6/xvtr+AcXdfYLSvYCR4ot0tivehkCsupb4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xal+iCJ6FTefRQToyoNksc9NCZShyn04NDGi4IYrcoM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "d7jU4iOK50xHxlkSifcxlZFCM46TSgQzoYivxG3HNLY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJvl2nsBLBVzL3pp6sKWCL4UXeh3q/roYBJjSb74ve0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OIUCaKRvIx9t1w6Hxlz1IcQTdPNCfdRNwnnTm10W+X0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A9tvzsiElotOUVIB4CqfQp9mAwqvTM35YkmAR170aHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lI8gpK7hpb7c9x4RQugsxMnQay5LZJmwslZdvMx/dcE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dNCzh40U0XvdKnSDi3HRQOWQftEsDVqc4uUvsVFGoq8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IP+iwEBWBwVVZIdpaMu8k5+soFCz+TZkYn3drKZ9grE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnqyh6e0y5svHkJDShlN9CHV0WvMBE4QbtJpQw5ZCXc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "elEl42tbVDoRTLjAhZUFEtXiut4b3PVhg/1ZLZSQdtE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vHuu2FxwclMHqyE6JBYbTYgbEkB0dqb/JuaxsvfwsmY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xTf7NCe3Gf8QpE78HR5OknlLTKfs9J+RN9UZpH6fnso=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XiWSasRnJAulGR6+LCVD3mwRObXylqYWR9jvpywq12c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MZMxEQ5ikx0PG1YFIExv0UnTZogsvgeOEZTpzvBDn4w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yZMyMZBDrWbAhvnic7vvIYhmO9m5H2iuv0c8KNZrBzY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xxM14hTPY5j0vvcK2C7YAEjzdsfUTFHozHC0hEo1bxI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+01rqR1xVwkpGXcstbk1ItJqFVjH6Q8MGxEN3Cm9Y1A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xOpLV0Z2VTRJ3iWtnWZcsyjXubTIkYWo31cO+HV1o1k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BWUOLqgLBqc5NwxVlSV5H3KFQPXbCp7mdo+jF+8cJqY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fuQb1S6xZDGlrEbK+kI23aL53PP1PVNwqICnZNt9Yzg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfscnoibFttahLdPVC4Ee+47ewGFKpDSU7M6HX19bKE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rpSW2awybNVeKtat91VFxqbINoTfNhPfQAu+d73Xtf8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9M/CP9ccOIIj2LLFmE0GFDO0Ban2wsNalEXfM6+h+1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WrEMG49l1ye4MhXs5ZS9tz8P6h+hDvthIg/2wW9ne1Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ImNhbfeyfH8qIEeA5ic0s3dAQBdzzTBS+CPsNih9vZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dWP33YDSn04UKJN2ogh2Rui0iW/0q2y18OCDRVcfyoo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lYv0isAtfGh6H9tdp3cp2eHU7q2J+uk7QrgcxtK3w7Y=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VGMoamB/+7zTOYcY/pqJc96xlv2PdW4hwsIAEIslTDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yNeBWMF7BnD9wVwz2PgJsvWr77QiVvvWUvJF0+fqBug=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfpvObJ+tJBXSvqeN7vlOfmhYign635lciYAJIjUtY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dsen4NqjzVGjpjufiTMs3+gqeD09EbnuogPgxrJECwg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pxCWVM3sn19NsFEpgHbgLa+PmYlhN3mMiP0Wk8kJhYw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q11KNvJszjYIB9n9HcC+N4uz11a3eRj1L3BH9scKMDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A1PmkgcEToWh1JiVWE6mI5jUu7poxWWuCUt/cgRUUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qJo3Hu4PJeanL7XEaWXO/n3YsodhZyd+MJOOmB9Kpd8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BkBKLO8URFscfRY9Bav/1+L9mLohDgNr/MkZtGiraIs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rZq5WA3Hx3xthOyHAJXK//f8pE2qbz7YKu3TIMp9GFY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X07a/Lm80p5xd4RFs1dNmw+90tmPDPdGiAKVZkxd4zY=", - "subType": "00" - } - } - ] - } - - - { - "_id": 1, - "encryptedDoubleNoPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "HI88j1zrIsFoijIXKybr9mYubNV5uVeODyLHFH4Ueco=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wXVD/HSbBljko0jJcaxJ1nrzs2+pchLQqYR3vywS8SU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KhscCh+tt/pp8lxtKZQSPPUU94RvJYPKG/sjtzIa4Ws=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RISnuNrTTVNW5HnwCgQJ301pFw8DOcYrAMQIwVwjOkI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Ra5zukLh2boua0Bh74qA+mtIoixGXlsNsxiJqHtqdTI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "eqr0v+NNWXWszi9ni8qH58Q6gw5x737tJvH3lPaNHO4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "d42QupriWIwGrFAquXNFi0ehEuidIbHLFZtg1Sm2nN8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2azRVxaaTIJKcgY2FU012gcyP8Y05cRDpfUaMnCBaQU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "3nlgkM4K/AAcHesRYYdEu24UGetHodVnVfHzw4yxZBM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hqy91FNmAAac2zUaPO6eWFkx0/37rOWGrwXN+fzL0tU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "akX+fmscSDSF9pB5MPj56iaJPtohr0hfXNk/OPWsGv8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1ZvUb10Q7cN4cNLktd5yNjqgtawsYnkbeVBZV6WuY/I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "otCwtuKiY4hCyXvYzXvo10OcnzZppebo38KsAlq49QM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Mty8EscckeT/dhMfrPFyDbLnmMOcYRUQ3mLK4KTu6V8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tnvgLLkJINO7csREYu4dEVe1ICrBeu7OP+HdfoX3M2E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kOefsHgEVhkJ17UuP7Dxogy6sAQbzf1SFPKCj6XRlrQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "F+JQ79xavpaHdJzdhvwyHbzdZJLNHAymc/+67La3gao=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NCZ9zp5rDRceENuSgAfTLEyKg0YgmXAhK0B8WSj7+Pw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wL1CJ7cYR5slx8mHq++uMdjDfkt9037lQTUztEMF56M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "txefkzTMITZE+XvvRFZ7QcgwDT/7m8jNmxRk4QBaoZI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jFunW3v1tSYMyZtQQD28eEy9qqDp4Kqo7gMN29N4bfQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QMO915KUiS3X3R1bU1YoafVM2s0NeHo3EjgTA9PnGwY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "nwdKJEXdilzvb7494vbuDJ+y6SrfJahza1dYIsHIWVI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vpWMX+T/VXXajFo0UbuYjtp0AEzBU0Y+lP+ih2EQ7mg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1lmzG0J1DhKDRhhq5y5Buygu4G8eV2X0t7kUY90EohM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SiKqpXqO0trwhFvBWK274hMklpCgMhNs/JY84yyn/NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7cPGPYCKPTay+ZR9Gx6oOueduOgaFrSuAXmNDpDHXdI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4THEYvAkjs2Fh7FIe5LC45P4i4N0L7ob67UOVbhp6Nk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "B+UGsChLLZR7iqnt8yq91OgmTgwiUKTJhFxY4NT0O6c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X1uYwBCsCg1H+PnKdwtBqXlt0zKEURi8bOM940GcPfk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xYOgT5l7shlNXCwHlguovmDkcEnF8dXyYlTyYrgZ8GE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vFMTZqV8bh1+gcKzTkXweMddJlgdUnwX0DWzUUaMok4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4HI0y9FrtleZxZ7M6INdNhLelrQ2Rv/+ykWCBl+tMC8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jpJ0bBE474OUkn1vUiLWumIBtYmwc7J5+LQU/nyeLQc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jQTPeXZvdxY/DjtPfYfKUArIDsf0E9MVFy2O26sv1ec=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QLLto0ExR2ZYMGqlyaMZc/hXFFTlwmgtKbiVq/xJIeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yBJNviU1nchbGbhx6InXCVRXa90sEepz1EwbYuKXu2U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jpEf0vHxrPu9gTJutNXSi2g/2Mc4WXFEN7yHonZEb7A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "E09kLFckMYwNuhggMxmPtwndyvIAx+Vl+b2CV6FP75s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "N+ue6/cLPb5NssmJCCeo18LlbKPz6r2z20AsnTKRvOo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yVQNZP8hhsvNGyDph2QP2qTNdXZTiIEVineKg+Qf33o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cSC9uI+9c5S8X+0G7amVyug1p0ZlgBsbEDYYyezBevQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1NpZGjoQzuQtekj80Rifxe9HbE08W07dfwxaFHaVn84=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "5Ghuq/8l11Ug9Uf/RTwf9On3OxOwIXUcb9soiy4J7/w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0LWKaEty6ywxLFhDaAqulqfMnYc+tgPfH4apyEeKg80=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OwSthmCBtt6NIAoAh7aCbj82Yr/+9t8U7WuBQhFT3AQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "iYiyg6/1isqbMdvFPIGucu3cNM4NAZNtJhHpGZ4eM+c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "waBgs8jWuGJPIF5zCRh6OmIyfK5GCBQgTMfmKSR2wyY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1Jdtbe2BKJXPU2G9ywOrlODZ/cNYEQlKzAW3aMe1Hy4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xaLEnNUS/2ySerBpb9dN/D31t+wYcKekwTfkwtni0Mc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "bIVBrOhOvr6cL55Tr24+B+CC9MiG7U6K54aAr2IXXuw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6Cdq5wroGu2TEFnekuT7LhOpd/K/+PcipIljcHU9QL4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "K5l64vI4S/pLviLW6Pl0U3iQkI3ge0xg4RAHcEsyKJo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "bzhuvZ0Ls22yIOX+Hz51eAHlSuDbWR/e0u4EhfdpHbc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Qv+fr6uD4o0bZRp69QJCFL6zvn3G82c7L+N1IFzj7H0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XAmISMbD3aEyQT+BQEphCKFNa0F0GDKFuhM9cGceKoQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4VLCokntMfm1AogpUnYGvhV7nllWSo3mS3hVESMy+hA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xiXNLj/CipEH63Vb5cidi8q9X47EF4f3HtJSOH7mfM8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4XlCYfYBjI9XA5zOSgTiEBYcZsdwyXL+f5XtH2xUIOc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "k6DfQy7ZYJIkEly2B5hjOZznL4NcgMkllZjJLb7yq7w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ZzM6gwWesa3lxbZVZthpPFs2s3GV0RZREE2zOMhBRBo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "US+jeMeeOd7J0wR0efJtq2/18lcO8YFvhT4O3DeaonQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "b6iSxiI1FM9SzxuG1bHqGA1i4+3GOi0/SPW00XB4L7o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kn3LsxAVkzIZKK9I6fi0Cctr0yjXOYgaQWMCoj4hLpM=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-InsertFind.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-InsertFind.json deleted file mode 100644 index 934af381f1..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-InsertFind.json +++ /dev/null @@ -1,1123 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoubleNoPrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range Double. Insert and Find.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDoubleNoPrecision": { - "$gt": { - "$numberDouble": "0" - } - } - } - }, - "result": [ - { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1" - } - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoubleNoPrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoubleNoPrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "encryptedDoubleNoPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - }, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoubleNoPrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "6YrBn2ofIw1b5ooakrLOwF41BWrps8OO0H9WH4/rtlE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "n+XAuFnP8Dov9TnhGFxNx0K/MnVM9WbJ7RouEu0ndO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yRXojuVdn5GQtD97qYlaCL6cOLmZ7Cvcb3wFjkLUIdM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DuIkdRPITRs55I4SZmgomAHCIsDQmXRhW8+MOznkzSk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SsBk+Et1lTbU+QRPx+xyJ/jMkmfG+QCvQEpip2YYrzA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "crCIzOd8KhHvvUlX7M1v9bhvU4pLdTc+X2SuqoKU5Ek=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YOWdCw4UrqnxkAaVjqmC4sKQDMVMHEpFGnlxpxdaU6E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "M3SShp81Ff8tQ632qKbv9MUcN6wjDaBReI0VXNu6Xh4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gzHlSPxpM0hT75kQvWFzGlOxKvDoiKQZOr19V6l2zXI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s3JnppOGYw9SL2Q1kMAZs948v2F5PrpXjGei/HioDWs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cG6+3Gk/zEH68P/uuuwiAUVCuyJwa1LeV+t29FlPPAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dupdvR3AyJtM+g9NDKiaLVOtGca387JQp8w+V03m7Ig=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JqEQc5svj2jTvZ6LLA5ivE+kTb/0aRemSEmxk4G7Zrg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "szcXXXKnob+p3SoM4yED2R920LeJ7cVsclPMFTe4CeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o1QoGVXmuBdHwHm7aCtGMlMVKrjFdYvJXpoq6uhIAZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Jfm5wPlqqLCJRGQIqRq2NGmpn7s0Vrih2H3YAOoI2YU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zMHLb8ARbsYo8Ld05bqnGFf1Usha6EGb8QKwdSAyps0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yQdtq9lh5pugL7/i0Bj/PuZUUBUIzf+7wj1rl5y736w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wGWVZdO7qIuyDg/BqDgqjgoQ02h5YYgwXQB1oCin2NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "by9HMLj6NTEpgztZ5HSN6GxImkXPcaFINYDzgZY33X8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tWo0vbasi7bXmn/MsOx13VC1IsWtpx/nYp0uj4iMzdA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tQQpndUYd5O87lOtrGjH3wl9VsOK0ray7RMasL90sBM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cQjXEDCMsOpKLLf+vlTgIHA+cbSJdzqhbSX9Wvh95aA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7yMpU48IxK9SzP2cx3VnTownGEwFmeFofuuFT97SuuY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kSOx1kz0CmBgzKQHZlo65ZUY1DIv9A99JRm+Us2y6Ew=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ubQpdPBe6/xvtr+AcXdfYLSvYCR4ot0tivehkCsupb4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xal+iCJ6FTefRQToyoNksc9NCZShyn04NDGi4IYrcoM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "d7jU4iOK50xHxlkSifcxlZFCM46TSgQzoYivxG3HNLY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJvl2nsBLBVzL3pp6sKWCL4UXeh3q/roYBJjSb74ve0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OIUCaKRvIx9t1w6Hxlz1IcQTdPNCfdRNwnnTm10W+X0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A9tvzsiElotOUVIB4CqfQp9mAwqvTM35YkmAR170aHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lI8gpK7hpb7c9x4RQugsxMnQay5LZJmwslZdvMx/dcE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dNCzh40U0XvdKnSDi3HRQOWQftEsDVqc4uUvsVFGoq8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IP+iwEBWBwVVZIdpaMu8k5+soFCz+TZkYn3drKZ9grE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnqyh6e0y5svHkJDShlN9CHV0WvMBE4QbtJpQw5ZCXc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "elEl42tbVDoRTLjAhZUFEtXiut4b3PVhg/1ZLZSQdtE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vHuu2FxwclMHqyE6JBYbTYgbEkB0dqb/JuaxsvfwsmY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xTf7NCe3Gf8QpE78HR5OknlLTKfs9J+RN9UZpH6fnso=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XiWSasRnJAulGR6+LCVD3mwRObXylqYWR9jvpywq12c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MZMxEQ5ikx0PG1YFIExv0UnTZogsvgeOEZTpzvBDn4w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yZMyMZBDrWbAhvnic7vvIYhmO9m5H2iuv0c8KNZrBzY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xxM14hTPY5j0vvcK2C7YAEjzdsfUTFHozHC0hEo1bxI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+01rqR1xVwkpGXcstbk1ItJqFVjH6Q8MGxEN3Cm9Y1A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xOpLV0Z2VTRJ3iWtnWZcsyjXubTIkYWo31cO+HV1o1k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BWUOLqgLBqc5NwxVlSV5H3KFQPXbCp7mdo+jF+8cJqY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fuQb1S6xZDGlrEbK+kI23aL53PP1PVNwqICnZNt9Yzg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfscnoibFttahLdPVC4Ee+47ewGFKpDSU7M6HX19bKE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rpSW2awybNVeKtat91VFxqbINoTfNhPfQAu+d73Xtf8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9M/CP9ccOIIj2LLFmE0GFDO0Ban2wsNalEXfM6+h+1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WrEMG49l1ye4MhXs5ZS9tz8P6h+hDvthIg/2wW9ne1Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ImNhbfeyfH8qIEeA5ic0s3dAQBdzzTBS+CPsNih9vZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dWP33YDSn04UKJN2ogh2Rui0iW/0q2y18OCDRVcfyoo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lYv0isAtfGh6H9tdp3cp2eHU7q2J+uk7QrgcxtK3w7Y=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VGMoamB/+7zTOYcY/pqJc96xlv2PdW4hwsIAEIslTDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yNeBWMF7BnD9wVwz2PgJsvWr77QiVvvWUvJF0+fqBug=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfpvObJ+tJBXSvqeN7vlOfmhYign635lciYAJIjUtY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dsen4NqjzVGjpjufiTMs3+gqeD09EbnuogPgxrJECwg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pxCWVM3sn19NsFEpgHbgLa+PmYlhN3mMiP0Wk8kJhYw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q11KNvJszjYIB9n9HcC+N4uz11a3eRj1L3BH9scKMDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A1PmkgcEToWh1JiVWE6mI5jUu7poxWWuCUt/cgRUUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qJo3Hu4PJeanL7XEaWXO/n3YsodhZyd+MJOOmB9Kpd8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BkBKLO8URFscfRY9Bav/1+L9mLohDgNr/MkZtGiraIs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rZq5WA3Hx3xthOyHAJXK//f8pE2qbz7YKu3TIMp9GFY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X07a/Lm80p5xd4RFs1dNmw+90tmPDPdGiAKVZkxd4zY=", - "subType": "00" - } - } - ] - }, - { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "2FIZh/9N+NeJEQwxYIX5ikQT85xJzulBNReXk8PnG/s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I93Md7QNPGmEEGYU1+VVCqBPBEvXdqHPtTJtMOn06Yk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "GecBFQ1PemlECWZWCl7f74vmsL6eB6mzQ9n6tK6FYfs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QpjhZl+O1ORifgtCZuWAdcP6OKL7IZ2cA46v8FJcV28=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FWXI/yZ1M+2fIboeMCDMlp+I2NwPQDtoM/wWselOPYw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uk26nvN/LdRLaBphiBgIZzT0sSpoO1z0RdDWRm/xrSA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hiiYSH1KZovAULc7rlmEU74wCjzDR+mm6ZnsgvFQjMw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hRzvMvWPX0sJme+wck67lwbKDFaWOa+Eyef+JSdc1s4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PSx5D+zqC9c295dguX4+EobT4IEzfffdfjzC8DWpB5Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QzfXQCVTjPQv2h21v95HYPq8uCsVJ2tPnjv79gAaM9M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XcGDO/dlTcEMLqwcm55UmOqK+KpBmbzZO1LIzX7GPaQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Lf+o4E7YB5ynzUPC6KTyW0lj6Cg9oLIu1Sdd1ODHctA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wAuVn02LAVo5Y+TUocvkoenFYWzpu38k0NmGZOsAjS4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yJGDtveLbbo/0HtCtiTSsvVI/0agg/U1bFaQ0yhK12o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KsEy0zgYcmkM+O/fWF9z3aJGIk22XCk+Aw96HB6JU68=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "p+AnMI5ZxdJMSIEJmXXya+FeH5yubmOdViwUO89j0Rc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/jLix56jzeywBtNuGw55lCXyebQoSIhbful0hOKxKDY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fvDvSPomtJsl1S3+8/tzFCE8scHIdJY5hB9CdTEsoFo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "oV5hOJzPXxfTuRdKIlF4uYEoMDuqH+G7/3qgndDr0PM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "3ALwcvLj3VOfgD6OqXAO13h1ZkOv46R6+Oy6SUKh53I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gxaB9FJj0IM+InhvAjwWaex3UIZ9SAnDiUd5WHSY/l0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "66NPvDygJzKJqddfNuDuNOpvGajjFRtvhkwfUkiYmXw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1dWcQIocRAcO9XnXYqbhl83jc0RgjQpsrWd8dC27trg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "npos0Uf1DT3ztSCjPVY9EImlRnTHB1KLrvmVSqBQ/8E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "TEI9qBx/tK1l1H0v1scMG8Srmtwo5VxWHADPBSlWrXk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "3wUN2ypQKoj+5ASkeIK9ycxhahVxyTmGopigoUAlyYs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o/oksSnUS+nIq6ozWTbB5bJh+NoaPj8deAA23uxiWCk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KExYPruhA31e8xuSwvfUfDcyY/H2Va6taUd0k4yFgLc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/x+dNfxdd/lkx8Z8VZVfoYl7LPoaZ/iKEzZXBrAtIJc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DE4cmjFLPqZlmRomO0qQiruUBtzoCe8ZdNRcfNH92pU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "M6EKNcLPw/iojAChgYUSieaBYWcbsjKtB94SaHOr8vk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+qP49lDPeyhaduTvXJgtJEqHNEYANVu9Bg3Bxz7Td9w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ruMrC2VIS+VKbJwCFb3bfkaLTju9nE+yPONV9s0M0Vo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EbjDlSB5JKnDKff4d8hOmaOwJ7B9Q6NQFisLj+DPC+0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "C/yYOTB94edyqAbiQNu8/H7FoG3yRRjHDkMykz4+Mv0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CBxqrejG+qQQq2YTd6iP/06kiu2CxxzBFaZK3Ofb1CM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2ZOQ/fpho+AbDENWBZaln7wRoepIRdhyT648dr8O5cU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EghIgEPz01+myPgj8oid+PgncvobvC7vjvG3THEEQ0M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "92CysZYNF8riwAMhdrIPKxfODw9p07cKQy/Snn8XmVY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VO0LeTBQmsEf7sCHzTnZwUPNTqRZ49R8V5E9XnZ/5N4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "exs8BQMJq7U6ZXYgIizT7XN+X/hOmmn4YEuzev9zgSI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qHpS4k1I+gPniNp4CA8TY8lLN36vBYmgbKMFpbYMEqg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+7lWKCKAWFw6gPZdHE6E8KIfI14/fSvtWUmllb5WLi0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YiH/US0q6679hWblFDDKNqUjCgggoU8sUCssTIF1QbU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YgwkKElEubNfvXL9hJxzqQUQtHiXN/OCGxNL1MUZZlM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hZFST4INZTTuhvJlGJeMwlUAK270UCOTCDeBAnN4a7g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "24I1Zw35AuGnK3CqJhbCwYb0IPuu5sCRrM5iyeITOLc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vgD12JB4Q1S/kGPSQ1KOgp386KnG1GbM/5+60oRGcGw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+wNE+OL+CB9d4AUJdVxd56jUJCAXmmk9fapuB2TAc4g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uhQh1B2Pe4RkNw/kPEcgaLenuikKoRf1iyfZhpXdodc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "eu8gjAUIp8ybO204AgeOq5v1neI1yljqy5v3I6lo1lM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7QG6oVbASBAjrnCPxzzUNnuFSFNlKhbuBafkF8pr7Is=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PUS1xb2oHSDTdYltutoSSxBiJ1NjxH3l2kA4P1CZLEs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XPMh/JDC/O93gJJCwwgJDb8ssWZvRvezNmKmyn3nIfk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jWz+KGwMk/GOvFAK2rOxF3OjxeZAWfmUQ1HGJ7icw4A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o7XbW68pc6flYigf3LW4WAGUWxpeqxaQLkHUhUR9RZ8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "nqR+g60+5U0okbqJadSqGgnC+j1JcP8rwMcfzOs2ACI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Hz43qVK95tSfbYFtaE/8fE97XMk1RiO8XpWjwZHB80o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "noZUWlZ8M6KXU5rkifyo8/duw5IL7/fXbJvT7bNmW9k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WONVHCuPSanXDRQQ/3tmyJ0Vq+Lu/4hRaMUf0g0kSuw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UEaj6vQRoIghE8Movd8AGXhtwIOXlP4cBsECIUvE5Y8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "D3n2YcO8+PB4C8brDo7kxKjF9Y844rVkdRMLTgsQkrw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "C+YA0G9KjxZVaWwOMuh/dcnHnHAlYnbFrRl0IEpmsY0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rUnmbmQanxrbFPYYrwyQ53x66OSt27yAvF+s48ezKDc=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-InsertFind.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-InsertFind.yml deleted file mode 100644 index 9216cf7b41..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-InsertFind.yml +++ /dev/null @@ -1,895 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDoubleNoPrecision', 'bsonType': 'double', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range Double. Insert and Find." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDoubleNoPrecision: { $numberDouble: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDoubleNoPrecision: { $numberDouble: "1" } } - - name: find - arguments: - filter: { encryptedDoubleNoPrecision: { $gt: { $numberDouble: "0" } } } - result: [*doc1] - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedDoubleNoPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedDoubleNoPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: - "encryptedDoubleNoPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedDoubleNoPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "6YrBn2ofIw1b5ooakrLOwF41BWrps8OO0H9WH4/rtlE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "n+XAuFnP8Dov9TnhGFxNx0K/MnVM9WbJ7RouEu0ndO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yRXojuVdn5GQtD97qYlaCL6cOLmZ7Cvcb3wFjkLUIdM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DuIkdRPITRs55I4SZmgomAHCIsDQmXRhW8+MOznkzSk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SsBk+Et1lTbU+QRPx+xyJ/jMkmfG+QCvQEpip2YYrzA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "crCIzOd8KhHvvUlX7M1v9bhvU4pLdTc+X2SuqoKU5Ek=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YOWdCw4UrqnxkAaVjqmC4sKQDMVMHEpFGnlxpxdaU6E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "M3SShp81Ff8tQ632qKbv9MUcN6wjDaBReI0VXNu6Xh4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gzHlSPxpM0hT75kQvWFzGlOxKvDoiKQZOr19V6l2zXI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s3JnppOGYw9SL2Q1kMAZs948v2F5PrpXjGei/HioDWs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cG6+3Gk/zEH68P/uuuwiAUVCuyJwa1LeV+t29FlPPAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dupdvR3AyJtM+g9NDKiaLVOtGca387JQp8w+V03m7Ig=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JqEQc5svj2jTvZ6LLA5ivE+kTb/0aRemSEmxk4G7Zrg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "szcXXXKnob+p3SoM4yED2R920LeJ7cVsclPMFTe4CeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o1QoGVXmuBdHwHm7aCtGMlMVKrjFdYvJXpoq6uhIAZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Jfm5wPlqqLCJRGQIqRq2NGmpn7s0Vrih2H3YAOoI2YU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zMHLb8ARbsYo8Ld05bqnGFf1Usha6EGb8QKwdSAyps0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yQdtq9lh5pugL7/i0Bj/PuZUUBUIzf+7wj1rl5y736w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wGWVZdO7qIuyDg/BqDgqjgoQ02h5YYgwXQB1oCin2NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "by9HMLj6NTEpgztZ5HSN6GxImkXPcaFINYDzgZY33X8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tWo0vbasi7bXmn/MsOx13VC1IsWtpx/nYp0uj4iMzdA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tQQpndUYd5O87lOtrGjH3wl9VsOK0ray7RMasL90sBM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cQjXEDCMsOpKLLf+vlTgIHA+cbSJdzqhbSX9Wvh95aA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7yMpU48IxK9SzP2cx3VnTownGEwFmeFofuuFT97SuuY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kSOx1kz0CmBgzKQHZlo65ZUY1DIv9A99JRm+Us2y6Ew=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ubQpdPBe6/xvtr+AcXdfYLSvYCR4ot0tivehkCsupb4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xal+iCJ6FTefRQToyoNksc9NCZShyn04NDGi4IYrcoM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "d7jU4iOK50xHxlkSifcxlZFCM46TSgQzoYivxG3HNLY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJvl2nsBLBVzL3pp6sKWCL4UXeh3q/roYBJjSb74ve0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OIUCaKRvIx9t1w6Hxlz1IcQTdPNCfdRNwnnTm10W+X0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A9tvzsiElotOUVIB4CqfQp9mAwqvTM35YkmAR170aHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lI8gpK7hpb7c9x4RQugsxMnQay5LZJmwslZdvMx/dcE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dNCzh40U0XvdKnSDi3HRQOWQftEsDVqc4uUvsVFGoq8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IP+iwEBWBwVVZIdpaMu8k5+soFCz+TZkYn3drKZ9grE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnqyh6e0y5svHkJDShlN9CHV0WvMBE4QbtJpQw5ZCXc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "elEl42tbVDoRTLjAhZUFEtXiut4b3PVhg/1ZLZSQdtE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vHuu2FxwclMHqyE6JBYbTYgbEkB0dqb/JuaxsvfwsmY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xTf7NCe3Gf8QpE78HR5OknlLTKfs9J+RN9UZpH6fnso=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XiWSasRnJAulGR6+LCVD3mwRObXylqYWR9jvpywq12c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MZMxEQ5ikx0PG1YFIExv0UnTZogsvgeOEZTpzvBDn4w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yZMyMZBDrWbAhvnic7vvIYhmO9m5H2iuv0c8KNZrBzY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xxM14hTPY5j0vvcK2C7YAEjzdsfUTFHozHC0hEo1bxI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+01rqR1xVwkpGXcstbk1ItJqFVjH6Q8MGxEN3Cm9Y1A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xOpLV0Z2VTRJ3iWtnWZcsyjXubTIkYWo31cO+HV1o1k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BWUOLqgLBqc5NwxVlSV5H3KFQPXbCp7mdo+jF+8cJqY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fuQb1S6xZDGlrEbK+kI23aL53PP1PVNwqICnZNt9Yzg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfscnoibFttahLdPVC4Ee+47ewGFKpDSU7M6HX19bKE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rpSW2awybNVeKtat91VFxqbINoTfNhPfQAu+d73Xtf8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9M/CP9ccOIIj2LLFmE0GFDO0Ban2wsNalEXfM6+h+1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WrEMG49l1ye4MhXs5ZS9tz8P6h+hDvthIg/2wW9ne1Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ImNhbfeyfH8qIEeA5ic0s3dAQBdzzTBS+CPsNih9vZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dWP33YDSn04UKJN2ogh2Rui0iW/0q2y18OCDRVcfyoo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lYv0isAtfGh6H9tdp3cp2eHU7q2J+uk7QrgcxtK3w7Y=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VGMoamB/+7zTOYcY/pqJc96xlv2PdW4hwsIAEIslTDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yNeBWMF7BnD9wVwz2PgJsvWr77QiVvvWUvJF0+fqBug=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfpvObJ+tJBXSvqeN7vlOfmhYign635lciYAJIjUtY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dsen4NqjzVGjpjufiTMs3+gqeD09EbnuogPgxrJECwg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pxCWVM3sn19NsFEpgHbgLa+PmYlhN3mMiP0Wk8kJhYw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q11KNvJszjYIB9n9HcC+N4uz11a3eRj1L3BH9scKMDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A1PmkgcEToWh1JiVWE6mI5jUu7poxWWuCUt/cgRUUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qJo3Hu4PJeanL7XEaWXO/n3YsodhZyd+MJOOmB9Kpd8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BkBKLO8URFscfRY9Bav/1+L9mLohDgNr/MkZtGiraIs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rZq5WA3Hx3xthOyHAJXK//f8pE2qbz7YKu3TIMp9GFY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X07a/Lm80p5xd4RFs1dNmw+90tmPDPdGiAKVZkxd4zY=", - "subType": "00" - } - } - ] - } - - - { - "_id": 1, - "encryptedDoubleNoPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "2FIZh/9N+NeJEQwxYIX5ikQT85xJzulBNReXk8PnG/s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I93Md7QNPGmEEGYU1+VVCqBPBEvXdqHPtTJtMOn06Yk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "GecBFQ1PemlECWZWCl7f74vmsL6eB6mzQ9n6tK6FYfs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QpjhZl+O1ORifgtCZuWAdcP6OKL7IZ2cA46v8FJcV28=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FWXI/yZ1M+2fIboeMCDMlp+I2NwPQDtoM/wWselOPYw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uk26nvN/LdRLaBphiBgIZzT0sSpoO1z0RdDWRm/xrSA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hiiYSH1KZovAULc7rlmEU74wCjzDR+mm6ZnsgvFQjMw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hRzvMvWPX0sJme+wck67lwbKDFaWOa+Eyef+JSdc1s4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PSx5D+zqC9c295dguX4+EobT4IEzfffdfjzC8DWpB5Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QzfXQCVTjPQv2h21v95HYPq8uCsVJ2tPnjv79gAaM9M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XcGDO/dlTcEMLqwcm55UmOqK+KpBmbzZO1LIzX7GPaQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Lf+o4E7YB5ynzUPC6KTyW0lj6Cg9oLIu1Sdd1ODHctA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wAuVn02LAVo5Y+TUocvkoenFYWzpu38k0NmGZOsAjS4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yJGDtveLbbo/0HtCtiTSsvVI/0agg/U1bFaQ0yhK12o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KsEy0zgYcmkM+O/fWF9z3aJGIk22XCk+Aw96HB6JU68=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "p+AnMI5ZxdJMSIEJmXXya+FeH5yubmOdViwUO89j0Rc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/jLix56jzeywBtNuGw55lCXyebQoSIhbful0hOKxKDY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fvDvSPomtJsl1S3+8/tzFCE8scHIdJY5hB9CdTEsoFo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "oV5hOJzPXxfTuRdKIlF4uYEoMDuqH+G7/3qgndDr0PM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "3ALwcvLj3VOfgD6OqXAO13h1ZkOv46R6+Oy6SUKh53I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gxaB9FJj0IM+InhvAjwWaex3UIZ9SAnDiUd5WHSY/l0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "66NPvDygJzKJqddfNuDuNOpvGajjFRtvhkwfUkiYmXw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1dWcQIocRAcO9XnXYqbhl83jc0RgjQpsrWd8dC27trg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "npos0Uf1DT3ztSCjPVY9EImlRnTHB1KLrvmVSqBQ/8E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "TEI9qBx/tK1l1H0v1scMG8Srmtwo5VxWHADPBSlWrXk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "3wUN2ypQKoj+5ASkeIK9ycxhahVxyTmGopigoUAlyYs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o/oksSnUS+nIq6ozWTbB5bJh+NoaPj8deAA23uxiWCk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KExYPruhA31e8xuSwvfUfDcyY/H2Va6taUd0k4yFgLc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "/x+dNfxdd/lkx8Z8VZVfoYl7LPoaZ/iKEzZXBrAtIJc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DE4cmjFLPqZlmRomO0qQiruUBtzoCe8ZdNRcfNH92pU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "M6EKNcLPw/iojAChgYUSieaBYWcbsjKtB94SaHOr8vk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+qP49lDPeyhaduTvXJgtJEqHNEYANVu9Bg3Bxz7Td9w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ruMrC2VIS+VKbJwCFb3bfkaLTju9nE+yPONV9s0M0Vo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EbjDlSB5JKnDKff4d8hOmaOwJ7B9Q6NQFisLj+DPC+0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "C/yYOTB94edyqAbiQNu8/H7FoG3yRRjHDkMykz4+Mv0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CBxqrejG+qQQq2YTd6iP/06kiu2CxxzBFaZK3Ofb1CM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2ZOQ/fpho+AbDENWBZaln7wRoepIRdhyT648dr8O5cU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "EghIgEPz01+myPgj8oid+PgncvobvC7vjvG3THEEQ0M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "92CysZYNF8riwAMhdrIPKxfODw9p07cKQy/Snn8XmVY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VO0LeTBQmsEf7sCHzTnZwUPNTqRZ49R8V5E9XnZ/5N4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "exs8BQMJq7U6ZXYgIizT7XN+X/hOmmn4YEuzev9zgSI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qHpS4k1I+gPniNp4CA8TY8lLN36vBYmgbKMFpbYMEqg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+7lWKCKAWFw6gPZdHE6E8KIfI14/fSvtWUmllb5WLi0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YiH/US0q6679hWblFDDKNqUjCgggoU8sUCssTIF1QbU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YgwkKElEubNfvXL9hJxzqQUQtHiXN/OCGxNL1MUZZlM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hZFST4INZTTuhvJlGJeMwlUAK270UCOTCDeBAnN4a7g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "24I1Zw35AuGnK3CqJhbCwYb0IPuu5sCRrM5iyeITOLc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vgD12JB4Q1S/kGPSQ1KOgp386KnG1GbM/5+60oRGcGw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+wNE+OL+CB9d4AUJdVxd56jUJCAXmmk9fapuB2TAc4g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uhQh1B2Pe4RkNw/kPEcgaLenuikKoRf1iyfZhpXdodc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "eu8gjAUIp8ybO204AgeOq5v1neI1yljqy5v3I6lo1lM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7QG6oVbASBAjrnCPxzzUNnuFSFNlKhbuBafkF8pr7Is=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "PUS1xb2oHSDTdYltutoSSxBiJ1NjxH3l2kA4P1CZLEs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XPMh/JDC/O93gJJCwwgJDb8ssWZvRvezNmKmyn3nIfk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jWz+KGwMk/GOvFAK2rOxF3OjxeZAWfmUQ1HGJ7icw4A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o7XbW68pc6flYigf3LW4WAGUWxpeqxaQLkHUhUR9RZ8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "nqR+g60+5U0okbqJadSqGgnC+j1JcP8rwMcfzOs2ACI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Hz43qVK95tSfbYFtaE/8fE97XMk1RiO8XpWjwZHB80o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "noZUWlZ8M6KXU5rkifyo8/duw5IL7/fXbJvT7bNmW9k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WONVHCuPSanXDRQQ/3tmyJ0Vq+Lu/4hRaMUf0g0kSuw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UEaj6vQRoIghE8Movd8AGXhtwIOXlP4cBsECIUvE5Y8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "D3n2YcO8+PB4C8brDo7kxKjF9Y844rVkdRMLTgsQkrw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "C+YA0G9KjxZVaWwOMuh/dcnHnHAlYnbFrRl0IEpmsY0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rUnmbmQanxrbFPYYrwyQ53x66OSt27yAvF+s48ezKDc=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Update.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Update.json deleted file mode 100644 index ec95e0334a..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Update.json +++ /dev/null @@ -1,1140 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoubleNoPrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range Double. Update.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$numberDouble": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$numberDouble": "1" - } - } - } - }, - { - "name": "updateOne", - "arguments": { - "filter": { - "encryptedDoubleNoPrecision": { - "$gt": { - "$numberDouble": "0" - } - } - }, - "update": { - "$set": { - "encryptedDoubleNoPrecision": { - "$numberDouble": "2" - } - } - } - }, - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoubleNoPrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoubleNoPrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command_name": "update", - "command": { - "update": "default", - "ordered": true, - "updates": [ - { - "q": { - "encryptedDoubleNoPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - }, - "u": { - "$set": { - "encryptedDoubleNoPrecision": { - "$$type": "binData" - } - } - } - } - ], - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoubleNoPrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - } - } - } - ] - } - } - }, - "$db": "default" - } - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedDoubleNoPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "6YrBn2ofIw1b5ooakrLOwF41BWrps8OO0H9WH4/rtlE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "n+XAuFnP8Dov9TnhGFxNx0K/MnVM9WbJ7RouEu0ndO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yRXojuVdn5GQtD97qYlaCL6cOLmZ7Cvcb3wFjkLUIdM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DuIkdRPITRs55I4SZmgomAHCIsDQmXRhW8+MOznkzSk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SsBk+Et1lTbU+QRPx+xyJ/jMkmfG+QCvQEpip2YYrzA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "crCIzOd8KhHvvUlX7M1v9bhvU4pLdTc+X2SuqoKU5Ek=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YOWdCw4UrqnxkAaVjqmC4sKQDMVMHEpFGnlxpxdaU6E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "M3SShp81Ff8tQ632qKbv9MUcN6wjDaBReI0VXNu6Xh4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gzHlSPxpM0hT75kQvWFzGlOxKvDoiKQZOr19V6l2zXI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s3JnppOGYw9SL2Q1kMAZs948v2F5PrpXjGei/HioDWs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cG6+3Gk/zEH68P/uuuwiAUVCuyJwa1LeV+t29FlPPAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dupdvR3AyJtM+g9NDKiaLVOtGca387JQp8w+V03m7Ig=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JqEQc5svj2jTvZ6LLA5ivE+kTb/0aRemSEmxk4G7Zrg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "szcXXXKnob+p3SoM4yED2R920LeJ7cVsclPMFTe4CeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o1QoGVXmuBdHwHm7aCtGMlMVKrjFdYvJXpoq6uhIAZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Jfm5wPlqqLCJRGQIqRq2NGmpn7s0Vrih2H3YAOoI2YU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zMHLb8ARbsYo8Ld05bqnGFf1Usha6EGb8QKwdSAyps0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yQdtq9lh5pugL7/i0Bj/PuZUUBUIzf+7wj1rl5y736w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wGWVZdO7qIuyDg/BqDgqjgoQ02h5YYgwXQB1oCin2NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "by9HMLj6NTEpgztZ5HSN6GxImkXPcaFINYDzgZY33X8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tWo0vbasi7bXmn/MsOx13VC1IsWtpx/nYp0uj4iMzdA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tQQpndUYd5O87lOtrGjH3wl9VsOK0ray7RMasL90sBM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cQjXEDCMsOpKLLf+vlTgIHA+cbSJdzqhbSX9Wvh95aA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7yMpU48IxK9SzP2cx3VnTownGEwFmeFofuuFT97SuuY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kSOx1kz0CmBgzKQHZlo65ZUY1DIv9A99JRm+Us2y6Ew=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ubQpdPBe6/xvtr+AcXdfYLSvYCR4ot0tivehkCsupb4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xal+iCJ6FTefRQToyoNksc9NCZShyn04NDGi4IYrcoM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "d7jU4iOK50xHxlkSifcxlZFCM46TSgQzoYivxG3HNLY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJvl2nsBLBVzL3pp6sKWCL4UXeh3q/roYBJjSb74ve0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OIUCaKRvIx9t1w6Hxlz1IcQTdPNCfdRNwnnTm10W+X0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A9tvzsiElotOUVIB4CqfQp9mAwqvTM35YkmAR170aHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lI8gpK7hpb7c9x4RQugsxMnQay5LZJmwslZdvMx/dcE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dNCzh40U0XvdKnSDi3HRQOWQftEsDVqc4uUvsVFGoq8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IP+iwEBWBwVVZIdpaMu8k5+soFCz+TZkYn3drKZ9grE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnqyh6e0y5svHkJDShlN9CHV0WvMBE4QbtJpQw5ZCXc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "elEl42tbVDoRTLjAhZUFEtXiut4b3PVhg/1ZLZSQdtE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vHuu2FxwclMHqyE6JBYbTYgbEkB0dqb/JuaxsvfwsmY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xTf7NCe3Gf8QpE78HR5OknlLTKfs9J+RN9UZpH6fnso=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XiWSasRnJAulGR6+LCVD3mwRObXylqYWR9jvpywq12c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MZMxEQ5ikx0PG1YFIExv0UnTZogsvgeOEZTpzvBDn4w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yZMyMZBDrWbAhvnic7vvIYhmO9m5H2iuv0c8KNZrBzY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xxM14hTPY5j0vvcK2C7YAEjzdsfUTFHozHC0hEo1bxI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+01rqR1xVwkpGXcstbk1ItJqFVjH6Q8MGxEN3Cm9Y1A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xOpLV0Z2VTRJ3iWtnWZcsyjXubTIkYWo31cO+HV1o1k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BWUOLqgLBqc5NwxVlSV5H3KFQPXbCp7mdo+jF+8cJqY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fuQb1S6xZDGlrEbK+kI23aL53PP1PVNwqICnZNt9Yzg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfscnoibFttahLdPVC4Ee+47ewGFKpDSU7M6HX19bKE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rpSW2awybNVeKtat91VFxqbINoTfNhPfQAu+d73Xtf8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9M/CP9ccOIIj2LLFmE0GFDO0Ban2wsNalEXfM6+h+1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WrEMG49l1ye4MhXs5ZS9tz8P6h+hDvthIg/2wW9ne1Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ImNhbfeyfH8qIEeA5ic0s3dAQBdzzTBS+CPsNih9vZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dWP33YDSn04UKJN2ogh2Rui0iW/0q2y18OCDRVcfyoo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lYv0isAtfGh6H9tdp3cp2eHU7q2J+uk7QrgcxtK3w7Y=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VGMoamB/+7zTOYcY/pqJc96xlv2PdW4hwsIAEIslTDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yNeBWMF7BnD9wVwz2PgJsvWr77QiVvvWUvJF0+fqBug=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfpvObJ+tJBXSvqeN7vlOfmhYign635lciYAJIjUtY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dsen4NqjzVGjpjufiTMs3+gqeD09EbnuogPgxrJECwg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pxCWVM3sn19NsFEpgHbgLa+PmYlhN3mMiP0Wk8kJhYw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q11KNvJszjYIB9n9HcC+N4uz11a3eRj1L3BH9scKMDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A1PmkgcEToWh1JiVWE6mI5jUu7poxWWuCUt/cgRUUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qJo3Hu4PJeanL7XEaWXO/n3YsodhZyd+MJOOmB9Kpd8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BkBKLO8URFscfRY9Bav/1+L9mLohDgNr/MkZtGiraIs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rZq5WA3Hx3xthOyHAJXK//f8pE2qbz7YKu3TIMp9GFY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X07a/Lm80p5xd4RFs1dNmw+90tmPDPdGiAKVZkxd4zY=", - "subType": "00" - } - } - ] - }, - { - "_id": 1, - "encryptedDoubleNoPrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "HI88j1zrIsFoijIXKybr9mYubNV5uVeODyLHFH4Ueco=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wXVD/HSbBljko0jJcaxJ1nrzs2+pchLQqYR3vywS8SU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KhscCh+tt/pp8lxtKZQSPPUU94RvJYPKG/sjtzIa4Ws=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RISnuNrTTVNW5HnwCgQJ301pFw8DOcYrAMQIwVwjOkI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Ra5zukLh2boua0Bh74qA+mtIoixGXlsNsxiJqHtqdTI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "eqr0v+NNWXWszi9ni8qH58Q6gw5x737tJvH3lPaNHO4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "d42QupriWIwGrFAquXNFi0ehEuidIbHLFZtg1Sm2nN8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2azRVxaaTIJKcgY2FU012gcyP8Y05cRDpfUaMnCBaQU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "3nlgkM4K/AAcHesRYYdEu24UGetHodVnVfHzw4yxZBM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hqy91FNmAAac2zUaPO6eWFkx0/37rOWGrwXN+fzL0tU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "akX+fmscSDSF9pB5MPj56iaJPtohr0hfXNk/OPWsGv8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1ZvUb10Q7cN4cNLktd5yNjqgtawsYnkbeVBZV6WuY/I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "otCwtuKiY4hCyXvYzXvo10OcnzZppebo38KsAlq49QM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Mty8EscckeT/dhMfrPFyDbLnmMOcYRUQ3mLK4KTu6V8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tnvgLLkJINO7csREYu4dEVe1ICrBeu7OP+HdfoX3M2E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kOefsHgEVhkJ17UuP7Dxogy6sAQbzf1SFPKCj6XRlrQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "F+JQ79xavpaHdJzdhvwyHbzdZJLNHAymc/+67La3gao=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NCZ9zp5rDRceENuSgAfTLEyKg0YgmXAhK0B8WSj7+Pw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wL1CJ7cYR5slx8mHq++uMdjDfkt9037lQTUztEMF56M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "txefkzTMITZE+XvvRFZ7QcgwDT/7m8jNmxRk4QBaoZI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jFunW3v1tSYMyZtQQD28eEy9qqDp4Kqo7gMN29N4bfQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QMO915KUiS3X3R1bU1YoafVM2s0NeHo3EjgTA9PnGwY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "nwdKJEXdilzvb7494vbuDJ+y6SrfJahza1dYIsHIWVI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vpWMX+T/VXXajFo0UbuYjtp0AEzBU0Y+lP+ih2EQ7mg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1lmzG0J1DhKDRhhq5y5Buygu4G8eV2X0t7kUY90EohM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SiKqpXqO0trwhFvBWK274hMklpCgMhNs/JY84yyn/NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7cPGPYCKPTay+ZR9Gx6oOueduOgaFrSuAXmNDpDHXdI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4THEYvAkjs2Fh7FIe5LC45P4i4N0L7ob67UOVbhp6Nk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "B+UGsChLLZR7iqnt8yq91OgmTgwiUKTJhFxY4NT0O6c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X1uYwBCsCg1H+PnKdwtBqXlt0zKEURi8bOM940GcPfk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xYOgT5l7shlNXCwHlguovmDkcEnF8dXyYlTyYrgZ8GE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vFMTZqV8bh1+gcKzTkXweMddJlgdUnwX0DWzUUaMok4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4HI0y9FrtleZxZ7M6INdNhLelrQ2Rv/+ykWCBl+tMC8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jpJ0bBE474OUkn1vUiLWumIBtYmwc7J5+LQU/nyeLQc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jQTPeXZvdxY/DjtPfYfKUArIDsf0E9MVFy2O26sv1ec=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QLLto0ExR2ZYMGqlyaMZc/hXFFTlwmgtKbiVq/xJIeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yBJNviU1nchbGbhx6InXCVRXa90sEepz1EwbYuKXu2U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jpEf0vHxrPu9gTJutNXSi2g/2Mc4WXFEN7yHonZEb7A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "E09kLFckMYwNuhggMxmPtwndyvIAx+Vl+b2CV6FP75s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "N+ue6/cLPb5NssmJCCeo18LlbKPz6r2z20AsnTKRvOo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yVQNZP8hhsvNGyDph2QP2qTNdXZTiIEVineKg+Qf33o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cSC9uI+9c5S8X+0G7amVyug1p0ZlgBsbEDYYyezBevQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1NpZGjoQzuQtekj80Rifxe9HbE08W07dfwxaFHaVn84=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "5Ghuq/8l11Ug9Uf/RTwf9On3OxOwIXUcb9soiy4J7/w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0LWKaEty6ywxLFhDaAqulqfMnYc+tgPfH4apyEeKg80=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OwSthmCBtt6NIAoAh7aCbj82Yr/+9t8U7WuBQhFT3AQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "iYiyg6/1isqbMdvFPIGucu3cNM4NAZNtJhHpGZ4eM+c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "waBgs8jWuGJPIF5zCRh6OmIyfK5GCBQgTMfmKSR2wyY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1Jdtbe2BKJXPU2G9ywOrlODZ/cNYEQlKzAW3aMe1Hy4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xaLEnNUS/2ySerBpb9dN/D31t+wYcKekwTfkwtni0Mc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "bIVBrOhOvr6cL55Tr24+B+CC9MiG7U6K54aAr2IXXuw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6Cdq5wroGu2TEFnekuT7LhOpd/K/+PcipIljcHU9QL4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "K5l64vI4S/pLviLW6Pl0U3iQkI3ge0xg4RAHcEsyKJo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "bzhuvZ0Ls22yIOX+Hz51eAHlSuDbWR/e0u4EhfdpHbc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Qv+fr6uD4o0bZRp69QJCFL6zvn3G82c7L+N1IFzj7H0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XAmISMbD3aEyQT+BQEphCKFNa0F0GDKFuhM9cGceKoQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4VLCokntMfm1AogpUnYGvhV7nllWSo3mS3hVESMy+hA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xiXNLj/CipEH63Vb5cidi8q9X47EF4f3HtJSOH7mfM8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4XlCYfYBjI9XA5zOSgTiEBYcZsdwyXL+f5XtH2xUIOc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "k6DfQy7ZYJIkEly2B5hjOZznL4NcgMkllZjJLb7yq7w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ZzM6gwWesa3lxbZVZthpPFs2s3GV0RZREE2zOMhBRBo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "US+jeMeeOd7J0wR0efJtq2/18lcO8YFvhT4O3DeaonQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "b6iSxiI1FM9SzxuG1bHqGA1i4+3GOi0/SPW00XB4L7o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kn3LsxAVkzIZKK9I6fi0Cctr0yjXOYgaQWMCoj4hLpM=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Update.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Update.yml deleted file mode 100644 index 8a340ee6e7..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Double-Update.yml +++ /dev/null @@ -1,912 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDoubleNoPrecision', 'bsonType': 'double', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range Double. Update." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDoubleNoPrecision: { $numberDouble: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDoubleNoPrecision: { $numberDouble: "1" } } - - name: updateOne - arguments: - filter: { encryptedDoubleNoPrecision: { $gt: { $numberDouble: "0" } } } - update: { "$set": { "encryptedDoubleNoPrecision": { $numberDouble: "2" } }} - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedDoubleNoPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedDoubleNoPrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command_name: update - command: - "update": "default" - "ordered": true - "updates": [ - { - "q": { - "encryptedDoubleNoPrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - }, - "u": { - "$set": { - "encryptedDoubleNoPrecision": { $$type: "binData" } - } - } - } - ] - encryptionInformation: - type: 1 - schema: - "default.default": - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - "$db": "default" - - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedDoubleNoPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "6YrBn2ofIw1b5ooakrLOwF41BWrps8OO0H9WH4/rtlE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "n+XAuFnP8Dov9TnhGFxNx0K/MnVM9WbJ7RouEu0ndO0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yRXojuVdn5GQtD97qYlaCL6cOLmZ7Cvcb3wFjkLUIdM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DuIkdRPITRs55I4SZmgomAHCIsDQmXRhW8+MOznkzSk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SsBk+Et1lTbU+QRPx+xyJ/jMkmfG+QCvQEpip2YYrzA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "crCIzOd8KhHvvUlX7M1v9bhvU4pLdTc+X2SuqoKU5Ek=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "YOWdCw4UrqnxkAaVjqmC4sKQDMVMHEpFGnlxpxdaU6E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "M3SShp81Ff8tQ632qKbv9MUcN6wjDaBReI0VXNu6Xh4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gzHlSPxpM0hT75kQvWFzGlOxKvDoiKQZOr19V6l2zXI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "s3JnppOGYw9SL2Q1kMAZs948v2F5PrpXjGei/HioDWs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cG6+3Gk/zEH68P/uuuwiAUVCuyJwa1LeV+t29FlPPAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dupdvR3AyJtM+g9NDKiaLVOtGca387JQp8w+V03m7Ig=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JqEQc5svj2jTvZ6LLA5ivE+kTb/0aRemSEmxk4G7Zrg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "szcXXXKnob+p3SoM4yED2R920LeJ7cVsclPMFTe4CeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "o1QoGVXmuBdHwHm7aCtGMlMVKrjFdYvJXpoq6uhIAZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Jfm5wPlqqLCJRGQIqRq2NGmpn7s0Vrih2H3YAOoI2YU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zMHLb8ARbsYo8Ld05bqnGFf1Usha6EGb8QKwdSAyps0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yQdtq9lh5pugL7/i0Bj/PuZUUBUIzf+7wj1rl5y736w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wGWVZdO7qIuyDg/BqDgqjgoQ02h5YYgwXQB1oCin2NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "by9HMLj6NTEpgztZ5HSN6GxImkXPcaFINYDzgZY33X8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tWo0vbasi7bXmn/MsOx13VC1IsWtpx/nYp0uj4iMzdA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tQQpndUYd5O87lOtrGjH3wl9VsOK0ray7RMasL90sBM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cQjXEDCMsOpKLLf+vlTgIHA+cbSJdzqhbSX9Wvh95aA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7yMpU48IxK9SzP2cx3VnTownGEwFmeFofuuFT97SuuY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kSOx1kz0CmBgzKQHZlo65ZUY1DIv9A99JRm+Us2y6Ew=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ubQpdPBe6/xvtr+AcXdfYLSvYCR4ot0tivehkCsupb4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xal+iCJ6FTefRQToyoNksc9NCZShyn04NDGi4IYrcoM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "d7jU4iOK50xHxlkSifcxlZFCM46TSgQzoYivxG3HNLY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tJvl2nsBLBVzL3pp6sKWCL4UXeh3q/roYBJjSb74ve0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OIUCaKRvIx9t1w6Hxlz1IcQTdPNCfdRNwnnTm10W+X0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A9tvzsiElotOUVIB4CqfQp9mAwqvTM35YkmAR170aHA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lI8gpK7hpb7c9x4RQugsxMnQay5LZJmwslZdvMx/dcE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dNCzh40U0XvdKnSDi3HRQOWQftEsDVqc4uUvsVFGoq8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "IP+iwEBWBwVVZIdpaMu8k5+soFCz+TZkYn3drKZ9grE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pnqyh6e0y5svHkJDShlN9CHV0WvMBE4QbtJpQw5ZCXc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "elEl42tbVDoRTLjAhZUFEtXiut4b3PVhg/1ZLZSQdtE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vHuu2FxwclMHqyE6JBYbTYgbEkB0dqb/JuaxsvfwsmY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xTf7NCe3Gf8QpE78HR5OknlLTKfs9J+RN9UZpH6fnso=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XiWSasRnJAulGR6+LCVD3mwRObXylqYWR9jvpywq12c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MZMxEQ5ikx0PG1YFIExv0UnTZogsvgeOEZTpzvBDn4w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yZMyMZBDrWbAhvnic7vvIYhmO9m5H2iuv0c8KNZrBzY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xxM14hTPY5j0vvcK2C7YAEjzdsfUTFHozHC0hEo1bxI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+01rqR1xVwkpGXcstbk1ItJqFVjH6Q8MGxEN3Cm9Y1A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xOpLV0Z2VTRJ3iWtnWZcsyjXubTIkYWo31cO+HV1o1k=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BWUOLqgLBqc5NwxVlSV5H3KFQPXbCp7mdo+jF+8cJqY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "fuQb1S6xZDGlrEbK+kI23aL53PP1PVNwqICnZNt9Yzg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfscnoibFttahLdPVC4Ee+47ewGFKpDSU7M6HX19bKE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rpSW2awybNVeKtat91VFxqbINoTfNhPfQAu+d73Xtf8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "9M/CP9ccOIIj2LLFmE0GFDO0Ban2wsNalEXfM6+h+1s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WrEMG49l1ye4MhXs5ZS9tz8P6h+hDvthIg/2wW9ne1Q=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ImNhbfeyfH8qIEeA5ic0s3dAQBdzzTBS+CPsNih9vZ0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dWP33YDSn04UKJN2ogh2Rui0iW/0q2y18OCDRVcfyoo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "lYv0isAtfGh6H9tdp3cp2eHU7q2J+uk7QrgcxtK3w7Y=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "VGMoamB/+7zTOYcY/pqJc96xlv2PdW4hwsIAEIslTDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yNeBWMF7BnD9wVwz2PgJsvWr77QiVvvWUvJF0+fqBug=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SfpvObJ+tJBXSvqeN7vlOfmhYign635lciYAJIjUtY8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dsen4NqjzVGjpjufiTMs3+gqeD09EbnuogPgxrJECwg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "pxCWVM3sn19NsFEpgHbgLa+PmYlhN3mMiP0Wk8kJhYw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q11KNvJszjYIB9n9HcC+N4uz11a3eRj1L3BH9scKMDQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "A1PmkgcEToWh1JiVWE6mI5jUu7poxWWuCUt/cgRUUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "qJo3Hu4PJeanL7XEaWXO/n3YsodhZyd+MJOOmB9Kpd8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "BkBKLO8URFscfRY9Bav/1+L9mLohDgNr/MkZtGiraIs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "rZq5WA3Hx3xthOyHAJXK//f8pE2qbz7YKu3TIMp9GFY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X07a/Lm80p5xd4RFs1dNmw+90tmPDPdGiAKVZkxd4zY=", - "subType": "00" - } - } - ] - } - - - { - "_id": 1, - "encryptedDoubleNoPrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "HI88j1zrIsFoijIXKybr9mYubNV5uVeODyLHFH4Ueco=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wXVD/HSbBljko0jJcaxJ1nrzs2+pchLQqYR3vywS8SU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "KhscCh+tt/pp8lxtKZQSPPUU94RvJYPKG/sjtzIa4Ws=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RISnuNrTTVNW5HnwCgQJ301pFw8DOcYrAMQIwVwjOkI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Ra5zukLh2boua0Bh74qA+mtIoixGXlsNsxiJqHtqdTI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "eqr0v+NNWXWszi9ni8qH58Q6gw5x737tJvH3lPaNHO4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "d42QupriWIwGrFAquXNFi0ehEuidIbHLFZtg1Sm2nN8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "2azRVxaaTIJKcgY2FU012gcyP8Y05cRDpfUaMnCBaQU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "3nlgkM4K/AAcHesRYYdEu24UGetHodVnVfHzw4yxZBM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "hqy91FNmAAac2zUaPO6eWFkx0/37rOWGrwXN+fzL0tU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "akX+fmscSDSF9pB5MPj56iaJPtohr0hfXNk/OPWsGv8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1ZvUb10Q7cN4cNLktd5yNjqgtawsYnkbeVBZV6WuY/I=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "otCwtuKiY4hCyXvYzXvo10OcnzZppebo38KsAlq49QM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Mty8EscckeT/dhMfrPFyDbLnmMOcYRUQ3mLK4KTu6V8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "tnvgLLkJINO7csREYu4dEVe1ICrBeu7OP+HdfoX3M2E=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kOefsHgEVhkJ17UuP7Dxogy6sAQbzf1SFPKCj6XRlrQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "F+JQ79xavpaHdJzdhvwyHbzdZJLNHAymc/+67La3gao=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "NCZ9zp5rDRceENuSgAfTLEyKg0YgmXAhK0B8WSj7+Pw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wL1CJ7cYR5slx8mHq++uMdjDfkt9037lQTUztEMF56M=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "txefkzTMITZE+XvvRFZ7QcgwDT/7m8jNmxRk4QBaoZI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jFunW3v1tSYMyZtQQD28eEy9qqDp4Kqo7gMN29N4bfQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QMO915KUiS3X3R1bU1YoafVM2s0NeHo3EjgTA9PnGwY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "nwdKJEXdilzvb7494vbuDJ+y6SrfJahza1dYIsHIWVI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vpWMX+T/VXXajFo0UbuYjtp0AEzBU0Y+lP+ih2EQ7mg=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1lmzG0J1DhKDRhhq5y5Buygu4G8eV2X0t7kUY90EohM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SiKqpXqO0trwhFvBWK274hMklpCgMhNs/JY84yyn/NE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7cPGPYCKPTay+ZR9Gx6oOueduOgaFrSuAXmNDpDHXdI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4THEYvAkjs2Fh7FIe5LC45P4i4N0L7ob67UOVbhp6Nk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "B+UGsChLLZR7iqnt8yq91OgmTgwiUKTJhFxY4NT0O6c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X1uYwBCsCg1H+PnKdwtBqXlt0zKEURi8bOM940GcPfk=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xYOgT5l7shlNXCwHlguovmDkcEnF8dXyYlTyYrgZ8GE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "vFMTZqV8bh1+gcKzTkXweMddJlgdUnwX0DWzUUaMok4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4HI0y9FrtleZxZ7M6INdNhLelrQ2Rv/+ykWCBl+tMC8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jpJ0bBE474OUkn1vUiLWumIBtYmwc7J5+LQU/nyeLQc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jQTPeXZvdxY/DjtPfYfKUArIDsf0E9MVFy2O26sv1ec=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "QLLto0ExR2ZYMGqlyaMZc/hXFFTlwmgtKbiVq/xJIeI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yBJNviU1nchbGbhx6InXCVRXa90sEepz1EwbYuKXu2U=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jpEf0vHxrPu9gTJutNXSi2g/2Mc4WXFEN7yHonZEb7A=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "E09kLFckMYwNuhggMxmPtwndyvIAx+Vl+b2CV6FP75s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "N+ue6/cLPb5NssmJCCeo18LlbKPz6r2z20AsnTKRvOo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "yVQNZP8hhsvNGyDph2QP2qTNdXZTiIEVineKg+Qf33o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cSC9uI+9c5S8X+0G7amVyug1p0ZlgBsbEDYYyezBevQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1NpZGjoQzuQtekj80Rifxe9HbE08W07dfwxaFHaVn84=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "5Ghuq/8l11Ug9Uf/RTwf9On3OxOwIXUcb9soiy4J7/w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0LWKaEty6ywxLFhDaAqulqfMnYc+tgPfH4apyEeKg80=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "OwSthmCBtt6NIAoAh7aCbj82Yr/+9t8U7WuBQhFT3AQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "iYiyg6/1isqbMdvFPIGucu3cNM4NAZNtJhHpGZ4eM+c=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "waBgs8jWuGJPIF5zCRh6OmIyfK5GCBQgTMfmKSR2wyY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "1Jdtbe2BKJXPU2G9ywOrlODZ/cNYEQlKzAW3aMe1Hy4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xaLEnNUS/2ySerBpb9dN/D31t+wYcKekwTfkwtni0Mc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "bIVBrOhOvr6cL55Tr24+B+CC9MiG7U6K54aAr2IXXuw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6Cdq5wroGu2TEFnekuT7LhOpd/K/+PcipIljcHU9QL4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "K5l64vI4S/pLviLW6Pl0U3iQkI3ge0xg4RAHcEsyKJo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "bzhuvZ0Ls22yIOX+Hz51eAHlSuDbWR/e0u4EhfdpHbc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Qv+fr6uD4o0bZRp69QJCFL6zvn3G82c7L+N1IFzj7H0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "XAmISMbD3aEyQT+BQEphCKFNa0F0GDKFuhM9cGceKoQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4VLCokntMfm1AogpUnYGvhV7nllWSo3mS3hVESMy+hA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "xiXNLj/CipEH63Vb5cidi8q9X47EF4f3HtJSOH7mfM8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "4XlCYfYBjI9XA5zOSgTiEBYcZsdwyXL+f5XtH2xUIOc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "k6DfQy7ZYJIkEly2B5hjOZznL4NcgMkllZjJLb7yq7w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ZzM6gwWesa3lxbZVZthpPFs2s3GV0RZREE2zOMhBRBo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "US+jeMeeOd7J0wR0efJtq2/18lcO8YFvhT4O3DeaonQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "b6iSxiI1FM9SzxuG1bHqGA1i4+3GOi0/SPW00XB4L7o=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kn3LsxAVkzIZKK9I6fi0Cctr0yjXOYgaQWMCoj4hLpM=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Aggregate.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Aggregate.json deleted file mode 100644 index e8a50ebeca..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Aggregate.json +++ /dev/null @@ -1,580 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoublePrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDouble": "0.0" - }, - "max": { - "$numberDouble": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range DoublePrecision. Aggregate.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDoublePrecision": { - "$gt": { - "$numberDouble": "0" - } - } - } - } - ] - }, - "result": [ - { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1" - } - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedDoublePrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoublePrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDouble": "0.0" - }, - "max": { - "$numberDouble": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedDoublePrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoublePrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDouble": "0.0" - }, - "max": { - "$numberDouble": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "default", - "pipeline": [ - { - "$match": { - "encryptedDoublePrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - } - } - ], - "cursor": {}, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoublePrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDouble": "0.0" - }, - "max": { - "$numberDouble": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "aggregate" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedDoublePrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "Dri0CXmL78L2DOgk9w0DwxHOMGMzih7m6l59vgy+WWo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "b7d8mRzD1kI1tdc7uNL+YAUonJ6pODLsRLkArfEKSkM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Xg8C1/A0KJaXOw4i+26Rv03/CydaaunOzXh0CIT+gn8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UoKUDw2wJYToUCcFaIs03YQSTksYR0MIOTJllwODqKc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "c/5cwAT0C5jber2xlJnWD3a5tVDy0nRtr5HG02hoFOY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wSUrRXavAGaajNeqC5mEUH1K67oYl5Wy9RNIzKjwLAM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6vrp4wWDtHEgHWR99I70WVDzevg1Fk/Pw5U8gUDa0OU=", - "subType": "00" - } - } - ] - }, - { - "_id": 1, - "encryptedDoublePrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "mVZb+Ra0EYjQ4Zrh9X//E2T8MRj7NMqm5GUJXhRrBEI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FA74j21GUEJb1DJBOpR9nVnjaDZnd8yAQNuaW9Qi26g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kJv//KVkbrobIBf+QeWC5jxn20mx/P0R1N6aCSMgKM8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zB+Whi9IUUGxfLEe+lGuIzLX4LFbIhaIAm5lRk65QTc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ybO1QU3CgvhO8JgRXH+HxKszWcpl5aGDYYVa75fHa1g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X3Y3eSAbbMg//JgiHHiFpYOpV61t8kkDexI+CQyitH4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SlNHXyqVFGDPrX/2ppwog6l4pwj3PKda2TkZbqgfSfA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "McjV8xwTF3xI7863DYOBdyvIv6UpzThl6v9vBRk05bI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MgwakFvPyBlwqFTbhWUF79URJQWFoJTGotlEVSPPUsQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DyBERpMSD5lEM5Nhpcn4WGgxgn/mkUVJp+PYSLX5jsE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I43iazc0xj1WVbYB/V+uTL/tughN1bBlxh1iypBnNsA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wjOBa/ATMuOywFmuPgC0GF/oeLqu0Z7eK5udzkTPbis=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gRQVwiR+m+0Vg8ZDXqrQQcVnTyobwCXNaA4BCJVXtMc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WUZ6huwx0ZbLb0R00uiC9FOJzsUocUN8qE5+YRenkvQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7s79aKEuPgQcS/YPOOVcYNZvHIo7FFsWtFCrnDKXefA=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Aggregate.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Aggregate.yml deleted file mode 100644 index 87475991a4..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Aggregate.yml +++ /dev/null @@ -1,313 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDoublePrecision', 'bsonType': 'double', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberDouble': '0.0'}, 'max': {'$numberDouble': '200.0'}, 'precision': {'$numberInt': '2'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range DoublePrecision. Aggregate." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDoublePrecision: { $numberDouble: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDoublePrecision: { $numberDouble: "1" } } - - name: aggregate - arguments: - pipeline: [{ $match: { "encryptedDoublePrecision": { $gt: {$numberDouble: "0" }} } }] - result: [*doc1] - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedDoublePrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedDoublePrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - aggregate: *collection_name - pipeline: [ - { - "$match": { - "encryptedDoublePrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - } - } - ] - cursor: {} - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: aggregate - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedDoublePrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "Dri0CXmL78L2DOgk9w0DwxHOMGMzih7m6l59vgy+WWo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "b7d8mRzD1kI1tdc7uNL+YAUonJ6pODLsRLkArfEKSkM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Xg8C1/A0KJaXOw4i+26Rv03/CydaaunOzXh0CIT+gn8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UoKUDw2wJYToUCcFaIs03YQSTksYR0MIOTJllwODqKc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "c/5cwAT0C5jber2xlJnWD3a5tVDy0nRtr5HG02hoFOY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wSUrRXavAGaajNeqC5mEUH1K67oYl5Wy9RNIzKjwLAM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6vrp4wWDtHEgHWR99I70WVDzevg1Fk/Pw5U8gUDa0OU=", - "subType": "00" - } - } - ] - } - - - { - "_id": 1, - "encryptedDoublePrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "mVZb+Ra0EYjQ4Zrh9X//E2T8MRj7NMqm5GUJXhRrBEI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FA74j21GUEJb1DJBOpR9nVnjaDZnd8yAQNuaW9Qi26g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kJv//KVkbrobIBf+QeWC5jxn20mx/P0R1N6aCSMgKM8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zB+Whi9IUUGxfLEe+lGuIzLX4LFbIhaIAm5lRk65QTc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ybO1QU3CgvhO8JgRXH+HxKszWcpl5aGDYYVa75fHa1g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X3Y3eSAbbMg//JgiHHiFpYOpV61t8kkDexI+CQyitH4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SlNHXyqVFGDPrX/2ppwog6l4pwj3PKda2TkZbqgfSfA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "McjV8xwTF3xI7863DYOBdyvIv6UpzThl6v9vBRk05bI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MgwakFvPyBlwqFTbhWUF79URJQWFoJTGotlEVSPPUsQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DyBERpMSD5lEM5Nhpcn4WGgxgn/mkUVJp+PYSLX5jsE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I43iazc0xj1WVbYB/V+uTL/tughN1bBlxh1iypBnNsA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wjOBa/ATMuOywFmuPgC0GF/oeLqu0Z7eK5udzkTPbis=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gRQVwiR+m+0Vg8ZDXqrQQcVnTyobwCXNaA4BCJVXtMc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WUZ6huwx0ZbLb0R00uiC9FOJzsUocUN8qE5+YRenkvQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7s79aKEuPgQcS/YPOOVcYNZvHIo7FFsWtFCrnDKXefA=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Correctness.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Correctness.json deleted file mode 100644 index 87d0e3dd8c..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Correctness.json +++ /dev/null @@ -1,1650 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoublePrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDouble": "0.0" - }, - "max": { - "$numberDouble": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "Find with $gt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDoublePrecision": { - "$gt": { - "$numberDouble": "0.0" - } - } - } - }, - "result": [ - { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - ] - } - ] - }, - { - "description": "Find with $gte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDoublePrecision": { - "$gte": { - "$numberDouble": "0.0" - } - } - }, - "sort": { - "_id": 1 - } - }, - "result": [ - { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - }, - { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - ] - } - ] - }, - { - "description": "Find with $gt with no results", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDoublePrecision": { - "$gt": { - "$numberDouble": "1.0" - } - } - } - }, - "result": [] - } - ] - }, - { - "description": "Find with $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDoublePrecision": { - "$lt": { - "$numberDouble": "1.0" - } - } - } - }, - "result": [ - { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - ] - } - ] - }, - { - "description": "Find with $lte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDoublePrecision": { - "$lte": { - "$numberDouble": "1.0" - } - } - }, - "sort": { - "_id": 1 - } - }, - "result": [ - { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - }, - { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - ] - } - ] - }, - { - "description": "Find with $lt below min", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDoublePrecision": { - "$lt": { - "$numberDouble": "0.0" - } - } - } - }, - "result": { - "errorContains": "must be greater than the range minimum" - } - } - ] - }, - { - "description": "Find with $gt above max", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDoublePrecision": { - "$gt": { - "$numberDouble": "200.0" - } - } - } - }, - "result": { - "errorContains": "must be less than the range max" - } - } - ] - }, - { - "description": "Find with $gt and $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDoublePrecision": { - "$gt": { - "$numberDouble": "0.0" - }, - "$lt": { - "$numberDouble": "2.0" - } - } - } - }, - "result": [ - { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - ] - } - ] - }, - { - "description": "Find with equality", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - }, - "result": [ - { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - ] - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - }, - "result": [ - { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - ] - } - ] - }, - { - "description": "Find with full range", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDoublePrecision": { - "$gte": { - "$numberDouble": "0.0" - }, - "$lte": { - "$numberDouble": "200.0" - } - } - }, - "sort": { - "_id": 1 - } - }, - "result": [ - { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - }, - { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - ] - } - ] - }, - { - "description": "Find with $in", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDoublePrecision": { - "$in": [ - { - "$numberDouble": "0.0" - } - ] - } - } - }, - "result": [ - { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - ] - } - ] - }, - { - "description": "Insert out of range", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "-1" - } - } - }, - "result": { - "errorContains": "value must be greater than or equal to the minimum value" - } - } - ] - }, - { - "description": "Insert min and max", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 200, - "encryptedDoublePrecision": { - "$numberDouble": "200.0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": {}, - "sort": { - "_id": 1 - } - }, - "result": [ - { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - }, - { - "_id": 200, - "encryptedDoublePrecision": { - "$numberDouble": "200.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $gte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDoublePrecision": { - "$gte": { - "$numberDouble": "0.0" - } - } - } - }, - { - "$sort": { - "_id": 1 - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - }, - { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $gt with no results", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDoublePrecision": { - "$gt": { - "$numberDouble": "1.0" - } - } - } - } - ] - }, - "result": [] - } - ] - }, - { - "description": "Aggregate with $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDoublePrecision": { - "$lt": { - "$numberDouble": "1.0" - } - } - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $lte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDoublePrecision": { - "$lte": { - "$numberDouble": "1.0" - } - } - } - }, - { - "$sort": { - "_id": 1 - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - }, - { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $lt below min", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDoublePrecision": { - "$lt": { - "$numberDouble": "0.0" - } - } - } - } - ] - }, - "result": { - "errorContains": "must be greater than the range minimum" - } - } - ] - }, - { - "description": "Aggregate with $gt above max", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDoublePrecision": { - "$gt": { - "$numberDouble": "200.0" - } - } - } - } - ] - }, - "result": { - "errorContains": "must be less than the range max" - } - } - ] - }, - { - "description": "Aggregate with $gt and $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDoublePrecision": { - "$gt": { - "$numberDouble": "0.0" - }, - "$lt": { - "$numberDouble": "2.0" - } - } - } - } - ] - }, - "result": [ - { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with equality", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - ] - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - } - ] - }, - "result": [ - { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with full range", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDoublePrecision": { - "$gte": { - "$numberDouble": "0.0" - }, - "$lte": { - "$numberDouble": "200.0" - } - } - } - }, - { - "$sort": { - "_id": 1 - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - }, - { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $in", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1.0" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedDoublePrecision": { - "$in": [ - { - "$numberDouble": "0.0" - } - ] - } - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0.0" - } - } - ] - } - ] - }, - { - "description": "Wrong type: Insert Int", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberInt": "0" - } - } - }, - "result": { - "errorContains": "cannot encrypt element" - } - } - ] - }, - { - "description": "Wrong type: Find Int", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "find", - "arguments": { - "filter": { - "encryptedDoublePrecision": { - "$gte": { - "$numberInt": "0" - } - } - }, - "sort": { - "_id": 1 - } - }, - "result": { - "errorContains": "field type is not supported" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Correctness.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Correctness.yml deleted file mode 100644 index 9c7a8d22f2..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Correctness.yml +++ /dev/null @@ -1,424 +0,0 @@ -# Test correctness results. -# Does not include command monitoring expectations or outcome assertions to make tests more readable. - -# Requires libmongocrypt 1.8.0. -runOn: - - minServerVersion: "8.0.0" - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDoublePrecision', 'bsonType': 'double', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberDouble': '0.0'}, 'max': {'$numberDouble': '200.0'}, 'precision': {'$numberInt': '2'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "Find with $gt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDoublePrecision: { $numberDouble: "0.0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDoublePrecision: { $numberDouble: "1.0" } } - - name: find - arguments: - filter: { encryptedDoublePrecision: { $gt: { $numberDouble: "0.0" } }} - result: [*doc1] - - - description: "Find with $gte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDoublePrecision: { $gte: { $numberDouble: "0.0" } }} - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: [*doc0, *doc1] - - - description: "Find with $gt with no results" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDoublePrecision: { $gt: { $numberDouble: "1.0" } }} - result: [] - - - description: "Find with $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDoublePrecision: { $lt: { $numberDouble: "1.0" } }} - result: [*doc0] - - - description: "Find with $lte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDoublePrecision: { $lte: { $numberDouble: "1.0" } }} - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: [*doc0, *doc1] - - - description: "Find with $lt below min" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDoublePrecision: { $lt: { $numberDouble: "0.0" } }} - result: - errorContains: must be greater than the range minimum - - - description: "Find with $gt above max" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDoublePrecision: { $gt: { $numberDouble: "200.0" } }} - result: - errorContains: must be less than the range max - - - description: "Find with $gt and $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDoublePrecision: { $gt: { $numberDouble: "0.0" }, $lt: { $numberDouble: "2.0"} }} - result: [*doc1] - - - description: "Find with equality" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDoublePrecision: { $numberDouble: "0.0" } } - result: [*doc0] - - name: find - arguments: - filter: { encryptedDoublePrecision: { $numberDouble: "1.0" } } - result: [*doc1] - - - description: "Find with full range" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDoublePrecision: { $gte: {$numberDouble: "0.0"}, $lte: {$numberDouble: "200.0"} } } - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: [*doc0, *doc1] - - - description: "Find with $in" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedDoublePrecision: { $in: [ {$numberDouble: "0.0"} ] } } - result: [*doc0] - - - description: "Insert out of range" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: { _id: 0, encryptedDoublePrecision: { $numberDouble: "-1" }} - result: - errorContains: value must be greater than or equal to the minimum value - - - description: "Insert min and max" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: *doc0 - - name: insertOne - arguments: - document: &doc200 { _id: 200, encryptedDoublePrecision: { $numberDouble: "200.0" }} - - name: find - arguments: - filter: {} - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: [*doc0, *doc200] - - - description: "Aggregate with $gte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDoublePrecision: { $gte: { $numberDouble: "0.0" } }} } - # sort so results from range queries are ordered. - - { $sort: { _id: 1 }} - result: [*doc0, *doc1] - - - description: "Aggregate with $gt with no results" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDoublePrecision: { $gt: { $numberDouble: "1.0" } }} } - result: [] - - - description: "Aggregate with $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDoublePrecision: { $lt: { $numberDouble: "1.0" } }} } - result: [*doc0] - - - description: "Aggregate with $lte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDoublePrecision: { $lte: { $numberDouble: "1.0" } }} } - # sort so results from range queries are ordered. - - { $sort: { _id: 1 }} - result: [*doc0, *doc1] - - - description: "Aggregate with $lt below min" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDoublePrecision: { $lt: { $numberDouble: "0.0" } }} } - result: - errorContains: must be greater than the range minimum - - - description: "Aggregate with $gt above max" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDoublePrecision: { $gt: { $numberDouble: "200.0" } }} } - result: - errorContains: must be less than the range max - - - description: "Aggregate with $gt and $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDoublePrecision: { $gt: { $numberDouble: "0.0" }, $lt: { $numberDouble: "2.0"} }} } - result: [*doc1] - - - description: "Aggregate with equality" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDoublePrecision: { $numberDouble: "0.0" } } } - result: [*doc0] - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDoublePrecision: { $numberDouble: "1.0" } } } - result: [*doc1] - - - description: "Aggregate with full range" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDoublePrecision: { $gte: {$numberDouble: "0.0"}, $lte: {$numberDouble: "200.0"} } } } - # sort so results from range queries are ordered. - - { $sort: { _id: 1 }} - result: [*doc0, *doc1] - - - description: "Aggregate with $in" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedDoublePrecision: { $in: [ {$numberDouble: "0.0"} ] } } } - result: [*doc0] - - - description: "Wrong type: Insert Int" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: { _id: 0, encryptedDoublePrecision: { $numberInt: "0" }} } - result: - # Expect an error from mongocryptd. - errorContains: "cannot encrypt element" - - - description: "Wrong type: Find Int" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: find - arguments: - filter: { encryptedDoublePrecision: { $gte: { $numberInt: "0" } }} - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: - # expect an error from libmongocrypt. - errorContains: "field type is not supported" \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Delete.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Delete.json deleted file mode 100644 index 8a0fecf786..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Delete.json +++ /dev/null @@ -1,474 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoublePrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDouble": "0.0" - }, - "max": { - "$numberDouble": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range DoublePrecision. Delete.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1" - } - } - } - }, - { - "name": "deleteOne", - "arguments": { - "filter": { - "encryptedDoublePrecision": { - "$gt": { - "$numberDouble": "0" - } - } - } - }, - "result": { - "deletedCount": 1 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedDoublePrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoublePrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDouble": "0.0" - }, - "max": { - "$numberDouble": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedDoublePrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoublePrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDouble": "0.0" - }, - "max": { - "$numberDouble": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "delete": "default", - "deletes": [ - { - "q": { - "encryptedDoublePrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - }, - "limit": 1 - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoublePrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDouble": "0.0" - }, - "max": { - "$numberDouble": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "delete" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedDoublePrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "Dri0CXmL78L2DOgk9w0DwxHOMGMzih7m6l59vgy+WWo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "b7d8mRzD1kI1tdc7uNL+YAUonJ6pODLsRLkArfEKSkM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Xg8C1/A0KJaXOw4i+26Rv03/CydaaunOzXh0CIT+gn8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UoKUDw2wJYToUCcFaIs03YQSTksYR0MIOTJllwODqKc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "c/5cwAT0C5jber2xlJnWD3a5tVDy0nRtr5HG02hoFOY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wSUrRXavAGaajNeqC5mEUH1K67oYl5Wy9RNIzKjwLAM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6vrp4wWDtHEgHWR99I70WVDzevg1Fk/Pw5U8gUDa0OU=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Delete.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Delete.yml deleted file mode 100644 index 09952c2f37..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Delete.yml +++ /dev/null @@ -1,218 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDoublePrecision', 'bsonType': 'double', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberDouble': '0.0'}, 'max': {'$numberDouble': '200.0'}, 'precision': {'$numberInt': '2'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range DoublePrecision. Delete." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDoublePrecision: { $numberDouble: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDoublePrecision: { $numberDouble: "1" } } - - name: deleteOne - arguments: - filter: { "encryptedDoublePrecision": { $gt: {$numberDouble: "0" }} } - result: - deletedCount: 1 - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedDoublePrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedDoublePrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - delete: *collection_name - deletes: [ - { - "q": { - "encryptedDoublePrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - }, - "limit": 1 - } - ] - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: delete - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedDoublePrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "Dri0CXmL78L2DOgk9w0DwxHOMGMzih7m6l59vgy+WWo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "b7d8mRzD1kI1tdc7uNL+YAUonJ6pODLsRLkArfEKSkM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Xg8C1/A0KJaXOw4i+26Rv03/CydaaunOzXh0CIT+gn8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UoKUDw2wJYToUCcFaIs03YQSTksYR0MIOTJllwODqKc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "c/5cwAT0C5jber2xlJnWD3a5tVDy0nRtr5HG02hoFOY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wSUrRXavAGaajNeqC5mEUH1K67oYl5Wy9RNIzKjwLAM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6vrp4wWDtHEgHWR99I70WVDzevg1Fk/Pw5U8gUDa0OU=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-FindOneAndUpdate.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-FindOneAndUpdate.json deleted file mode 100644 index ac77931d61..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-FindOneAndUpdate.json +++ /dev/null @@ -1,584 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoublePrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDouble": "0.0" - }, - "max": { - "$numberDouble": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range DoublePrecision. FindOneAndUpdate.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1" - } - } - } - }, - { - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "encryptedDoublePrecision": { - "$gt": { - "$numberDouble": "0" - } - } - }, - "update": { - "$set": { - "encryptedDoublePrecision": { - "$numberDouble": "2" - } - } - }, - "returnDocument": "Before" - }, - "result": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedDoublePrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoublePrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDouble": "0.0" - }, - "max": { - "$numberDouble": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedDoublePrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoublePrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDouble": "0.0" - }, - "max": { - "$numberDouble": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "findAndModify": "default", - "query": { - "encryptedDoublePrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - }, - "update": { - "$set": { - "encryptedDoublePrecision": { - "$$type": "binData" - } - } - }, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoublePrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDouble": "0.0" - }, - "max": { - "$numberDouble": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "findAndModify" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedDoublePrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "Dri0CXmL78L2DOgk9w0DwxHOMGMzih7m6l59vgy+WWo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "b7d8mRzD1kI1tdc7uNL+YAUonJ6pODLsRLkArfEKSkM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Xg8C1/A0KJaXOw4i+26Rv03/CydaaunOzXh0CIT+gn8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UoKUDw2wJYToUCcFaIs03YQSTksYR0MIOTJllwODqKc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "c/5cwAT0C5jber2xlJnWD3a5tVDy0nRtr5HG02hoFOY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wSUrRXavAGaajNeqC5mEUH1K67oYl5Wy9RNIzKjwLAM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6vrp4wWDtHEgHWR99I70WVDzevg1Fk/Pw5U8gUDa0OU=", - "subType": "00" - } - } - ] - }, - { - "_id": 1, - "encryptedDoublePrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "V6knyt7Zq2CG3++l75UtBx2m32iGAPjHiAe439Bf02w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "F08nMDWDZc+DbWM7XCEJNNCEYyinRmrvGP7EWhmp4is=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cXH4688amcDc8kZOJq4UP8cE3R58Zl7e+Qo/1jyspps=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uURBxvTp3FBCVkd+LPqyuY7d6rMW6SGIJQEPY/wtkZI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jG3hax1L3RBp9t38vUt53FsBxgr/+Si/vVISpAylYpE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kwtIW8MhH9Ky5xNjBx8gFA/SHh2YVphie7g5FGBzals=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FHflwFuEMu4xX0ZApHi+pdlBH+oevAtXckCUb5Wv0xU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0OKSXELxPP85SBVwDGf3LtMEQCJ8TTkFUl/+6jlkdb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "25j9sQXZCihCmHKvTHgaBsAVZFcGPn7JjHdrCGlwyyw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uEw0lpQtBppR3vqV9j9+NQRSBF1BzZukb8c9IhyWvxc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zVhZ7Q59O087ji49oMJvBIgeir2oqvUpnh4p53GcTow=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dowrzKs+qJhRMZyKDbhjXbuX43FbmUKOaw9I8YlOZDw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ep5B6cska6THLIF7Mn3tn3RvV9EiwLSt0eZM/CLRUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "URNp/YmmDh5wIZUfAzzgPyJeMNiVx9PMsz52DZRujGY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wlM4IAQhhKQEzoVqS8b1Ddd50GB95OFb9LnzOwyjCP4=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-FindOneAndUpdate.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-FindOneAndUpdate.yml deleted file mode 100644 index e276b54e46..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-FindOneAndUpdate.yml +++ /dev/null @@ -1,311 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDoublePrecision', 'bsonType': 'double', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberDouble': '0.0'}, 'max': {'$numberDouble': '200.0'}, 'precision': {'$numberInt': '2'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range DoublePrecision. FindOneAndUpdate." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDoublePrecision: { $numberDouble: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDoublePrecision: { $numberDouble: "1" } } - - name: findOneAndUpdate - arguments: - filter: { encryptedDoublePrecision: { $gt: {$numberDouble: "0"}} } - update: { "$set": { "encryptedDoublePrecision": {$numberDouble: "2"}}} - returnDocument: Before - result: *doc1 - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedDoublePrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedDoublePrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - findAndModify: *collection_name - query: { - "encryptedDoublePrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - } - update: { "$set": {"encryptedDoublePrecision": { $$type: "binData" }} } - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: findAndModify - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedDoublePrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "Dri0CXmL78L2DOgk9w0DwxHOMGMzih7m6l59vgy+WWo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "b7d8mRzD1kI1tdc7uNL+YAUonJ6pODLsRLkArfEKSkM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Xg8C1/A0KJaXOw4i+26Rv03/CydaaunOzXh0CIT+gn8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UoKUDw2wJYToUCcFaIs03YQSTksYR0MIOTJllwODqKc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "c/5cwAT0C5jber2xlJnWD3a5tVDy0nRtr5HG02hoFOY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wSUrRXavAGaajNeqC5mEUH1K67oYl5Wy9RNIzKjwLAM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6vrp4wWDtHEgHWR99I70WVDzevg1Fk/Pw5U8gUDa0OU=", - "subType": "00" - } - } - ] - } - - - { - "_id": 1, - "encryptedDoublePrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "V6knyt7Zq2CG3++l75UtBx2m32iGAPjHiAe439Bf02w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "F08nMDWDZc+DbWM7XCEJNNCEYyinRmrvGP7EWhmp4is=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cXH4688amcDc8kZOJq4UP8cE3R58Zl7e+Qo/1jyspps=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uURBxvTp3FBCVkd+LPqyuY7d6rMW6SGIJQEPY/wtkZI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jG3hax1L3RBp9t38vUt53FsBxgr/+Si/vVISpAylYpE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kwtIW8MhH9Ky5xNjBx8gFA/SHh2YVphie7g5FGBzals=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FHflwFuEMu4xX0ZApHi+pdlBH+oevAtXckCUb5Wv0xU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0OKSXELxPP85SBVwDGf3LtMEQCJ8TTkFUl/+6jlkdb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "25j9sQXZCihCmHKvTHgaBsAVZFcGPn7JjHdrCGlwyyw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uEw0lpQtBppR3vqV9j9+NQRSBF1BzZukb8c9IhyWvxc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zVhZ7Q59O087ji49oMJvBIgeir2oqvUpnh4p53GcTow=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dowrzKs+qJhRMZyKDbhjXbuX43FbmUKOaw9I8YlOZDw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ep5B6cska6THLIF7Mn3tn3RvV9EiwLSt0eZM/CLRUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "URNp/YmmDh5wIZUfAzzgPyJeMNiVx9PMsz52DZRujGY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wlM4IAQhhKQEzoVqS8b1Ddd50GB95OFb9LnzOwyjCP4=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-InsertFind.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-InsertFind.json deleted file mode 100644 index 5dcc09dca9..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-InsertFind.json +++ /dev/null @@ -1,571 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoublePrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDouble": "0.0" - }, - "max": { - "$numberDouble": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range DoublePrecision. Insert and Find.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedDoublePrecision": { - "$gt": { - "$numberDouble": "0" - } - } - } - }, - "result": [ - { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1" - } - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedDoublePrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoublePrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDouble": "0.0" - }, - "max": { - "$numberDouble": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedDoublePrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoublePrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDouble": "0.0" - }, - "max": { - "$numberDouble": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "encryptedDoublePrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - }, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoublePrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDouble": "0.0" - }, - "max": { - "$numberDouble": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedDoublePrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "Dri0CXmL78L2DOgk9w0DwxHOMGMzih7m6l59vgy+WWo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "b7d8mRzD1kI1tdc7uNL+YAUonJ6pODLsRLkArfEKSkM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Xg8C1/A0KJaXOw4i+26Rv03/CydaaunOzXh0CIT+gn8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UoKUDw2wJYToUCcFaIs03YQSTksYR0MIOTJllwODqKc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "c/5cwAT0C5jber2xlJnWD3a5tVDy0nRtr5HG02hoFOY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wSUrRXavAGaajNeqC5mEUH1K67oYl5Wy9RNIzKjwLAM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6vrp4wWDtHEgHWR99I70WVDzevg1Fk/Pw5U8gUDa0OU=", - "subType": "00" - } - } - ] - }, - { - "_id": 1, - "encryptedDoublePrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "mVZb+Ra0EYjQ4Zrh9X//E2T8MRj7NMqm5GUJXhRrBEI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FA74j21GUEJb1DJBOpR9nVnjaDZnd8yAQNuaW9Qi26g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kJv//KVkbrobIBf+QeWC5jxn20mx/P0R1N6aCSMgKM8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zB+Whi9IUUGxfLEe+lGuIzLX4LFbIhaIAm5lRk65QTc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ybO1QU3CgvhO8JgRXH+HxKszWcpl5aGDYYVa75fHa1g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X3Y3eSAbbMg//JgiHHiFpYOpV61t8kkDexI+CQyitH4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SlNHXyqVFGDPrX/2ppwog6l4pwj3PKda2TkZbqgfSfA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "McjV8xwTF3xI7863DYOBdyvIv6UpzThl6v9vBRk05bI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MgwakFvPyBlwqFTbhWUF79URJQWFoJTGotlEVSPPUsQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DyBERpMSD5lEM5Nhpcn4WGgxgn/mkUVJp+PYSLX5jsE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I43iazc0xj1WVbYB/V+uTL/tughN1bBlxh1iypBnNsA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wjOBa/ATMuOywFmuPgC0GF/oeLqu0Z7eK5udzkTPbis=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gRQVwiR+m+0Vg8ZDXqrQQcVnTyobwCXNaA4BCJVXtMc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WUZ6huwx0ZbLb0R00uiC9FOJzsUocUN8qE5+YRenkvQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7s79aKEuPgQcS/YPOOVcYNZvHIo7FFsWtFCrnDKXefA=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-InsertFind.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-InsertFind.yml deleted file mode 100644 index ed5225a65d..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-InsertFind.yml +++ /dev/null @@ -1,307 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDoublePrecision', 'bsonType': 'double', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberDouble': '0.0'}, 'max': {'$numberDouble': '200.0'}, 'precision': {'$numberInt': '2'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range DoublePrecision. Insert and Find." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDoublePrecision: { $numberDouble: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDoublePrecision: { $numberDouble: "1" } } - - name: find - arguments: - filter: { encryptedDoublePrecision: { $gt: { $numberDouble: "0" } } } - result: [*doc1] - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedDoublePrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedDoublePrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: - "encryptedDoublePrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedDoublePrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "Dri0CXmL78L2DOgk9w0DwxHOMGMzih7m6l59vgy+WWo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "b7d8mRzD1kI1tdc7uNL+YAUonJ6pODLsRLkArfEKSkM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Xg8C1/A0KJaXOw4i+26Rv03/CydaaunOzXh0CIT+gn8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UoKUDw2wJYToUCcFaIs03YQSTksYR0MIOTJllwODqKc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "c/5cwAT0C5jber2xlJnWD3a5tVDy0nRtr5HG02hoFOY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wSUrRXavAGaajNeqC5mEUH1K67oYl5Wy9RNIzKjwLAM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6vrp4wWDtHEgHWR99I70WVDzevg1Fk/Pw5U8gUDa0OU=", - "subType": "00" - } - } - ] - } - - - { - "_id": 1, - "encryptedDoublePrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "mVZb+Ra0EYjQ4Zrh9X//E2T8MRj7NMqm5GUJXhRrBEI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FA74j21GUEJb1DJBOpR9nVnjaDZnd8yAQNuaW9Qi26g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kJv//KVkbrobIBf+QeWC5jxn20mx/P0R1N6aCSMgKM8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zB+Whi9IUUGxfLEe+lGuIzLX4LFbIhaIAm5lRk65QTc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ybO1QU3CgvhO8JgRXH+HxKszWcpl5aGDYYVa75fHa1g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X3Y3eSAbbMg//JgiHHiFpYOpV61t8kkDexI+CQyitH4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SlNHXyqVFGDPrX/2ppwog6l4pwj3PKda2TkZbqgfSfA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "McjV8xwTF3xI7863DYOBdyvIv6UpzThl6v9vBRk05bI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "MgwakFvPyBlwqFTbhWUF79URJQWFoJTGotlEVSPPUsQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "DyBERpMSD5lEM5Nhpcn4WGgxgn/mkUVJp+PYSLX5jsE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "I43iazc0xj1WVbYB/V+uTL/tughN1bBlxh1iypBnNsA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wjOBa/ATMuOywFmuPgC0GF/oeLqu0Z7eK5udzkTPbis=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "gRQVwiR+m+0Vg8ZDXqrQQcVnTyobwCXNaA4BCJVXtMc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "WUZ6huwx0ZbLb0R00uiC9FOJzsUocUN8qE5+YRenkvQ=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "7s79aKEuPgQcS/YPOOVcYNZvHIo7FFsWtFCrnDKXefA=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Update.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Update.json deleted file mode 100644 index 483e3d52e6..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Update.json +++ /dev/null @@ -1,588 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoublePrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDouble": "0.0" - }, - "max": { - "$numberDouble": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range DoublePrecision. Update.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedDoublePrecision": { - "$numberDouble": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedDoublePrecision": { - "$numberDouble": "1" - } - } - } - }, - { - "name": "updateOne", - "arguments": { - "filter": { - "encryptedDoublePrecision": { - "$gt": { - "$numberDouble": "0" - } - } - }, - "update": { - "$set": { - "encryptedDoublePrecision": { - "$numberDouble": "2" - } - } - } - }, - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedDoublePrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoublePrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDouble": "0.0" - }, - "max": { - "$numberDouble": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedDoublePrecision": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoublePrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDouble": "0.0" - }, - "max": { - "$numberDouble": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command_name": "update", - "command": { - "update": "default", - "ordered": true, - "updates": [ - { - "q": { - "encryptedDoublePrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - }, - "u": { - "$set": { - "encryptedDoublePrecision": { - "$$type": "binData" - } - } - } - } - ], - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedDoublePrecision", - "bsonType": "double", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberDouble": "0.0" - }, - "max": { - "$numberDouble": "200.0" - }, - "precision": { - "$numberInt": "2" - } - } - } - ] - } - } - }, - "$db": "default" - } - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedDoublePrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "Dri0CXmL78L2DOgk9w0DwxHOMGMzih7m6l59vgy+WWo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "b7d8mRzD1kI1tdc7uNL+YAUonJ6pODLsRLkArfEKSkM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Xg8C1/A0KJaXOw4i+26Rv03/CydaaunOzXh0CIT+gn8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UoKUDw2wJYToUCcFaIs03YQSTksYR0MIOTJllwODqKc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "c/5cwAT0C5jber2xlJnWD3a5tVDy0nRtr5HG02hoFOY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wSUrRXavAGaajNeqC5mEUH1K67oYl5Wy9RNIzKjwLAM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6vrp4wWDtHEgHWR99I70WVDzevg1Fk/Pw5U8gUDa0OU=", - "subType": "00" - } - } - ] - }, - { - "_id": 1, - "encryptedDoublePrecision": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "V6knyt7Zq2CG3++l75UtBx2m32iGAPjHiAe439Bf02w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "F08nMDWDZc+DbWM7XCEJNNCEYyinRmrvGP7EWhmp4is=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cXH4688amcDc8kZOJq4UP8cE3R58Zl7e+Qo/1jyspps=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uURBxvTp3FBCVkd+LPqyuY7d6rMW6SGIJQEPY/wtkZI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jG3hax1L3RBp9t38vUt53FsBxgr/+Si/vVISpAylYpE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kwtIW8MhH9Ky5xNjBx8gFA/SHh2YVphie7g5FGBzals=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FHflwFuEMu4xX0ZApHi+pdlBH+oevAtXckCUb5Wv0xU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0OKSXELxPP85SBVwDGf3LtMEQCJ8TTkFUl/+6jlkdb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "25j9sQXZCihCmHKvTHgaBsAVZFcGPn7JjHdrCGlwyyw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uEw0lpQtBppR3vqV9j9+NQRSBF1BzZukb8c9IhyWvxc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zVhZ7Q59O087ji49oMJvBIgeir2oqvUpnh4p53GcTow=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dowrzKs+qJhRMZyKDbhjXbuX43FbmUKOaw9I8YlOZDw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ep5B6cska6THLIF7Mn3tn3RvV9EiwLSt0eZM/CLRUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "URNp/YmmDh5wIZUfAzzgPyJeMNiVx9PMsz52DZRujGY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wlM4IAQhhKQEzoVqS8b1Ddd50GB95OFb9LnzOwyjCP4=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Update.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Update.yml deleted file mode 100644 index 7ed6f16bf7..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-DoublePrecision-Update.yml +++ /dev/null @@ -1,326 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDoublePrecision', 'bsonType': 'double', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberDouble': '0.0'}, 'max': {'$numberDouble': '200.0'}, 'precision': {'$numberInt': '2'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range DoublePrecision. Update." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedDoublePrecision: { $numberDouble: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedDoublePrecision: { $numberDouble: "1" } } - - name: updateOne - arguments: - filter: { encryptedDoublePrecision: { $gt: { $numberDouble: "0" } } } - update: { "$set": { "encryptedDoublePrecision": { $numberDouble: "2" } }} - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedDoublePrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedDoublePrecision": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command_name: update - command: - - "update": "default" - "ordered": true - "updates": [ - { - "q": { - "encryptedDoublePrecision": { - "$gt": { - "$binary": { - "base64": "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", - "subType": "06" - } - } - } - }, - "u": { - "$set": { - "encryptedDoublePrecision": { $$type: "binData" } - } - } - } - ] - encryptionInformation: - type: 1 - schema: - "default.default": - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - "$db": "default" - - - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedDoublePrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "Dri0CXmL78L2DOgk9w0DwxHOMGMzih7m6l59vgy+WWo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "b7d8mRzD1kI1tdc7uNL+YAUonJ6pODLsRLkArfEKSkM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "Xg8C1/A0KJaXOw4i+26Rv03/CydaaunOzXh0CIT+gn8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "UoKUDw2wJYToUCcFaIs03YQSTksYR0MIOTJllwODqKc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "c/5cwAT0C5jber2xlJnWD3a5tVDy0nRtr5HG02hoFOY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wSUrRXavAGaajNeqC5mEUH1K67oYl5Wy9RNIzKjwLAM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6vrp4wWDtHEgHWR99I70WVDzevg1Fk/Pw5U8gUDa0OU=", - "subType": "00" - } - } - ] - } - - - { - "_id": 1, - "encryptedDoublePrecision": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "V6knyt7Zq2CG3++l75UtBx2m32iGAPjHiAe439Bf02w=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "F08nMDWDZc+DbWM7XCEJNNCEYyinRmrvGP7EWhmp4is=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cXH4688amcDc8kZOJq4UP8cE3R58Zl7e+Qo/1jyspps=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uURBxvTp3FBCVkd+LPqyuY7d6rMW6SGIJQEPY/wtkZI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jG3hax1L3RBp9t38vUt53FsBxgr/+Si/vVISpAylYpE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kwtIW8MhH9Ky5xNjBx8gFA/SHh2YVphie7g5FGBzals=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FHflwFuEMu4xX0ZApHi+pdlBH+oevAtXckCUb5Wv0xU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "0OKSXELxPP85SBVwDGf3LtMEQCJ8TTkFUl/+6jlkdb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "25j9sQXZCihCmHKvTHgaBsAVZFcGPn7JjHdrCGlwyyw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uEw0lpQtBppR3vqV9j9+NQRSBF1BzZukb8c9IhyWvxc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zVhZ7Q59O087ji49oMJvBIgeir2oqvUpnh4p53GcTow=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "dowrzKs+qJhRMZyKDbhjXbuX43FbmUKOaw9I8YlOZDw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ep5B6cska6THLIF7Mn3tn3RvV9EiwLSt0eZM/CLRUDc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "URNp/YmmDh5wIZUfAzzgPyJeMNiVx9PMsz52DZRujGY=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "wlM4IAQhhKQEzoVqS8b1Ddd50GB95OFb9LnzOwyjCP4=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Aggregate.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Aggregate.json deleted file mode 100644 index 6cd837c789..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Aggregate.json +++ /dev/null @@ -1,484 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range Int. Aggregate.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedInt": { - "$gt": { - "$numberInt": "0" - } - } - } - } - ] - }, - "result": [ - { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedInt": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedInt": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "default", - "pipeline": [ - { - "$match": { - "encryptedInt": { - "$gt": { - "$binary": { - "base64": "DW0FAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAAQbW4AAAAAABBteADIAAAAAA==", - "subType": "06" - } - } - } - } - } - ], - "cursor": {}, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - } - } - } - }, - "command_name": "aggregate" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedInt": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - }, - { - "_id": 1, - "encryptedInt": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "25j9sQXZCihCmHKvTHgaBsAVZFcGPn7JjHdrCGlwyyw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FA74j21GUEJb1DJBOpR9nVnjaDZnd8yAQNuaW9Qi26g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kJv//KVkbrobIBf+QeWC5jxn20mx/P0R1N6aCSMgKM8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zB+Whi9IUUGxfLEe+lGuIzLX4LFbIhaIAm5lRk65QTc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ybO1QU3CgvhO8JgRXH+HxKszWcpl5aGDYYVa75fHa1g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X3Y3eSAbbMg//JgiHHiFpYOpV61t8kkDexI+CQyitH4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SlNHXyqVFGDPrX/2ppwog6l4pwj3PKda2TkZbqgfSfA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "McjV8xwTF3xI7863DYOBdyvIv6UpzThl6v9vBRk05bI=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Aggregate.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Aggregate.yml deleted file mode 100644 index f677bdedf9..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Aggregate.yml +++ /dev/null @@ -1,229 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedInt', 'bsonType': 'int', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberInt': '0'}, 'max': {'$numberInt': '200'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range Int. Aggregate." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedInt: { $numberInt: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedInt: { $numberInt: "1" } } - - name: aggregate - arguments: - pipeline: [{ $match: { "encryptedInt": { $gt: {$numberInt: "0" }} } }] - result: [*doc1] - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedInt": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedInt": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - aggregate: *collection_name - pipeline: [ - { - "$match": { - "encryptedInt": { - "$gt": { - "$binary": { - "base64": "DW0FAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAAQbW4AAAAAABBteADIAAAAAA==", - "subType": "06" - } - } - } - } - } - ] - cursor: {} - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: aggregate - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedInt": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - } - - - { - "_id": 1, - "encryptedInt": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "25j9sQXZCihCmHKvTHgaBsAVZFcGPn7JjHdrCGlwyyw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FA74j21GUEJb1DJBOpR9nVnjaDZnd8yAQNuaW9Qi26g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kJv//KVkbrobIBf+QeWC5jxn20mx/P0R1N6aCSMgKM8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zB+Whi9IUUGxfLEe+lGuIzLX4LFbIhaIAm5lRk65QTc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ybO1QU3CgvhO8JgRXH+HxKszWcpl5aGDYYVa75fHa1g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X3Y3eSAbbMg//JgiHHiFpYOpV61t8kkDexI+CQyitH4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SlNHXyqVFGDPrX/2ppwog6l4pwj3PKda2TkZbqgfSfA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "McjV8xwTF3xI7863DYOBdyvIv6UpzThl6v9vBRk05bI=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Correctness.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Correctness.json deleted file mode 100644 index 9dc4e4e501..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Correctness.json +++ /dev/null @@ -1,1644 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "Find with $gt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedInt": { - "$gt": { - "$numberInt": "0" - } - } - } - }, - "result": [ - { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - ] - } - ] - }, - { - "description": "Find with $gte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedInt": { - "$gte": { - "$numberInt": "0" - } - } - }, - "sort": { - "_id": 1 - } - }, - "result": [ - { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - }, - { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - ] - } - ] - }, - { - "description": "Find with $gt with no results", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedInt": { - "$gt": { - "$numberInt": "1" - } - } - } - }, - "result": [] - } - ] - }, - { - "description": "Find with $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedInt": { - "$lt": { - "$numberInt": "1" - } - } - } - }, - "result": [ - { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - ] - } - ] - }, - { - "description": "Find with $lte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedInt": { - "$lte": { - "$numberInt": "1" - } - } - }, - "sort": { - "_id": 1 - } - }, - "result": [ - { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - }, - { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - ] - } - ] - }, - { - "description": "Find with $lt below min", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedInt": { - "$lt": { - "$numberInt": "0" - } - } - } - }, - "result": { - "errorContains": "must be greater than the range minimum" - } - } - ] - }, - { - "description": "Find with $gt above max", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedInt": { - "$gt": { - "$numberInt": "200" - } - } - } - }, - "result": { - "errorContains": "must be less than the range maximum" - } - } - ] - }, - { - "description": "Find with $gt and $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedInt": { - "$gt": { - "$numberInt": "0" - }, - "$lt": { - "$numberInt": "2" - } - } - } - }, - "result": [ - { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - ] - } - ] - }, - { - "description": "Find with equality", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedInt": { - "$numberInt": "0" - } - } - }, - "result": [ - { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - ] - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedInt": { - "$numberInt": "1" - } - } - }, - "result": [ - { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - ] - } - ] - }, - { - "description": "Find with full range", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedInt": { - "$gte": { - "$numberInt": "0" - }, - "$lte": { - "$numberInt": "200" - } - } - }, - "sort": { - "_id": 1 - } - }, - "result": [ - { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - }, - { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - ] - } - ] - }, - { - "description": "Find with $in", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedInt": { - "$in": [ - { - "$numberInt": "0" - } - ] - } - } - }, - "result": [ - { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - ] - } - ] - }, - { - "description": "Insert out of range", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "-1" - } - } - }, - "result": { - "errorContains": "value must be greater than or equal to the minimum value" - } - } - ] - }, - { - "description": "Insert min and max", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 200, - "encryptedInt": { - "$numberInt": "200" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": {}, - "sort": { - "_id": 1 - } - }, - "result": [ - { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - }, - { - "_id": 200, - "encryptedInt": { - "$numberInt": "200" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $gte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedInt": { - "$gte": { - "$numberInt": "0" - } - } - } - }, - { - "$sort": { - "_id": 1 - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - }, - { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $gt with no results", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedInt": { - "$gt": { - "$numberInt": "1" - } - } - } - } - ] - }, - "result": [] - } - ] - }, - { - "description": "Aggregate with $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedInt": { - "$lt": { - "$numberInt": "1" - } - } - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $lte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedInt": { - "$lte": { - "$numberInt": "1" - } - } - } - }, - { - "$sort": { - "_id": 1 - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - }, - { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $lt below min", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedInt": { - "$lt": { - "$numberInt": "0" - } - } - } - } - ] - }, - "result": { - "errorContains": "must be greater than the range minimum" - } - } - ] - }, - { - "description": "Aggregate with $gt above max", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedInt": { - "$gt": { - "$numberInt": "200" - } - } - } - } - ] - }, - "result": { - "errorContains": "must be less than the range maximum" - } - } - ] - }, - { - "description": "Aggregate with $gt and $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedInt": { - "$gt": { - "$numberInt": "0" - }, - "$lt": { - "$numberInt": "2" - } - } - } - } - ] - }, - "result": [ - { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - ] - } - ] - }, - { - "description": "Aggregate with equality", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedInt": { - "$numberInt": "0" - } - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - ] - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedInt": { - "$numberInt": "1" - } - } - } - ] - }, - "result": [ - { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - ] - } - ] - }, - { - "description": "Aggregate with full range", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedInt": { - "$gte": { - "$numberInt": "0" - }, - "$lte": { - "$numberInt": "200" - } - } - } - }, - { - "$sort": { - "_id": 1 - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - }, - { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $in", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedInt": { - "$in": [ - { - "$numberInt": "0" - } - ] - } - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - ] - } - ] - }, - { - "description": "Wrong type: Insert Double", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberDouble": "0" - } - } - }, - "result": { - "errorContains": "cannot encrypt element" - } - } - ] - }, - { - "description": "Wrong type: Find Double", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "find", - "arguments": { - "filter": { - "encryptedInt": { - "$gte": { - "$numberDouble": "0" - } - } - } - }, - "result": { - "errorContains": "field type is not supported" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Correctness.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Correctness.yml deleted file mode 100644 index 9cb1cb368f..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Correctness.yml +++ /dev/null @@ -1,423 +0,0 @@ -# Test correctness results. -# Does not include command monitoring expectations or outcome assertions to make tests more readable. - -# Requires libmongocrypt 1.8.0. -runOn: - - minServerVersion: "8.0.0" - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedInt', 'bsonType': 'int', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberInt': '0'}, 'max': {'$numberInt': '200'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "Find with $gt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedInt: { $numberInt: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedInt: { $numberInt: "1" } } - - name: find - arguments: - filter: { encryptedInt: { $gt: { $numberInt: "0" } }} - result: [*doc1] - - - description: "Find with $gte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedInt: { $gte: { $numberInt: "0" } }} - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: [*doc0, *doc1] - - - description: "Find with $gt with no results" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedInt: { $gt: { $numberInt: "1" } }} - result: [] - - - description: "Find with $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedInt: { $lt: { $numberInt: "1" } }} - result: [*doc0] - - - description: "Find with $lte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedInt: { $lte: { $numberInt: "1" } }} - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: [*doc0, *doc1] - - - description: "Find with $lt below min" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedInt: { $lt: { $numberInt: "0" } }} - result: - errorContains: must be greater than the range minimum - - - description: "Find with $gt above max" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedInt: { $gt: { $numberInt: "200" } }} - result: - errorContains: must be less than the range maximum - - - description: "Find with $gt and $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedInt: { $gt: { $numberInt: "0" }, $lt: { $numberInt: "2"} }} - result: [*doc1] - - - description: "Find with equality" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedInt: { $numberInt: "0" } } - result: [*doc0] - - name: find - arguments: - filter: { encryptedInt: { $numberInt: "1" } } - result: [*doc1] - - - description: "Find with full range" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedInt: { $gte: {$numberInt: "0"}, $lte: {$numberInt: "200"} } } - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: [*doc0, *doc1] - - - description: "Find with $in" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedInt: { $in: [ {$numberInt: "0"} ] } } - result: [*doc0] - - - description: "Insert out of range" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: { _id: 0, encryptedInt: { $numberInt: "-1" }} - result: - errorContains: value must be greater than or equal to the minimum value - - - description: "Insert min and max" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: *doc0 - - name: insertOne - arguments: - document: &doc200 { _id: 200, encryptedInt: { $numberInt: "200" }} - - name: find - arguments: - filter: {} - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: [*doc0, *doc200] - - - description: "Aggregate with $gte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedInt: { $gte: { $numberInt: "0" } }} } - # sort so results from range queries are ordered. - - { $sort: { _id: 1 }} - - result: [*doc0, *doc1] - - - description: "Aggregate with $gt with no results" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedInt: { $gt: { $numberInt: "1" } }} } - result: [] - - - description: "Aggregate with $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedInt: { $lt: { $numberInt: "1" } }} } - result: [*doc0] - - - description: "Aggregate with $lte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedInt: { $lte: { $numberInt: "1" } }} } - # sort so results from range queries are ordered. - - { $sort: { _id: 1 }} - result: [*doc0, *doc1] - - - description: "Aggregate with $lt below min" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedInt: { $lt: { $numberInt: "0" } }} } - result: - errorContains: must be greater than the range minimum - - - description: "Aggregate with $gt above max" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedInt: { $gt: { $numberInt: "200" } }} } - result: - errorContains: must be less than the range maximum - - - description: "Aggregate with $gt and $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedInt: { $gt: { $numberInt: "0" }, $lt: { $numberInt: "2"} }} } - result: [*doc1] - - - description: "Aggregate with equality" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedInt: { $numberInt: "0" } } } - result: [*doc0] - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedInt: { $numberInt: "1" } } } - result: [*doc1] - - - description: "Aggregate with full range" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedInt: { $gte: {$numberInt: "0"}, $lte: {$numberInt: "200"} } } } - # sort so results from range queries are ordered. - - { $sort: { _id: 1 }} - result: [*doc0, *doc1] - - - description: "Aggregate with $in" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedInt: { $in: [ {$numberInt: "0"} ] } } } - result: [*doc0] - - - description: "Wrong type: Insert Double" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: { _id: 0, encryptedInt: { $numberDouble: "0" }} } - result: - # Expect an error from mongocryptd. - errorContains: "cannot encrypt element" - - - description: "Wrong type: Find Double" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: find - arguments: - filter: { encryptedInt: { $gte: { $numberDouble: "0" } }} - result: - # expect an error from libmongocrypt. - errorContains: "field type is not supported" \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Delete.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Delete.json deleted file mode 100644 index b251db9157..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Delete.json +++ /dev/null @@ -1,420 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range Int. Delete.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "deleteOne", - "arguments": { - "filter": { - "encryptedInt": { - "$gt": { - "$numberInt": "0" - } - } - } - }, - "result": { - "deletedCount": 1 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedInt": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedInt": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "delete": "default", - "deletes": [ - { - "q": { - "encryptedInt": { - "$gt": { - "$binary": { - "base64": "DW0FAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAAQbW4AAAAAABBteADIAAAAAA==", - "subType": "06" - } - } - } - }, - "limit": 1 - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - } - } - } - }, - "command_name": "delete" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedInt": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Delete.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Delete.yml deleted file mode 100644 index 158358d884..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Delete.yml +++ /dev/null @@ -1,176 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedInt', 'bsonType': 'int', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberInt': '0'}, 'max': {'$numberInt': '200'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range Int. Delete." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedInt: { $numberInt: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedInt: { $numberInt: "1" } } - - name: deleteOne - arguments: - filter: { "encryptedInt": { $gt: {$numberInt: "0" }} } - result: - deletedCount: 1 - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedInt": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedInt": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - delete: *collection_name - deletes: [ - { - "q": { - "encryptedInt": { - "$gt": { - "$binary": { - "base64": "DW0FAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAAQbW4AAAAAABBteADIAAAAAA==", - "subType": "06" - } - } - } - }, - "limit": 1 - } - ] - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: delete - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedInt": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-FindOneAndUpdate.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-FindOneAndUpdate.json deleted file mode 100644 index 6e09b5ea2c..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-FindOneAndUpdate.json +++ /dev/null @@ -1,488 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range Int. FindOneAndUpdate.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "encryptedInt": { - "$gt": { - "$numberInt": "0" - } - } - }, - "update": { - "$set": { - "encryptedInt": { - "$numberInt": "2" - } - } - }, - "returnDocument": "Before" - }, - "result": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedInt": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedInt": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "findAndModify": "default", - "query": { - "encryptedInt": { - "$gt": { - "$binary": { - "base64": "DW0FAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAAQbW4AAAAAABBteADIAAAAAA==", - "subType": "06" - } - } - } - }, - "update": { - "$set": { - "encryptedInt": { - "$$type": "binData" - } - } - }, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - } - } - } - }, - "command_name": "findAndModify" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedInt": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - }, - { - "_id": 1, - "encryptedInt": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "hyDcE6QQjPrYJaIS/n7evEZFYcm31Tj89CpEYGF45cI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "F08nMDWDZc+DbWM7XCEJNNCEYyinRmrvGP7EWhmp4is=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cXH4688amcDc8kZOJq4UP8cE3R58Zl7e+Qo/1jyspps=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uURBxvTp3FBCVkd+LPqyuY7d6rMW6SGIJQEPY/wtkZI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jG3hax1L3RBp9t38vUt53FsBxgr/+Si/vVISpAylYpE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kwtIW8MhH9Ky5xNjBx8gFA/SHh2YVphie7g5FGBzals=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FHflwFuEMu4xX0ZApHi+pdlBH+oevAtXckCUb5Wv0xU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ty4cnzJdAlbQKnh7px3GEYjBnvO+jIOaKjoTRDtmh3M=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-FindOneAndUpdate.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-FindOneAndUpdate.yml deleted file mode 100644 index 6b7fe8f026..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-FindOneAndUpdate.yml +++ /dev/null @@ -1,227 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedInt', 'bsonType': 'int', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberInt': '0'}, 'max': {'$numberInt': '200'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range Int. FindOneAndUpdate." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedInt: { $numberInt: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedInt: { $numberInt: "1" } } - - name: findOneAndUpdate - arguments: - filter: { encryptedInt: { $gt: {$numberInt: "0"}} } - update: { "$set": { "encryptedInt": {$numberInt: "2"}}} - returnDocument: Before - result: *doc1 - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedInt": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedInt": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - findAndModify: *collection_name - query: { - "encryptedInt": { - "$gt": { - "$binary": { - "base64": "DW0FAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAAQbW4AAAAAABBteADIAAAAAA==", - "subType": "06" - } - } - } - } - update: { "$set": {"encryptedInt": { $$type: "binData" }} } - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: findAndModify - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedInt": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - } - - - { - "_id": 1, - "encryptedInt": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "hyDcE6QQjPrYJaIS/n7evEZFYcm31Tj89CpEYGF45cI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "F08nMDWDZc+DbWM7XCEJNNCEYyinRmrvGP7EWhmp4is=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cXH4688amcDc8kZOJq4UP8cE3R58Zl7e+Qo/1jyspps=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uURBxvTp3FBCVkd+LPqyuY7d6rMW6SGIJQEPY/wtkZI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jG3hax1L3RBp9t38vUt53FsBxgr/+Si/vVISpAylYpE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kwtIW8MhH9Ky5xNjBx8gFA/SHh2YVphie7g5FGBzals=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FHflwFuEMu4xX0ZApHi+pdlBH+oevAtXckCUb5Wv0xU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ty4cnzJdAlbQKnh7px3GEYjBnvO+jIOaKjoTRDtmh3M=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-InsertFind.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-InsertFind.json deleted file mode 100644 index cbab7e7699..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-InsertFind.json +++ /dev/null @@ -1,475 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range Int. Insert and Find.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedInt": { - "$gt": { - "$numberInt": "0" - } - } - } - }, - "result": [ - { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedInt": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedInt": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "encryptedInt": { - "$gt": { - "$binary": { - "base64": "DW0FAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAAQbW4AAAAAABBteADIAAAAAA==", - "subType": "06" - } - } - } - }, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - } - } - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedInt": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - }, - { - "_id": 1, - "encryptedInt": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "25j9sQXZCihCmHKvTHgaBsAVZFcGPn7JjHdrCGlwyyw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FA74j21GUEJb1DJBOpR9nVnjaDZnd8yAQNuaW9Qi26g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kJv//KVkbrobIBf+QeWC5jxn20mx/P0R1N6aCSMgKM8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zB+Whi9IUUGxfLEe+lGuIzLX4LFbIhaIAm5lRk65QTc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ybO1QU3CgvhO8JgRXH+HxKszWcpl5aGDYYVa75fHa1g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X3Y3eSAbbMg//JgiHHiFpYOpV61t8kkDexI+CQyitH4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SlNHXyqVFGDPrX/2ppwog6l4pwj3PKda2TkZbqgfSfA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "McjV8xwTF3xI7863DYOBdyvIv6UpzThl6v9vBRk05bI=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-InsertFind.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-InsertFind.yml deleted file mode 100644 index ecfc72634b..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-InsertFind.yml +++ /dev/null @@ -1,223 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedInt', 'bsonType': 'int', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberInt': '0'}, 'max': {'$numberInt': '200'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range Int. Insert and Find." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedInt: { $numberInt: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedInt: { $numberInt: "1" } } - - name: find - arguments: - filter: { encryptedInt: { $gt: { $numberInt: "0" } } } - result: [*doc1] - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedInt": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedInt": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: - "encryptedInt": { - "$gt": { - "$binary": { - "base64": "DW0FAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAAQbW4AAAAAABBteADIAAAAAA==", - "subType": "06" - } - } - } - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedInt": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - } - - - { - "_id": 1, - "encryptedInt": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "25j9sQXZCihCmHKvTHgaBsAVZFcGPn7JjHdrCGlwyyw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FA74j21GUEJb1DJBOpR9nVnjaDZnd8yAQNuaW9Qi26g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kJv//KVkbrobIBf+QeWC5jxn20mx/P0R1N6aCSMgKM8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zB+Whi9IUUGxfLEe+lGuIzLX4LFbIhaIAm5lRk65QTc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ybO1QU3CgvhO8JgRXH+HxKszWcpl5aGDYYVa75fHa1g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X3Y3eSAbbMg//JgiHHiFpYOpV61t8kkDexI+CQyitH4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SlNHXyqVFGDPrX/2ppwog6l4pwj3PKda2TkZbqgfSfA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "McjV8xwTF3xI7863DYOBdyvIv6UpzThl6v9vBRk05bI=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Update.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Update.json deleted file mode 100644 index cb6b223943..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Update.json +++ /dev/null @@ -1,492 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range Int. Update.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedInt": { - "$numberInt": "1" - } - } - } - }, - { - "name": "updateOne", - "arguments": { - "filter": { - "encryptedInt": { - "$gt": { - "$numberInt": "0" - } - } - }, - "update": { - "$set": { - "encryptedInt": { - "$numberInt": "2" - } - } - } - }, - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedInt": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedInt": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command_name": "update", - "command": { - "update": "default", - "ordered": true, - "updates": [ - { - "q": { - "encryptedInt": { - "$gt": { - "$binary": { - "base64": "DW0FAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAAQbW4AAAAAABBteADIAAAAAA==", - "subType": "06" - } - } - } - }, - "u": { - "$set": { - "encryptedInt": { - "$$type": "binData" - } - } - } - } - ], - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - } - } - }, - "$db": "default" - } - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedInt": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - }, - { - "_id": 1, - "encryptedInt": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "hyDcE6QQjPrYJaIS/n7evEZFYcm31Tj89CpEYGF45cI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "F08nMDWDZc+DbWM7XCEJNNCEYyinRmrvGP7EWhmp4is=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cXH4688amcDc8kZOJq4UP8cE3R58Zl7e+Qo/1jyspps=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uURBxvTp3FBCVkd+LPqyuY7d6rMW6SGIJQEPY/wtkZI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jG3hax1L3RBp9t38vUt53FsBxgr/+Si/vVISpAylYpE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kwtIW8MhH9Ky5xNjBx8gFA/SHh2YVphie7g5FGBzals=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FHflwFuEMu4xX0ZApHi+pdlBH+oevAtXckCUb5Wv0xU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ty4cnzJdAlbQKnh7px3GEYjBnvO+jIOaKjoTRDtmh3M=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Update.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Update.yml deleted file mode 100644 index 6b81bf563b..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Int-Update.yml +++ /dev/null @@ -1,242 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedInt', 'bsonType': 'int', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberInt': '0'}, 'max': {'$numberInt': '200'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range Int. Update." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedInt: { $numberInt: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedInt: { $numberInt: "1" } } - - name: updateOne - arguments: - filter: { encryptedInt: { $gt: { $numberInt: "0" } } } - update: { "$set": { "encryptedInt": { $numberInt: "2" } }} - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedInt": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedInt": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command_name: update - command: - - "update": "default" - "ordered": true - "updates": [ - { - "q": { - "encryptedInt": { - "$gt": { - "$binary": { - "base64": "DW0FAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAAQbW4AAAAAABBteADIAAAAAA==", - "subType": "06" - } - } - } - }, - "u": { - "$set": { - "encryptedInt": { $$type: "binData" } - } - } - } - ] - encryptionInformation: - type: 1 - schema: - "default.default": - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - "$db": "default" - - - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedInt": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - } - - - { - "_id": 1, - "encryptedInt": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "hyDcE6QQjPrYJaIS/n7evEZFYcm31Tj89CpEYGF45cI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "F08nMDWDZc+DbWM7XCEJNNCEYyinRmrvGP7EWhmp4is=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cXH4688amcDc8kZOJq4UP8cE3R58Zl7e+Qo/1jyspps=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uURBxvTp3FBCVkd+LPqyuY7d6rMW6SGIJQEPY/wtkZI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jG3hax1L3RBp9t38vUt53FsBxgr/+Si/vVISpAylYpE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kwtIW8MhH9Ky5xNjBx8gFA/SHh2YVphie7g5FGBzals=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FHflwFuEMu4xX0ZApHi+pdlBH+oevAtXckCUb5Wv0xU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ty4cnzJdAlbQKnh7px3GEYjBnvO+jIOaKjoTRDtmh3M=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Aggregate.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Aggregate.json deleted file mode 100644 index 5c4bf10101..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Aggregate.json +++ /dev/null @@ -1,484 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedLong", - "bsonType": "long", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberLong": "0" - }, - "max": { - "$numberLong": "200" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range Long. Aggregate.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedLong": { - "$gt": { - "$numberLong": "0" - } - } - } - } - ] - }, - "result": [ - { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedLong": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedLong", - "bsonType": "long", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberLong": "0" - }, - "max": { - "$numberLong": "200" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedLong": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedLong", - "bsonType": "long", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberLong": "0" - }, - "max": { - "$numberLong": "200" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "default", - "pipeline": [ - { - "$match": { - "encryptedLong": { - "$gt": { - "$binary": { - "base64": "DXUFAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAASbW4AAAAAAAAAAAASbXgAyAAAAAAAAAAA", - "subType": "06" - } - } - } - } - } - ], - "cursor": {}, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedLong", - "bsonType": "long", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberLong": "0" - }, - "max": { - "$numberLong": "200" - } - } - } - ] - } - } - } - }, - "command_name": "aggregate" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedLong": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - }, - { - "_id": 1, - "encryptedLong": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "25j9sQXZCihCmHKvTHgaBsAVZFcGPn7JjHdrCGlwyyw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FA74j21GUEJb1DJBOpR9nVnjaDZnd8yAQNuaW9Qi26g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kJv//KVkbrobIBf+QeWC5jxn20mx/P0R1N6aCSMgKM8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zB+Whi9IUUGxfLEe+lGuIzLX4LFbIhaIAm5lRk65QTc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ybO1QU3CgvhO8JgRXH+HxKszWcpl5aGDYYVa75fHa1g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X3Y3eSAbbMg//JgiHHiFpYOpV61t8kkDexI+CQyitH4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SlNHXyqVFGDPrX/2ppwog6l4pwj3PKda2TkZbqgfSfA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "McjV8xwTF3xI7863DYOBdyvIv6UpzThl6v9vBRk05bI=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Aggregate.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Aggregate.yml deleted file mode 100644 index 04b315bad1..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Aggregate.yml +++ /dev/null @@ -1,229 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedLong', 'bsonType': 'long', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberLong': '0'}, 'max': {'$numberLong': '200'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range Long. Aggregate." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedLong: { $numberLong: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedLong: { $numberLong: "1" } } - - name: aggregate - arguments: - pipeline: [{ $match: { "encryptedLong": { $gt: {$numberLong: "0" }} } }] - result: [*doc1] - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedLong": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedLong": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - aggregate: *collection_name - pipeline: [ - { - "$match": { - "encryptedLong": { - "$gt": { - "$binary": { - "base64": "DXUFAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAASbW4AAAAAAAAAAAASbXgAyAAAAAAAAAAA", - "subType": "06" - } - } - } - } - } - ] - cursor: {} - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: aggregate - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedLong": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - } - - - { - "_id": 1, - "encryptedLong": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "25j9sQXZCihCmHKvTHgaBsAVZFcGPn7JjHdrCGlwyyw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FA74j21GUEJb1DJBOpR9nVnjaDZnd8yAQNuaW9Qi26g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kJv//KVkbrobIBf+QeWC5jxn20mx/P0R1N6aCSMgKM8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zB+Whi9IUUGxfLEe+lGuIzLX4LFbIhaIAm5lRk65QTc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ybO1QU3CgvhO8JgRXH+HxKszWcpl5aGDYYVa75fHa1g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X3Y3eSAbbMg//JgiHHiFpYOpV61t8kkDexI+CQyitH4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SlNHXyqVFGDPrX/2ppwog6l4pwj3PKda2TkZbqgfSfA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "McjV8xwTF3xI7863DYOBdyvIv6UpzThl6v9vBRk05bI=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Correctness.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Correctness.json deleted file mode 100644 index d81e0933f8..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Correctness.json +++ /dev/null @@ -1,1644 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedLong", - "bsonType": "long", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberLong": "0" - }, - "max": { - "$numberLong": "200" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "Find with $gt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedLong": { - "$gt": { - "$numberLong": "0" - } - } - } - }, - "result": [ - { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - ] - } - ] - }, - { - "description": "Find with $gte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedLong": { - "$gte": { - "$numberLong": "0" - } - } - }, - "sort": { - "_id": 1 - } - }, - "result": [ - { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - }, - { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - ] - } - ] - }, - { - "description": "Find with $gt with no results", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedLong": { - "$gt": { - "$numberLong": "1" - } - } - } - }, - "result": [] - } - ] - }, - { - "description": "Find with $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedLong": { - "$lt": { - "$numberLong": "1" - } - } - } - }, - "result": [ - { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - ] - } - ] - }, - { - "description": "Find with $lte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedLong": { - "$lte": { - "$numberLong": "1" - } - } - }, - "sort": { - "_id": 1 - } - }, - "result": [ - { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - }, - { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - ] - } - ] - }, - { - "description": "Find with $lt below min", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedLong": { - "$lt": { - "$numberLong": "0" - } - } - } - }, - "result": { - "errorContains": "must be greater than the range minimum" - } - } - ] - }, - { - "description": "Find with $gt above max", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedLong": { - "$gt": { - "$numberLong": "200" - } - } - } - }, - "result": { - "errorContains": "must be less than the range maximum" - } - } - ] - }, - { - "description": "Find with $gt and $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedLong": { - "$gt": { - "$numberLong": "0" - }, - "$lt": { - "$numberLong": "2" - } - } - } - }, - "result": [ - { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - ] - } - ] - }, - { - "description": "Find with equality", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedLong": { - "$numberLong": "0" - } - } - }, - "result": [ - { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - ] - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedLong": { - "$numberLong": "1" - } - } - }, - "result": [ - { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - ] - } - ] - }, - { - "description": "Find with full range", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedLong": { - "$gte": { - "$numberLong": "0" - }, - "$lte": { - "$numberLong": "200" - } - } - }, - "sort": { - "_id": 1 - } - }, - "result": [ - { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - }, - { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - ] - } - ] - }, - { - "description": "Find with $in", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedLong": { - "$in": [ - { - "$numberLong": "0" - } - ] - } - } - }, - "result": [ - { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - ] - } - ] - }, - { - "description": "Insert out of range", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "-1" - } - } - }, - "result": { - "errorContains": "value must be greater than or equal to the minimum value" - } - } - ] - }, - { - "description": "Insert min and max", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 200, - "encryptedLong": { - "$numberLong": "200" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": {}, - "sort": { - "_id": 1 - } - }, - "result": [ - { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - }, - { - "_id": 200, - "encryptedLong": { - "$numberLong": "200" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $gte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedLong": { - "$gte": { - "$numberLong": "0" - } - } - } - }, - { - "$sort": { - "_id": 1 - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - }, - { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $gt with no results", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedLong": { - "$gt": { - "$numberLong": "1" - } - } - } - } - ] - }, - "result": [] - } - ] - }, - { - "description": "Aggregate with $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedLong": { - "$lt": { - "$numberLong": "1" - } - } - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $lte", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedLong": { - "$lte": { - "$numberLong": "1" - } - } - } - }, - { - "$sort": { - "_id": 1 - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - }, - { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $lt below min", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedLong": { - "$lt": { - "$numberLong": "0" - } - } - } - } - ] - }, - "result": { - "errorContains": "must be greater than the range minimum" - } - } - ] - }, - { - "description": "Aggregate with $gt above max", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedLong": { - "$gt": { - "$numberLong": "200" - } - } - } - } - ] - }, - "result": { - "errorContains": "must be less than the range maximum" - } - } - ] - }, - { - "description": "Aggregate with $gt and $lt", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedLong": { - "$gt": { - "$numberLong": "0" - }, - "$lt": { - "$numberLong": "2" - } - } - } - } - ] - }, - "result": [ - { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - ] - } - ] - }, - { - "description": "Aggregate with equality", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedLong": { - "$numberLong": "0" - } - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - ] - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedLong": { - "$numberLong": "1" - } - } - } - ] - }, - "result": [ - { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - ] - } - ] - }, - { - "description": "Aggregate with full range", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedLong": { - "$gte": { - "$numberLong": "0" - }, - "$lte": { - "$numberLong": "200" - } - } - } - }, - { - "$sort": { - "_id": 1 - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - }, - { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - ] - } - ] - }, - { - "description": "Aggregate with $in", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "encryptedLong": { - "$in": [ - { - "$numberLong": "0" - } - ] - } - } - } - ] - }, - "result": [ - { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - ] - } - ] - }, - { - "description": "Wrong type: Insert Double", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberDouble": "0" - } - } - }, - "result": { - "errorContains": "cannot encrypt element" - } - } - ] - }, - { - "description": "Wrong type: Find Double", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "find", - "arguments": { - "filter": { - "encryptedLong": { - "$gte": { - "$numberDouble": "0" - } - } - } - }, - "result": { - "errorContains": "field type is not supported" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Correctness.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Correctness.yml deleted file mode 100644 index 97b7db2b71..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Correctness.yml +++ /dev/null @@ -1,422 +0,0 @@ -# Test correctness results. -# Does not include command monitoring expectations or outcome assertions to make tests more readable. - -# Requires libmongocrypt 1.8.0. -runOn: - - minServerVersion: "8.0.0" - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedLong', 'bsonType': 'long', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberLong': '0'}, 'max': {'$numberLong': '200'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "Find with $gt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedLong: { $numberLong: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedLong: { $numberLong: "1" } } - - name: find - arguments: - filter: { encryptedLong: { $gt: { $numberLong: "0" } }} - result: [*doc1] - - - description: "Find with $gte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedLong: { $gte: { $numberLong: "0" } }} - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: [*doc0, *doc1] - - - description: "Find with $gt with no results" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedLong: { $gt: { $numberLong: "1" } }} - result: [] - - - description: "Find with $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedLong: { $lt: { $numberLong: "1" } }} - result: [*doc0] - - - description: "Find with $lte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedLong: { $lte: { $numberLong: "1" } }} - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: [*doc0, *doc1] - - - description: "Find with $lt below min" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedLong: { $lt: { $numberLong: "0" } }} - result: - errorContains: must be greater than the range minimum - - - description: "Find with $gt above max" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedLong: { $gt: { $numberLong: "200" } }} - result: - errorContains: must be less than the range maximum - - - description: "Find with $gt and $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedLong: { $gt: { $numberLong: "0" }, $lt: { $numberLong: "2"} }} - result: [*doc1] - - - description: "Find with equality" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedLong: { $numberLong: "0" } } - result: [*doc0] - - name: find - arguments: - filter: { encryptedLong: { $numberLong: "1" } } - result: [*doc1] - - - description: "Find with full range" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedLong: { $gte: {$numberLong: "0"}, $lte: {$numberLong: "200"} } } - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: [*doc0, *doc1] - - - description: "Find with $in" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: find - arguments: - filter: { encryptedLong: { $in: [ {$numberLong: "0"} ] } } - result: [*doc0] - - - description: "Insert out of range" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: { _id: 0, encryptedLong: { $numberLong: "-1" }} - result: - errorContains: value must be greater than or equal to the minimum value - - - description: "Insert min and max" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: *doc0 - - name: insertOne - arguments: - document: &doc200 { _id: 200, encryptedLong: { $numberLong: "200" }} - - name: find - arguments: - filter: {} - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: [*doc0, *doc200] - - - description: "Aggregate with $gte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedLong: { $gte: { $numberLong: "0" } }} } - # sort so results from range queries are ordered. - - { $sort: { _id: 1 }} - result: [*doc0, *doc1] - - - description: "Aggregate with $gt with no results" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedLong: { $gt: { $numberLong: "1" } }} } - result: [] - - - description: "Aggregate with $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedLong: { $lt: { $numberLong: "1" } }} } - result: [*doc0] - - - description: "Aggregate with $lte" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedLong: { $lte: { $numberLong: "1" } }} } - # sort so results from range queries are ordered. - - { $sort: { _id: 1 }} - result: [*doc0, *doc1] - - - description: "Aggregate with $lt below min" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedLong: { $lt: { $numberLong: "0" } }} } - result: - errorContains: must be greater than the range minimum - - - description: "Aggregate with $gt above max" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedLong: { $gt: { $numberLong: "200" } }} } - result: - errorContains: must be less than the range maximum - - - description: "Aggregate with $gt and $lt" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedLong: { $gt: { $numberLong: "0" }, $lt: { $numberLong: "2"} }} } - result: [*doc1] - - - description: "Aggregate with equality" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedLong: { $numberLong: "0" } } } - result: [*doc0] - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedLong: { $numberLong: "1" } } } - result: [*doc1] - - - description: "Aggregate with full range" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedLong: { $gte: {$numberLong: "0"}, $lte: {$numberLong: "200"} } } } - # sort so results from range queries are ordered. - - { $sort: { _id: 1 }} - result: [*doc0, *doc1] - - - description: "Aggregate with $in" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: *doc0 } - - name: insertOne - arguments: { document: *doc1 } - - name: aggregate - arguments: - pipeline: - - { $match: { encryptedLong: { $in: [ {$numberLong: "0"} ] } } } - result: [*doc0] - - - description: "Wrong type: Insert Double" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: { _id: 0, encryptedLong: { $numberDouble: "0" }} } - result: - # Expect an error from mongocryptd. - errorContains: "cannot encrypt element" - - - description: "Wrong type: Find Double" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: find - arguments: - filter: { encryptedLong: { $gte: { $numberDouble: "0" } }} - result: - # expect an error from libmongocrypt. - errorContains: "field type is not supported" \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Delete.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Delete.json deleted file mode 100644 index faf0c401b7..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Delete.json +++ /dev/null @@ -1,420 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedLong", - "bsonType": "long", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberLong": "0" - }, - "max": { - "$numberLong": "200" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range Long. Delete.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "deleteOne", - "arguments": { - "filter": { - "encryptedLong": { - "$gt": { - "$numberLong": "0" - } - } - } - }, - "result": { - "deletedCount": 1 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedLong": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedLong", - "bsonType": "long", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberLong": "0" - }, - "max": { - "$numberLong": "200" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedLong": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedLong", - "bsonType": "long", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberLong": "0" - }, - "max": { - "$numberLong": "200" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "delete": "default", - "deletes": [ - { - "q": { - "encryptedLong": { - "$gt": { - "$binary": { - "base64": "DXUFAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAASbW4AAAAAAAAAAAASbXgAyAAAAAAAAAAA", - "subType": "06" - } - } - } - }, - "limit": 1 - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedLong", - "bsonType": "long", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberLong": "0" - }, - "max": { - "$numberLong": "200" - } - } - } - ] - } - } - } - }, - "command_name": "delete" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedLong": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Delete.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Delete.yml deleted file mode 100644 index 9bbbf71ae2..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Delete.yml +++ /dev/null @@ -1,176 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedLong', 'bsonType': 'long', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberLong': '0'}, 'max': {'$numberLong': '200'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range Long. Delete." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedLong: { $numberLong: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedLong: { $numberLong: "1" } } - - name: deleteOne - arguments: - filter: { "encryptedLong": { $gt: {$numberLong: "0" }} } - result: - deletedCount: 1 - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedLong": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedLong": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - delete: *collection_name - deletes: [ - { - "q": { - "encryptedLong": { - "$gt": { - "$binary": { - "base64": "DXUFAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAASbW4AAAAAAAAAAAASbXgAyAAAAAAAAAAA", - "subType": "06" - } - } - } - }, - "limit": 1 - } - ] - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: delete - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedLong": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-FindOneAndUpdate.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-FindOneAndUpdate.json deleted file mode 100644 index b233b40b54..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-FindOneAndUpdate.json +++ /dev/null @@ -1,488 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedLong", - "bsonType": "long", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberLong": "0" - }, - "max": { - "$numberLong": "200" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range Long. FindOneAndUpdate.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "encryptedLong": { - "$gt": { - "$numberLong": "0" - } - } - }, - "update": { - "$set": { - "encryptedLong": { - "$numberLong": "2" - } - } - }, - "returnDocument": "Before" - }, - "result": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedLong": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedLong", - "bsonType": "long", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberLong": "0" - }, - "max": { - "$numberLong": "200" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedLong": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedLong", - "bsonType": "long", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberLong": "0" - }, - "max": { - "$numberLong": "200" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "findAndModify": "default", - "query": { - "encryptedLong": { - "$gt": { - "$binary": { - "base64": "DXUFAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAASbW4AAAAAAAAAAAASbXgAyAAAAAAAAAAA", - "subType": "06" - } - } - } - }, - "update": { - "$set": { - "encryptedLong": { - "$$type": "binData" - } - } - }, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedLong", - "bsonType": "long", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberLong": "0" - }, - "max": { - "$numberLong": "200" - } - } - } - ] - } - } - } - }, - "command_name": "findAndModify" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedLong": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - }, - { - "_id": 1, - "encryptedLong": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "hyDcE6QQjPrYJaIS/n7evEZFYcm31Tj89CpEYGF45cI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "F08nMDWDZc+DbWM7XCEJNNCEYyinRmrvGP7EWhmp4is=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cXH4688amcDc8kZOJq4UP8cE3R58Zl7e+Qo/1jyspps=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uURBxvTp3FBCVkd+LPqyuY7d6rMW6SGIJQEPY/wtkZI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jG3hax1L3RBp9t38vUt53FsBxgr/+Si/vVISpAylYpE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kwtIW8MhH9Ky5xNjBx8gFA/SHh2YVphie7g5FGBzals=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FHflwFuEMu4xX0ZApHi+pdlBH+oevAtXckCUb5Wv0xU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ty4cnzJdAlbQKnh7px3GEYjBnvO+jIOaKjoTRDtmh3M=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-FindOneAndUpdate.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-FindOneAndUpdate.yml deleted file mode 100644 index 8f74e442f1..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-FindOneAndUpdate.yml +++ /dev/null @@ -1,227 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedLong', 'bsonType': 'long', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberLong': '0'}, 'max': {'$numberLong': '200'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range Long. FindOneAndUpdate." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedLong: { $numberLong: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedLong: { $numberLong: "1" } } - - name: findOneAndUpdate - arguments: - filter: { encryptedLong: { $gt: {$numberLong: "0"}} } - update: { "$set": { "encryptedLong": {$numberLong: "2"}}} - returnDocument: Before - result: *doc1 - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedLong": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedLong": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - findAndModify: *collection_name - query: { - "encryptedLong": { - "$gt": { - "$binary": { - "base64": "DXUFAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAASbW4AAAAAAAAAAAASbXgAyAAAAAAAAAAA", - "subType": "06" - } - } - } - } - update: { "$set": {"encryptedLong": { $$type: "binData" }} } - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: findAndModify - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedLong": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - } - - - { - "_id": 1, - "encryptedLong": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "hyDcE6QQjPrYJaIS/n7evEZFYcm31Tj89CpEYGF45cI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "F08nMDWDZc+DbWM7XCEJNNCEYyinRmrvGP7EWhmp4is=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cXH4688amcDc8kZOJq4UP8cE3R58Zl7e+Qo/1jyspps=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uURBxvTp3FBCVkd+LPqyuY7d6rMW6SGIJQEPY/wtkZI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jG3hax1L3RBp9t38vUt53FsBxgr/+Si/vVISpAylYpE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kwtIW8MhH9Ky5xNjBx8gFA/SHh2YVphie7g5FGBzals=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FHflwFuEMu4xX0ZApHi+pdlBH+oevAtXckCUb5Wv0xU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ty4cnzJdAlbQKnh7px3GEYjBnvO+jIOaKjoTRDtmh3M=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-InsertFind.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-InsertFind.json deleted file mode 100644 index 1b787d4cb6..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-InsertFind.json +++ /dev/null @@ -1,475 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedLong", - "bsonType": "long", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberLong": "0" - }, - "max": { - "$numberLong": "200" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range Long. Insert and Find.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedLong": { - "$gt": { - "$numberLong": "0" - } - } - } - }, - "result": [ - { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedLong": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedLong", - "bsonType": "long", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberLong": "0" - }, - "max": { - "$numberLong": "200" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedLong": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedLong", - "bsonType": "long", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberLong": "0" - }, - "max": { - "$numberLong": "200" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "encryptedLong": { - "$gt": { - "$binary": { - "base64": "DXUFAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAASbW4AAAAAAAAAAAASbXgAyAAAAAAAAAAA", - "subType": "06" - } - } - } - }, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedLong", - "bsonType": "long", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberLong": "0" - }, - "max": { - "$numberLong": "200" - } - } - } - ] - } - } - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedLong": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - }, - { - "_id": 1, - "encryptedLong": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "25j9sQXZCihCmHKvTHgaBsAVZFcGPn7JjHdrCGlwyyw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FA74j21GUEJb1DJBOpR9nVnjaDZnd8yAQNuaW9Qi26g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kJv//KVkbrobIBf+QeWC5jxn20mx/P0R1N6aCSMgKM8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zB+Whi9IUUGxfLEe+lGuIzLX4LFbIhaIAm5lRk65QTc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ybO1QU3CgvhO8JgRXH+HxKszWcpl5aGDYYVa75fHa1g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X3Y3eSAbbMg//JgiHHiFpYOpV61t8kkDexI+CQyitH4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SlNHXyqVFGDPrX/2ppwog6l4pwj3PKda2TkZbqgfSfA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "McjV8xwTF3xI7863DYOBdyvIv6UpzThl6v9vBRk05bI=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-InsertFind.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-InsertFind.yml deleted file mode 100644 index 595807d5a4..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-InsertFind.yml +++ /dev/null @@ -1,223 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedLong', 'bsonType': 'long', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberLong': '0'}, 'max': {'$numberLong': '200'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range Long. Insert and Find." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedLong: { $numberLong: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedLong: { $numberLong: "1" } } - - name: find - arguments: - filter: { encryptedLong: { $gt: { $numberLong: "0" } } } - result: [*doc1] - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedLong": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedLong": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: - "encryptedLong": { - "$gt": { - "$binary": { - "base64": "DXUFAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAASbW4AAAAAAAAAAAASbXgAyAAAAAAAAAAA", - "subType": "06" - } - } - } - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedLong": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - } - - - { - "_id": 1, - "encryptedLong": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "25j9sQXZCihCmHKvTHgaBsAVZFcGPn7JjHdrCGlwyyw=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FA74j21GUEJb1DJBOpR9nVnjaDZnd8yAQNuaW9Qi26g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kJv//KVkbrobIBf+QeWC5jxn20mx/P0R1N6aCSMgKM8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "zB+Whi9IUUGxfLEe+lGuIzLX4LFbIhaIAm5lRk65QTc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ybO1QU3CgvhO8JgRXH+HxKszWcpl5aGDYYVa75fHa1g=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "X3Y3eSAbbMg//JgiHHiFpYOpV61t8kkDexI+CQyitH4=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "SlNHXyqVFGDPrX/2ppwog6l4pwj3PKda2TkZbqgfSfA=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "McjV8xwTF3xI7863DYOBdyvIv6UpzThl6v9vBRk05bI=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Update.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Update.json deleted file mode 100644 index 07182bb5e2..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Update.json +++ /dev/null @@ -1,492 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedLong", - "bsonType": "long", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberLong": "0" - }, - "max": { - "$numberLong": "200" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "FLE2 Range Long. Update.", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedLong": { - "$numberLong": "0" - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedLong": { - "$numberLong": "1" - } - } - } - }, - { - "name": "updateOne", - "arguments": { - "filter": { - "encryptedLong": { - "$gt": { - "$numberLong": "0" - } - } - }, - "update": { - "$set": { - "encryptedLong": { - "$numberLong": "2" - } - } - } - }, - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 0, - "encryptedLong": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedLong", - "bsonType": "long", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberLong": "0" - }, - "max": { - "$numberLong": "200" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedLong": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedLong", - "bsonType": "long", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberLong": "0" - }, - "max": { - "$numberLong": "200" - } - } - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command_name": "update", - "command": { - "update": "default", - "ordered": true, - "updates": [ - { - "q": { - "encryptedLong": { - "$gt": { - "$binary": { - "base64": "DXUFAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAASbW4AAAAAAAAAAAASbXgAyAAAAAAAAAAA", - "subType": "06" - } - } - } - }, - "u": { - "$set": { - "encryptedLong": { - "$$type": "binData" - } - } - } - } - ], - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedLong", - "bsonType": "long", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberInt": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberLong": "0" - }, - "max": { - "$numberLong": "200" - } - } - } - ] - } - } - }, - "$db": "default" - } - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 0, - "encryptedLong": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - }, - { - "_id": 1, - "encryptedLong": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "hyDcE6QQjPrYJaIS/n7evEZFYcm31Tj89CpEYGF45cI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "F08nMDWDZc+DbWM7XCEJNNCEYyinRmrvGP7EWhmp4is=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cXH4688amcDc8kZOJq4UP8cE3R58Zl7e+Qo/1jyspps=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uURBxvTp3FBCVkd+LPqyuY7d6rMW6SGIJQEPY/wtkZI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jG3hax1L3RBp9t38vUt53FsBxgr/+Si/vVISpAylYpE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kwtIW8MhH9Ky5xNjBx8gFA/SHh2YVphie7g5FGBzals=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FHflwFuEMu4xX0ZApHi+pdlBH+oevAtXckCUb5Wv0xU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ty4cnzJdAlbQKnh7px3GEYjBnvO+jIOaKjoTRDtmh3M=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Update.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Update.yml deleted file mode 100644 index ac59323550..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-Long-Update.yml +++ /dev/null @@ -1,242 +0,0 @@ - -# Requires libmongocrypt including MONGOCRYPT-702. -runOn: - - minServerVersion: "8.0.0" # Requires 8.0.0-rc14 for SERVER-91889. - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedLong', 'bsonType': 'long', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberInt': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberLong': '0'}, 'max': {'$numberLong': '200'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "FLE2 Range Long. Update." - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 0, encryptedLong: { $numberLong: "0" } } - - name: insertOne - arguments: - document: &doc1 { _id: 1, encryptedLong: { $numberLong: "1" } } - - name: updateOne - arguments: - filter: { encryptedLong: { $gt: { $numberLong: "0" } } } - update: { "$set": { "encryptedLong": { $numberLong: "2" } }} - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { "_id": 0, "encryptedLong": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { "_id": 1, "encryptedLong": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - default.default: - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - command_name: insert - - command_started_event: - command_name: update - command: - - "update": "default" - "ordered": true - "updates": [ - { - "q": { - "encryptedLong": { - "$gt": { - "$binary": { - "base64": "DXUFAAADcGF5bG9hZAAZBQAABGcABQUAAAMwAH0AAAAFZAAgAAAAALGGQ/CRD+pGLD53BZzWcCcYbuGLVEyjzXIx7b+ux/q2BXMAIAAAAACOC6mXEZL27P9hethZbtKYsTXKK+FpgQ9Axxmn9N/cCwVsACAAAAAA+MFEd8XfZSpbXKqqPC2L3TEFswkaG5Ff6aSgf8p+XVIAAzEAfQAAAAVkACAAAAAAtL3QIvnZqCF72eS6lKr8ilff7R6kiNklokiTuaU5wNsFcwAgAAAAAEtqr3/X731VB+VrbFcY8ZrJKRo2E0Fd+C8L0EMNcvcCBWwAIAAAAABNPhSriux8W8qbwnhCczE3IzlhNEnGDpUwTFDZSL+eYQADMgB9AAAABWQAIAAAAAB99ZW/7KwXKzl5M3XQsAJ3JbEef90IoxFYBArNiYzlgQVzACAAAAAAYO/qaw0+92HAryxOUG7iK6hnIy3OaUA9jIqtHdvcq8YFbAAgAAAAAHrUYj8A0hVgc6VklpDiljOnykrUSfEsjm56XO/bsfKdAAMzAH0AAAAFZAAgAAAAAOK8brUuc2onBNDRtfYMR736dHj4dQqXod8JG7tAMTsDBXMAIAAAAAAW6SrGAL6Bx0s7ZlsYULFfOAiYIGhEWu6md3r+Rk40awVsACAAAAAAIHYXP8RLcCboUmHN3+OlnEw1DxaLSnbTB9PdF228fFAAAzQAfQAAAAVkACAAAAAAV22FGF7ZDwK/EYiGNMlm/QuT3saQdyJM/Fn+ZyQug1oFcwAgAAAAACo7GwCvbcs5UHQMgds9/1QMklEVdjZigpuOFGrDmmxtBWwAIAAAAADQbYYPxlCMMGe2MulbiurApFLoeJSMvTeDU3pyEA2jNwADNQB9AAAABWQAIAAAAADFspsMG7yHjKppyllon1KqAsTrHaZ6JzNqnSz8o6iTvwVzACAAAAAAeiA5pqVIQQ9s6UY/P8v5Jjkl3I7iFNeLDYehikrINrsFbAAgAAAAAFjBTzTpNxDEkA0vSRj0jCED9KDRlboMVyilKyDz5YR4AAM2AH0AAAAFZAAgAAAAAPcLmtq+V1e+MRlZ7NHq1+mrRVBQje5zj685ZvdsfKvSBXMAIAAAAABdHz/3w2k5km97QN9m7oLFYJaVJneNlMboIlz5yUASQAVsACAAAAAAWbp8JVJnx8fEVAJFa7WMfMa7wXeP5M3C8MX20J/i9n0AAzcAfQAAAAVkACAAAAAAYfLwnoxK6XAGQrJFy8+TIJoq38ldBaO75h4zA4ZX5tQFcwAgAAAAAC2wk8UcJH5X5XGnDBYmel6srpBkzBhHtt3Jw1u5TSJ1BWwAIAAAAAA9/YU9eI3D7QbXKIw/3/gzWJ6MZrCYhG0j1wNKgRQp5wADOAB9AAAABWQAIAAAAADGvyrtKkIcaV17ynZA7b2k5Pz6OhvxdWNkDvDWJIja8wVzACAAAAAAOLypVKNxf/wR1G8OZjUUsTQzDYeNNhhITxGMSp7euS4FbAAgAAAAAA9EsxoV1B2DcQ1NJRwuxXnvVR+vkD0wbbDYEI/zFEnDAAM5AH0AAAAFZAAgAAAAAEocREw1L0g+roFUchJI2Yd0M0ME2bnErNUYnpyJP1SqBXMAIAAAAAAcE2/JK/8MoSeOchIuAkKh1X3ImoA7p8ujAZIfvIDo6QVsACAAAAAA+W0+zgLr85/PD7P9a94wk6MgNgrizx/XU9aCxAkp1IwAABJjbQAAAAAAAAAAAAAQcGF5bG9hZElkAAAAAAAQZmlyc3RPcGVyYXRvcgABAAAAEnNwAAEAAAAAAAAAEHRmAAEAAAASbW4AAAAAAAAAAAASbXgAyAAAAAAAAAAA", - "subType": "06" - } - } - } - }, - "u": { - "$set": { - "encryptedLong": { $$type: "binData" } - } - } - } - ] - encryptionInformation: - type: 1 - schema: - "default.default": - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - "$db": "default" - - - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - - { - "_id": 0, - "encryptedLong": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "RjBYT2h3ZAoHxhf8DU6/dFbDkEBZp0IxREcsRTu2MXs=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "x7GR49EN0t3WXQDihkrbonK7qNIBYC87tpL/XEUyIYc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "JfYUqWF+OoGjiYkRI4L5iPlF+T1Eleul7Fki22jp4Qc=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "q1RyGfIgsaQHoZFRw+DD28V26rN5hweApPLwExncvT8=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "L2PFeKGvLS6C+DLudR6fGlBq3ERPvjWvRyNRIA2HVb0=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "CWxaNqL3iP1yCixDkcmf9bmW3E5VeN8TJkg1jJe528s=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "+vC6araOEo+fpW7PSIP40/EnzBCj1d2N10Jr3rrXJJM=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "6SV63Mf51Z6A6p2X3rCnJKCu6ku3Oeb45mBYbz+IoAo=", - "subType": "00" - } - } - ] - } - - - { - "_id": 1, - "encryptedLong": { $$type: "binData" }, - "__safeContent__": [ - { - "$binary": { - "base64": "hyDcE6QQjPrYJaIS/n7evEZFYcm31Tj89CpEYGF45cI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "F08nMDWDZc+DbWM7XCEJNNCEYyinRmrvGP7EWhmp4is=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "cXH4688amcDc8kZOJq4UP8cE3R58Zl7e+Qo/1jyspps=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "uURBxvTp3FBCVkd+LPqyuY7d6rMW6SGIJQEPY/wtkZI=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "jG3hax1L3RBp9t38vUt53FsBxgr/+Si/vVISpAylYpE=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "kwtIW8MhH9Ky5xNjBx8gFA/SHh2YVphie7g5FGBzals=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "FHflwFuEMu4xX0ZApHi+pdlBH+oevAtXckCUb5Wv0xU=", - "subType": "00" - } - }, - { - "$binary": { - "base64": "ty4cnzJdAlbQKnh7px3GEYjBnvO+jIOaKjoTRDtmh3M=", - "subType": "00" - } - } - ] - } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-WrongType.json b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-WrongType.json deleted file mode 100644 index 6215604508..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-WrongType.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "8.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ], - "maxServerVersion": "8.99.99" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedInt", - "bsonType": "int", - "queries": { - "queryType": "range", - "contention": { - "$numberLong": "0" - }, - "trimFactor": { - "$numberLong": "1" - }, - "sparsity": { - "$numberLong": "1" - }, - "min": { - "$numberInt": "0" - }, - "max": { - "$numberInt": "200" - } - } - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "Wrong type: Insert Double", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberDouble": "0" - } - } - }, - "result": { - "errorContains": "cannot encrypt element" - } - } - ] - }, - { - "description": "Wrong type: Find Double", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 0, - "encryptedInt": { - "$numberInt": "0" - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "encryptedInt": { - "$gte": { - "$numberDouble": "0" - } - } - }, - "sort": { - "_id": 1 - } - }, - "result": { - "errorContains": "field type is not supported" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-WrongType.yml b/testdata/client-side-encryption/legacy/fle2v2-Rangev2-WrongType.yml deleted file mode 100644 index 432f86b423..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Rangev2-WrongType.yml +++ /dev/null @@ -1,44 +0,0 @@ -# Test correctness results. -# Does not include command monitoring expectations or outcome assertions to make tests more readable. - -# Requires libmongocrypt 1.8.0. -runOn: - - minServerVersion: "8.0.0" - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] - maxServerVersion: "8.99.99" -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields { 'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedInt', 'bsonType': 'int', 'queries': {'queryType': 'range', 'contention': {'$numberLong': '0'}, 'trimFactor': {'$numberLong': '1'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberInt': '0'}, 'max': {'$numberInt': '200'}}}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "Wrong type: Insert Double" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: { _id: 0, encryptedInt: { $numberDouble: "0" }} } - result: - # Expect an error from mongocryptd. - errorContains: "cannot encrypt element" - - - description: "Wrong type: Find Double" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: { document: { _id: 0, encryptedInt: { $numberInt: "0" }} } - - name: find - arguments: - filter: { encryptedInt: { $gte: { $numberDouble: "0" } }} - # sort so results from range queries are ordered. - sort: { _id: 1 } - result: - # expect an error from libmongocrypt. - errorContains: "field type is not supported" diff --git a/testdata/client-side-encryption/legacy/fle2v2-Update.json b/testdata/client-side-encryption/legacy/fle2v2-Update.json deleted file mode 100644 index cb260edc0d..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Update.json +++ /dev/null @@ -1,570 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "7.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "encrypted_fields": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1648914851981" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "Update can query an FLE2 indexed field", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedIndexed": "value123" - } - } - }, - { - "name": "updateOne", - "arguments": { - "filter": { - "encryptedIndexed": "value123" - }, - "update": { - "$set": { - "foo": "bar" - } - } - }, - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedIndexed": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "update": "default", - "updates": [ - { - "q": { - "encryptedIndexed": { - "$eq": { - "$binary": { - "base64": "DIkAAAAFZAAgAAAAAPtVteJQAlgb2YMa/+7YWH00sbQPyt7L6Rb8OwBdMmL2BXMAIAAAAAAd44hgVKnEnTFlwNVC14oyc9OZOTspeymusqkRQj57nAVsACAAAAAAaZ9s3G+4znfxStxeOZwcZy1OhzjMGc5hjmdMN+b/w6kSY20AAAAAAAAAAAAA", - "subType": "06" - } - } - } - }, - "u": { - "$set": { - "foo": "bar" - } - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - } - } - } - }, - "command_name": "update" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encryptedIndexed": { - "$$type": "binData" - }, - "foo": "bar", - "__safeContent__": [ - { - "$binary": { - "base64": "ThpoKfQ8AkOzkFfNC1+9PF0pY2nIzfXvRdxQgjkNbBw=", - "subType": "00" - } - } - ] - } - ] - } - } - }, - { - "description": "Update can modify an FLE2 indexed field", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encryptedIndexed": "value123" - } - } - }, - { - "name": "updateOne", - "arguments": { - "filter": { - "encryptedIndexed": "value123" - }, - "update": { - "$set": { - "encryptedIndexed": "value456" - } - } - }, - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - }, - { - "name": "find", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": [ - { - "encryptedIndexed": "value456" - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encryptedIndexed": { - "$$type": "binData" - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - } - } - } - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "update": "default", - "updates": [ - { - "q": { - "encryptedIndexed": { - "$eq": { - "$binary": { - "base64": "DIkAAAAFZAAgAAAAAPtVteJQAlgb2YMa/+7YWH00sbQPyt7L6Rb8OwBdMmL2BXMAIAAAAAAd44hgVKnEnTFlwNVC14oyc9OZOTspeymusqkRQj57nAVsACAAAAAAaZ9s3G+4znfxStxeOZwcZy1OhzjMGc5hjmdMN+b/w6kSY20AAAAAAAAAAAAA", - "subType": "06" - } - } - } - }, - "u": { - "$set": { - "encryptedIndexed": { - "$$type": "binData" - } - } - } - } - ], - "ordered": true, - "encryptionInformation": { - "type": 1, - "schema": { - "default.default": { - "escCollection": "enxcol_.default.esc", - "ecocCollection": "enxcol_.default.ecoc", - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - } - } - } - }, - "command_name": "update" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "_id": { - "$eq": 1 - } - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encryptedIndexed": { - "$$type": "binData" - }, - "__safeContent__": [ - { - "$binary": { - "base64": "rhe7/w8Ob8Unl44rGr/moScx6m5VODQnscDhF4Nkn6g=", - "subType": "00" - } - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-Update.yml b/testdata/client-side-encryption/legacy/fle2v2-Update.yml deleted file mode 100644 index 3bed027181..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-Update.yml +++ /dev/null @@ -1,210 +0,0 @@ -# Requires libmongocrypt 1.8.0. -runOn: - - minServerVersion: "7.0.0" - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedIndexed', 'bsonType': 'string', 'queries': {'queryType': 'equality', 'contention': {'$numberLong': '0'}}}, {'keyId': {'$binary': {'base64': 'q83vqxI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedUnindexed', 'bsonType': 'string'}]} -key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ] -tests: - - description: "Update can query an FLE2 indexed field" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: {"_id": 1, "encryptedIndexed": "value123" } - - name: updateOne - arguments: - filter: { "encryptedIndexed": "value123" } - update: { "$set": { "foo": "bar"}} - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - { "_id": 1, "encryptedIndexed": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - "default.default": - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - - command_name: insert - - command_started_event: - command: - update: *collection_name - updates: - - { - "q": { - "encryptedIndexed": { - "$eq": { - "$binary": { - "base64": "DIkAAAAFZAAgAAAAAPtVteJQAlgb2YMa/+7YWH00sbQPyt7L6Rb8OwBdMmL2BXMAIAAAAAAd44hgVKnEnTFlwNVC14oyc9OZOTspeymusqkRQj57nAVsACAAAAAAaZ9s3G+4znfxStxeOZwcZy1OhzjMGc5hjmdMN+b/w6kSY20AAAAAAAAAAAAA", - "subType": "06" - } - } - } - }, - "u": { "$set": { "foo": "bar"} } - } - ordered: true - encryptionInformation: - type: 1 - schema: - "default.default": - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - - command_name: update - outcome: - collection: - data: - - { "_id": 1, "encryptedIndexed": { "$$type": "binData" }, "foo": "bar", "__safeContent__": [{ "$binary" : { "base64" : "ThpoKfQ8AkOzkFfNC1+9PF0pY2nIzfXvRdxQgjkNbBw=", "subType" : "00" } }] } - - description: "Update can modify an FLE2 indexed field" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: {"_id": 1, "encryptedIndexed": "value123" } - - name: updateOne - arguments: - filter: { "encryptedIndexed": "value123" } - update: { "$set": { "encryptedIndexed": "value456"}} - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - - name: find - arguments: - filter: { "_id": 1} - result: - [ "encryptedIndexed": "value456" ] - expectations: - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: datakeys - filter: { - "$or": [ - { - "_id": { - "$in": [ - {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}} - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - { "_id": 1, "encryptedIndexed": { $$type: "binData" } } - ordered: true - encryptionInformation: - type: 1 - schema: - "default.default": - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - - command_name: insert - - command_started_event: - command: - update: *collection_name - updates: - - { - "q": { - "encryptedIndexed": { - "$eq": { - "$binary": { - "base64": "DIkAAAAFZAAgAAAAAPtVteJQAlgb2YMa/+7YWH00sbQPyt7L6Rb8OwBdMmL2BXMAIAAAAAAd44hgVKnEnTFlwNVC14oyc9OZOTspeymusqkRQj57nAVsACAAAAAAaZ9s3G+4znfxStxeOZwcZy1OhzjMGc5hjmdMN+b/w6kSY20AAAAAAAAAAAAA", - "subType": "06" - } - } - } - }, - "u": { "$set": { "encryptedIndexed": { "$$type": "binData" }} } - } - ordered: true - encryptionInformation: - type: 1 - schema: - "default.default": - # libmongocrypt applies escCollection and ecocCollection to outgoing command. - escCollection: "enxcol_.default.esc" - ecocCollection: "enxcol_.default.ecoc" - <<: *encrypted_fields - - command_name: update - - command_started_event: - command: - find: *collection_name - filter: { "_id": { "$eq": 1 }} - command_name: find - outcome: - collection: - data: - - { "_id": 1, "encryptedIndexed": { "$$type": "binData" }, "__safeContent__": [{ "$binary" : { "base64" : "rhe7/w8Ob8Unl44rGr/moScx6m5VODQnscDhF4Nkn6g=", "subType" : "00" } }] } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/fle2v2-validatorAndPartialFieldExpression.json b/testdata/client-side-encryption/legacy/fle2v2-validatorAndPartialFieldExpression.json deleted file mode 100644 index 901c4dd841..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-validatorAndPartialFieldExpression.json +++ /dev/null @@ -1,503 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "7.0.0", - "topology": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "tests": [ - { - "description": "create with a validator on an unencrypted field is OK", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - }, - "encryptedFieldsMap": { - "default.encryptedCollection": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - } - } - } - }, - "operations": [ - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "createCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection", - "validator": { - "unencrypted_string": "foo" - } - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "encryptedCollection" - } - } - ] - }, - { - "description": "create with a validator on an encrypted field is an error", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - }, - "encryptedFieldsMap": { - "default.encryptedCollection": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - } - } - } - }, - "operations": [ - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "createCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection", - "validator": { - "encryptedIndexed": "foo" - } - }, - "result": { - "errorContains": "Comparison to encrypted fields not supported" - } - } - ] - }, - { - "description": "collMod with a validator on an unencrypted field is OK", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - }, - "encryptedFieldsMap": { - "default.encryptedCollection": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - } - } - } - }, - "operations": [ - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "createCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "command": { - "collMod": "encryptedCollection", - "validator": { - "unencrypted_string": "foo" - } - } - } - } - ] - }, - { - "description": "collMod with a validator on an encrypted field is an error", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - }, - "encryptedFieldsMap": { - "default.encryptedCollection": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - } - } - } - }, - "operations": [ - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "createCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "command": { - "collMod": "encryptedCollection", - "validator": { - "encryptedIndexed": "foo" - } - } - }, - "result": { - "errorContains": "Comparison to encrypted fields not supported" - } - } - ] - }, - { - "description": "createIndexes with a partialFilterExpression on an unencrypted field is OK", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - }, - "encryptedFieldsMap": { - "default.encryptedCollection": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - } - } - } - }, - "operations": [ - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "createCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "command": { - "createIndexes": "encryptedCollection", - "indexes": [ - { - "name": "name", - "key": { - "name": 1 - }, - "partialFilterExpression": { - "unencrypted_string": "foo" - } - } - ] - } - } - }, - { - "name": "assertIndexExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "encryptedCollection", - "index": "name" - } - } - ] - }, - { - "description": "createIndexes with a partialFilterExpression on an encrypted field is an error", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - }, - "encryptedFieldsMap": { - "default.encryptedCollection": { - "fields": [ - { - "keyId": { - "$binary": { - "base64": "EjRWeBI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedIndexed", - "bsonType": "string", - "queries": { - "queryType": "equality", - "contention": { - "$numberLong": "0" - } - } - }, - { - "keyId": { - "$binary": { - "base64": "q83vqxI0mHYSNBI0VniQEg==", - "subType": "04" - } - }, - "path": "encryptedUnindexed", - "bsonType": "string" - } - ] - } - } - } - }, - "operations": [ - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "createCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "command": { - "createIndexes": "encryptedCollection", - "indexes": [ - { - "name": "name", - "key": { - "name": 1 - }, - "partialFilterExpression": { - "encryptedIndexed": "foo" - } - } - ] - } - }, - "result": { - "errorContains": "Comparison to encrypted fields not supported" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/fle2v2-validatorAndPartialFieldExpression.yml b/testdata/client-side-encryption/legacy/fle2v2-validatorAndPartialFieldExpression.yml deleted file mode 100644 index 3eb90ea935..0000000000 --- a/testdata/client-side-encryption/legacy/fle2v2-validatorAndPartialFieldExpression.yml +++ /dev/null @@ -1,169 +0,0 @@ -# Requires libmongocrypt 1.8.0. -runOn: - # Require server version 6.0.0 to get behavior added in SERVER-64911. - - minServerVersion: "7.0.0" - # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol. - # FLE 2 Encrypted collections are not supported on standalone. - topology: [ "replicaset", "sharded", "load-balanced" ] - -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -tests: - - description: "create with a validator on an unencrypted field is OK" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - encryptedFieldsMap: - "default.encryptedCollection": {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedIndexed', 'bsonType': 'string', 'queries': {'queryType': 'equality', 'contention': {'$numberLong': '0'}}}, {'keyId': {'$binary': {'base64': 'q83vqxI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedUnindexed', 'bsonType': 'string'}]} - operations: - # Drop to remove a collection that may exist from previous test runs. - - name: dropCollection - object: database - arguments: - collection: "encryptedCollection" - - name: createCollection - object: database - arguments: - collection: "encryptedCollection" - validator: - unencrypted_string: "foo" - - name: assertCollectionExists - object: testRunner - arguments: - database: *database_name - collection: "encryptedCollection" - - description: "create with a validator on an encrypted field is an error" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - encryptedFieldsMap: - "default.encryptedCollection": {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedIndexed', 'bsonType': 'string', 'queries': {'queryType': 'equality', 'contention': {'$numberLong': '0'}}}, {'keyId': {'$binary': {'base64': 'q83vqxI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedUnindexed', 'bsonType': 'string'}]} - operations: - # Drop to remove a collection that may exist from previous test runs. - - name: dropCollection - object: database - arguments: - collection: "encryptedCollection" - - name: createCollection - object: database - arguments: - collection: "encryptedCollection" - validator: - encryptedIndexed: "foo" - result: - errorContains: "Comparison to encrypted fields not supported" - - description: "collMod with a validator on an unencrypted field is OK" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - encryptedFieldsMap: - "default.encryptedCollection": {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedIndexed', 'bsonType': 'string', 'queries': {'queryType': 'equality', 'contention': {'$numberLong': '0'}}}, {'keyId': {'$binary': {'base64': 'q83vqxI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedUnindexed', 'bsonType': 'string'}]} - operations: - # Drop to remove a collection that may exist from previous test runs. - - name: dropCollection - object: database - arguments: - collection: "encryptedCollection" - - name: createCollection - object: database - arguments: - collection: "encryptedCollection" - - name: runCommand - object: database - arguments: - command: - collMod: "encryptedCollection" - validator: - unencrypted_string: "foo" - - description: "collMod with a validator on an encrypted field is an error" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - encryptedFieldsMap: - "default.encryptedCollection": {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedIndexed', 'bsonType': 'string', 'queries': {'queryType': 'equality', 'contention': {'$numberLong': '0'}}}, {'keyId': {'$binary': {'base64': 'q83vqxI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedUnindexed', 'bsonType': 'string'}]} - operations: - # Drop to remove a collection that may exist from previous test runs. - - name: dropCollection - object: database - arguments: - collection: "encryptedCollection" - - name: createCollection - object: database - arguments: - collection: "encryptedCollection" - - name: runCommand - object: database - arguments: - command: - collMod: "encryptedCollection" - validator: - encryptedIndexed: "foo" - result: - errorContains: "Comparison to encrypted fields not supported" - - description: "createIndexes with a partialFilterExpression on an unencrypted field is OK" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - encryptedFieldsMap: - "default.encryptedCollection": {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedIndexed', 'bsonType': 'string', 'queries': {'queryType': 'equality', 'contention': {'$numberLong': '0'}}}, {'keyId': {'$binary': {'base64': 'q83vqxI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedUnindexed', 'bsonType': 'string'}]} - operations: - # Drop to remove a collection that may exist from previous test runs. - - name: dropCollection - object: database - arguments: - collection: "encryptedCollection" - - name: createCollection - object: database - arguments: - collection: "encryptedCollection" - - name: runCommand - object: database - arguments: - command: - createIndexes: "encryptedCollection" - indexes: - - name: "name" - key: { name: 1 } - partialFilterExpression: - unencrypted_string: "foo" - - name: assertIndexExists - object: testRunner - arguments: - database: *database_name - collection: "encryptedCollection" - index: name - - description: "createIndexes with a partialFilterExpression on an encrypted field is an error" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - encryptedFieldsMap: - "default.encryptedCollection": {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedIndexed', 'bsonType': 'string', 'queries': {'queryType': 'equality', 'contention': {'$numberLong': '0'}}}, {'keyId': {'$binary': {'base64': 'q83vqxI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedUnindexed', 'bsonType': 'string'}]} - operations: - # Drop to remove a collection that may exist from previous test runs. - - name: dropCollection - object: database - arguments: - collection: "encryptedCollection" - - name: createCollection - object: database - arguments: - collection: "encryptedCollection" - - name: runCommand - object: database - arguments: - command: - createIndexes: "encryptedCollection" - indexes: - - name: "name" - key: { name: 1 } - partialFilterExpression: - encryptedIndexed: "foo" - result: - errorContains: "Comparison to encrypted fields not supported" \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/gcpKMS.json b/testdata/client-side-encryption/legacy/gcpKMS.json deleted file mode 100644 index c2c08b8a23..0000000000 --- a/testdata/client-side-encryption/legacy/gcpKMS.json +++ /dev/null @@ -1,226 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "json_schema": { - "properties": { - "encrypted_string_aws": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "encrypted_string_azure": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZURE+AAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "encrypted_string_gcp": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCP+AAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "encrypted_string_local": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "encrypted_string_kmip": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "dBHpr8aITfeBQ15grpbLpQ==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - } - }, - "bsonType": "object" - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "GCP+AAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "CiQAIgLj0WyktnB4dfYHo5SLZ41K4ASQrjJUaSzl5vvVH0G12G0SiQEAjlV8XPlbnHDEDFbdTO4QIe8ER2/172U1ouLazG0ysDtFFIlSvWX5ZnZUrRMmp/R2aJkzLXEt/zf8Mn4Lfm+itnjgo5R9K4pmPNvvPKNZX5C16lrPT+aA+rd+zXFSmlMg3i5jnxvTdLHhg3G7Q/Uv1ZIJskKt95bzLoe0tUVzRWMYXLIEcohnQg==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1601574333107" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1601574333107" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "gcp", - "projectId": "devprod-drivers", - "location": "global", - "keyRing": "key-ring-csfle", - "keyName": "key-name-csfle" - }, - "keyAltNames": [ - "altname", - "gcp_altname" - ] - } - ], - "tests": [ - { - "description": "Insert a document with auto encryption using GCP KMS provider", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "gcp": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_string_gcp": "string0" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "GCP+AAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault" - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encrypted_string_gcp": { - "$binary": { - "base64": "ARgj/gAAAAAAAAAAAAAAAAACwFd+Y5Ojw45GUXNvbcIpN9YkRdoHDHkR4kssdn0tIMKlDQOLFkWFY9X07IRlXsxPD8DcTiKnl6XINK28vhcGlg==", - "subType": "06" - } - } - } - ], - "ordered": true - }, - "command_name": "insert" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string_gcp": { - "$binary": { - "base64": "ARgj/gAAAAAAAAAAAAAAAAACwFd+Y5Ojw45GUXNvbcIpN9YkRdoHDHkR4kssdn0tIMKlDQOLFkWFY9X07IRlXsxPD8DcTiKnl6XINK28vhcGlg==", - "subType": "06" - } - } - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/gcpKMS.yml b/testdata/client-side-encryption/legacy/gcpKMS.yml deleted file mode 100644 index 50b6a40bec..0000000000 --- a/testdata/client-side-encryption/legacy/gcpKMS.yml +++ /dev/null @@ -1,46 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: [] -json_schema: {'properties': {'encrypted_string_aws': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}, 'encrypted_string_azure': {'encrypt': {'keyId': [{'$binary': {'base64': 'AZURE+AAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}, 'encrypted_string_gcp': {'encrypt': {'keyId': [{'$binary': {'base64': 'GCP+AAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}, 'encrypted_string_local': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}, 'encrypted_string_kmip': {'encrypt': {'keyId': [{'$binary': {'base64': 'dBHpr8aITfeBQ15grpbLpQ==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}}, 'bsonType': 'object'} -key_vault_data: [{'_id': {'$binary': {'base64': 'GCP+AAAAAAAAAAAAAAAAAA==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'CiQAIgLj0WyktnB4dfYHo5SLZ41K4ASQrjJUaSzl5vvVH0G12G0SiQEAjlV8XPlbnHDEDFbdTO4QIe8ER2/172U1ouLazG0ysDtFFIlSvWX5ZnZUrRMmp/R2aJkzLXEt/zf8Mn4Lfm+itnjgo5R9K4pmPNvvPKNZX5C16lrPT+aA+rd+zXFSmlMg3i5jnxvTdLHhg3G7Q/Uv1ZIJskKt95bzLoe0tUVzRWMYXLIEcohnQg==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1601574333107'}}, 'updateDate': {'$date': {'$numberLong': '1601574333107'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'gcp', 'projectId': 'devprod-drivers', 'location': 'global', 'keyRing': 'key-ring-csfle', 'keyName': 'key-name-csfle'}, 'keyAltNames': ['altname', 'gcp_altname']}] - -tests: - - description: "Insert a document with auto encryption using GCP KMS provider" - clientOptions: - autoEncryptOpts: - kmsProviders: - gcp: {} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 1, encrypted_string_gcp: "string0" } - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: { $or: [ { _id: { $in: [ {'$binary': {'base64': 'GCP+AAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] } }, { keyAltNames: { $in: [] } } ] } - $db: keyvault - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { _id: 1, encrypted_string_gcp: {'$binary': {'base64': 'ARgj/gAAAAAAAAAAAAAAAAACwFd+Y5Ojw45GUXNvbcIpN9YkRdoHDHkR4kssdn0tIMKlDQOLFkWFY9X07IRlXsxPD8DcTiKnl6XINK28vhcGlg==', 'subType': '06'}} } - ordered: true - command_name: insert - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc0_encrypted \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/getMore.json b/testdata/client-side-encryption/legacy/getMore.json deleted file mode 100644 index ee99bf7537..0000000000 --- a/testdata/client-side-encryption/legacy/getMore.json +++ /dev/null @@ -1,263 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - }, - { - "_id": 2, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - }, - { - "_id": 3, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACQ76HWOut3DZtQuV90hp1aaCpZn95vZIaWmn+wrBehcEtcFwyJlBdlyzDzZTWPZCPgiFq72Wvh6Y7VbpU9NAp3A==", - "subType": "06" - } - } - } - ], - "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" - }, - "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" - ] - } - ], - "tests": [ - { - "description": "getMore with encryption", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "find", - "arguments": { - "batchSize": 2, - "filter": {} - }, - "result": [ - { - "_id": 1, - "encrypted_string": "string0" - }, - { - "_id": 2, - "encrypted_string": "string1" - }, - { - "_id": 3, - "encrypted_string": "string2" - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "batchSize": 2 - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "getMore": { - "$$type": "long" - }, - "collection": "default", - "batchSize": 2 - }, - "command_name": "getMore" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - }, - { - "_id": 2, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - }, - { - "_id": 3, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACQ76HWOut3DZtQuV90hp1aaCpZn95vZIaWmn+wrBehcEtcFwyJlBdlyzDzZTWPZCPgiFq72Wvh6Y7VbpU9NAp3A==", - "subType": "06" - } - } - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/getMore.yml b/testdata/client-side-encryption/legacy/getMore.yml deleted file mode 100644 index 4359ee8917..0000000000 --- a/testdata/client-side-encryption/legacy/getMore.yml +++ /dev/null @@ -1,61 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: - - &doc0_encrypted { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } - - &doc1_encrypted { _id: 2, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}} } - - &doc2_encrypted { _id: 3, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACQ76HWOut3DZtQuV90hp1aaCpZn95vZIaWmn+wrBehcEtcFwyJlBdlyzDzZTWPZCPgiFq72Wvh6Y7VbpU9NAp3A==', 'subType': '06'}} } -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'} -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']}] - -tests: - - description: "getMore with encryption" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: find - arguments: - batchSize: 2 - filter: {} - result: - - { _id: 1, encrypted_string: "string0" } - - { _id: 2, encrypted_string: "string1" } - - { _id: 3, encrypted_string: "string2" } - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - find: *collection_name - batchSize: 2 - command_name: find - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - getMore: { $$type: "long" } - collection: *collection_name - batchSize: 2 - command_name: getMore - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc0_encrypted - - *doc1_encrypted - - *doc2_encrypted \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/insert.json b/testdata/client-side-encryption/legacy/insert.json deleted file mode 100644 index cf2910fd7a..0000000000 --- a/testdata/client-side-encryption/legacy/insert.json +++ /dev/null @@ -1,344 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "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" - }, - "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" - ] - } - ], - "tests": [ - { - "description": "insertOne with encryption", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_string": "string0", - "random": "abc" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - }, - "random": { - "$$type": "binData" - } - } - ], - "ordered": true - }, - "command_name": "insert" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - }, - "random": { - "$$type": "binData" - } - } - ] - } - } - }, - { - "description": "insertMany with encryption", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertMany", - "arguments": { - "documents": [ - { - "_id": 1, - "encrypted_string": "string0", - "random": "abc" - }, - { - "_id": 2, - "encrypted_string": "string1" - } - ] - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - }, - "random": { - "$$type": "binData" - } - }, - { - "_id": 2, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - } - ], - "ordered": true - }, - "command_name": "insert" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - }, - "random": { - "$$type": "binData" - } - }, - { - "_id": 2, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/insert.yml b/testdata/client-side-encryption/legacy/insert.yml deleted file mode 100644 index 99521f0350..0000000000 --- a/testdata/client-side-encryption/legacy/insert.yml +++ /dev/null @@ -1,88 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: [] -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'} -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']}] - -tests: - - description: "insertOne with encryption" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 1, encrypted_string: "string0", random: "abc" } - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}}, random: { $$type: "binData" } } - ordered: true - command_name: insert - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc0_encrypted - - description: "insertMany with encryption" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertMany - arguments: - documents: - - *doc0 - - &doc1 { _id: 2, encrypted_string: "string1" } - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - *doc0_encrypted - - &doc1_encrypted { _id: 2, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}} } - ordered: true - command_name: insert - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc0_encrypted - - *doc1_encrypted \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/keyAltName.json b/testdata/client-side-encryption/legacy/keyAltName.json deleted file mode 100644 index 7f71b9dbeb..0000000000 --- a/testdata/client-side-encryption/legacy/keyAltName.json +++ /dev/null @@ -1,228 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "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" - }, - "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" - ] - } - ], - "tests": [ - { - "description": "Insert with encryption using key alt name", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_w_altname": "string0", - "altname": "altname" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [] - } - }, - { - "keyAltNames": { - "$in": [ - "altname" - ] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encrypted_w_altname": { - "$$type": "binData" - }, - "altname": "altname" - } - ], - "ordered": true - }, - "command_name": "insert" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_w_altname": { - "$$type": "binData" - }, - "altname": "altname" - } - ] - } - } - }, - { - "description": "Replace with key alt name fails", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$set": { - "encrypted_w_altname": "string0" - } - }, - "upsert": true - }, - "result": { - "errorContains": "A non-static (JSONPointer) keyId is not supported" - } - } - ], - "outcome": { - "collection": { - "data": [] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/keyAltName.yml b/testdata/client-side-encryption/legacy/keyAltName.yml deleted file mode 100644 index a7660ba38c..0000000000 --- a/testdata/client-side-encryption/legacy/keyAltName.yml +++ /dev/null @@ -1,64 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: [] -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'} -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']}] - -tests: - - description: "Insert with encryption using key alt name" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 1, encrypted_w_altname: "string0", altname: "altname" } - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {$or: [ { _id: { $in: [] } }, { keyAltNames: { $in: [ "altname" ] } } ] } - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { _id: 1, encrypted_w_altname: { $$type: "binData" }, altname: "altname" } - ordered: true - command_name: insert - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc0_encrypted - - description: "Replace with key alt name fails" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: updateOne - arguments: - filter: {} - update: { $set: { encrypted_w_altname: "string0" } } - upsert: true - result: - errorContains: "A non-static (JSONPointer) keyId is not supported" - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: [] \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/keyCache.json b/testdata/client-side-encryption/legacy/keyCache.json deleted file mode 100644 index 912ce80020..0000000000 --- a/testdata/client-side-encryption/legacy/keyCache.json +++ /dev/null @@ -1,270 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "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" - }, - "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" - ] - } - ], - "tests": [ - { - "description": "Insert with deterministic encryption, then find it", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - }, - "keyExpirationMS": 1 - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_string": "string0" - } - } - }, - { - "name": "wait", - "object": "testRunner", - "arguments": { - "ms": 50 - } - }, - { - "name": "find", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": [ - { - "_id": 1, - "encrypted_string": "string0" - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - ], - "ordered": true - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "_id": 1 - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/keyCache.yml b/testdata/client-side-encryption/legacy/keyCache.yml deleted file mode 100644 index 28acf7a2ee..0000000000 --- a/testdata/client-side-encryption/legacy/keyCache.yml +++ /dev/null @@ -1,69 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: [] -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'} -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']}] - -tests: - - description: "Insert with deterministic encryption, then find it" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - keyExpirationMS: 1 - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 1, encrypted_string: "string0" } - - name: wait - object: testRunner - arguments: - ms: 50 # Wait long enough to account for coarse time resolution on Windows (CDRIVER-4526). - - name: find - arguments: - filter: { _id: 1 } - result: [*doc0] - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } - ordered: true - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: { _id: 1 } - command_name: find - # The cache has expired and the key must be fetched again - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc0_encrypted diff --git a/testdata/client-side-encryption/legacy/kmipKMS.json b/testdata/client-side-encryption/legacy/kmipKMS.json deleted file mode 100644 index 5749d21ab8..0000000000 --- a/testdata/client-side-encryption/legacy/kmipKMS.json +++ /dev/null @@ -1,223 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "json_schema": { - "properties": { - "encrypted_string_aws": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "encrypted_string_azure": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AZURE+AAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "encrypted_string_gcp": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "GCP+AAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "encrypted_string_local": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - }, - "encrypted_string_kmip": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "dBHpr8aITfeBQ15grpbLpQ==", - "subType": "04" - } - } - ], - "bsonType": "string", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - } - }, - "bsonType": "object" - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "dBHpr8aITfeBQ15grpbLpQ==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "eUYDyB0HuWb+lQgUwO+6qJQyTTDTY2gp9FbemL7ZFo0pvr0x6rm6Ff9OVUTGH6HyMKipaeHdiIJU1dzsLwvqKvi7Beh+U4iaIWX/K0oEg1GOsJc0+Z/in8gNHbGUYLmycHViM3LES3kdt7FdFSUl5rEBHrM71yoNEXImz17QJWMGOuT4x6yoi2pvnaRJwfrI4DjpmnnTrDMac92jgZehbg==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1634220190041" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1634220190041" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "kmip", - "keyId": "1" - }, - "keyAltNames": [ - "altname", - "kmip_altname" - ] - } - ], - "tests": [ - { - "description": "Insert a document with auto encryption using KMIP KMS provider", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "kmip": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_string_kmip": "string0" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "dBHpr8aITfeBQ15grpbLpQ==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault" - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encrypted_string_kmip": { - "$binary": { - "base64": "AXQR6a/GiE33gUNeYK6Wy6UCKCwtKFIsL8eKObDVxvqGupJNUk7kXswHhB7G5j/C1D+6no+Asra0KgSU43bTL3ooIBLVyIzbV5CDJYqzAsa4WQ==", - "subType": "06" - } - } - } - ], - "ordered": true - }, - "command_name": "insert" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string_kmip": { - "$binary": { - "base64": "AXQR6a/GiE33gUNeYK6Wy6UCKCwtKFIsL8eKObDVxvqGupJNUk7kXswHhB7G5j/C1D+6no+Asra0KgSU43bTL3ooIBLVyIzbV5CDJYqzAsa4WQ==", - "subType": "06" - } - } - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/kmipKMS.yml b/testdata/client-side-encryption/legacy/kmipKMS.yml deleted file mode 100644 index 874a92bf3b..0000000000 --- a/testdata/client-side-encryption/legacy/kmipKMS.yml +++ /dev/null @@ -1,46 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: [] -json_schema: {'properties': {'encrypted_string_aws': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}, 'encrypted_string_azure': {'encrypt': {'keyId': [{'$binary': {'base64': 'AZURE+AAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}, 'encrypted_string_gcp': {'encrypt': {'keyId': [{'$binary': {'base64': 'GCP+AAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}, 'encrypted_string_local': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}, 'encrypted_string_kmip': {'encrypt': {'keyId': [{'$binary': {'base64': 'dBHpr8aITfeBQ15grpbLpQ==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}}, 'bsonType': 'object'} -key_vault_data: [{'_id': {'$binary': {'base64': 'dBHpr8aITfeBQ15grpbLpQ==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'eUYDyB0HuWb+lQgUwO+6qJQyTTDTY2gp9FbemL7ZFo0pvr0x6rm6Ff9OVUTGH6HyMKipaeHdiIJU1dzsLwvqKvi7Beh+U4iaIWX/K0oEg1GOsJc0+Z/in8gNHbGUYLmycHViM3LES3kdt7FdFSUl5rEBHrM71yoNEXImz17QJWMGOuT4x6yoi2pvnaRJwfrI4DjpmnnTrDMac92jgZehbg==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1634220190041'}}, 'updateDate': {'$date': {'$numberLong': '1634220190041'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'kmip', 'keyId': '1'}, 'keyAltNames': ['altname', 'kmip_altname']}] - -tests: - - description: "Insert a document with auto encryption using KMIP KMS provider" - clientOptions: - autoEncryptOpts: - kmsProviders: - kmip: {} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 1, encrypted_string_kmip: "string0" } - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: { $or: [ { _id: { $in: [ {'$binary': {'base64': 'dBHpr8aITfeBQ15grpbLpQ==', 'subType': '04'}} ] } }, { keyAltNames: { $in: [] } } ] } - $db: keyvault - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { _id: 1, encrypted_string_kmip: {'$binary': {'base64': 'AXQR6a/GiE33gUNeYK6Wy6UCKCwtKFIsL8eKObDVxvqGupJNUk7kXswHhB7G5j/C1D+6no+Asra0KgSU43bTL3ooIBLVyIzbV5CDJYqzAsa4WQ==', 'subType': '06'}} } - ordered: true - command_name: insert - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc0_encrypted \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/localKMS.json b/testdata/client-side-encryption/legacy/localKMS.json deleted file mode 100644 index 67c4ba1308..0000000000 --- a/testdata/client-side-encryption/legacy/localKMS.json +++ /dev/null @@ -1,191 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "json_schema": { - "properties": { - "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" - } - } - }, - "bsonType": "object" - }, - "key_vault_data": [ - { - "_id": { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "Ce9HSz/HKKGkIt4uyy+jDuKGA+rLC2cycykMo6vc8jXxqa1UVDYHWq1r+vZKbnnSRBfB981akzRKZCFpC05CTyFqDhXv6OnMjpG97OZEREGIsHEYiJkBW0jJJvfLLgeLsEpBzsro9FztGGXASxyxFRZFhXvHxyiLOKrdWfs7X1O/iK3pEoHMx6uSNSfUOgbebLfIqW7TO++iQS5g1xovXA==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1552949630483" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1552949630483" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ], - "tests": [ - { - "description": "Insert a document with auto encryption using local KMS provider", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {}, - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_string": "string0", - "random": "abc" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault" - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACV/+zJmpqMU47yxS/xIVAviGi7wHDuFwaULAixEAoIh0xHz73UYOM3D8D44gcJn67EROjbz4ITpYzzlCJovDL0Q==", - "subType": "06" - } - }, - "random": { - "$$type": "binData" - } - } - ], - "ordered": true - }, - "command_name": "insert" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACV/+zJmpqMU47yxS/xIVAviGi7wHDuFwaULAixEAoIh0xHz73UYOM3D8D44gcJn67EROjbz4ITpYzzlCJovDL0Q==", - "subType": "06" - } - }, - "random": { - "$$type": "binData" - } - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/localKMS.yml b/testdata/client-side-encryption/legacy/localKMS.yml deleted file mode 100644 index 4c0d962f32..0000000000 --- a/testdata/client-side-encryption/legacy/localKMS.yml +++ /dev/null @@ -1,47 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: [] -json_schema: {'properties': {'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'}}}, 'bsonType': 'object'} -key_vault_data: [{'_id': {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'Ce9HSz/HKKGkIt4uyy+jDuKGA+rLC2cycykMo6vc8jXxqa1UVDYHWq1r+vZKbnnSRBfB981akzRKZCFpC05CTyFqDhXv6OnMjpG97OZEREGIsHEYiJkBW0jJJvfLLgeLsEpBzsro9FztGGXASxyxFRZFhXvHxyiLOKrdWfs7X1O/iK3pEoHMx6uSNSfUOgbebLfIqW7TO++iQS5g1xovXA==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1552949630483'}}, 'updateDate': {'$date': {'$numberLong': '1552949630483'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}}] - -tests: - - description: "Insert a document with auto encryption using local KMS provider" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 1, encrypted_string: "string0", random: "abc" } - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: { $or: [ { _id: { $in: [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] } }, { keyAltNames: { $in: [] } } ] } - $db: keyvault - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACV/+zJmpqMU47yxS/xIVAviGi7wHDuFwaULAixEAoIh0xHz73UYOM3D8D44gcJn67EROjbz4ITpYzzlCJovDL0Q==', 'subType': '06'}}, random: { $$type: "binData" } } - ordered: true - command_name: insert - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc0_encrypted \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/localSchema.json b/testdata/client-side-encryption/legacy/localSchema.json deleted file mode 100644 index 4698520f6f..0000000000 --- a/testdata/client-side-encryption/legacy/localSchema.json +++ /dev/null @@ -1,258 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "json_schema": {}, - "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" - ] - } - ], - "tests": [ - { - "description": "A local schema should override", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "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" - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_string": "string0" - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": [ - { - "_id": 1, - "encrypted_string": "string0" - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - ], - "ordered": true - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "_id": 1 - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - ] - } - } - }, - { - "description": "A local schema with no encryption is an error", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "properties": { - "test": { - "bsonType": "string" - } - }, - "bsonType": "object", - "required": [ - "test" - ] - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_string": "string0" - } - }, - "result": { - "errorContains": "JSON schema keyword 'required' is only allowed with a remote schema" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/localSchema.yml b/testdata/client-side-encryption/legacy/localSchema.yml deleted file mode 100644 index 89b4bd51d0..0000000000 --- a/testdata/client-side-encryption/legacy/localSchema.yml +++ /dev/null @@ -1,65 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: [] -# configure an empty schema -json_schema: {} -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']}] - -tests: - - description: "A local schema should override" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'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'} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 1, encrypted_string: "string0" } - - name: find - arguments: - filter: { _id: 1 } - result: [*doc0] - expectations: - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } - ordered: true - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: { _id: 1 } - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc0_encrypted - - description: "A local schema with no encryption is an error" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'properties': {'test': {'bsonType': 'string'}}, 'bsonType': 'object', 'required': ['test']} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: { _id: 1, encrypted_string: "string0" } - result: - errorContains: "JSON schema keyword 'required' is only allowed with a remote schema" \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/malformedCiphertext.json b/testdata/client-side-encryption/legacy/malformedCiphertext.json deleted file mode 100644 index c81330ce83..0000000000 --- a/testdata/client-side-encryption/legacy/malformedCiphertext.json +++ /dev/null @@ -1,321 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "00" - } - } - }, - { - "_id": 2, - "encrypted_string": { - "$binary": { - "base64": "AQ==", - "subType": "06" - } - } - }, - { - "_id": 3, - "encrypted_string": { - "$binary": { - "base64": "AQAAa2V2aW4gYWxiZXJ0c29uCg==", - "subType": "06" - } - } - } - ], - "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" - ] - } - ], - "tests": [ - { - "description": "Wrong subtype", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "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" - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "find", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "00" - } - } - } - ] - } - ] - }, - { - "description": "Empty data", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "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" - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "find", - "arguments": { - "filter": { - "_id": 2 - } - }, - "result": { - "errorContains": "malformed ciphertext" - } - } - ] - }, - { - "description": "Malformed data", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "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" - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "find", - "arguments": { - "filter": { - "_id": 3 - } - }, - "result": { - "errorContains": "not all keys requested were satisfied" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/malformedCiphertext.yml b/testdata/client-side-encryption/legacy/malformedCiphertext.yml deleted file mode 100644 index e27c1dfdc2..0000000000 --- a/testdata/client-side-encryption/legacy/malformedCiphertext.yml +++ /dev/null @@ -1,69 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: - - &doc0 - _id: 1 - encrypted_string: - $binary: - base64: AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg== - subType: "00" - - _id: 2 - encrypted_string: - $binary: - base64: "AQ==" - subType: "06" - - _id: 3 - encrypted_string: - $binary: - base64: "AQAAa2V2aW4gYWxiZXJ0c29uCg==" - subType: "06" - -# Since test requires invalid data to be inserted, use a local schema. -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']}] - -tests: - - description: "Wrong subtype" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'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'} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: find - arguments: - filter: { _id: 1 } - result: - # gets returned without decryption - - *doc0 - - description: "Empty data" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'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'} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: find - arguments: - filter: { _id: 2 } - result: - errorContains: "malformed ciphertext" - - description: "Malformed data" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'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'} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: find - arguments: - filter: { _id: 3 } - result: - # ciphertext can only validate subtype (which is correct) - # but takes the 16 byte UUID to look up key. Fails to find. - errorContains: "not all keys requested were satisfied" \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/maxWireVersion.json b/testdata/client-side-encryption/legacy/maxWireVersion.json deleted file mode 100644 index f04f58dffd..0000000000 --- a/testdata/client-side-encryption/legacy/maxWireVersion.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "runOn": [ - { - "maxServerVersion": "4.0.99" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "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" - ] - } - ], - "tests": [ - { - "description": "operation fails with maxWireVersion < 8", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - }, - "extraOptions": { - "mongocryptdBypassSpawn": true - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "encrypted_string": "string0" - } - }, - "result": { - "errorContains": "Auto-encryption requires a minimum MongoDB version of 4.2" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/maxWireVersion.yml b/testdata/client-side-encryption/legacy/maxWireVersion.yml deleted file mode 100644 index 87c4c993f9..0000000000 --- a/testdata/client-side-encryption/legacy/maxWireVersion.yml +++ /dev/null @@ -1,22 +0,0 @@ -runOn: - - maxServerVersion: "4.0.99" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: [] -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']}] - -tests: - - description: "operation fails with maxWireVersion < 8" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - extraOptions: - mongocryptdBypassSpawn: true # mongocryptd probably won't be on the path - operations: - - name: insertOne - arguments: - document: { encrypted_string: "string0" } - result: - errorContains: "Auto-encryption requires a minimum MongoDB version of 4.2" \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/missingKey.json b/testdata/client-side-encryption/legacy/missingKey.json deleted file mode 100644 index 275147bb72..0000000000 --- a/testdata/client-side-encryption/legacy/missingKey.json +++ /dev/null @@ -1,179 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "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" - }, - "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" - ] - } - ], - "tests": [ - { - "description": "Insert with encryption on a missing key", - "clientOptions": { - "autoEncryptOpts": { - "keyVaultNamespace": "keyvault.different", - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_string": "string0", - "random": "abc" - } - }, - "result": { - "errorContains": "not all keys requested were satisfied" - } - } - ], - "outcome": { - "collection": { - "data": [] - } - }, - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "different", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/missingKey.yml b/testdata/client-side-encryption/legacy/missingKey.yml deleted file mode 100644 index 2be5395108..0000000000 --- a/testdata/client-side-encryption/legacy/missingKey.yml +++ /dev/null @@ -1,42 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: [] -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'} -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']}] - -tests: - - description: "Insert with encryption on a missing key" - clientOptions: - autoEncryptOpts: - keyVaultNamespace: "keyvault.different" - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 1, encrypted_string: "string0", random: "abc" } - result: - errorContains: "not all keys requested were satisfied" - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: [] - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: different - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/noSchema.json b/testdata/client-side-encryption/legacy/noSchema.json deleted file mode 100644 index 095434f886..0000000000 --- a/testdata/client-side-encryption/legacy/noSchema.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "unencrypted", - "tests": [ - { - "description": "Insert on an unencrypted collection", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1 - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "unencrypted" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "insert": "unencrypted", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true - }, - "command_name": "insert" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/noSchema.yml b/testdata/client-side-encryption/legacy/noSchema.yml deleted file mode 100644 index 5c6811688f..0000000000 --- a/testdata/client-side-encryption/legacy/noSchema.yml +++ /dev/null @@ -1,37 +0,0 @@ -# Test auto encryption on a collection with no jsonSchema configured. -# This is a regression test for MONGOCRYPT-378/PYTHON-3188. -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "unencrypted" - -tests: - - description: "Insert on an unencrypted collection" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 1 } - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - insert: *collection_name - documents: - - *doc0 - ordered: true - command_name: insert - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc0 \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/replaceOne.json b/testdata/client-side-encryption/legacy/replaceOne.json deleted file mode 100644 index 9757686819..0000000000 --- a/testdata/client-side-encryption/legacy/replaceOne.json +++ /dev/null @@ -1,239 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - ], - "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" - }, - "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" - ] - } - ], - "tests": [ - { - "description": "replaceOne with encryption", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "replaceOne", - "arguments": { - "filter": { - "encrypted_string": "string0" - }, - "replacement": { - "encrypted_string": "string1", - "random": "abc" - } - }, - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "update": "default", - "updates": [ - { - "q": { - "encrypted_string": { - "$eq": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - }, - "u": { - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - }, - "random": { - "$$type": "binData" - } - } - } - ], - "ordered": true - }, - "command_name": "update" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - }, - "random": { - "$$type": "binData" - } - } - ] - } - } - } - ] -} diff --git a/testdata/client-side-encryption/legacy/replaceOne.yml b/testdata/client-side-encryption/legacy/replaceOne.yml deleted file mode 100644 index e3b50a828b..0000000000 --- a/testdata/client-side-encryption/legacy/replaceOne.yml +++ /dev/null @@ -1,54 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: - - &doc0_encrypted { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } -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'} -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']}] - -tests: - - description: "replaceOne with encryption" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: replaceOne - arguments: - filter: { encrypted_string: "string0" } - replacement: { encrypted_string: "string1", random: "abc" } - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - update: *collection_name - updates: - - q: { encrypted_string: { $eq: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } } - u: { encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}}, random: { $$type: "binData" } } - ordered: true - command_name: update - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}}, random: { $$type: "binData" } } \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/types.json b/testdata/client-side-encryption/legacy/types.json deleted file mode 100644 index a6c6507e90..0000000000 --- a/testdata/client-side-encryption/legacy/types.json +++ /dev/null @@ -1,1646 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "json_schema": {}, - "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" - ] - } - ], - "tests": [ - { - "description": "type=objectId", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "properties": { - "encrypted_objectId": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "objectId", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - } - }, - "bsonType": "object" - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_objectId": { - "$oid": "AAAAAAAAAAAAAAAAAAAAAAAA" - } - } - } - }, - { - "name": "findOne", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": { - "_id": 1, - "encrypted_objectId": { - "$oid": "AAAAAAAAAAAAAAAAAAAAAAAA" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encrypted_objectId": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAAHmkTPqvzfHMWpvS1mEsrjOxVQ2dyihEgIFWD5E0eNEsiMBQsC0GuvjdqYRL5DHLFI1vKuGek7EYYp0Qyii/tHqA==", - "subType": "06" - } - } - } - ], - "ordered": true - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "_id": 1 - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_objectId": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAAHmkTPqvzfHMWpvS1mEsrjOxVQ2dyihEgIFWD5E0eNEsiMBQsC0GuvjdqYRL5DHLFI1vKuGek7EYYp0Qyii/tHqA==", - "subType": "06" - } - } - } - ] - } - } - }, - { - "description": "type=symbol", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "properties": { - "encrypted_symbol": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "symbol", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - } - }, - "bsonType": "object" - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_symbol": { - "$symbol": "test" - } - } - } - }, - { - "name": "findOne", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": { - "_id": 1, - "encrypted_symbol": { - "$symbol": "test" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encrypted_symbol": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAAOOmvDmWjcuKsSCO7U/7t9HJ8eI73B6wduyMbdkvn7n7V4uTJes/j+BTtneSdyG2JHKHGkevWAJSIU2XoO66BSXw==", - "subType": "06" - } - } - } - ], - "ordered": true - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "_id": 1 - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_symbol": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAAOOmvDmWjcuKsSCO7U/7t9HJ8eI73B6wduyMbdkvn7n7V4uTJes/j+BTtneSdyG2JHKHGkevWAJSIU2XoO66BSXw==", - "subType": "06" - } - } - } - ] - } - } - }, - { - "description": "type=int", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "properties": { - "encrypted_int": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "int", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - } - }, - "bsonType": "object" - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_int": { - "$numberInt": "123" - } - } - } - }, - { - "name": "findOne", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": { - "_id": 1, - "encrypted_int": { - "$numberInt": "123" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encrypted_int": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAAQPNXJVXMEjGZnftMuf2INKufXCtQIRHdw5wTgn6QYt3ejcoAXyiwI4XIUizkpsob494qpt2in4tWeiO7b9zkA8Q==", - "subType": "06" - } - } - } - ], - "ordered": true - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "_id": 1 - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_int": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAAQPNXJVXMEjGZnftMuf2INKufXCtQIRHdw5wTgn6QYt3ejcoAXyiwI4XIUizkpsob494qpt2in4tWeiO7b9zkA8Q==", - "subType": "06" - } - } - } - ] - } - } - }, - { - "description": "type=double", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "properties": { - "encrypted_double": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "double", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - } - }, - "bsonType": "object" - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_double": { - "$numberDouble": "1.23" - } - } - }, - "result": { - "errorContains": "element of type: double" - } - } - ] - }, - { - "description": "type=decimal", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "properties": { - "encrypted_decimal": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "decimal", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - } - }, - "bsonType": "object" - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_decimal": { - "$numberDecimal": "1.23" - } - } - }, - "result": { - "errorContains": "element of type: decimal" - } - } - ] - }, - { - "description": "type=binData", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "properties": { - "encrypted_binData": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "binData", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - } - }, - "bsonType": "object" - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_binData": { - "$binary": { - "base64": "AAAA", - "subType": "00" - } - } - } - } - }, - { - "name": "findOne", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": { - "_id": 1, - "encrypted_binData": { - "$binary": { - "base64": "AAAA", - "subType": "00" - } - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encrypted_binData": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAAFB/KHZQHaHHo8fctcl7v6kR+sLkJoTRx2cPSSck9ya+nbGROSeFhdhDRHaCzhV78fDEqnMDSVPNi+ZkbaIh46GQ==", - "subType": "06" - } - } - } - ], - "ordered": true - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "_id": 1 - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_binData": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAAFB/KHZQHaHHo8fctcl7v6kR+sLkJoTRx2cPSSck9ya+nbGROSeFhdhDRHaCzhV78fDEqnMDSVPNi+ZkbaIh46GQ==", - "subType": "06" - } - } - } - ] - } - } - }, - { - "description": "type=javascript", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "properties": { - "encrypted_javascript": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "javascript", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - } - }, - "bsonType": "object" - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_javascript": { - "$code": "var x = 1;" - } - } - } - }, - { - "name": "findOne", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": { - "_id": 1, - "encrypted_javascript": { - "$code": "var x = 1;" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encrypted_javascript": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAANrvMgJkTKWGMc9wt3E2RBR2Hu5gL9p+vIIdHe9FcOm99t1W480/oX1Gnd87ON3B399DuFaxi/aaIiQSo7gTX6Lw==", - "subType": "06" - } - } - } - ], - "ordered": true - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "_id": 1 - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_javascript": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAANrvMgJkTKWGMc9wt3E2RBR2Hu5gL9p+vIIdHe9FcOm99t1W480/oX1Gnd87ON3B399DuFaxi/aaIiQSo7gTX6Lw==", - "subType": "06" - } - } - } - ] - } - } - }, - { - "description": "type=javascriptWithScope", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "properties": { - "encrypted_javascriptWithScope": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "javascriptWithScope", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - } - }, - "bsonType": "object" - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_javascriptWithScope": { - "$code": "var x = 1;", - "$scope": {} - } - } - }, - "result": { - "errorContains": "element of type: javascriptWithScope" - } - } - ] - }, - { - "description": "type=object", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "properties": { - "encrypted_object": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "object", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - } - }, - "bsonType": "object" - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_object": {} - } - }, - "result": { - "errorContains": "element of type: object" - } - } - ] - }, - { - "description": "type=timestamp", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "properties": { - "encrypted_timestamp": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "timestamp", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - } - }, - "bsonType": "object" - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_timestamp": { - "$timestamp": { - "t": 123, - "i": 456 - } - } - } - } - }, - { - "name": "findOne", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": { - "_id": 1, - "encrypted_timestamp": { - "$timestamp": { - "t": 123, - "i": 456 - } - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encrypted_timestamp": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAARJHaM4Gq3MpDTdBasBsEolQaOmxJQU1wsZVaSFAOLpEh1QihDglXI95xemePFMKhg+KNpFg7lw1ChCs2Wn/c26Q==", - "subType": "06" - } - } - } - ], - "ordered": true - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "_id": 1 - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_timestamp": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAARJHaM4Gq3MpDTdBasBsEolQaOmxJQU1wsZVaSFAOLpEh1QihDglXI95xemePFMKhg+KNpFg7lw1ChCs2Wn/c26Q==", - "subType": "06" - } - } - } - ] - } - } - }, - { - "description": "type=regex", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "properties": { - "encrypted_regex": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "regex", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - } - }, - "bsonType": "object" - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_regex": { - "$regularExpression": { - "pattern": "test", - "options": "" - } - } - } - } - }, - { - "name": "findOne", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": { - "_id": 1, - "encrypted_regex": { - "$regularExpression": { - "pattern": "test", - "options": "" - } - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encrypted_regex": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAALVnxM4UqGhqf5eXw6nsS08am3YJrTf1EvjKitT8tyyMAbHsICIU3GUjuC7EBofCHbusvgo7pDyaClGostFz44nA==", - "subType": "06" - } - } - } - ], - "ordered": true - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "_id": 1 - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_regex": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAALVnxM4UqGhqf5eXw6nsS08am3YJrTf1EvjKitT8tyyMAbHsICIU3GUjuC7EBofCHbusvgo7pDyaClGostFz44nA==", - "subType": "06" - } - } - } - ] - } - } - }, - { - "description": "type=date", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "properties": { - "encrypted_date": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "date", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - } - }, - "bsonType": "object" - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_date": { - "$date": { - "$numberLong": "123" - } - } - } - } - }, - { - "name": "findOne", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": { - "_id": 1, - "encrypted_date": { - "$date": { - "$numberLong": "123" - } - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "insert": "default", - "documents": [ - { - "_id": 1, - "encrypted_date": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAAJ5sN7u6l97+DswfKTqZAijSTSOo5htinGKQKUD7pHNJYlLXGOkB4glrCu7ibu0g3344RHQ5yUp4YxMEa8GD+Snw==", - "subType": "06" - } - } - } - ], - "ordered": true - }, - "command_name": "insert" - } - }, - { - "command_started_event": { - "command": { - "find": "default", - "filter": { - "_id": 1 - } - }, - "command_name": "find" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_date": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAAJ5sN7u6l97+DswfKTqZAijSTSOo5htinGKQKUD7pHNJYlLXGOkB4glrCu7ibu0g3344RHQ5yUp4YxMEa8GD+Snw==", - "subType": "06" - } - } - } - ] - } - } - }, - { - "description": "type=minKey", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "properties": { - "encrypted_minKey": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "minKey", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - } - }, - "bsonType": "object" - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_minKey": { - "$minKey": 1 - } - } - }, - "result": { - "errorContains": "Cannot encrypt element of type: minKey" - } - } - ] - }, - { - "description": "type=maxKey", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "properties": { - "encrypted_maxKey": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "maxKey", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - } - }, - "bsonType": "object" - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_maxKey": { - "$maxKey": 1 - } - } - }, - "result": { - "errorContains": "Cannot encrypt element of type: maxKey" - } - } - ] - }, - { - "description": "type=undefined", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "properties": { - "encrypted_undefined": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "undefined", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - } - }, - "bsonType": "object" - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_undefined": { - "$undefined": true - } - } - }, - "result": { - "errorContains": "Cannot encrypt element of type: undefined" - } - } - ] - }, - { - "description": "type=array", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "properties": { - "encrypted_array": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "array", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - } - }, - "bsonType": "object" - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_array": [] - } - }, - "result": { - "errorContains": "element of type: array" - } - } - ] - }, - { - "description": "type=bool", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "properties": { - "encrypted_bool": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "bool", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - } - }, - "bsonType": "object" - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_bool": true - } - }, - "result": { - "errorContains": "element of type: bool" - } - } - ] - }, - { - "description": "type=null", - "clientOptions": { - "autoEncryptOpts": { - "schemaMap": { - "default.default": { - "properties": { - "encrypted_null": { - "encrypt": { - "keyId": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ], - "bsonType": "null", - "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" - } - } - }, - "bsonType": "object" - } - }, - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 1, - "encrypted_null": true - } - }, - "result": { - "errorContains": "Cannot encrypt element of type: null" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/types.yml b/testdata/client-side-encryption/legacy/types.yml deleted file mode 100644 index 871bc115fa..0000000000 --- a/testdata/client-side-encryption/legacy/types.yml +++ /dev/null @@ -1,501 +0,0 @@ -# Attempt to round trip some BSON types. -# Note: db pointer is excluded since it is deprecated and numberlong is excluded due to different driver interpretations of { $numberLong: '123' } in relaxed JSON parsing. - -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: [] -json_schema: {} -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']}] - -tests: - - description: "type=objectId" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'properties': {'encrypted_objectId': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'objectId', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}}, 'bsonType': 'object'} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc0 { _id: 1, encrypted_objectId: {"$oid": "AAAAAAAAAAAAAAAAAAAAAAAA"} } - - name: findOne - arguments: - filter: { _id: 1 } - result: *doc0 - expectations: - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc0_encrypted { _id: 1, encrypted_objectId: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAAHmkTPqvzfHMWpvS1mEsrjOxVQ2dyihEgIFWD5E0eNEsiMBQsC0GuvjdqYRL5DHLFI1vKuGek7EYYp0Qyii/tHqA==', 'subType': '06'}} } - ordered: true - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: {_id: 1} - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc0_encrypted - - description: "type=symbol" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'properties': {'encrypted_symbol': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'symbol', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}}, 'bsonType': 'object'} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc1 { _id: 1, encrypted_symbol: {"$symbol": "test"} } - - name: findOne - arguments: - filter: { _id: 1 } - result: *doc1 - expectations: - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc1_encrypted { _id: 1, encrypted_symbol: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAAOOmvDmWjcuKsSCO7U/7t9HJ8eI73B6wduyMbdkvn7n7V4uTJes/j+BTtneSdyG2JHKHGkevWAJSIU2XoO66BSXw==', 'subType': '06'}} } - ordered: true - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: {_id: 1} - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc1_encrypted - - description: "type=int" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'properties': {'encrypted_int': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'int', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}}, 'bsonType': 'object'} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc2 { _id: 1, encrypted_int: {"$numberInt": "123"} } - - name: findOne - arguments: - filter: { _id: 1 } - result: *doc2 - expectations: - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc2_encrypted { _id: 1, encrypted_int: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAAQPNXJVXMEjGZnftMuf2INKufXCtQIRHdw5wTgn6QYt3ejcoAXyiwI4XIUizkpsob494qpt2in4tWeiO7b9zkA8Q==', 'subType': '06'}} } - ordered: true - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: {_id: 1} - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc2_encrypted - - description: "type=double" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'properties': {'encrypted_double': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'double', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}}, 'bsonType': 'object'} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc4 { _id: 1, encrypted_double: {"$numberDouble": "1.23"} } - result: - # DRIVERS-2272: The expected error message changed in mongocryptd 6.0. Before it was: - # "Cannot use deterministic encryption for element of type: double" - # After it is: - # "Cannot encrypt element of type: double" - # Only check for the common suffix. - errorContains: "element of type: double" - - description: "type=decimal" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'properties': {'encrypted_decimal': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'decimal', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}}, 'bsonType': 'object'} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc5 { _id: 1, encrypted_decimal: {"$numberDecimal": "1.23"} } - result: - # DRIVERS-2272: The expected error message changed in mongocryptd 6.0. Before it was: - # "Cannot use deterministic encryption for element of type: decimal" - # After it is: - # "Cannot encrypt element of type: decimal" - # Only check for the common suffix. - errorContains: "element of type: decimal" - - description: "type=binData" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'properties': {'encrypted_binData': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'binData', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}}, 'bsonType': 'object'} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc6 { _id: 1, encrypted_binData: {"$binary": { base64: "AAAA", subType: "00" } } } - - name: findOne - arguments: - filter: { _id: 1 } - result: *doc6 - expectations: - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc6_encrypted { _id: 1, encrypted_binData: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAAFB/KHZQHaHHo8fctcl7v6kR+sLkJoTRx2cPSSck9ya+nbGROSeFhdhDRHaCzhV78fDEqnMDSVPNi+ZkbaIh46GQ==', 'subType': '06'}} } - ordered: true - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: {_id: 1} - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc6_encrypted - - description: "type=javascript" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'properties': {'encrypted_javascript': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'javascript', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}}, 'bsonType': 'object'} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc7 { _id: 1, encrypted_javascript: {"$code": "var x = 1;" } } - - name: findOne - arguments: - filter: { _id: 1 } - result: *doc7 - expectations: - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc7_encrypted { _id: 1, encrypted_javascript: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAANrvMgJkTKWGMc9wt3E2RBR2Hu5gL9p+vIIdHe9FcOm99t1W480/oX1Gnd87ON3B399DuFaxi/aaIiQSo7gTX6Lw==', 'subType': '06'}} } - ordered: true - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: {_id: 1} - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc7_encrypted - - description: "type=javascriptWithScope" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'properties': {'encrypted_javascriptWithScope': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'javascriptWithScope', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}}, 'bsonType': 'object'} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc8 { _id: 1, encrypted_javascriptWithScope: {"$code": "var x = 1;", "$scope": {} } } - result: - # DRIVERS-2272: The expected error message changed in mongocryptd 6.0. Before it was: - # "Cannot use deterministic encryption for element of type: javascriptWithScope" - # After it is: - # "Cannot encrypt element of type: javascriptWithScope" - # Only check for the common suffix. - errorContains: "element of type: javascriptWithScope" - - description: "type=object" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'properties': {'encrypted_object': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'object', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}}, 'bsonType': 'object'} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc9 { _id: 1, encrypted_object: {} } - result: - # DRIVERS-2272: The expected error message changed in mongocryptd 6.0. Before it was: - # "Cannot use deterministic encryption for element of type: object" - # After it is: - # "Cannot encrypt element of type: object" - # Only check for the common suffix. - errorContains: "element of type: object" - - description: "type=timestamp" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'properties': {'encrypted_timestamp': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'timestamp', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}}, 'bsonType': 'object'} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc10 { _id: 1, encrypted_timestamp: {$timestamp: {t: 123, i: 456}} } - - name: findOne - arguments: - filter: { _id: 1 } - result: *doc10 - expectations: - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc10_encrypted { _id: 1, encrypted_timestamp: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAARJHaM4Gq3MpDTdBasBsEolQaOmxJQU1wsZVaSFAOLpEh1QihDglXI95xemePFMKhg+KNpFg7lw1ChCs2Wn/c26Q==', 'subType': '06'}} } - ordered: true - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: {_id: 1} - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc10_encrypted - - description: "type=regex" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'properties': {'encrypted_regex': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'regex', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}}, 'bsonType': 'object'} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc11 { _id: 1, encrypted_regex: {$regularExpression: { pattern: "test", options: ""}} } - - name: findOne - arguments: - filter: { _id: 1 } - result: *doc11 - expectations: - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc11_encrypted { _id: 1, encrypted_regex: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAALVnxM4UqGhqf5eXw6nsS08am3YJrTf1EvjKitT8tyyMAbHsICIU3GUjuC7EBofCHbusvgo7pDyaClGostFz44nA==', 'subType': '06'}} } - ordered: true - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: {_id: 1} - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc11_encrypted - - description: "type=date" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'properties': {'encrypted_date': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'date', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}}, 'bsonType': 'object'} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc13 { _id: 1, encrypted_date: {$date: { $numberLong: "123" }} } - - name: findOne - arguments: - filter: { _id: 1 } - result: *doc13 - expectations: - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - insert: *collection_name - documents: - - &doc13_encrypted { _id: 1, encrypted_date: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAAJ5sN7u6l97+DswfKTqZAijSTSOo5htinGKQKUD7pHNJYlLXGOkB4glrCu7ibu0g3344RHQ5yUp4YxMEa8GD+Snw==', 'subType': '06'}} } - ordered: true - command_name: insert - - command_started_event: - command: - find: *collection_name - filter: {_id: 1} - command_name: find - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - *doc13_encrypted - - description: "type=minKey" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'properties': {'encrypted_minKey': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'minKey', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}}, 'bsonType': 'object'} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc14 { _id: 1, encrypted_minKey: {$minKey: 1} } - result: - errorContains: "Cannot encrypt element of type: minKey" - - description: "type=maxKey" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'properties': {'encrypted_maxKey': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'maxKey', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}}, 'bsonType': 'object'} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc15 { _id: 1, encrypted_maxKey: {$maxKey: 1} } - result: - errorContains: "Cannot encrypt element of type: maxKey" - - description: "type=undefined" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'properties': {'encrypted_undefined': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'undefined', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}}, 'bsonType': 'object'} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc16 { _id: 1, encrypted_undefined: {$undefined: true} } - result: - errorContains: "Cannot encrypt element of type: undefined" - - description: "type=array" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'properties': {'encrypted_array': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'array', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}}, 'bsonType': 'object'} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc17 { _id: 1, encrypted_array: [] } - result: - # DRIVERS-2272: The expected error message changed in mongocryptd 6.0. Before it was: - # "Cannot use deterministic encryption for element of type: array" - # After it is: - # "Cannot encrypt element of type: array" - # Only check for the common suffix. - errorContains: "element of type: array" - - description: "type=bool" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'properties': {'encrypted_bool': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'bool', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}}, 'bsonType': 'object'} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc18 { _id: 1, encrypted_bool: true } - result: - # DRIVERS-2272: The expected error message changed in mongocryptd 6.0. Before it was: - # "Cannot use deterministic encryption for element of type: bool" - # After it is: - # "Cannot encrypt element of type: bool" - # Only check for the common suffix. - errorContains: "element of type: bool" - - description: "type=null" - clientOptions: - autoEncryptOpts: - schemaMap: - "default.default": {'properties': {'encrypted_null': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'null', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}}, 'bsonType': 'object'} - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: insertOne - arguments: - document: &doc19 { _id: 1, encrypted_null: true } - result: - errorContains: "Cannot encrypt element of type: null" \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/unsupportedCommand.json b/testdata/client-side-encryption/legacy/unsupportedCommand.json deleted file mode 100644 index 3188715115..0000000000 --- a/testdata/client-side-encryption/legacy/unsupportedCommand.json +++ /dev/null @@ -1,152 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [ - { - "_id": 1, - "x": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - }, - { - "_id": 2, - "x": 2, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - } - ], - "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" - }, - "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" - ] - } - ], - "tests": [ - { - "description": "mapReduce deterministic encryption (unsupported)", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "mapReduce", - "arguments": { - "map": { - "$code": "function inc() { return emit(0, this.x + 1) }" - }, - "reduce": { - "$code": "function sum(key, values) { return values.reduce((acc, x) => acc + x); }" - }, - "out": { - "inline": 1 - } - }, - "result": { - "errorContains": "command not supported for auto encryption: mapreduce" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/unsupportedCommand.yml b/testdata/client-side-encryption/legacy/unsupportedCommand.yml deleted file mode 100644 index e9edb0f58f..0000000000 --- a/testdata/client-side-encryption/legacy/unsupportedCommand.yml +++ /dev/null @@ -1,25 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: - - &doc0_encrypted { _id: 1, x: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } - - &doc1_encrypted { _id: 2, x: 2, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}} } -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'} -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']}] - -tests: - - description: "mapReduce deterministic encryption (unsupported)" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: mapReduce - arguments: - map: { $code: "function inc() { return emit(0, this.x + 1) }" } - reduce: { $code: "function sum(key, values) { return values.reduce((acc, x) => acc + x); }" } - out: { inline: 1 } - result: - errorContains: "command not supported for auto encryption: mapreduce" \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/updateMany.json b/testdata/client-side-encryption/legacy/updateMany.json deleted file mode 100644 index 823909044b..0000000000 --- a/testdata/client-side-encryption/legacy/updateMany.json +++ /dev/null @@ -1,307 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - }, - { - "_id": 2, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - } - ], - "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" - }, - "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" - ] - } - ], - "tests": [ - { - "description": "updateMany with deterministic encryption", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "updateMany", - "arguments": { - "filter": { - "encrypted_string": { - "$in": [ - "string0", - "string1" - ] - } - }, - "update": { - "$set": { - "encrypted_string": "string2", - "random": "abc" - } - } - }, - "result": { - "matchedCount": 2, - "modifiedCount": 2, - "upsertedCount": 0 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "update": "default", - "updates": [ - { - "q": { - "encrypted_string": { - "$in": [ - { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - }, - { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - } - ] - } - }, - "u": { - "$set": { - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACQ76HWOut3DZtQuV90hp1aaCpZn95vZIaWmn+wrBehcEtcFwyJlBdlyzDzZTWPZCPgiFq72Wvh6Y7VbpU9NAp3A==", - "subType": "06" - } - }, - "random": { - "$$type": "binData" - } - } - }, - "multi": true, - "upsert": false - } - ], - "ordered": true - }, - "command_name": "update" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACQ76HWOut3DZtQuV90hp1aaCpZn95vZIaWmn+wrBehcEtcFwyJlBdlyzDzZTWPZCPgiFq72Wvh6Y7VbpU9NAp3A==", - "subType": "06" - } - }, - "random": { - "$$type": "binData" - } - }, - { - "_id": 2, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACQ76HWOut3DZtQuV90hp1aaCpZn95vZIaWmn+wrBehcEtcFwyJlBdlyzDzZTWPZCPgiFq72Wvh6Y7VbpU9NAp3A==", - "subType": "06" - } - }, - "random": { - "$$type": "binData" - } - } - ] - } - } - }, - { - "description": "updateMany fails when filtering on a random field", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "updateMany", - "arguments": { - "filter": { - "random": "abc" - }, - "update": { - "$set": { - "encrypted_string": "string1" - } - } - }, - "result": { - "errorContains": "Cannot query on fields encrypted with the randomized encryption" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/updateMany.yml b/testdata/client-side-encryption/legacy/updateMany.yml deleted file mode 100644 index 6d8c7e9707..0000000000 --- a/testdata/client-side-encryption/legacy/updateMany.yml +++ /dev/null @@ -1,70 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: - - &doc0_encrypted { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } - - &doc1_encrypted { _id: 2, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}} } -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'} -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']}] - -tests: - - description: "updateMany with deterministic encryption" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: updateMany - arguments: - filter: { encrypted_string: { $in: [ "string0", "string1" ] } } - update: { $set: { encrypted_string: "string2", random: "abc" } } - result: - matchedCount: 2 - modifiedCount: 2 - upsertedCount: 0 - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - update: *collection_name - updates: - - q: { encrypted_string: { $in: [ {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}}, {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}} ] } } - u: { $set: { encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACQ76HWOut3DZtQuV90hp1aaCpZn95vZIaWmn+wrBehcEtcFwyJlBdlyzDzZTWPZCPgiFq72Wvh6Y7VbpU9NAp3A==', 'subType': '06'}}, random: { $$type: "binData" } } } - multi: true - upsert: false - ordered: true - command_name: update - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACQ76HWOut3DZtQuV90hp1aaCpZn95vZIaWmn+wrBehcEtcFwyJlBdlyzDzZTWPZCPgiFq72Wvh6Y7VbpU9NAp3A==', 'subType': '06'}}, random: { $$type: "binData" } } - - { _id: 2, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACQ76HWOut3DZtQuV90hp1aaCpZn95vZIaWmn+wrBehcEtcFwyJlBdlyzDzZTWPZCPgiFq72Wvh6Y7VbpU9NAp3A==', 'subType': '06'}}, random: { $$type: "binData" } } - - description: "updateMany fails when filtering on a random field" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: updateMany - arguments: - filter: { random: "abc" } - update: { $set: { encrypted_string: "string1" } } - result: - errorContains: "Cannot query on fields encrypted with the randomized encryption" \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/updateOne.json b/testdata/client-side-encryption/legacy/updateOne.json deleted file mode 100644 index 23bada964f..0000000000 --- a/testdata/client-side-encryption/legacy/updateOne.json +++ /dev/null @@ -1,465 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.10" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - ], - "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" - }, - "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" - ] - } - ], - "tests": [ - { - "description": "updateOne with deterministic encryption", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "updateOne", - "arguments": { - "filter": { - "encrypted_string": "string0" - }, - "update": { - "$set": { - "encrypted_string": "string1", - "random": "abc" - } - } - }, - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "AAAAAAAAAAAAAAAAAAAAAA==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - }, - "command_name": "find" - } - }, - { - "command_started_event": { - "command": { - "update": "default", - "updates": [ - { - "q": { - "encrypted_string": { - "$eq": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - }, - "u": { - "$set": { - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - }, - "random": { - "$$type": "binData" - } - } - } - } - ], - "ordered": true - }, - "command_name": "update" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==", - "subType": "06" - } - }, - "random": { - "$$type": "binData" - } - } - ] - } - } - }, - { - "description": "updateOne fails when filtering on a random field", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "updateOne", - "arguments": { - "filter": { - "random": "abc" - }, - "update": { - "$set": { - "encrypted_string": "string1" - } - } - }, - "result": { - "errorContains": "Cannot query on fields encrypted with the randomized encryption" - } - } - ] - }, - { - "description": "$unset works with an encrypted field", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$unset": { - "encrypted_string": "" - } - } - }, - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "update": "default", - "updates": [ - { - "q": {}, - "u": { - "$unset": { - "encrypted_string": "" - } - } - } - ], - "ordered": true - }, - "command_name": "update" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - } - ] - } - } - }, - { - "description": "$rename works if target value has same encryption options", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$rename": { - "encrypted_string": "encrypted_string_equivalent" - } - } - }, - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1, - "filter": { - "name": "default" - } - }, - "command_name": "listCollections" - } - }, - { - "command_started_event": { - "command": { - "update": "default", - "updates": [ - { - "q": {}, - "u": { - "$rename": { - "encrypted_string": "encrypted_string_equivalent" - } - } - } - ], - "ordered": true - }, - "command_name": "update" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1, - "encrypted_string_equivalent": { - "$binary": { - "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==", - "subType": "06" - } - } - } - ] - } - } - }, - { - "description": "$rename fails if target value has different encryption options", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$rename": { - "encrypted_string": "random" - } - } - }, - "result": { - "errorContains": "$rename between two encrypted fields must have the same metadata or both be unencrypted" - } - } - ] - }, - { - "description": "an invalid update (no $ operators) is validated and errors", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "aws": {} - } - } - }, - "operations": [ - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "encrypted_string": "random" - } - }, - "result": { - "errorContains": "" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/updateOne.yml b/testdata/client-side-encryption/legacy/updateOne.yml deleted file mode 100644 index aef3716fad..0000000000 --- a/testdata/client-side-encryption/legacy/updateOne.yml +++ /dev/null @@ -1,160 +0,0 @@ -runOn: - - minServerVersion: "4.1.10" -database_name: &database_name "default" -collection_name: &collection_name "default" - -data: - - &doc0_encrypted { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } -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'} -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']}] - -tests: - - description: "updateOne with deterministic encryption" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: updateOne - arguments: - filter: { encrypted_string: "string0" } - update: { $set: { encrypted_string: "string1", random: "abc" } } - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - # Then key is fetched from the key vault. - - command_started_event: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - command_name: find - - command_started_event: - command: - update: *collection_name - updates: - - q: { encrypted_string: { $eq: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } } - u: { $set: {encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}}, random: { $$type: "binData" } } } - ordered: true - command_name: update - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}}, random: { $$type: "binData"} } - - description: "updateOne fails when filtering on a random field" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: updateOne - arguments: - filter: { random: "abc" } - update: { $set: { encrypted_string: "string1" } } - result: - errorContains: "Cannot query on fields encrypted with the randomized encryption" - - description: "$unset works with an encrypted field" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: updateOne - arguments: - filter: { } - update: { $unset: { encrypted_string: "" } } - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - update: *collection_name - updates: - - q: { } - u: { $unset: {encrypted_string: "" } } - ordered: true - command_name: update - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - { _id: 1 } - - description: "$rename works if target value has same encryption options" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: updateOne - arguments: - filter: { } - update: { $rename: { encrypted_string: "encrypted_string_equivalent" } } - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - expectations: - # Auto encryption will request the collection info. - - command_started_event: - command: - listCollections: 1 - filter: - name: *collection_name - command_name: listCollections - - command_started_event: - command: - update: *collection_name - updates: - - q: { } - u: { $rename: {encrypted_string: "encrypted_string_equivalent" } } - ordered: true - command_name: update - outcome: - collection: - # Outcome is checked using a separate MongoClient without auto encryption. - data: - - { _id: 1, encrypted_string_equivalent: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} } - - description: "$rename fails if target value has different encryption options" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: updateOne - arguments: - filter: { } - update: { $rename: { encrypted_string: "random" } } - result: - errorContains: "$rename between two encrypted fields must have the same metadata or both be unencrypted" - - description: "an invalid update (no $ operators) is validated and errors" - clientOptions: - autoEncryptOpts: - kmsProviders: - aws: {} # Credentials filled in from environment. - operations: - - name: updateOne - arguments: - filter: { } - update: { encrypted_string: "random" } - result: - errorContains: "" # Note, drivers differ in the error message. Just ensure an error is thrown. \ No newline at end of file diff --git a/testdata/client-side-encryption/legacy/validatorAndPartialFieldExpression.json b/testdata/client-side-encryption/legacy/validatorAndPartialFieldExpression.json deleted file mode 100644 index e07137ce15..0000000000 --- a/testdata/client-side-encryption/legacy/validatorAndPartialFieldExpression.json +++ /dev/null @@ -1,642 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "6.0.0" - } - ], - "database_name": "default", - "collection_name": "default", - "data": [], - "tests": [ - { - "description": "create with a validator on an unencrypted field is OK", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - }, - "schemaMap": { - "default.encryptedCollection": { - "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" - } - } - } - }, - "operations": [ - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "createCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection", - "validator": { - "unencrypted_string": "foo" - } - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "encryptedCollection" - } - } - ] - }, - { - "description": "create with a validator on an encrypted field is an error", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - }, - "schemaMap": { - "default.encryptedCollection": { - "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" - } - } - } - }, - "operations": [ - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "createCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection", - "validator": { - "encrypted_string": "foo" - } - }, - "result": { - "errorContains": "Comparison to encrypted fields not supported" - } - } - ] - }, - { - "description": "collMod with a validator on an unencrypted field is OK", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - }, - "schemaMap": { - "default.encryptedCollection": { - "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" - } - } - } - }, - "operations": [ - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "createCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "command": { - "collMod": "encryptedCollection", - "validator": { - "unencrypted_string": "foo" - } - } - } - } - ] - }, - { - "description": "collMod with a validator on an encrypted field is an error", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - }, - "schemaMap": { - "default.encryptedCollection": { - "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" - } - } - } - }, - "operations": [ - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "createCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "command": { - "collMod": "encryptedCollection", - "validator": { - "encrypted_string": "foo" - } - } - }, - "result": { - "errorContains": "Comparison to encrypted fields not supported" - } - } - ] - }, - { - "description": "createIndexes with a partialFilterExpression on an unencrypted field is OK", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - }, - "schemaMap": { - "default.encryptedCollection": { - "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" - } - } - } - }, - "operations": [ - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "createCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "command": { - "createIndexes": "encryptedCollection", - "indexes": [ - { - "name": "name", - "key": { - "name": 1 - }, - "partialFilterExpression": { - "unencrypted_string": "foo" - } - } - ] - } - } - }, - { - "name": "assertIndexExists", - "object": "testRunner", - "arguments": { - "database": "default", - "collection": "encryptedCollection", - "index": "name" - } - } - ] - }, - { - "description": "createIndexes with a partialFilterExpression on an encrypted field is an error", - "clientOptions": { - "autoEncryptOpts": { - "kmsProviders": { - "local": { - "key": { - "$binary": { - "base64": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk", - "subType": "00" - } - } - } - }, - "schemaMap": { - "default.encryptedCollection": { - "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" - } - } - } - }, - "operations": [ - { - "name": "dropCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "createCollection", - "object": "database", - "arguments": { - "collection": "encryptedCollection" - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "command": { - "createIndexes": "encryptedCollection", - "indexes": [ - { - "name": "name", - "key": { - "name": 1 - }, - "partialFilterExpression": { - "encrypted_string": "foo" - } - } - ] - } - }, - "result": { - "errorContains": "Comparison to encrypted fields not supported" - } - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/legacy/validatorAndPartialFieldExpression.yml b/testdata/client-side-encryption/legacy/validatorAndPartialFieldExpression.yml deleted file mode 100644 index d2b7ffaee6..0000000000 --- a/testdata/client-side-encryption/legacy/validatorAndPartialFieldExpression.yml +++ /dev/null @@ -1,166 +0,0 @@ -# This test requires libmongocrypt 1.5.0-alpha2. -runOn: - # Require server version 6.0.0 to get behavior added in SERVER-64911. - - minServerVersion: "6.0.0" - -database_name: &database_name "default" -collection_name: &collection_name "default" -data: [] -tests: - - description: "create with a validator on an unencrypted field is OK" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - schemaMap: - "default.encryptedCollection": {'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'} - operations: - # Drop to remove a collection that may exist from previous test runs. - - name: dropCollection - object: database - arguments: - collection: "encryptedCollection" - - name: createCollection - object: database - arguments: - collection: "encryptedCollection" - validator: - unencrypted_string: "foo" - - name: assertCollectionExists - object: testRunner - arguments: - database: *database_name - collection: "encryptedCollection" - - description: "create with a validator on an encrypted field is an error" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - schemaMap: - "default.encryptedCollection": {'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'} - operations: - # Drop to remove a collection that may exist from previous test runs. - - name: dropCollection - object: database - arguments: - collection: "encryptedCollection" - - name: createCollection - object: database - arguments: - collection: "encryptedCollection" - validator: - encrypted_string: "foo" - result: - errorContains: "Comparison to encrypted fields not supported" - - description: "collMod with a validator on an unencrypted field is OK" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - schemaMap: - "default.encryptedCollection": {'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'} - operations: - # Drop to remove a collection that may exist from previous test runs. - - name: dropCollection - object: database - arguments: - collection: "encryptedCollection" - - name: createCollection - object: database - arguments: - collection: "encryptedCollection" - - name: runCommand - object: database - arguments: - command: - collMod: "encryptedCollection" - validator: - unencrypted_string: "foo" - - description: "collMod with a validator on an encrypted field is an error" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - schemaMap: - "default.encryptedCollection": {'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'} - operations: - # Drop to remove a collection that may exist from previous test runs. - - name: dropCollection - object: database - arguments: - collection: "encryptedCollection" - - name: createCollection - object: database - arguments: - collection: "encryptedCollection" - - name: runCommand - object: database - arguments: - command: - collMod: "encryptedCollection" - validator: - encrypted_string: "foo" - result: - errorContains: "Comparison to encrypted fields not supported" - - description: "createIndexes with a partialFilterExpression on an unencrypted field is OK" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - schemaMap: - "default.encryptedCollection": {'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'} - operations: - # Drop to remove a collection that may exist from previous test runs. - - name: dropCollection - object: database - arguments: - collection: "encryptedCollection" - - name: createCollection - object: database - arguments: - collection: "encryptedCollection" - - name: runCommand - object: database - arguments: - command: - createIndexes: "encryptedCollection" - indexes: - - name: "name" - key: { name: 1 } - partialFilterExpression: - unencrypted_string: "foo" - - name: assertIndexExists - object: testRunner - arguments: - database: *database_name - collection: "encryptedCollection" - index: name - - description: "createIndexes with a partialFilterExpression on an encrypted field is an error" - clientOptions: - autoEncryptOpts: - kmsProviders: - local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}} - schemaMap: - "default.encryptedCollection": {'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'} - operations: - # Drop to remove a collection that may exist from previous test runs. - - name: dropCollection - object: database - arguments: - collection: "encryptedCollection" - - name: createCollection - object: database - arguments: - collection: "encryptedCollection" - - name: runCommand - object: database - arguments: - command: - createIndexes: "encryptedCollection" - indexes: - - name: "name" - key: { name: 1 } - partialFilterExpression: - encrypted_string: "foo" - result: - errorContains: "Comparison to encrypted fields not supported" \ No newline at end of file diff --git a/testdata/client-side-encryption/unified/addKeyAltName.json b/testdata/client-side-encryption/unified/addKeyAltName.json deleted file mode 100644 index f70bc572a8..0000000000 --- a/testdata/client-side-encryption/unified/addKeyAltName.json +++ /dev/null @@ -1,609 +0,0 @@ -{ - "description": "addKeyAltName", - "schemaVersion": "1.8", - "runOnRequirements": [ - { - "csfle": true - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "clientEncryption": { - "id": "clientEncryption0", - "clientEncryptionOpts": { - "keyVaultClient": "client0", - "keyVaultNamespace": "keyvault.datakeys", - "kmsProviders": { - "local": { - "key": { - "$$placeholder": 1 - } - } - } - } - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "keyvault" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "datakeys" - } - } - ], - "initialData": [ - { - "databaseName": "keyvault", - "collectionName": "datakeys", - "documents": [ - { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "local" - } - } - ] - } - ], - "tests": [ - { - "description": "add keyAltName to non-existent data key", - "operations": [ - { - "name": "addKeyAltName", - "object": "clientEncryption0", - "arguments": { - "id": { - "$binary": { - "base64": "AAAjYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltName": "new_key_alt_name" - }, - "expectResult": { - "$$unsetOrMatches": null - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "findAndModify": "datakeys", - "query": { - "_id": { - "$binary": { - "base64": "AAAjYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - } - }, - "update": { - "$addToSet": { - "keyAltNames": "new_key_alt_name" - } - }, - "writeConcern": { - "w": "majority" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "datakeys", - "databaseName": "keyvault", - "documents": [ - { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "local" - } - } - ] - } - ] - }, - { - "description": "add new keyAltName to data key with no keyAltNames", - "operations": [ - { - "name": "addKeyAltName", - "object": "clientEncryption0", - "arguments": { - "id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltName": "local_key" - }, - "expectResult": { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "local" - } - } - }, - { - "name": "find", - "object": "collection0", - "arguments": { - "filter": {}, - "projection": { - "_id": 0, - "keyAltNames": 1 - } - }, - "expectResult": [ - { - "keyAltNames": [ - "local_key" - ] - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "findAndModify": "datakeys", - "query": { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - } - }, - "update": { - "$addToSet": { - "keyAltNames": "local_key" - } - }, - "writeConcern": { - "w": "majority" - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "find" - } - } - ] - } - ] - }, - { - "description": "add existing keyAltName to existing data key", - "operations": [ - { - "name": "addKeyAltName", - "object": "clientEncryption0", - "arguments": { - "id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltName": "local_key" - }, - "expectResult": { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "local" - } - } - }, - { - "name": "addKeyAltName", - "object": "clientEncryption0", - "arguments": { - "id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltName": "local_key" - }, - "expectResult": { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "local_key" - ], - "keyMaterial": { - "$$type": "binData" - }, - "creationDate": { - "$$type": "date" - }, - "updateDate": { - "$$type": "date" - }, - "status": 1, - "masterKey": { - "provider": "local" - } - } - }, - { - "name": "find", - "object": "collection0", - "arguments": { - "filter": {}, - "projection": { - "_id": 0, - "keyAltNames": 1 - } - }, - "expectResult": [ - { - "keyAltNames": [ - "local_key" - ] - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "findAndModify": "datakeys", - "query": { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - } - }, - "update": { - "$addToSet": { - "keyAltNames": "local_key" - } - }, - "writeConcern": { - "w": "majority" - } - } - } - }, - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "findAndModify": "datakeys", - "query": { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - } - }, - "update": { - "$addToSet": { - "keyAltNames": "local_key" - } - }, - "writeConcern": { - "w": "majority" - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "find" - } - } - ] - } - ] - }, - { - "description": "add new keyAltName to data key with keyAltNames", - "operations": [ - { - "name": "addKeyAltName", - "object": "clientEncryption0", - "arguments": { - "id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltName": "local_key" - }, - "expectResult": { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyMaterial": { - "$binary": { - "base64": "ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "local" - } - } - }, - { - "name": "addKeyAltName", - "object": "clientEncryption0", - "arguments": { - "id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltName": "another_name" - }, - "expectResult": { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "local_key" - ], - "keyMaterial": { - "$$type": "binData" - }, - "creationDate": { - "$$type": "date" - }, - "updateDate": { - "$$type": "date" - }, - "status": 1, - "masterKey": { - "provider": "local" - } - } - }, - { - "name": "aggregate", - "object": "collection0", - "arguments": { - "pipeline": [ - { - "$project": { - "_id": 0, - "keyAltNames": "$keyAltNames" - } - }, - { - "$unwind": "$keyAltNames" - }, - { - "$sort": { - "keyAltNames": 1 - } - } - ] - }, - "expectResult": [ - { - "keyAltNames": "another_name" - }, - { - "keyAltNames": "local_key" - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "findAndModify": "datakeys", - "query": { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - } - }, - "update": { - "$addToSet": { - "keyAltNames": "local_key" - } - }, - "writeConcern": { - "w": "majority" - } - } - } - }, - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "findAndModify": "datakeys", - "query": { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - } - }, - "update": { - "$addToSet": { - "keyAltNames": "another_name" - } - }, - "writeConcern": { - "w": "majority" - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/unified/addKeyAltName.yml b/testdata/client-side-encryption/unified/addKeyAltName.yml deleted file mode 100644 index 7d52fd1a31..0000000000 --- a/testdata/client-side-encryption/unified/addKeyAltName.yml +++ /dev/null @@ -1,194 +0,0 @@ -description: addKeyAltName - -schemaVersion: "1.8" - -runOnRequirements: - - csfle: true - -createEntities: - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - clientEncryption: - id: &clientEncryption0 clientEncryption0 - clientEncryptionOpts: - keyVaultClient: *client0 - keyVaultNamespace: keyvault.datakeys - kmsProviders: - local: { key: { $$placeholder: 1 } } - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name keyvault - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name datakeys - -initialData: - - databaseName: *database0Name - collectionName: *collection0Name - documents: - - &local_key_doc - _id: &local_key_id { $binary: { base64: bG9jYWxrZXlsb2NhbGtleQ==, subType: "04" } } - keyMaterial: { $binary: { base64: ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==, subType: "00" } } - creationDate: { $date: { $numberLong: "1641024000000" } } - updateDate: { $date: { $numberLong: "1641024000000" } } - status: 1 - masterKey: - provider: local - -tests: - - description: add keyAltName to non-existent data key - operations: - - name: addKeyAltName - object: *clientEncryption0 - arguments: - # First 3 letters of local_key_id replaced with 'A' (value: "#alkeylocalkey"). - id: &non_existent_id { $binary: { base64: AAAjYWxrZXlsb2NhbGtleQ==, subType: "04" } } - keyAltName: new_key_alt_name - expectResult: { $$unsetOrMatches: null } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - findAndModify: *collection0Name - query: { _id: *non_existent_id } - update: { $addToSet: { keyAltNames: new_key_alt_name } } - writeConcern: { w: majority } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *local_key_doc - - - description: add new keyAltName to data key with no keyAltNames - operations: - - name: addKeyAltName - object: *clientEncryption0 - arguments: - id: *local_key_id - keyAltName: local_key - expectResult: *local_key_doc - - name: find - object: *collection0 - arguments: - filter: {} - projection: { _id: 0, keyAltNames: 1 } - expectResult: - - keyAltNames: [local_key] - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - findAndModify: *collection0Name - query: { _id: *local_key_id } - update: { $addToSet: { keyAltNames: local_key } } - writeConcern: { w: majority } - - commandStartedEvent: { commandName: find } - - - description: add existing keyAltName to existing data key - operations: - - name: addKeyAltName - object: *clientEncryption0 - arguments: - id: *local_key_id - keyAltName: local_key - expectResult: *local_key_doc - - name: addKeyAltName - # Attempting to add a duplicate keyAltName to the data key should not be an error. - object: *clientEncryption0 - arguments: - id: *local_key_id - keyAltName: local_key - expectResult: - _id: *local_key_id - keyAltNames: [local_key] - keyMaterial: { $$type: binData } - creationDate: { $$type: date } - updateDate: { $$type: date } - status: 1 - masterKey: - provider: local - - name: find - object: *collection0 - arguments: - filter: {} - projection: { _id: 0, keyAltNames: 1 } - expectResult: - - keyAltNames: [local_key] - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - findAndModify: *collection0Name - query: { _id: *local_key_id } - update: { $addToSet: { keyAltNames: local_key } } - writeConcern: { w: majority } - - commandStartedEvent: - databaseName: *database0Name - command: - findAndModify: *collection0Name - query: { _id: *local_key_id } - update: { $addToSet: { keyAltNames: local_key } } - writeConcern: { w: majority } - - commandStartedEvent: { commandName: find } - - - description: add new keyAltName to data key with keyAltNames - operations: - - name: addKeyAltName - object: *clientEncryption0 - arguments: - id: *local_key_id - keyAltName: local_key - expectResult: *local_key_doc - - name: addKeyAltName - object: *clientEncryption0 - arguments: - id: *local_key_id - keyAltName: another_name - expectResult: - _id: *local_key_id - keyAltNames: [local_key] - keyMaterial: { $$type: binData } - creationDate: { $$type: date } - updateDate: { $$type: date } - status: 1 - masterKey: - provider: local - - name: aggregate - object: *collection0 - arguments: - pipeline: - # Ensure keyAltNames are in deterministically sorted order. - - $project: { _id: 0, keyAltNames: $keyAltNames } - - $unwind: $keyAltNames - - $sort: { keyAltNames: 1 } - expectResult: - - keyAltNames: another_name - - keyAltNames: local_key - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - findAndModify: *collection0Name - query: { _id: *local_key_id } - update: { $addToSet: { keyAltNames: local_key } } - writeConcern: { w: majority } - - commandStartedEvent: - databaseName: *database0Name - command: - findAndModify: *collection0Name - query: { _id: *local_key_id } - update: { $addToSet: { keyAltNames: another_name } } - writeConcern: { w: majority } - - commandStartedEvent: { commandName: aggregate } diff --git a/testdata/client-side-encryption/unified/createDataKey-kms_providers-invalid.json b/testdata/client-side-encryption/unified/createDataKey-kms_providers-invalid.json deleted file mode 100644 index 2344a61a95..0000000000 --- a/testdata/client-side-encryption/unified/createDataKey-kms_providers-invalid.json +++ /dev/null @@ -1,119 +0,0 @@ -{ - "description": "createDataKey-kms_providers-invalid", - "schemaVersion": "1.8", - "runOnRequirements": [ - { - "csfle": true - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent", - "commandSucceededEvent", - "commandFailedEvent" - ] - } - }, - { - "clientEncryption": { - "id": "clientEncryption0", - "clientEncryptionOpts": { - "keyVaultClient": "client0", - "keyVaultNamespace": "keyvault.datakeys", - "kmsProviders": { - "aws": { - "accessKeyId": { - "$$placeholder": 1 - }, - "secretAccessKey": { - "$$placeholder": 1 - } - } - } - } - } - } - ], - "tests": [ - { - "description": "create data key without required master key fields", - "operations": [ - { - "name": "createDataKey", - "object": "clientEncryption0", - "arguments": { - "kmsProvider": "aws", - "opts": { - "masterKey": {} - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ] - }, - { - "description": "create data key with invalid master key field", - "operations": [ - { - "name": "createDataKey", - "object": "clientEncryption0", - "arguments": { - "kmsProvider": "local", - "opts": { - "masterKey": { - "invalid": 1 - } - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ] - }, - { - "description": "create data key with invalid master key", - "operations": [ - { - "name": "createDataKey", - "object": "clientEncryption0", - "arguments": { - "kmsProvider": "aws", - "opts": { - "masterKey": { - "key": "arn:aws:kms:us-east-1:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0", - "region": "invalid" - } - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/unified/createDataKey-kms_providers-invalid.yml b/testdata/client-side-encryption/unified/createDataKey-kms_providers-invalid.yml deleted file mode 100644 index f692a09075..0000000000 --- a/testdata/client-side-encryption/unified/createDataKey-kms_providers-invalid.yml +++ /dev/null @@ -1,67 +0,0 @@ -description: createDataKey-kms_providers-invalid - -schemaVersion: "1.8" - -runOnRequirements: - - csfle: true - -createEntities: - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - commandSucceededEvent - - commandFailedEvent - - clientEncryption: - id: &clientEncryption0 clientEncryption0 - clientEncryptionOpts: - keyVaultClient: *client0 - keyVaultNamespace: keyvault.datakeys - kmsProviders: - aws: { accessKeyId: { $$placeholder: 1 }, secretAccessKey: { $$placeholder: 1 } } - -tests: - - description: create data key without required master key fields - operations: - - name: createDataKey - object: *clientEncryption0 - arguments: - kmsProvider: aws - opts: - masterKey: {} - expectError: - isClientError: true - expectEvents: - - client: *client0 - events: [] - - - description: create data key with invalid master key field - operations: - - name: createDataKey - object: *clientEncryption0 - arguments: - kmsProvider: local - opts: - masterKey: - invalid: 1 - expectError: - isClientError: true - expectEvents: - - client: *client0 - events: [] - - - description: create data key with invalid master key - operations: - - name: createDataKey - object: *clientEncryption0 - arguments: - kmsProvider: aws - opts: - masterKey: - key: arn:aws:kms:us-east-1:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0 - region: invalid - expectError: - isClientError: true - expectEvents: - - client: *client0 - events: [] diff --git a/testdata/client-side-encryption/unified/createDataKey.json b/testdata/client-side-encryption/unified/createDataKey.json deleted file mode 100644 index 110c726f9a..0000000000 --- a/testdata/client-side-encryption/unified/createDataKey.json +++ /dev/null @@ -1,711 +0,0 @@ -{ - "description": "createDataKey", - "schemaVersion": "1.8", - "runOnRequirements": [ - { - "csfle": true - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "clientEncryption": { - "id": "clientEncryption0", - "clientEncryptionOpts": { - "keyVaultClient": "client0", - "keyVaultNamespace": "keyvault.datakeys", - "kmsProviders": { - "aws": { - "accessKeyId": { - "$$placeholder": 1 - }, - "secretAccessKey": { - "$$placeholder": 1 - } - }, - "azure": { - "tenantId": { - "$$placeholder": 1 - }, - "clientId": { - "$$placeholder": 1 - }, - "clientSecret": { - "$$placeholder": 1 - } - }, - "gcp": { - "email": { - "$$placeholder": 1 - }, - "privateKey": { - "$$placeholder": 1 - } - }, - "kmip": { - "endpoint": { - "$$placeholder": 1 - } - }, - "local": { - "key": { - "$$placeholder": 1 - } - } - } - } - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "keyvault" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "datakeys" - } - } - ], - "initialData": [ - { - "databaseName": "keyvault", - "collectionName": "datakeys", - "documents": [] - } - ], - "tests": [ - { - "description": "create data key with AWS KMS provider", - "operations": [ - { - "name": "createDataKey", - "object": "clientEncryption0", - "arguments": { - "kmsProvider": "aws", - "opts": { - "masterKey": { - "key": "arn:aws:kms:us-east-1:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0", - "region": "us-east-1" - } - } - }, - "expectResult": { - "$$type": "binData" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "insert": "datakeys", - "documents": [ - { - "_id": { - "$$type": "binData" - }, - "keyMaterial": { - "$$type": "binData" - }, - "creationDate": { - "$$type": "date" - }, - "updateDate": { - "$$type": "date" - }, - "status": { - "$$exists": true - }, - "masterKey": { - "provider": "aws", - "key": "arn:aws:kms:us-east-1:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0", - "region": "us-east-1" - } - } - ], - "writeConcern": { - "w": "majority" - } - } - } - } - ] - } - ] - }, - { - "description": "create datakey with Azure KMS provider", - "operations": [ - { - "name": "createDataKey", - "object": "clientEncryption0", - "arguments": { - "kmsProvider": "azure", - "opts": { - "masterKey": { - "keyVaultEndpoint": "key-vault-csfle.vault.azure.net", - "keyName": "key-name-csfle" - } - } - }, - "expectResult": { - "$$type": "binData" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "insert": "datakeys", - "documents": [ - { - "_id": { - "$$type": "binData" - }, - "keyMaterial": { - "$$type": "binData" - }, - "creationDate": { - "$$type": "date" - }, - "updateDate": { - "$$type": "date" - }, - "status": { - "$$exists": true - }, - "masterKey": { - "provider": "azure", - "keyVaultEndpoint": "key-vault-csfle.vault.azure.net", - "keyName": "key-name-csfle" - } - } - ], - "writeConcern": { - "w": "majority" - } - } - } - } - ] - } - ] - }, - { - "description": "create datakey with GCP KMS provider", - "operations": [ - { - "name": "createDataKey", - "object": "clientEncryption0", - "arguments": { - "kmsProvider": "gcp", - "opts": { - "masterKey": { - "projectId": "devprod-drivers", - "location": "global", - "keyRing": "key-ring-csfle", - "keyName": "key-name-csfle" - } - } - }, - "expectResult": { - "$$type": "binData" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "insert": "datakeys", - "documents": [ - { - "_id": { - "$$type": "binData" - }, - "keyMaterial": { - "$$type": "binData" - }, - "creationDate": { - "$$type": "date" - }, - "updateDate": { - "$$type": "date" - }, - "status": { - "$$exists": true - }, - "masterKey": { - "provider": "gcp", - "projectId": "devprod-drivers", - "location": "global", - "keyRing": "key-ring-csfle", - "keyName": "key-name-csfle" - } - } - ], - "writeConcern": { - "w": "majority" - } - } - } - } - ] - } - ] - }, - { - "description": "create datakey with KMIP KMS provider", - "operations": [ - { - "name": "createDataKey", - "object": "clientEncryption0", - "arguments": { - "kmsProvider": "kmip" - }, - "expectResult": { - "$$type": "binData" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "insert": "datakeys", - "documents": [ - { - "_id": { - "$$type": "binData" - }, - "keyMaterial": { - "$$type": "binData" - }, - "creationDate": { - "$$type": "date" - }, - "updateDate": { - "$$type": "date" - }, - "status": { - "$$exists": true - }, - "masterKey": { - "provider": "kmip", - "keyId": { - "$$type": "string" - } - } - } - ], - "writeConcern": { - "w": "majority" - } - } - } - } - ] - } - ] - }, - { - "description": "create datakey with local KMS provider", - "operations": [ - { - "name": "createDataKey", - "object": "clientEncryption0", - "arguments": { - "kmsProvider": "local" - }, - "expectResult": { - "$$type": "binData" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "insert": "datakeys", - "documents": [ - { - "_id": { - "$$type": "binData" - }, - "keyMaterial": { - "$$type": "binData" - }, - "creationDate": { - "$$type": "date" - }, - "updateDate": { - "$$type": "date" - }, - "status": { - "$$exists": true - }, - "masterKey": { - "provider": "local" - } - } - ], - "writeConcern": { - "w": "majority" - } - } - } - } - ] - } - ] - }, - { - "description": "create datakey with no keyAltName", - "operations": [ - { - "name": "createDataKey", - "object": "clientEncryption0", - "arguments": { - "kmsProvider": "local", - "opts": { - "keyAltNames": [] - } - }, - "expectResult": { - "$$type": "binData" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "insert": "datakeys", - "documents": [ - { - "_id": { - "$$type": "binData" - }, - "keyAltNames": { - "$$exists": false - }, - "keyMaterial": { - "$$type": "binData" - }, - "creationDate": { - "$$type": "date" - }, - "updateDate": { - "$$type": "date" - }, - "status": { - "$$type": "int" - }, - "masterKey": { - "$$type": "object" - } - } - ], - "writeConcern": { - "w": "majority" - } - } - } - } - ] - } - ] - }, - { - "description": "create datakey with single keyAltName", - "operations": [ - { - "name": "createDataKey", - "object": "clientEncryption0", - "arguments": { - "kmsProvider": "local", - "opts": { - "keyAltNames": [ - "local_key" - ] - } - }, - "expectResult": { - "$$type": "binData" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "insert": "datakeys", - "documents": [ - { - "_id": { - "$$type": "binData" - }, - "keyAltNames": [ - "local_key" - ], - "keyMaterial": { - "$$type": "binData" - }, - "creationDate": { - "$$type": "date" - }, - "updateDate": { - "$$type": "date" - }, - "status": { - "$$type": "int" - }, - "masterKey": { - "$$type": "object" - } - } - ], - "writeConcern": { - "w": "majority" - } - } - } - } - ] - } - ] - }, - { - "description": "create datakey with multiple keyAltNames", - "operations": [ - { - "name": "createDataKey", - "object": "clientEncryption0", - "arguments": { - "kmsProvider": "local", - "opts": { - "keyAltNames": [ - "abc", - "def" - ] - } - }, - "expectResult": { - "$$type": "binData" - } - }, - { - "name": "aggregate", - "object": "collection0", - "arguments": { - "pipeline": [ - { - "$project": { - "_id": 0, - "keyAltNames": 1 - } - }, - { - "$unwind": "$keyAltNames" - }, - { - "$sort": { - "keyAltNames": 1 - } - } - ] - }, - "expectResult": [ - { - "keyAltNames": "abc" - }, - { - "keyAltNames": "def" - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "insert": "datakeys", - "documents": [ - { - "_id": { - "$$type": "binData" - }, - "keyAltNames": { - "$$type": "array" - }, - "keyMaterial": { - "$$type": "binData" - }, - "creationDate": { - "$$type": "date" - }, - "updateDate": { - "$$type": "date" - }, - "status": { - "$$type": "int" - }, - "masterKey": { - "$$type": "object" - } - } - ], - "writeConcern": { - "w": "majority" - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate" - } - } - ] - } - ] - }, - { - "description": "create datakey with custom key material", - "operations": [ - { - "name": "createDataKey", - "object": "clientEncryption0", - "arguments": { - "kmsProvider": "local", - "opts": { - "keyMaterial": { - "$binary": { - "base64": "a2V5X21hdGVyaWFsa2V5X21hdGVyaWFsa2V5X21hdGVyaWFsa2V5X21hdGVyaWFsa2V5X21hdGVyaWFsa2V5X21hdGVyaWFsa2V5X21hdGVyaWFsa2V5X21hdGVyaWFs", - "subType": "00" - } - } - } - }, - "expectResult": { - "$$type": "binData" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "insert": "datakeys", - "documents": [ - { - "_id": { - "$$type": "binData" - }, - "keyMaterial": { - "$$type": "binData" - }, - "creationDate": { - "$$type": "date" - }, - "updateDate": { - "$$type": "date" - }, - "status": { - "$$type": "int" - }, - "masterKey": { - "$$type": "object" - } - } - ], - "writeConcern": { - "w": "majority" - } - } - } - } - ] - } - ] - }, - { - "description": "create datakey with invalid custom key material (too short)", - "operations": [ - { - "name": "createDataKey", - "object": "clientEncryption0", - "arguments": { - "kmsProvider": "local", - "opts": { - "keyMaterial": { - "$binary": { - "base64": "a2V5X21hdGVyaWFsa2V5X21hdGVyaWFsa2V5X21hdGVyaWFsa2V5X21hdGVyaWFsa2V5X21hdGVyaWFsa2V5X21hdGVyaWFsa2V5X21hdGVyaWFs", - "subType": "00" - } - } - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/unified/createDataKey.yml b/testdata/client-side-encryption/unified/createDataKey.yml deleted file mode 100644 index dd14638637..0000000000 --- a/testdata/client-side-encryption/unified/createDataKey.yml +++ /dev/null @@ -1,309 +0,0 @@ -description: createDataKey - -schemaVersion: "1.8" - -runOnRequirements: - - csfle: true - -createEntities: - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - clientEncryption: - id: &clientEncryption0 clientEncryption0 - clientEncryptionOpts: - keyVaultClient: *client0 - keyVaultNamespace: keyvault.datakeys - kmsProviders: - aws: { accessKeyId: { $$placeholder: 1 }, secretAccessKey: { $$placeholder: 1 } } - azure: { tenantId: { $$placeholder: 1 }, clientId: { $$placeholder: 1 }, clientSecret: { $$placeholder: 1 } } - gcp: { email: { $$placeholder: 1 }, privateKey: { $$placeholder: 1 } } - kmip: { endpoint: { $$placeholder: 1 } } - local: { key: { $$placeholder: 1 } } - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name keyvault - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name datakeys - -initialData: - - databaseName: *database0Name - collectionName: *collection0Name - documents: [] - -tests: - - description: create data key with AWS KMS provider - operations: - - name: createDataKey - object: *clientEncryption0 - arguments: - kmsProvider: aws - opts: - masterKey: &new_aws_masterkey - key: arn:aws:kms:us-east-1:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0 - region: us-east-1 - expectResult: { $$type: binData } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - insert: *collection0Name - documents: - - _id: { $$type: binData } - keyMaterial: { $$type: binData } - creationDate: { $$type: date } - updateDate: { $$type: date } - status: { $$exists: true } - masterKey: - provider: aws - <<: *new_aws_masterkey - writeConcern: { w: majority } - - - description: create datakey with Azure KMS provider - operations: - - name: createDataKey - object: *clientEncryption0 - arguments: - kmsProvider: azure - opts: - masterKey: &new_azure_masterkey - keyVaultEndpoint: key-vault-csfle.vault.azure.net - keyName: key-name-csfle - expectResult: { $$type: binData } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - insert: *collection0Name - documents: - - _id: { $$type: binData } - keyMaterial: { $$type: binData } - creationDate: { $$type: date } - updateDate: { $$type: date } - status: { $$exists: true } - masterKey: - provider: azure - <<: *new_azure_masterkey - writeConcern: { w: majority } - - - description: create datakey with GCP KMS provider - operations: - - name: createDataKey - object: *clientEncryption0 - arguments: - kmsProvider: gcp - opts: - masterKey: &new_gcp_masterkey - projectId: devprod-drivers - location: global - keyRing: key-ring-csfle - keyName: key-name-csfle - expectResult: { $$type: binData } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - insert: *collection0Name - documents: - - _id: { $$type: binData } - keyMaterial: { $$type: binData } - creationDate: { $$type: date } - updateDate: { $$type: date } - status: { $$exists: true } - masterKey: - provider: gcp - <<: *new_gcp_masterkey - writeConcern: { w: majority } - - - description: create datakey with KMIP KMS provider - operations: - - name: createDataKey - object: *clientEncryption0 - arguments: - kmsProvider: kmip - expectResult: { $$type: binData } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - insert: *collection0Name - documents: - - _id: { $$type: binData } - keyMaterial: { $$type: binData } - creationDate: { $$type: date } - updateDate: { $$type: date } - status: { $$exists: true } - masterKey: - provider: kmip - keyId: { $$type: string } - writeConcern: { w: majority } - - - description: create datakey with local KMS provider - operations: - - name: createDataKey - object: *clientEncryption0 - arguments: - kmsProvider: local - expectResult: { $$type: binData } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - insert: *collection0Name - documents: - - _id: { $$type: binData } - keyMaterial: { $$type: binData } - creationDate: { $$type: date } - updateDate: { $$type: date } - status: { $$exists: true } - masterKey: - provider: local - writeConcern: { w: majority } - - - description: create datakey with no keyAltName - operations: - - name: createDataKey - object: *clientEncryption0 - arguments: - kmsProvider: local - opts: - keyAltNames: [] - expectResult: { $$type: binData } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - insert: *collection0Name - documents: - - _id: { $$type: binData } - # keyAltNames field should not exist if no keyAltNames are given. - keyAltNames: { $$exists: false } - keyMaterial: { $$type: binData } - creationDate: { $$type: date } - updateDate: { $$type: date } - status: { $$type: int } - masterKey: { $$type: object } - writeConcern: { w: majority } - - - description: create datakey with single keyAltName - operations: - - name: createDataKey - object: *clientEncryption0 - arguments: - kmsProvider: local - opts: - keyAltNames: ["local_key"] - expectResult: { $$type: binData } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - insert: *collection0Name - documents: - - _id: { $$type: binData } - keyAltNames: [local_key] - keyMaterial: { $$type: binData } - creationDate: { $$type: date } - updateDate: { $$type: date } - status: { $$type: int } - masterKey: { $$type: object } - writeConcern: { w: majority } - - - description: create datakey with multiple keyAltNames - operations: - - name: createDataKey - object: *clientEncryption0 - arguments: - kmsProvider: local - opts: - keyAltNames: ["abc", "def"] - expectResult: { $$type: binData } - - name: aggregate - object: *collection0 - arguments: - # Need to use pipeline to sort keyAltNames for deterministic matching - # because keyAltNames is not required to be sorted. - pipeline: - - $project: { _id: 0, keyAltNames: 1 } - - $unwind: $keyAltNames - - $sort: { keyAltNames: 1 } - expectResult: - - keyAltNames: abc - - keyAltNames: def - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - insert: *collection0Name - documents: - - _id: { $$type: binData } - keyAltNames: { $$type: array } - keyMaterial: { $$type: binData } - creationDate: { $$type: date } - updateDate: { $$type: date } - status: { $$type: int } - masterKey: { $$type: object } - writeConcern: { w: majority } - - commandStartedEvent: { commandName: aggregate } - - - description: create datakey with custom key material - operations: - - name: createDataKey - object: *clientEncryption0 - arguments: - kmsProvider: local - opts: - # "key_material" repeated 8 times. - keyMaterial: &custom_key_material { $binary: { base64: a2V5X21hdGVyaWFsa2V5X21hdGVyaWFsa2V5X21hdGVyaWFsa2V5X21hdGVyaWFsa2V5X21hdGVyaWFsa2V5X21hdGVyaWFsa2V5X21hdGVyaWFsa2V5X21hdGVyaWFs, subType: "00" } } - expectResult: { $$type: binData } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - insert: *collection0Name - documents: - - _id: { $$type: binData } - # Cannot match exact value of encrypted key material. - keyMaterial: { $$type: binData } - creationDate: { $$type: date } - updateDate: { $$type: date } - status: { $$type: int } - masterKey: { $$type: object } - writeConcern: { w: majority } - - - description: create datakey with invalid custom key material (too short) - operations: - - name: createDataKey - object: *clientEncryption0 - arguments: - kmsProvider: local - opts: - # "key_material" repeated only 7 times (key material length == 84). - keyMaterial: { $binary: { base64: a2V5X21hdGVyaWFsa2V5X21hdGVyaWFsa2V5X21hdGVyaWFsa2V5X21hdGVyaWFsa2V5X21hdGVyaWFsa2V5X21hdGVyaWFsa2V5X21hdGVyaWFs, subType: "00" } } - expectError: - isClientError: true - expectEvents: - - client: *client0 - events: [] diff --git a/testdata/client-side-encryption/unified/deleteKey.json b/testdata/client-side-encryption/unified/deleteKey.json deleted file mode 100644 index 3a10fb082f..0000000000 --- a/testdata/client-side-encryption/unified/deleteKey.json +++ /dev/null @@ -1,557 +0,0 @@ -{ - "description": "deleteKey", - "schemaVersion": "1.8", - "runOnRequirements": [ - { - "csfle": true - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "clientEncryption": { - "id": "clientEncryption0", - "clientEncryptionOpts": { - "keyVaultClient": "client0", - "keyVaultNamespace": "keyvault.datakeys", - "kmsProviders": { - "local": { - "key": { - "$$placeholder": 1 - } - } - } - } - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "keyvault" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "datakeys" - } - } - ], - "initialData": [ - { - "databaseName": "keyvault", - "collectionName": "datakeys", - "documents": [ - { - "_id": { - "$binary": { - "base64": "YXdzYXdzYXdzYXdzYXdzYQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "aws_key" - ], - "keyMaterial": { - "$binary": { - "base64": "AQICAHhQNmWG2CzOm1dq3kWLM+iDUZhEqnhJwH9wZVpuZ94A8gFXJqbF0Fy872MD7xl56D/2AAAAwjCBvwYJKoZIhvcNAQcGoIGxMIGuAgEAMIGoBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDO7HPisPUlGzaio9vgIBEIB7/Qow46PMh/8JbEUbdXgTGhLfXPE+KIVW7T8s6YEMlGiRvMu7TV0QCIUJlSHPKZxzlJ2iwuz5yXeOag+EdY+eIQ0RKrsJ3b8UTisZYzGjfzZnxUKLzLoeXremtRCm3x47wCuHKd1dhh6FBbYt5TL2tDaj+vL2GBrKat2L", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "aws", - "key": "arn:aws:kms:us-east-1:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0", - "region": "us-east-1" - } - }, - { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "local_key" - ], - "keyMaterial": { - "$binary": { - "base64": "ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "local" - } - } - ] - } - ], - "tests": [ - { - "description": "delete non-existent data key", - "operations": [ - { - "name": "deleteKey", - "object": "clientEncryption0", - "arguments": { - "id": { - "$binary": { - "base64": "AAAzYXdzYXdzYXdzYXdzYQ==", - "subType": "04" - } - } - }, - "expectResult": { - "deletedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "delete": "datakeys", - "deletes": [ - { - "q": { - "_id": { - "$binary": { - "base64": "AAAzYXdzYXdzYXdzYXdzYQ==", - "subType": "04" - } - } - }, - "limit": 1 - } - ], - "writeConcern": { - "w": "majority" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "datakeys", - "databaseName": "keyvault", - "documents": [ - { - "_id": { - "$binary": { - "base64": "YXdzYXdzYXdzYXdzYXdzYQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "aws_key" - ], - "keyMaterial": { - "$binary": { - "base64": "AQICAHhQNmWG2CzOm1dq3kWLM+iDUZhEqnhJwH9wZVpuZ94A8gFXJqbF0Fy872MD7xl56D/2AAAAwjCBvwYJKoZIhvcNAQcGoIGxMIGuAgEAMIGoBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDO7HPisPUlGzaio9vgIBEIB7/Qow46PMh/8JbEUbdXgTGhLfXPE+KIVW7T8s6YEMlGiRvMu7TV0QCIUJlSHPKZxzlJ2iwuz5yXeOag+EdY+eIQ0RKrsJ3b8UTisZYzGjfzZnxUKLzLoeXremtRCm3x47wCuHKd1dhh6FBbYt5TL2tDaj+vL2GBrKat2L", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "aws", - "key": "arn:aws:kms:us-east-1:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0", - "region": "us-east-1" - } - }, - { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "local_key" - ], - "keyMaterial": { - "$binary": { - "base64": "ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "local" - } - } - ] - } - ] - }, - { - "description": "delete existing AWS data key", - "operations": [ - { - "name": "deleteKey", - "object": "clientEncryption0", - "arguments": { - "id": { - "$binary": { - "base64": "YXdzYXdzYXdzYXdzYXdzYQ==", - "subType": "04" - } - } - }, - "expectResult": { - "deletedCount": 1 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "delete": "datakeys", - "deletes": [ - { - "q": { - "_id": { - "$binary": { - "base64": "YXdzYXdzYXdzYXdzYXdzYQ==", - "subType": "04" - } - } - }, - "limit": 1 - } - ], - "writeConcern": { - "w": "majority" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "datakeys", - "databaseName": "keyvault", - "documents": [ - { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "local_key" - ], - "keyMaterial": { - "$binary": { - "base64": "ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "local" - } - } - ] - } - ] - }, - { - "description": "delete existing local data key", - "operations": [ - { - "name": "deleteKey", - "object": "clientEncryption0", - "arguments": { - "id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - } - }, - "expectResult": { - "deletedCount": 1 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "delete": "datakeys", - "deletes": [ - { - "q": { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - } - }, - "limit": 1 - } - ], - "writeConcern": { - "w": "majority" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "datakeys", - "databaseName": "keyvault", - "documents": [ - { - "_id": { - "$binary": { - "base64": "YXdzYXdzYXdzYXdzYXdzYQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "aws_key" - ], - "keyMaterial": { - "$binary": { - "base64": "AQICAHhQNmWG2CzOm1dq3kWLM+iDUZhEqnhJwH9wZVpuZ94A8gFXJqbF0Fy872MD7xl56D/2AAAAwjCBvwYJKoZIhvcNAQcGoIGxMIGuAgEAMIGoBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDO7HPisPUlGzaio9vgIBEIB7/Qow46PMh/8JbEUbdXgTGhLfXPE+KIVW7T8s6YEMlGiRvMu7TV0QCIUJlSHPKZxzlJ2iwuz5yXeOag+EdY+eIQ0RKrsJ3b8UTisZYzGjfzZnxUKLzLoeXremtRCm3x47wCuHKd1dhh6FBbYt5TL2tDaj+vL2GBrKat2L", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "aws", - "key": "arn:aws:kms:us-east-1:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0", - "region": "us-east-1" - } - } - ] - } - ] - }, - { - "description": "delete existing data key twice", - "operations": [ - { - "name": "deleteKey", - "object": "clientEncryption0", - "arguments": { - "id": { - "$binary": { - "base64": "YXdzYXdzYXdzYXdzYXdzYQ==", - "subType": "04" - } - } - }, - "expectResult": { - "deletedCount": 1 - } - }, - { - "name": "deleteKey", - "object": "clientEncryption0", - "arguments": { - "id": { - "$binary": { - "base64": "YXdzYXdzYXdzYXdzYXdzYQ==", - "subType": "04" - } - } - }, - "expectResult": { - "deletedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "delete": "datakeys", - "deletes": [ - { - "q": { - "_id": { - "$binary": { - "base64": "YXdzYXdzYXdzYXdzYXdzYQ==", - "subType": "04" - } - } - }, - "limit": 1 - } - ], - "writeConcern": { - "w": "majority" - } - } - } - }, - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "delete": "datakeys", - "deletes": [ - { - "q": { - "_id": { - "$binary": { - "base64": "YXdzYXdzYXdzYXdzYXdzYQ==", - "subType": "04" - } - } - }, - "limit": 1 - } - ], - "writeConcern": { - "w": "majority" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "datakeys", - "databaseName": "keyvault", - "documents": [ - { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "local_key" - ], - "keyMaterial": { - "$binary": { - "base64": "ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "local" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/unified/deleteKey.yml b/testdata/client-side-encryption/unified/deleteKey.yml deleted file mode 100644 index c598e94698..0000000000 --- a/testdata/client-side-encryption/unified/deleteKey.yml +++ /dev/null @@ -1,159 +0,0 @@ -description: deleteKey - -schemaVersion: "1.8" - -runOnRequirements: - - csfle: true - -createEntities: - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - clientEncryption: - id: &clientEncryption0 clientEncryption0 - clientEncryptionOpts: - keyVaultClient: *client0 - keyVaultNamespace: keyvault.datakeys - kmsProviders: - local: { key: { $$placeholder: 1 } } - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name keyvault - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name datakeys - -initialData: - - databaseName: *database0Name - collectionName: *collection0Name - documents: - - &aws_key_doc - _id: &aws_key_id { $binary: { base64: YXdzYXdzYXdzYXdzYXdzYQ==, subType: "04" } } - keyAltNames: ["aws_key"] - keyMaterial: { $binary: { base64: AQICAHhQNmWG2CzOm1dq3kWLM+iDUZhEqnhJwH9wZVpuZ94A8gFXJqbF0Fy872MD7xl56D/2AAAAwjCBvwYJKoZIhvcNAQcGoIGxMIGuAgEAMIGoBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDO7HPisPUlGzaio9vgIBEIB7/Qow46PMh/8JbEUbdXgTGhLfXPE+KIVW7T8s6YEMlGiRvMu7TV0QCIUJlSHPKZxzlJ2iwuz5yXeOag+EdY+eIQ0RKrsJ3b8UTisZYzGjfzZnxUKLzLoeXremtRCm3x47wCuHKd1dhh6FBbYt5TL2tDaj+vL2GBrKat2L, subType: "00" } } - creationDate: { $date: { $numberLong: "1641024000000" } } - updateDate: { $date: { $numberLong: "1641024000000" } } - status: 1 - masterKey: - provider: aws - key: arn:aws:kms:us-east-1:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0 - region: us-east-1 - - &local_key_doc - _id: &local_key_id { $binary: { base64: bG9jYWxrZXlsb2NhbGtleQ==, subType: "04" } } - keyAltNames: ["local_key"] - keyMaterial: { $binary: { base64: ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==, subType: "00" } } - creationDate: { $date: { $numberLong: "1641024000000" } } - updateDate: { $date: { $numberLong: "1641024000000" } } - status: 1 - masterKey: - provider: local - -tests: - - description: delete non-existent data key - operations: - - name: deleteKey - object: *clientEncryption0 - arguments: - # *aws_key_id with first three letters replaced with 'A' (value: "3awsawsawsawsa"). - id: &non_existent_id { $binary: { base64: AAAzYXdzYXdzYXdzYXdzYQ==, subType: "04" } } - expectResult: - deletedCount: 0 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - delete: *collection0Name - deletes: [{ q: { _id: *non_existent_id }, limit: 1 }] - writeConcern: { w: majority } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *aws_key_doc - - *local_key_doc - - - description: delete existing AWS data key - operations: - - name: deleteKey - object: *clientEncryption0 - arguments: - id: *aws_key_id - expectResult: - deletedCount: 1 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - delete: *collection0Name - deletes: [{ q: { _id: *aws_key_id }, limit: 1 }] - writeConcern: { w: majority } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *local_key_doc - - - description: delete existing local data key - operations: - - name: deleteKey - object: *clientEncryption0 - arguments: - id: *local_key_id - expectResult: - deletedCount: 1 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - delete: *collection0Name - deletes: [{ q: { _id: *local_key_id }, limit: 1 }] - writeConcern: { w: majority } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *aws_key_doc - - - description: delete existing data key twice - operations: - - name: deleteKey - object: *clientEncryption0 - arguments: - id: *aws_key_id - expectResult: - deletedCount: 1 - - name: deleteKey - object: *clientEncryption0 - arguments: - id: *aws_key_id - expectResult: - deletedCount: 0 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - delete: *collection0Name - deletes: [{ q: { _id: *aws_key_id }, limit: 1 }] - writeConcern: { w: majority } - - commandStartedEvent: - databaseName: *database0Name - command: - delete: *collection0Name - deletes: [{ q: { _id: *aws_key_id }, limit: 1 }] - writeConcern: { w: majority } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *local_key_doc diff --git a/testdata/client-side-encryption/unified/getKey.json b/testdata/client-side-encryption/unified/getKey.json deleted file mode 100644 index 2ea3fe7358..0000000000 --- a/testdata/client-side-encryption/unified/getKey.json +++ /dev/null @@ -1,319 +0,0 @@ -{ - "description": "getKey", - "schemaVersion": "1.8", - "runOnRequirements": [ - { - "csfle": true - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "clientEncryption": { - "id": "clientEncryption0", - "clientEncryptionOpts": { - "keyVaultClient": "client0", - "keyVaultNamespace": "keyvault.datakeys", - "kmsProviders": { - "local": { - "key": { - "$$placeholder": 1 - } - } - } - } - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "keyvault" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "datakeys" - } - } - ], - "initialData": [ - { - "databaseName": "keyvault", - "collectionName": "datakeys", - "documents": [ - { - "_id": { - "$binary": { - "base64": "YXdzYXdzYXdzYXdzYXdzYQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "aws_key" - ], - "keyMaterial": { - "$binary": { - "base64": "AQICAHhQNmWG2CzOm1dq3kWLM+iDUZhEqnhJwH9wZVpuZ94A8gFXJqbF0Fy872MD7xl56D/2AAAAwjCBvwYJKoZIhvcNAQcGoIGxMIGuAgEAMIGoBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDO7HPisPUlGzaio9vgIBEIB7/Qow46PMh/8JbEUbdXgTGhLfXPE+KIVW7T8s6YEMlGiRvMu7TV0QCIUJlSHPKZxzlJ2iwuz5yXeOag+EdY+eIQ0RKrsJ3b8UTisZYzGjfzZnxUKLzLoeXremtRCm3x47wCuHKd1dhh6FBbYt5TL2tDaj+vL2GBrKat2L", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "aws", - "key": "arn:aws:kms:us-east-1:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0", - "region": "us-east-1" - } - }, - { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "local_key" - ], - "keyMaterial": { - "$binary": { - "base64": "ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "local" - } - } - ] - } - ], - "tests": [ - { - "description": "get non-existent data key", - "operations": [ - { - "name": "getKey", - "object": "clientEncryption0", - "arguments": { - "id": { - "$binary": { - "base64": "AAAzYXdzYXdzYXdzYXdzYQ==", - "subType": "04" - } - } - }, - "expectResult": { - "$$unsetOrMatches": null - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "find": "datakeys", - "filter": { - "_id": { - "$binary": { - "base64": "AAAzYXdzYXdzYXdzYXdzYQ==", - "subType": "04" - } - } - }, - "readConcern": { - "level": "majority" - } - } - } - } - ] - } - ] - }, - { - "description": "get existing AWS data key", - "operations": [ - { - "name": "getKey", - "object": "clientEncryption0", - "arguments": { - "id": { - "$binary": { - "base64": "YXdzYXdzYXdzYXdzYXdzYQ==", - "subType": "04" - } - } - }, - "expectResult": { - "_id": { - "$binary": { - "base64": "YXdzYXdzYXdzYXdzYXdzYQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "aws_key" - ], - "keyMaterial": { - "$binary": { - "base64": "AQICAHhQNmWG2CzOm1dq3kWLM+iDUZhEqnhJwH9wZVpuZ94A8gFXJqbF0Fy872MD7xl56D/2AAAAwjCBvwYJKoZIhvcNAQcGoIGxMIGuAgEAMIGoBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDO7HPisPUlGzaio9vgIBEIB7/Qow46PMh/8JbEUbdXgTGhLfXPE+KIVW7T8s6YEMlGiRvMu7TV0QCIUJlSHPKZxzlJ2iwuz5yXeOag+EdY+eIQ0RKrsJ3b8UTisZYzGjfzZnxUKLzLoeXremtRCm3x47wCuHKd1dhh6FBbYt5TL2tDaj+vL2GBrKat2L", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "aws", - "key": "arn:aws:kms:us-east-1:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0", - "region": "us-east-1" - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "find": "datakeys", - "filter": { - "_id": { - "$binary": { - "base64": "YXdzYXdzYXdzYXdzYXdzYQ==", - "subType": "04" - } - } - }, - "readConcern": { - "level": "majority" - } - } - } - } - ] - } - ] - }, - { - "description": "get existing local data key", - "operations": [ - { - "name": "getKey", - "object": "clientEncryption0", - "arguments": { - "id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - } - }, - "expectResult": { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "local_key" - ], - "keyMaterial": { - "$binary": { - "base64": "ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "local" - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "find": "datakeys", - "filter": { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - } - }, - "readConcern": { - "level": "majority" - } - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/unified/getKey.yml b/testdata/client-side-encryption/unified/getKey.yml deleted file mode 100644 index 1499227615..0000000000 --- a/testdata/client-side-encryption/unified/getKey.yml +++ /dev/null @@ -1,105 +0,0 @@ -description: getKey - -schemaVersion: "1.8" - -runOnRequirements: - - csfle: true - -createEntities: - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - clientEncryption: - id: &clientEncryption0 clientEncryption0 - clientEncryptionOpts: - keyVaultClient: *client0 - keyVaultNamespace: keyvault.datakeys - kmsProviders: - local: { key: { $$placeholder: 1 } } - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name keyvault - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name datakeys - -initialData: - - databaseName: *database0Name - collectionName: *collection0Name - documents: - - &aws_key_doc - _id: &aws_key_id { $binary: { base64: YXdzYXdzYXdzYXdzYXdzYQ==, subType: "04" } } - keyAltNames: ["aws_key"] - keyMaterial: { $binary: { base64: AQICAHhQNmWG2CzOm1dq3kWLM+iDUZhEqnhJwH9wZVpuZ94A8gFXJqbF0Fy872MD7xl56D/2AAAAwjCBvwYJKoZIhvcNAQcGoIGxMIGuAgEAMIGoBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDO7HPisPUlGzaio9vgIBEIB7/Qow46PMh/8JbEUbdXgTGhLfXPE+KIVW7T8s6YEMlGiRvMu7TV0QCIUJlSHPKZxzlJ2iwuz5yXeOag+EdY+eIQ0RKrsJ3b8UTisZYzGjfzZnxUKLzLoeXremtRCm3x47wCuHKd1dhh6FBbYt5TL2tDaj+vL2GBrKat2L, subType: "00" } } - creationDate: { $date: { $numberLong: "1641024000000" } } - updateDate: { $date: { $numberLong: "1641024000000" } } - status: 1 - masterKey: - provider: aws - key: arn:aws:kms:us-east-1:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0 - region: us-east-1 - - &local_key_doc - _id: &local_key_id { $binary: { base64: bG9jYWxrZXlsb2NhbGtleQ==, subType: "04" } } - keyAltNames: ["local_key"] - keyMaterial: { $binary: { base64: ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==, subType: "00" } } - creationDate: { $date: { $numberLong: "1641024000000" } } - updateDate: { $date: { $numberLong: "1641024000000" } } - status: 1 - masterKey: - provider: local - -tests: - - description: get non-existent data key - operations: - - name: getKey - object: *clientEncryption0 - arguments: - # *aws_key_id with first three letters replaced with 'A' (value: "3awsawsawsawsa"). - id: &non_existent_id { $binary: { base64: AAAzYXdzYXdzYXdzYXdzYQ==, subType: "04" } } - expectResult: { $$unsetOrMatches: null } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - find: *collection0Name - filter: { _id: *non_existent_id } - readConcern: { level: majority } - - - description: get existing AWS data key - operations: - - name: getKey - object: *clientEncryption0 - arguments: - id: *aws_key_id - expectResult: *aws_key_doc - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - find: *collection0Name - filter: { _id: *aws_key_id } - readConcern: { level: majority } - - - description: get existing local data key - operations: - - name: getKey - object: *clientEncryption0 - arguments: - id: *local_key_id - expectResult: *local_key_doc - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - find: *collection0Name - filter: { _id: *local_key_id } - readConcern: { level: majority } diff --git a/testdata/client-side-encryption/unified/getKeyByAltName.json b/testdata/client-side-encryption/unified/getKeyByAltName.json deleted file mode 100644 index 2505abc16e..0000000000 --- a/testdata/client-side-encryption/unified/getKeyByAltName.json +++ /dev/null @@ -1,289 +0,0 @@ -{ - "description": "getKeyByAltName", - "schemaVersion": "1.8", - "runOnRequirements": [ - { - "csfle": true - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "clientEncryption": { - "id": "clientEncryption0", - "clientEncryptionOpts": { - "keyVaultClient": "client0", - "keyVaultNamespace": "keyvault.datakeys", - "kmsProviders": { - "local": { - "key": { - "$$placeholder": 1 - } - } - } - } - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "keyvault" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "datakeys" - } - } - ], - "initialData": [ - { - "databaseName": "keyvault", - "collectionName": "datakeys", - "documents": [ - { - "_id": { - "$binary": { - "base64": "YXdzYXdzYXdzYXdzYXdzYQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "aws_key" - ], - "keyMaterial": { - "$binary": { - "base64": "AQICAHhQNmWG2CzOm1dq3kWLM+iDUZhEqnhJwH9wZVpuZ94A8gFXJqbF0Fy872MD7xl56D/2AAAAwjCBvwYJKoZIhvcNAQcGoIGxMIGuAgEAMIGoBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDO7HPisPUlGzaio9vgIBEIB7/Qow46PMh/8JbEUbdXgTGhLfXPE+KIVW7T8s6YEMlGiRvMu7TV0QCIUJlSHPKZxzlJ2iwuz5yXeOag+EdY+eIQ0RKrsJ3b8UTisZYzGjfzZnxUKLzLoeXremtRCm3x47wCuHKd1dhh6FBbYt5TL2tDaj+vL2GBrKat2L", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "aws", - "key": "arn:aws:kms:us-east-1:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0", - "region": "us-east-1" - } - }, - { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "local_key" - ], - "keyMaterial": { - "$binary": { - "base64": "ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "local" - } - } - ] - } - ], - "tests": [ - { - "description": "get non-existent data key", - "operations": [ - { - "name": "getKeyByAltName", - "object": "clientEncryption0", - "arguments": { - "keyAltName": "does_not_exist" - }, - "expectResult": { - "$$unsetOrMatches": null - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "find": "datakeys", - "filter": { - "keyAltNames": "does_not_exist" - }, - "readConcern": { - "level": "majority" - } - } - } - } - ] - } - ] - }, - { - "description": "get existing AWS data key", - "operations": [ - { - "name": "getKeyByAltName", - "object": "clientEncryption0", - "arguments": { - "keyAltName": "aws_key" - }, - "expectResult": { - "_id": { - "$binary": { - "base64": "YXdzYXdzYXdzYXdzYXdzYQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "aws_key" - ], - "keyMaterial": { - "$binary": { - "base64": "AQICAHhQNmWG2CzOm1dq3kWLM+iDUZhEqnhJwH9wZVpuZ94A8gFXJqbF0Fy872MD7xl56D/2AAAAwjCBvwYJKoZIhvcNAQcGoIGxMIGuAgEAMIGoBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDO7HPisPUlGzaio9vgIBEIB7/Qow46PMh/8JbEUbdXgTGhLfXPE+KIVW7T8s6YEMlGiRvMu7TV0QCIUJlSHPKZxzlJ2iwuz5yXeOag+EdY+eIQ0RKrsJ3b8UTisZYzGjfzZnxUKLzLoeXremtRCm3x47wCuHKd1dhh6FBbYt5TL2tDaj+vL2GBrKat2L", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "aws", - "key": "arn:aws:kms:us-east-1:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0", - "region": "us-east-1" - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "find": "datakeys", - "filter": { - "keyAltNames": "aws_key" - }, - "readConcern": { - "level": "majority" - } - } - } - } - ] - } - ] - }, - { - "description": "get existing local data key", - "operations": [ - { - "name": "getKeyByAltName", - "object": "clientEncryption0", - "arguments": { - "keyAltName": "local_key" - }, - "expectResult": { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "local_key" - ], - "keyMaterial": { - "$binary": { - "base64": "ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "local" - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "find": "datakeys", - "filter": { - "keyAltNames": "local_key" - }, - "readConcern": { - "level": "majority" - } - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/unified/getKeyByAltName.yml b/testdata/client-side-encryption/unified/getKeyByAltName.yml deleted file mode 100644 index b0cada879a..0000000000 --- a/testdata/client-side-encryption/unified/getKeyByAltName.yml +++ /dev/null @@ -1,104 +0,0 @@ -description: getKeyByAltName - -schemaVersion: "1.8" - -runOnRequirements: - - csfle: true - -createEntities: - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - clientEncryption: - id: &clientEncryption0 clientEncryption0 - clientEncryptionOpts: - keyVaultClient: *client0 - keyVaultNamespace: keyvault.datakeys - kmsProviders: - local: { key: { $$placeholder: 1 } } - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name keyvault - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name datakeys - -initialData: - - databaseName: *database0Name - collectionName: *collection0Name - documents: - - &aws_key_doc - _id: { $binary: { base64: YXdzYXdzYXdzYXdzYXdzYQ==, subType: "04" } } - keyAltNames: ["aws_key"] - keyMaterial: { $binary: { base64: AQICAHhQNmWG2CzOm1dq3kWLM+iDUZhEqnhJwH9wZVpuZ94A8gFXJqbF0Fy872MD7xl56D/2AAAAwjCBvwYJKoZIhvcNAQcGoIGxMIGuAgEAMIGoBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDO7HPisPUlGzaio9vgIBEIB7/Qow46PMh/8JbEUbdXgTGhLfXPE+KIVW7T8s6YEMlGiRvMu7TV0QCIUJlSHPKZxzlJ2iwuz5yXeOag+EdY+eIQ0RKrsJ3b8UTisZYzGjfzZnxUKLzLoeXremtRCm3x47wCuHKd1dhh6FBbYt5TL2tDaj+vL2GBrKat2L, subType: "00" } } - creationDate: { $date: { $numberLong: "1641024000000" } } - updateDate: { $date: { $numberLong: "1641024000000" } } - status: 1 - masterKey: - provider: aws - key: arn:aws:kms:us-east-1:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0 - region: us-east-1 - - &local_key_doc - _id: { $binary: { base64: bG9jYWxrZXlsb2NhbGtleQ==, subType: "04" } } - keyAltNames: ["local_key"] - keyMaterial: { $binary: { base64: ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==, subType: "00" } } - creationDate: { $date: { $numberLong: "1641024000000" } } - updateDate: { $date: { $numberLong: "1641024000000" } } - status: 1 - masterKey: - provider: local - -tests: - - description: get non-existent data key - operations: - - name: getKeyByAltName - object: *clientEncryption0 - arguments: - keyAltName: does_not_exist - expectResult: { $$unsetOrMatches: null } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - find: *collection0Name - filter: { keyAltNames: does_not_exist } - readConcern: { level: majority } - - - description: get existing AWS data key - operations: - - name: getKeyByAltName - object: *clientEncryption0 - arguments: - keyAltName: aws_key - expectResult: *aws_key_doc - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - find: *collection0Name - filter: { keyAltNames: aws_key } - readConcern: { level: majority } - - - description: get existing local data key - operations: - - name: getKeyByAltName - object: *clientEncryption0 - arguments: - keyAltName: local_key - expectResult: *local_key_doc - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - find: *collection0Name - filter: { keyAltNames: local_key } - readConcern: { level: majority } diff --git a/testdata/client-side-encryption/unified/getKeys.json b/testdata/client-side-encryption/unified/getKeys.json deleted file mode 100644 index d944712357..0000000000 --- a/testdata/client-side-encryption/unified/getKeys.json +++ /dev/null @@ -1,260 +0,0 @@ -{ - "description": "getKeys", - "schemaVersion": "1.8", - "runOnRequirements": [ - { - "csfle": true - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "clientEncryption": { - "id": "clientEncryption0", - "clientEncryptionOpts": { - "keyVaultClient": "client0", - "keyVaultNamespace": "keyvault.datakeys", - "kmsProviders": { - "local": { - "key": { - "$$placeholder": 1 - } - } - } - } - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "keyvault" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "datakeys" - } - } - ], - "initialData": [ - { - "databaseName": "keyvault", - "collectionName": "datakeys", - "documents": [] - } - ], - "tests": [ - { - "description": "getKeys with zero key documents", - "operations": [ - { - "name": "getKeys", - "object": "clientEncryption0", - "expectResult": [] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "find": "datakeys", - "filter": {}, - "readConcern": { - "level": "majority" - } - } - } - } - ] - } - ] - }, - { - "description": "getKeys with single key documents", - "operations": [ - { - "name": "createDataKey", - "object": "clientEncryption0", - "arguments": { - "kmsProvider": "local", - "opts": { - "keyAltNames": [ - "abc" - ] - } - }, - "expectResult": { - "$$type": "binData" - } - }, - { - "name": "getKeys", - "object": "clientEncryption0", - "expectResult": [ - { - "_id": { - "$$type": "binData" - }, - "keyAltNames": [ - "abc" - ], - "keyMaterial": { - "$$type": "binData" - }, - "creationDate": { - "$$type": "date" - }, - "updateDate": { - "$$type": "date" - }, - "status": { - "$$type": "int" - }, - "masterKey": { - "$$type": "object" - } - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert" - } - }, - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "find": "datakeys", - "filter": {}, - "readConcern": { - "level": "majority" - } - } - } - } - ] - } - ] - }, - { - "description": "getKeys with many key documents", - "operations": [ - { - "name": "createDataKey", - "object": "clientEncryption0", - "arguments": { - "kmsProvider": "local" - }, - "expectResult": { - "$$type": "binData" - } - }, - { - "name": "createDataKey", - "object": "clientEncryption0", - "arguments": { - "kmsProvider": "local" - }, - "expectResult": { - "$$type": "binData" - } - }, - { - "name": "getKeys", - "object": "clientEncryption0", - "expectResult": [ - { - "_id": { - "$$type": "binData" - }, - "keyMaterial": { - "$$type": "binData" - }, - "creationDate": { - "$$type": "date" - }, - "updateDate": { - "$$type": "date" - }, - "status": { - "$$type": "int" - }, - "masterKey": { - "$$type": "object" - } - }, - { - "_id": { - "$$type": "binData" - }, - "keyMaterial": { - "$$type": "binData" - }, - "creationDate": { - "$$type": "date" - }, - "updateDate": { - "$$type": "date" - }, - "status": { - "$$type": "int" - }, - "masterKey": { - "$$type": "object" - } - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert" - } - }, - { - "commandStartedEvent": { - "commandName": "insert" - } - }, - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "find": "datakeys", - "filter": {}, - "readConcern": { - "level": "majority" - } - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/unified/getKeys.yml b/testdata/client-side-encryption/unified/getKeys.yml deleted file mode 100644 index f396439431..0000000000 --- a/testdata/client-side-encryption/unified/getKeys.yml +++ /dev/null @@ -1,122 +0,0 @@ -description: getKeys - -schemaVersion: "1.8" - -runOnRequirements: - - csfle: true - -createEntities: - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - clientEncryption: - id: &clientEncryption0 clientEncryption0 - clientEncryptionOpts: - keyVaultClient: *client0 - keyVaultNamespace: keyvault.datakeys - kmsProviders: - local: { key: { $$placeholder: 1 } } - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name keyvault - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name datakeys - -initialData: - - databaseName: *database0Name - collectionName: *collection0Name - documents: [] - -tests: - - description: getKeys with zero key documents - operations: - - name: getKeys - object: *clientEncryption0 - expectResult: [] - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - find: *collection0Name - filter: {} - readConcern: { level: majority } - - - description: getKeys with single key documents - operations: - - name: createDataKey - object: *clientEncryption0 - arguments: - kmsProvider: local - opts: - keyAltNames: ["abc"] - expectResult: { $$type: binData } - - name: getKeys - object: *clientEncryption0 - expectResult: - - _id: { $$type: binData } - keyAltNames: ["abc"] - keyMaterial: { $$type: binData } - creationDate: { $$type: date } - updateDate: { $$type: date } - status: { $$type: int } - masterKey: { $$type: object } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: insert - - commandStartedEvent: - databaseName: *database0Name - command: - find: *collection0Name - filter: {} - readConcern: { level: majority } - - - description: getKeys with many key documents - operations: - - name: createDataKey - object: *clientEncryption0 - arguments: - kmsProvider: local - expectResult: { $$type: binData } - - name: createDataKey - object: *clientEncryption0 - arguments: - kmsProvider: local - expectResult: { $$type: binData } - - name: getKeys - object: *clientEncryption0 - expectResult: - # Cannot expect deterministic order of results, so only assert that - # exactly two key documents are returned. - - _id: { $$type: binData } - keyMaterial: { $$type: binData } - creationDate: { $$type: date } - updateDate: { $$type: date } - status: { $$type: int } - masterKey: { $$type: object } - - _id: { $$type: binData } - keyMaterial: { $$type: binData } - creationDate: { $$type: date } - updateDate: { $$type: date } - status: { $$type: int } - masterKey: { $$type: object } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: insert - - commandStartedEvent: - commandName: insert - - commandStartedEvent: - databaseName: *database0Name - command: - find: *collection0Name - filter: {} - readConcern: { level: majority } diff --git a/testdata/client-side-encryption/unified/keyCache.json b/testdata/client-side-encryption/unified/keyCache.json deleted file mode 100644 index a39701e286..0000000000 --- a/testdata/client-side-encryption/unified/keyCache.json +++ /dev/null @@ -1,198 +0,0 @@ -{ - "description": "keyCache-explicit", - "schemaVersion": "1.22", - "runOnRequirements": [ - { - "csfle": true - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "clientEncryption": { - "id": "clientEncryption0", - "clientEncryptionOpts": { - "keyVaultClient": "client0", - "keyVaultNamespace": "keyvault.datakeys", - "kmsProviders": { - "local": { - "key": "OCTP9uKPPmvuqpHlqq83gPk4U6rUPxKVRRyVtrjFmVjdoa4Xzm1SzUbr7aIhNI42czkUBmrCtZKF31eaaJnxEBkqf0RFukA9Mo3NEHQWgAQ2cn9duOcRbaFUQo2z0/rB" - } - }, - "keyExpirationMS": 1 - } - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "keyvault" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "datakeys" - } - } - ], - "initialData": [ - { - "databaseName": "keyvault", - "collectionName": "datakeys", - "documents": [ - { - "_id": { - "$binary": { - "base64": "a+YWzdygTAG62/cNUkqZiQ==", - "subType": "04" - } - }, - "keyAltNames": [], - "keyMaterial": { - "$binary": { - "base64": "iocBkhO3YBokiJ+FtxDTS71/qKXQ7tSWhWbcnFTXBcMjarsepvALeJ5li+SdUd9ePuatjidxAdMo7vh1V2ZESLMkQWdpPJ9PaJjA67gKQKbbbB4Ik5F2uKjULvrMBnFNVRMup4JNUwWFQJpqbfMveXnUVcD06+pUpAkml/f+DSXrV3e5rxciiNVtz03dAG8wJrsKsFXWj6vTjFhsfknyBA==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1552949630483" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1552949630483" - } - }, - "status": { - "$numberInt": "0" - }, - "masterKey": { - "provider": "local" - } - } - ] - } - ], - "tests": [ - { - "description": "decrypt, wait, and decrypt again", - "operations": [ - { - "name": "decrypt", - "object": "clientEncryption0", - "arguments": { - "value": { - "$binary": { - "base64": "AWvmFs3coEwButv3DVJKmYkCJ6lUzRX9R28WNlw5uyndb+8gurA+p8q14s7GZ04K2ZvghieRlAr5UwZbow3PMq27u5EIhDDczwBFcbdP1amllw==", - "subType": "06" - } - } - }, - "expectResult": "foobar" - }, - { - "name": "wait", - "object": "testRunner", - "arguments": { - "ms": 50 - } - }, - { - "name": "decrypt", - "object": "clientEncryption0", - "arguments": { - "value": { - "$binary": { - "base64": "AWvmFs3coEwButv3DVJKmYkCJ6lUzRX9R28WNlw5uyndb+8gurA+p8q14s7GZ04K2ZvghieRlAr5UwZbow3PMq27u5EIhDDczwBFcbdP1amllw==", - "subType": "06" - } - } - }, - "expectResult": "foobar" - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "a+YWzdygTAG62/cNUkqZiQ==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - } - } - }, - { - "commandStartedEvent": { - "command": { - "find": "datakeys", - "filter": { - "$or": [ - { - "_id": { - "$in": [ - { - "$binary": { - "base64": "a+YWzdygTAG62/cNUkqZiQ==", - "subType": "04" - } - } - ] - } - }, - { - "keyAltNames": { - "$in": [] - } - } - ] - }, - "$db": "keyvault", - "readConcern": { - "level": "majority" - } - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/unified/keyCache.yml b/testdata/client-side-encryption/unified/keyCache.yml deleted file mode 100644 index d6e747ba09..0000000000 --- a/testdata/client-side-encryption/unified/keyCache.yml +++ /dev/null @@ -1,85 +0,0 @@ -description: keyCache-explicit - -schemaVersion: "1.22" - -runOnRequirements: - - csfle: true - -createEntities: - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - clientEncryption: - id: &clientEncryption0 clientEncryption0 - clientEncryptionOpts: - keyVaultClient: *client0 - keyVaultNamespace: keyvault.datakeys - kmsProviders: - "local" : { key: "OCTP9uKPPmvuqpHlqq83gPk4U6rUPxKVRRyVtrjFmVjdoa4Xzm1SzUbr7aIhNI42czkUBmrCtZKF31eaaJnxEBkqf0RFukA9Mo3NEHQWgAQ2cn9duOcRbaFUQo2z0/rB" } - keyExpirationMS: 1 - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name keyvault - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name datakeys - -initialData: - - databaseName: *database0Name - collectionName: *collection0Name - documents: - - { - "_id": { - "$binary": { - "base64": "a+YWzdygTAG62/cNUkqZiQ==", - "subType": "04" - } - }, - "keyAltNames": [], - "keyMaterial": { - "$binary": { - "base64": "iocBkhO3YBokiJ+FtxDTS71/qKXQ7tSWhWbcnFTXBcMjarsepvALeJ5li+SdUd9ePuatjidxAdMo7vh1V2ZESLMkQWdpPJ9PaJjA67gKQKbbbB4Ik5F2uKjULvrMBnFNVRMup4JNUwWFQJpqbfMveXnUVcD06+pUpAkml/f+DSXrV3e5rxciiNVtz03dAG8wJrsKsFXWj6vTjFhsfknyBA==", - "subType": "00" - } - }, - "creationDate": {"$date": {"$numberLong": "1552949630483"}}, - "updateDate": {"$date": {"$numberLong": "1552949630483"}}, - "status": {"$numberInt": "0"}, - "masterKey": {"provider": "local"} - } - -tests: - - description: decrypt, wait, and decrypt again - operations: - - name: decrypt - object: *clientEncryption0 - arguments: - value: { "$binary" : { "base64" : "AWvmFs3coEwButv3DVJKmYkCJ6lUzRX9R28WNlw5uyndb+8gurA+p8q14s7GZ04K2ZvghieRlAr5UwZbow3PMq27u5EIhDDczwBFcbdP1amllw==", "subType" : "06" } } - expectResult: "foobar" - - name: wait - object: testRunner - arguments: - ms: 50 # Wait long enough to account for coarse time resolution on Windows (CDRIVER-4526). - - name: decrypt - object: *clientEncryption0 - arguments: - value: { "$binary" : { "base64" : "AWvmFs3coEwButv3DVJKmYkCJ6lUzRX9R28WNlw5uyndb+8gurA+p8q14s7GZ04K2ZvghieRlAr5UwZbow3PMq27u5EIhDDczwBFcbdP1amllw==", "subType" : "06" } } - expectResult: "foobar" - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'a+YWzdygTAG62/cNUkqZiQ==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } - - commandStartedEvent: - command: - find: datakeys - filter: {"$or": [{"_id": {"$in": [ {'$binary': {'base64': 'a+YWzdygTAG62/cNUkqZiQ==', 'subType': '04'}} ] }}, {"keyAltNames": {"$in": []}}]} - $db: keyvault - readConcern: { level: "majority" } diff --git a/testdata/client-side-encryption/unified/removeKeyAltName.json b/testdata/client-side-encryption/unified/removeKeyAltName.json deleted file mode 100644 index 1b7077077a..0000000000 --- a/testdata/client-side-encryption/unified/removeKeyAltName.json +++ /dev/null @@ -1,672 +0,0 @@ -{ - "description": "removeKeyAltName", - "schemaVersion": "1.8", - "runOnRequirements": [ - { - "csfle": true - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "clientEncryption": { - "id": "clientEncryption0", - "clientEncryptionOpts": { - "keyVaultClient": "client0", - "keyVaultNamespace": "keyvault.datakeys", - "kmsProviders": { - "local": { - "key": { - "$$placeholder": 1 - } - } - } - } - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "keyvault" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "datakeys" - } - } - ], - "initialData": [ - { - "databaseName": "keyvault", - "collectionName": "datakeys", - "documents": [ - { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "alternate_name", - "local_key" - ], - "keyMaterial": { - "$binary": { - "base64": "ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "local" - } - } - ] - } - ], - "tests": [ - { - "description": "remove keyAltName from non-existent data key", - "operations": [ - { - "name": "removeKeyAltName", - "object": "clientEncryption0", - "arguments": { - "id": { - "$binary": { - "base64": "AAAjYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltName": "does_not_exist" - }, - "expectResult": { - "$$unsetOrMatches": null - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "findAndModify": "datakeys", - "query": { - "_id": { - "$binary": { - "base64": "AAAjYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - } - }, - "update": [ - { - "$set": { - "keyAltNames": { - "$cond": [ - { - "$eq": [ - "$keyAltNames", - [ - "does_not_exist" - ] - ] - }, - "$$REMOVE", - { - "$filter": { - "input": "$keyAltNames", - "cond": { - "$ne": [ - "$$this", - "does_not_exist" - ] - } - } - } - ] - } - } - } - ], - "writeConcern": { - "w": "majority" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "datakeys", - "databaseName": "keyvault", - "documents": [ - { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "alternate_name", - "local_key" - ], - "keyMaterial": { - "$binary": { - "base64": "ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "local" - } - } - ] - } - ] - }, - { - "description": "remove non-existent keyAltName from existing data key", - "operations": [ - { - "name": "removeKeyAltName", - "object": "clientEncryption0", - "arguments": { - "id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltName": "does_not_exist" - }, - "expectResult": { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "alternate_name", - "local_key" - ], - "keyMaterial": { - "$binary": { - "base64": "ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "local" - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "findAndModify": "datakeys", - "query": { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - } - }, - "update": [ - { - "$set": { - "keyAltNames": { - "$cond": [ - { - "$eq": [ - "$keyAltNames", - [ - "does_not_exist" - ] - ] - }, - "$$REMOVE", - { - "$filter": { - "input": "$keyAltNames", - "cond": { - "$ne": [ - "$$this", - "does_not_exist" - ] - } - } - } - ] - } - } - } - ], - "writeConcern": { - "w": "majority" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "datakeys", - "databaseName": "keyvault", - "documents": [ - { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "alternate_name", - "local_key" - ], - "keyMaterial": { - "$binary": { - "base64": "ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "local" - } - } - ] - } - ] - }, - { - "description": "remove an existing keyAltName from an existing data key", - "operations": [ - { - "name": "removeKeyAltName", - "object": "clientEncryption0", - "arguments": { - "id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltName": "alternate_name" - }, - "expectResult": { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "alternate_name", - "local_key" - ], - "keyMaterial": { - "$binary": { - "base64": "ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "local" - } - } - }, - { - "name": "find", - "object": "collection0", - "arguments": { - "filter": {}, - "projection": { - "_id": 0, - "keyAltNames": 1 - } - }, - "expectResult": [ - { - "keyAltNames": [ - "local_key" - ] - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "findAndModify": "datakeys", - "query": { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - } - }, - "update": [ - { - "$set": { - "keyAltNames": { - "$cond": [ - { - "$eq": [ - "$keyAltNames", - [ - "alternate_name" - ] - ] - }, - "$$REMOVE", - { - "$filter": { - "input": "$keyAltNames", - "cond": { - "$ne": [ - "$$this", - "alternate_name" - ] - } - } - } - ] - } - } - } - ], - "writeConcern": { - "w": "majority" - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "find" - } - } - ] - } - ] - }, - { - "description": "remove the last keyAltName from an existing data key", - "operations": [ - { - "name": "removeKeyAltName", - "object": "clientEncryption0", - "arguments": { - "id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltName": "alternate_name" - }, - "expectResult": { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "alternate_name", - "local_key" - ], - "keyMaterial": { - "$binary": { - "base64": "ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "local" - } - } - }, - { - "name": "removeKeyAltName", - "object": "clientEncryption0", - "arguments": { - "id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltName": "local_key" - }, - "expectResult": { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "local_key" - ], - "keyMaterial": { - "$$type": "binData" - }, - "creationDate": { - "$$type": "date" - }, - "updateDate": { - "$$type": "date" - }, - "status": 1, - "masterKey": { - "provider": "local" - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "findAndModify": "datakeys", - "query": { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - } - }, - "update": [ - { - "$set": { - "keyAltNames": { - "$cond": [ - { - "$eq": [ - "$keyAltNames", - [ - "alternate_name" - ] - ] - }, - "$$REMOVE", - { - "$filter": { - "input": "$keyAltNames", - "cond": { - "$ne": [ - "$$this", - "alternate_name" - ] - } - } - } - ] - } - } - } - ], - "writeConcern": { - "w": "majority" - } - } - } - }, - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "findAndModify": "datakeys", - "query": { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - } - }, - "update": [ - { - "$set": { - "keyAltNames": { - "$cond": [ - { - "$eq": [ - "$keyAltNames", - [ - "local_key" - ] - ] - }, - "$$REMOVE", - { - "$filter": { - "input": "$keyAltNames", - "cond": { - "$ne": [ - "$$this", - "local_key" - ] - } - } - } - ] - } - } - } - ] - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/unified/removeKeyAltName.yml b/testdata/client-side-encryption/unified/removeKeyAltName.yml deleted file mode 100644 index 02394609b1..0000000000 --- a/testdata/client-side-encryption/unified/removeKeyAltName.yml +++ /dev/null @@ -1,157 +0,0 @@ -description: removeKeyAltName - -schemaVersion: "1.8" - -runOnRequirements: - - csfle: true - -createEntities: - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - clientEncryption: - id: &clientEncryption0 clientEncryption0 - clientEncryptionOpts: - keyVaultClient: *client0 - keyVaultNamespace: keyvault.datakeys - kmsProviders: - local: { key: { $$placeholder: 1 } } - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name keyvault - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name datakeys - -initialData: - - databaseName: *database0Name - collectionName: *collection0Name - documents: - - &local_key_doc - _id: &local_key_id { $binary: { base64: bG9jYWxrZXlsb2NhbGtleQ==, subType: "04" } } - keyAltNames: [alternate_name, local_key] - keyMaterial: { $binary: { base64: ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==, subType: "00" } } - creationDate: { $date: { $numberLong: "1641024000000" } } - updateDate: { $date: { $numberLong: "1641024000000" } } - status: 1 - masterKey: - provider: local - -tests: - - description: remove keyAltName from non-existent data key - operations: - - name: removeKeyAltName - object: *clientEncryption0 - arguments: - # First 3 letters of local_key_id replaced with 'A' (value: "#alkeylocalkey"). - id: &non_existent_id { $binary: { base64: AAAjYWxrZXlsb2NhbGtleQ==, subType: "04" } } - keyAltName: does_not_exist - expectResult: { $$unsetOrMatches: null } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - findAndModify: *collection0Name - query: { _id: *non_existent_id } - update: [{ $set: { keyAltNames: { $cond: [{ $eq: [$keyAltNames, [does_not_exist]] }, $$REMOVE, { $filter: { input: $keyAltNames, cond: { $ne: [$$this, does_not_exist] } } }] } } }] - writeConcern: { w: majority } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *local_key_doc - - - description: remove non-existent keyAltName from existing data key - operations: - - name: removeKeyAltName - object: *clientEncryption0 - arguments: - id: *local_key_id - keyAltName: does_not_exist - expectResult: *local_key_doc - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - findAndModify: *collection0Name - query: { _id: *local_key_id } - update: [{ $set: { keyAltNames: { $cond: [{ $eq: [$keyAltNames, [does_not_exist]] }, $$REMOVE, { $filter: { input: $keyAltNames, cond: { $ne: [$$this, does_not_exist] } } }] } } }] - writeConcern: { w: majority } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *local_key_doc - - - description: remove an existing keyAltName from an existing data key - operations: - - name: removeKeyAltName - object: *clientEncryption0 - arguments: - id: *local_key_id - keyAltName: alternate_name - expectResult: *local_key_doc - - name: find - object: *collection0 - arguments: - filter: {} - projection: { _id: 0, keyAltNames: 1 } - expectResult: - - keyAltNames: [local_key] - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - findAndModify: *collection0Name - query: { _id: *local_key_id } - update: [{ $set: { keyAltNames: { $cond: [{ $eq: [$keyAltNames, [alternate_name]] }, $$REMOVE, { $filter: { input: $keyAltNames, cond: { $ne: [$$this, alternate_name] } } }] } } }] - writeConcern: { w: majority } - - commandStartedEvent: { commandName: find } - - - description: remove the last keyAltName from an existing data key - operations: - - name: removeKeyAltName - object: *clientEncryption0 - arguments: - id: *local_key_id - keyAltName: alternate_name - expectResult: *local_key_doc - - name: removeKeyAltName - object: *clientEncryption0 - arguments: - id: *local_key_id - keyAltName: local_key - expectResult: - _id: *local_key_id - keyAltNames: [local_key] - keyMaterial: { $$type: binData } - creationDate: { $$type: date } - updateDate: { $$type: date } - status: 1 - masterKey: - provider: local - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - findAndModify: *collection0Name - query: { _id: *local_key_id } - update: [{ $set: { keyAltNames: { $cond: [{ $eq: [$keyAltNames, [alternate_name]] }, $$REMOVE, { $filter: { input: $keyAltNames, cond: { $ne: [$$this, alternate_name] } } }] } } }] - writeConcern: { w: majority } - - commandStartedEvent: - databaseName: *database0Name - command: - findAndModify: *collection0Name - query: { _id: *local_key_id } - update: [{ $set: { keyAltNames: { $cond: [{ $eq: [$keyAltNames, [local_key]] }, $$REMOVE, { $filter: { input: $keyAltNames, cond: { $ne: [$$this, local_key] } } }] } } }] diff --git a/testdata/client-side-encryption/unified/rewrapManyDataKey-decrypt_failure.json b/testdata/client-side-encryption/unified/rewrapManyDataKey-decrypt_failure.json deleted file mode 100644 index 4c7d4e8048..0000000000 --- a/testdata/client-side-encryption/unified/rewrapManyDataKey-decrypt_failure.json +++ /dev/null @@ -1,162 +0,0 @@ -{ - "description": "rewrapManyDataKey-decrypt_failure", - "schemaVersion": "1.8", - "runOnRequirements": [ - { - "csfle": true - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "clientEncryption": { - "id": "clientEncryption0", - "clientEncryptionOpts": { - "keyVaultClient": "client0", - "keyVaultNamespace": "keyvault.datakeys", - "kmsProviders": { - "aws": { - "accessKeyId": { - "$$placeholder": 1 - }, - "secretAccessKey": { - "$$placeholder": 1 - } - }, - "azure": { - "tenantId": { - "$$placeholder": 1 - }, - "clientId": { - "$$placeholder": 1 - }, - "clientSecret": { - "$$placeholder": 1 - } - }, - "gcp": { - "email": { - "$$placeholder": 1 - }, - "privateKey": { - "$$placeholder": 1 - } - }, - "kmip": { - "endpoint": { - "$$placeholder": 1 - } - }, - "local": { - "key": { - "$$placeholder": 1 - } - } - } - } - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "keyvault" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "datakeys" - } - } - ], - "initialData": [ - { - "databaseName": "keyvault", - "collectionName": "datakeys", - "documents": [ - { - "_id": { - "$binary": { - "base64": "YXdzYXdzYXdzYXdzYXdzYQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "aws_key" - ], - "keyMaterial": { - "$binary": { - "base64": "AQICAHhQNmWG2CzOm1dq3kWLM+iDUZhEqnhJwH9wZVpuZ94A8gFXJqbF0Fy872MD7xl56D/2AAAAwjCBvwYJKoZIhvcNAQcGoIGxMIGuAgEAMIGoBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDO7HPisPUlGzaio9vgIBEIB7/Qow46PMh/8JbEUbdXgTGhLfXPE+KIVW7T8s6YEMlGiRvMu7TV0QCIUJlSHPKZxzlJ2iwuz5yXeOag+EdY+eIQ0RKrsJ3b8UTisZYzGjfzZnxUKLzLoeXremtRCm3x47wCuHKd1dhh6FBbYt5TL2tDaj+vL2GBrKat2L", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "aws", - "key": "arn:aws:kms:us-east-2:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0", - "region": "us-east-2" - } - } - ] - } - ], - "tests": [ - { - "description": "rewrap data key that fails during decryption due to invalid masterKey", - "operations": [ - { - "name": "rewrapManyDataKey", - "object": "clientEncryption0", - "arguments": { - "filter": {}, - "opts": { - "provider": "local" - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "keyvault", - "command": { - "find": "datakeys", - "filter": {}, - "readConcern": { - "level": "majority" - } - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/unified/rewrapManyDataKey-decrypt_failure.yml b/testdata/client-side-encryption/unified/rewrapManyDataKey-decrypt_failure.yml deleted file mode 100644 index 3a6e521881..0000000000 --- a/testdata/client-side-encryption/unified/rewrapManyDataKey-decrypt_failure.yml +++ /dev/null @@ -1,69 +0,0 @@ -description: rewrapManyDataKey-decrypt_failure - -schemaVersion: "1.8" - -runOnRequirements: - - csfle: true - -createEntities: - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - clientEncryption: - id: &clientEncryption0 clientEncryption0 - clientEncryptionOpts: - keyVaultClient: *client0 - keyVaultNamespace: keyvault.datakeys - kmsProviders: - aws: { accessKeyId: { $$placeholder: 1 }, secretAccessKey: { $$placeholder: 1 } } - azure: { tenantId: { $$placeholder: 1 }, clientId: { $$placeholder: 1 }, clientSecret: { $$placeholder: 1 } } - gcp: { email: { $$placeholder: 1 }, privateKey: { $$placeholder: 1 } } - kmip: { endpoint: { $$placeholder: 1 } } - local: { key: { $$placeholder: 1 } } - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name keyvault - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name datakeys - -initialData: - - databaseName: *database0Name - collectionName: *collection0Name - documents: - - _id: { $binary: { base64: YXdzYXdzYXdzYXdzYXdzYQ==, subType: "04" } } - keyAltNames: ["aws_key"] - keyMaterial: { $binary: { base64: AQICAHhQNmWG2CzOm1dq3kWLM+iDUZhEqnhJwH9wZVpuZ94A8gFXJqbF0Fy872MD7xl56D/2AAAAwjCBvwYJKoZIhvcNAQcGoIGxMIGuAgEAMIGoBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDO7HPisPUlGzaio9vgIBEIB7/Qow46PMh/8JbEUbdXgTGhLfXPE+KIVW7T8s6YEMlGiRvMu7TV0QCIUJlSHPKZxzlJ2iwuz5yXeOag+EdY+eIQ0RKrsJ3b8UTisZYzGjfzZnxUKLzLoeXremtRCm3x47wCuHKd1dhh6FBbYt5TL2tDaj+vL2GBrKat2L, subType: "00" } } - creationDate: { $date: { $numberLong: "1641024000000" } } - updateDate: { $date: { $numberLong: "1641024000000" } } - status: 1 - masterKey: - provider: aws - # "us-east-1" changed to "us-east-2" in both key and region. - key: arn:aws:kms:us-east-2:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0 - region: us-east-2 - -tests: - - description: "rewrap data key that fails during decryption due to invalid masterKey" - operations: - - name: rewrapManyDataKey - object: *clientEncryption0 - arguments: - filter: {} - opts: - provider: local - expectError: - isClientError: true - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: find - databaseName: *database0Name - command: - find: *collection0Name - filter: {} - readConcern: { level: majority } diff --git a/testdata/client-side-encryption/unified/rewrapManyDataKey-encrypt_failure.json b/testdata/client-side-encryption/unified/rewrapManyDataKey-encrypt_failure.json deleted file mode 100644 index cd2d20c255..0000000000 --- a/testdata/client-side-encryption/unified/rewrapManyDataKey-encrypt_failure.json +++ /dev/null @@ -1,250 +0,0 @@ -{ - "description": "rewrapManyDataKey-encrypt_failure", - "schemaVersion": "1.8", - "runOnRequirements": [ - { - "csfle": true - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "clientEncryption": { - "id": "clientEncryption0", - "clientEncryptionOpts": { - "keyVaultClient": "client0", - "keyVaultNamespace": "keyvault.datakeys", - "kmsProviders": { - "aws": { - "accessKeyId": { - "$$placeholder": 1 - }, - "secretAccessKey": { - "$$placeholder": 1 - } - }, - "azure": { - "tenantId": { - "$$placeholder": 1 - }, - "clientId": { - "$$placeholder": 1 - }, - "clientSecret": { - "$$placeholder": 1 - } - }, - "gcp": { - "email": { - "$$placeholder": 1 - }, - "privateKey": { - "$$placeholder": 1 - } - }, - "kmip": { - "endpoint": { - "$$placeholder": 1 - } - }, - "local": { - "key": { - "$$placeholder": 1 - } - } - } - } - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "keyvault" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "datakeys" - } - } - ], - "initialData": [ - { - "databaseName": "keyvault", - "collectionName": "datakeys", - "documents": [ - { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "local_key" - ], - "keyMaterial": { - "$binary": { - "base64": "ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "local" - } - } - ] - } - ], - "tests": [ - { - "description": "rewrap with invalid masterKey for AWS KMS provider", - "operations": [ - { - "name": "rewrapManyDataKey", - "object": "clientEncryption0", - "arguments": { - "filter": {}, - "opts": { - "provider": "aws", - "masterKey": { - "key": "arn:aws:kms:us-east-2:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0", - "region": "us-east-2" - } - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "keyvault", - "command": { - "find": "datakeys", - "filter": {}, - "readConcern": { - "level": "majority" - } - } - } - } - ] - } - ] - }, - { - "description": "rewrap with invalid masterKey for Azure KMS provider", - "operations": [ - { - "name": "rewrapManyDataKey", - "object": "clientEncryption0", - "arguments": { - "filter": {}, - "opts": { - "provider": "azure", - "masterKey": { - "keyVaultEndpoint": "invalid-vault-csfle.vault.azure.net", - "keyName": "invalid-name-csfle" - } - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "keyvault", - "command": { - "find": "datakeys", - "filter": {}, - "readConcern": { - "level": "majority" - } - } - } - } - ] - } - ] - }, - { - "description": "rewrap with invalid masterKey for GCP KMS provider", - "operations": [ - { - "name": "rewrapManyDataKey", - "object": "clientEncryption0", - "arguments": { - "filter": {}, - "opts": { - "provider": "gcp", - "masterKey": { - "projectId": "devprod-drivers", - "location": "global", - "keyRing": "invalid-ring-csfle", - "keyName": "invalid-name-csfle" - } - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "keyvault", - "command": { - "find": "datakeys", - "filter": {}, - "readConcern": { - "level": "majority" - } - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/unified/rewrapManyDataKey-encrypt_failure.yml b/testdata/client-side-encryption/unified/rewrapManyDataKey-encrypt_failure.yml deleted file mode 100644 index b947c8ce7f..0000000000 --- a/testdata/client-side-encryption/unified/rewrapManyDataKey-encrypt_failure.yml +++ /dev/null @@ -1,122 +0,0 @@ -description: rewrapManyDataKey-encrypt_failure - -schemaVersion: "1.8" - -runOnRequirements: - - csfle: true - -createEntities: - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - clientEncryption: - id: &clientEncryption0 clientEncryption0 - clientEncryptionOpts: - keyVaultClient: *client0 - keyVaultNamespace: keyvault.datakeys - kmsProviders: - aws: { accessKeyId: { $$placeholder: 1 }, secretAccessKey: { $$placeholder: 1 } } - azure: { tenantId: { $$placeholder: 1 }, clientId: { $$placeholder: 1 }, clientSecret: { $$placeholder: 1 } } - gcp: { email: { $$placeholder: 1 }, privateKey: { $$placeholder: 1 } } - kmip: { endpoint: { $$placeholder: 1 } } - local: { key: { $$placeholder: 1 } } - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name keyvault - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name datakeys - -initialData: - - databaseName: *database0Name - collectionName: *collection0Name - documents: - - _id: { $binary: { base64: bG9jYWxrZXlsb2NhbGtleQ==, subType: "04" } } - keyAltNames: ["local_key"] - keyMaterial: { $binary: { base64: ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==, subType: "00" } } - creationDate: { $date: { $numberLong: "1641024000000" } } - updateDate: { $date: { $numberLong: "1641024000000" } } - status: 1 - masterKey: - provider: local - -tests: - - description: "rewrap with invalid masterKey for AWS KMS provider" - operations: - - name: rewrapManyDataKey - object: *clientEncryption0 - arguments: - filter: {} - opts: - provider: aws - masterKey: - # "us-east-1" changed to "us-east-2" in both key and region. - key: arn:aws:kms:us-east-2:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0 - region: us-east-2 - expectError: - isClientError: true - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: find - databaseName: *database0Name - command: - find: *collection0Name - filter: {} - readConcern: { level: majority } - - - description: "rewrap with invalid masterKey for Azure KMS provider" - operations: - - name: rewrapManyDataKey - object: *clientEncryption0 - arguments: - filter: {} - opts: - provider: azure - masterKey: - # "key" changed to "invalid" in both keyVaultEndpoint and keyName. - keyVaultEndpoint: invalid-vault-csfle.vault.azure.net - keyName: invalid-name-csfle - expectError: - isClientError: true - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: find - databaseName: *database0Name - command: - find: *collection0Name - filter: {} - readConcern: { level: majority } - - - description: "rewrap with invalid masterKey for GCP KMS provider" - operations: - - name: rewrapManyDataKey - object: *clientEncryption0 - arguments: - filter: {} - opts: - provider: gcp - masterKey: - # "key" changed to "invalid" in both keyRing and keyName. - projectId: devprod-drivers - location: global - keyRing: invalid-ring-csfle - keyName: invalid-name-csfle - expectError: - isClientError: true - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: find - databaseName: *database0Name - command: - find: *collection0Name - filter: {} - readConcern: { level: majority } diff --git a/testdata/client-side-encryption/unified/rewrapManyDataKey.json b/testdata/client-side-encryption/unified/rewrapManyDataKey.json deleted file mode 100644 index 6b3c9664a9..0000000000 --- a/testdata/client-side-encryption/unified/rewrapManyDataKey.json +++ /dev/null @@ -1,1493 +0,0 @@ -{ - "description": "rewrapManyDataKey", - "schemaVersion": "1.8", - "runOnRequirements": [ - { - "csfle": true - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "clientEncryption": { - "id": "clientEncryption0", - "clientEncryptionOpts": { - "keyVaultClient": "client0", - "keyVaultNamespace": "keyvault.datakeys", - "kmsProviders": { - "aws": { - "accessKeyId": { - "$$placeholder": 1 - }, - "secretAccessKey": { - "$$placeholder": 1 - } - }, - "azure": { - "tenantId": { - "$$placeholder": 1 - }, - "clientId": { - "$$placeholder": 1 - }, - "clientSecret": { - "$$placeholder": 1 - } - }, - "gcp": { - "email": { - "$$placeholder": 1 - }, - "privateKey": { - "$$placeholder": 1 - } - }, - "kmip": { - "endpoint": { - "$$placeholder": 1 - } - }, - "local": { - "key": { - "$$placeholder": 1 - } - } - } - } - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "keyvault" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "datakeys" - } - } - ], - "initialData": [ - { - "databaseName": "keyvault", - "collectionName": "datakeys", - "documents": [ - { - "_id": { - "$binary": { - "base64": "YXdzYXdzYXdzYXdzYXdzYQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "aws_key" - ], - "keyMaterial": { - "$binary": { - "base64": "AQICAHhQNmWG2CzOm1dq3kWLM+iDUZhEqnhJwH9wZVpuZ94A8gFXJqbF0Fy872MD7xl56D/2AAAAwjCBvwYJKoZIhvcNAQcGoIGxMIGuAgEAMIGoBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDO7HPisPUlGzaio9vgIBEIB7/Qow46PMh/8JbEUbdXgTGhLfXPE+KIVW7T8s6YEMlGiRvMu7TV0QCIUJlSHPKZxzlJ2iwuz5yXeOag+EdY+eIQ0RKrsJ3b8UTisZYzGjfzZnxUKLzLoeXremtRCm3x47wCuHKd1dhh6FBbYt5TL2tDaj+vL2GBrKat2L", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "aws", - "key": "arn:aws:kms:us-east-1:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0", - "region": "us-east-1" - } - }, - { - "_id": { - "$binary": { - "base64": "YXp1cmVhenVyZWF6dXJlYQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "azure_key" - ], - "keyMaterial": { - "$binary": { - "base64": "pr01l7qDygUkFE/0peFwpnNlv3iIy8zrQK38Q9i12UCN2jwZHDmfyx8wokiIKMb9kAleeY+vnt3Cf1MKu9kcDmI+KxbNDd+V3ytAAGzOVLDJr77CiWjF9f8ntkXRHrAY9WwnVDANYkDwXlyU0Y2GQFTiW65jiQhUtYLYH63Tk48SsJuQvnWw1Q+PzY8ga+QeVec8wbcThwtm+r2IHsCFnc72Gv73qq7weISw+O4mN08z3wOp5FOS2ZM3MK7tBGmPdBcktW7F8ODGsOQ1FU53OrWUnyX2aTi2ftFFFMWVHqQo7EYuBZHru8RRODNKMyQk0BFfKovAeTAVRv9WH9QU7g==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "azure", - "keyVaultEndpoint": "key-vault-csfle.vault.azure.net", - "keyName": "key-name-csfle" - } - }, - { - "_id": { - "$binary": { - "base64": "Z2NwZ2NwZ2NwZ2NwZ2NwZw==", - "subType": "04" - } - }, - "keyAltNames": [ - "gcp_key" - ], - "keyMaterial": { - "$binary": { - "base64": "CiQAIgLj0USbQtof/pYRLQO96yg/JEtZbD1UxKueaC37yzT5tTkSiQEAhClWB5ZCSgzHgxv8raWjNB4r7e8ePGdsmSuYTYmLC5oHHS/BdQisConzNKFaobEQZHamTCjyhy5NotKF8MWoo+dyfQApwI29+vAGyrUIQCXzKwRnNdNQ+lb3vJtS5bqvLTvSxKHpVca2kqyC9nhonV+u4qru5Q2bAqUgVFc8fL4pBuvlowZFTQ==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "gcp", - "projectId": "devprod-drivers", - "location": "global", - "keyRing": "key-ring-csfle", - "keyName": "key-name-csfle" - } - }, - { - "_id": { - "$binary": { - "base64": "a21pcGttaXBrbWlwa21pcA==", - "subType": "04" - } - }, - "keyAltNames": [ - "kmip_key" - ], - "keyMaterial": { - "$binary": { - "base64": "CklVctHzke4mcytd0TxGqvepkdkQN8NUF4+jV7aZQITAKdz6WjdDpq3lMt9nSzWGG2vAEfvRb3mFEVjV57qqGqxjq2751gmiMRHXz0btStbIK3mQ5xbY9kdye4tsixlCryEwQONr96gwlwKKI9Nubl9/8+uRF6tgYjje7Q7OjauEf1SrJwKcoQ3WwnjZmEqAug0kImCpJ/irhdqPzivRiA==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "kmip", - "keyId": "1" - } - }, - { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "keyAltNames": [ - "local_key" - ], - "keyMaterial": { - "$binary": { - "base64": "ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==", - "subType": "00" - } - }, - "creationDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "updateDate": { - "$date": { - "$numberLong": "1641024000000" - } - }, - "status": 1, - "masterKey": { - "provider": "local" - } - } - ] - } - ], - "tests": [ - { - "description": "no keys to rewrap due to no filter matches", - "operations": [ - { - "name": "rewrapManyDataKey", - "object": "clientEncryption0", - "arguments": { - "filter": { - "keyAltNames": "no_matching_keys" - }, - "opts": { - "provider": "local" - } - }, - "expectResult": { - "bulkWriteResult": { - "$$exists": false - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "find": "datakeys", - "filter": { - "keyAltNames": "no_matching_keys" - }, - "readConcern": { - "level": "majority" - } - } - } - } - ] - } - ] - }, - { - "description": "rewrap with new AWS KMS provider", - "operations": [ - { - "name": "rewrapManyDataKey", - "object": "clientEncryption0", - "arguments": { - "filter": { - "keyAltNames": { - "$ne": "aws_key" - } - }, - "opts": { - "provider": "aws", - "masterKey": { - "key": "arn:aws:kms:us-east-1:579766882180:key/061334ae-07a8-4ceb-a813-8135540e837d", - "region": "us-east-1" - } - } - }, - "expectResult": { - "bulkWriteResult": { - "insertedCount": 0, - "matchedCount": 4, - "modifiedCount": 4, - "deletedCount": 0, - "upsertedCount": 0, - "upsertedIds": {}, - "insertedIds": { - "$$unsetOrMatches": {} - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "find": "datakeys", - "filter": { - "keyAltNames": { - "$ne": "aws_key" - } - }, - "readConcern": { - "level": "majority" - } - } - } - }, - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "update": "datakeys", - "ordered": true, - "updates": [ - { - "q": { - "_id": { - "$$type": "binData" - } - }, - "u": { - "$set": { - "masterKey": { - "provider": "aws", - "key": "arn:aws:kms:us-east-1:579766882180:key/061334ae-07a8-4ceb-a813-8135540e837d", - "region": "us-east-1" - }, - "keyMaterial": { - "$$type": "binData" - } - }, - "$currentDate": { - "updateDate": true - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - }, - { - "q": { - "_id": { - "$$type": "binData" - } - }, - "u": { - "$set": { - "masterKey": { - "provider": "aws", - "key": "arn:aws:kms:us-east-1:579766882180:key/061334ae-07a8-4ceb-a813-8135540e837d", - "region": "us-east-1" - }, - "keyMaterial": { - "$$type": "binData" - } - }, - "$currentDate": { - "updateDate": true - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - }, - { - "q": { - "_id": { - "$$type": "binData" - } - }, - "u": { - "$set": { - "masterKey": { - "provider": "aws", - "key": "arn:aws:kms:us-east-1:579766882180:key/061334ae-07a8-4ceb-a813-8135540e837d", - "region": "us-east-1" - }, - "keyMaterial": { - "$$type": "binData" - } - }, - "$currentDate": { - "updateDate": true - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - }, - { - "q": { - "_id": { - "$$type": "binData" - } - }, - "u": { - "$set": { - "masterKey": { - "provider": "aws", - "key": "arn:aws:kms:us-east-1:579766882180:key/061334ae-07a8-4ceb-a813-8135540e837d", - "region": "us-east-1" - }, - "keyMaterial": { - "$$type": "binData" - } - }, - "$currentDate": { - "updateDate": true - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "writeConcern": { - "w": "majority" - } - } - } - } - ] - } - ] - }, - { - "description": "rewrap with new Azure KMS provider", - "operations": [ - { - "name": "rewrapManyDataKey", - "object": "clientEncryption0", - "arguments": { - "filter": { - "keyAltNames": { - "$ne": "azure_key" - } - }, - "opts": { - "provider": "azure", - "masterKey": { - "keyVaultEndpoint": "key-vault-csfle.vault.azure.net", - "keyName": "key-name-csfle" - } - } - }, - "expectResult": { - "bulkWriteResult": { - "insertedCount": 0, - "matchedCount": 4, - "modifiedCount": 4, - "deletedCount": 0, - "upsertedCount": 0, - "upsertedIds": {}, - "insertedIds": { - "$$unsetOrMatches": {} - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "find": "datakeys", - "filter": { - "keyAltNames": { - "$ne": "azure_key" - } - }, - "readConcern": { - "level": "majority" - } - } - } - }, - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "update": "datakeys", - "ordered": true, - "updates": [ - { - "q": { - "_id": { - "$$type": "binData" - } - }, - "u": { - "$set": { - "masterKey": { - "provider": "azure", - "keyVaultEndpoint": "key-vault-csfle.vault.azure.net", - "keyName": "key-name-csfle" - }, - "keyMaterial": { - "$$type": "binData" - } - }, - "$currentDate": { - "updateDate": true - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - }, - { - "q": { - "_id": { - "$$type": "binData" - } - }, - "u": { - "$set": { - "masterKey": { - "provider": "azure", - "keyVaultEndpoint": "key-vault-csfle.vault.azure.net", - "keyName": "key-name-csfle" - }, - "keyMaterial": { - "$$type": "binData" - } - }, - "$currentDate": { - "updateDate": true - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - }, - { - "q": { - "_id": { - "$$type": "binData" - } - }, - "u": { - "$set": { - "masterKey": { - "provider": "azure", - "keyVaultEndpoint": "key-vault-csfle.vault.azure.net", - "keyName": "key-name-csfle" - }, - "keyMaterial": { - "$$type": "binData" - } - }, - "$currentDate": { - "updateDate": true - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - }, - { - "q": { - "_id": { - "$$type": "binData" - } - }, - "u": { - "$set": { - "masterKey": { - "provider": "azure", - "keyVaultEndpoint": "key-vault-csfle.vault.azure.net", - "keyName": "key-name-csfle" - }, - "keyMaterial": { - "$$type": "binData" - } - }, - "$currentDate": { - "updateDate": true - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "writeConcern": { - "w": "majority" - } - } - } - } - ] - } - ] - }, - { - "description": "rewrap with new GCP KMS provider", - "operations": [ - { - "name": "rewrapManyDataKey", - "object": "clientEncryption0", - "arguments": { - "filter": { - "keyAltNames": { - "$ne": "gcp_key" - } - }, - "opts": { - "provider": "gcp", - "masterKey": { - "projectId": "devprod-drivers", - "location": "global", - "keyRing": "key-ring-csfle", - "keyName": "key-name-csfle" - } - } - }, - "expectResult": { - "bulkWriteResult": { - "insertedCount": 0, - "matchedCount": 4, - "modifiedCount": 4, - "deletedCount": 0, - "upsertedCount": 0, - "upsertedIds": {}, - "insertedIds": { - "$$unsetOrMatches": {} - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "find": "datakeys", - "filter": { - "keyAltNames": { - "$ne": "gcp_key" - } - }, - "readConcern": { - "level": "majority" - } - } - } - }, - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "update": "datakeys", - "ordered": true, - "updates": [ - { - "q": { - "_id": { - "$$type": "binData" - } - }, - "u": { - "$set": { - "masterKey": { - "provider": "gcp", - "projectId": "devprod-drivers", - "location": "global", - "keyRing": "key-ring-csfle", - "keyName": "key-name-csfle" - }, - "keyMaterial": { - "$$type": "binData" - } - }, - "$currentDate": { - "updateDate": true - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - }, - { - "q": { - "_id": { - "$$type": "binData" - } - }, - "u": { - "$set": { - "masterKey": { - "provider": "gcp", - "projectId": "devprod-drivers", - "location": "global", - "keyRing": "key-ring-csfle", - "keyName": "key-name-csfle" - }, - "keyMaterial": { - "$$type": "binData" - } - }, - "$currentDate": { - "updateDate": true - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - }, - { - "q": { - "_id": { - "$$type": "binData" - } - }, - "u": { - "$set": { - "masterKey": { - "provider": "gcp", - "projectId": "devprod-drivers", - "location": "global", - "keyRing": "key-ring-csfle", - "keyName": "key-name-csfle" - }, - "keyMaterial": { - "$$type": "binData" - } - }, - "$currentDate": { - "updateDate": true - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - }, - { - "q": { - "_id": { - "$$type": "binData" - } - }, - "u": { - "$set": { - "masterKey": { - "provider": "gcp", - "projectId": "devprod-drivers", - "location": "global", - "keyRing": "key-ring-csfle", - "keyName": "key-name-csfle" - }, - "keyMaterial": { - "$$type": "binData" - } - }, - "$currentDate": { - "updateDate": true - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "writeConcern": { - "w": "majority" - } - } - } - } - ] - } - ] - }, - { - "description": "rewrap with new KMIP KMS provider", - "operations": [ - { - "name": "rewrapManyDataKey", - "object": "clientEncryption0", - "arguments": { - "filter": { - "keyAltNames": { - "$ne": "kmip_key" - } - }, - "opts": { - "provider": "kmip" - } - }, - "expectResult": { - "bulkWriteResult": { - "insertedCount": 0, - "matchedCount": 4, - "modifiedCount": 4, - "deletedCount": 0, - "upsertedCount": 0, - "upsertedIds": {}, - "insertedIds": { - "$$unsetOrMatches": {} - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "find": "datakeys", - "filter": { - "keyAltNames": { - "$ne": "kmip_key" - } - }, - "readConcern": { - "level": "majority" - } - } - } - }, - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "update": "datakeys", - "ordered": true, - "updates": [ - { - "q": { - "_id": { - "$$type": "binData" - } - }, - "u": { - "$set": { - "masterKey": { - "provider": "kmip", - "keyId": { - "$$type": "string" - } - }, - "keyMaterial": { - "$$type": "binData" - } - }, - "$currentDate": { - "updateDate": true - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - }, - { - "q": { - "_id": { - "$$type": "binData" - } - }, - "u": { - "$set": { - "masterKey": { - "provider": "kmip", - "keyId": { - "$$type": "string" - } - }, - "keyMaterial": { - "$$type": "binData" - } - }, - "$currentDate": { - "updateDate": true - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - }, - { - "q": { - "_id": { - "$$type": "binData" - } - }, - "u": { - "$set": { - "masterKey": { - "provider": "kmip", - "keyId": { - "$$type": "string" - } - }, - "keyMaterial": { - "$$type": "binData" - } - }, - "$currentDate": { - "updateDate": true - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - }, - { - "q": { - "_id": { - "$$type": "binData" - } - }, - "u": { - "$set": { - "masterKey": { - "provider": "kmip", - "keyId": { - "$$type": "string" - } - }, - "keyMaterial": { - "$$type": "binData" - } - }, - "$currentDate": { - "updateDate": true - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "writeConcern": { - "w": "majority" - } - } - } - } - ] - } - ] - }, - { - "description": "rewrap with new local KMS provider", - "operations": [ - { - "name": "rewrapManyDataKey", - "object": "clientEncryption0", - "arguments": { - "filter": { - "keyAltNames": { - "$ne": "local_key" - } - }, - "opts": { - "provider": "local" - } - }, - "expectResult": { - "bulkWriteResult": { - "insertedCount": 0, - "matchedCount": 4, - "modifiedCount": 4, - "deletedCount": 0, - "upsertedCount": 0, - "upsertedIds": {}, - "insertedIds": { - "$$unsetOrMatches": {} - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "find": "datakeys", - "filter": { - "keyAltNames": { - "$ne": "local_key" - } - }, - "readConcern": { - "level": "majority" - } - } - } - }, - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "update": "datakeys", - "ordered": true, - "updates": [ - { - "q": { - "_id": { - "$$type": "binData" - } - }, - "u": { - "$set": { - "masterKey": { - "provider": "local" - }, - "keyMaterial": { - "$$type": "binData" - } - }, - "$currentDate": { - "updateDate": true - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - }, - { - "q": { - "_id": { - "$$type": "binData" - } - }, - "u": { - "$set": { - "masterKey": { - "provider": "local" - }, - "keyMaterial": { - "$$type": "binData" - } - }, - "$currentDate": { - "updateDate": true - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - }, - { - "q": { - "_id": { - "$$type": "binData" - } - }, - "u": { - "$set": { - "masterKey": { - "provider": "local" - }, - "keyMaterial": { - "$$type": "binData" - } - }, - "$currentDate": { - "updateDate": true - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - }, - { - "q": { - "_id": { - "$$type": "binData" - } - }, - "u": { - "$set": { - "masterKey": { - "provider": "local" - }, - "keyMaterial": { - "$$type": "binData" - } - }, - "$currentDate": { - "updateDate": true - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "writeConcern": { - "w": "majority" - } - } - } - } - ] - } - ] - }, - { - "description": "rewrap with current KMS provider", - "operations": [ - { - "name": "rewrapManyDataKey", - "object": "clientEncryption0", - "arguments": { - "filter": {} - }, - "expectResult": { - "bulkWriteResult": { - "insertedCount": 0, - "matchedCount": 5, - "modifiedCount": 5, - "deletedCount": 0, - "upsertedCount": 0, - "upsertedIds": {}, - "insertedIds": { - "$$unsetOrMatches": {} - } - } - } - }, - { - "name": "find", - "object": "collection0", - "arguments": { - "filter": {}, - "projection": { - "masterKey": 1 - }, - "sort": { - "keyAltNames": 1 - } - }, - "expectResult": [ - { - "_id": { - "$binary": { - "base64": "YXdzYXdzYXdzYXdzYXdzYQ==", - "subType": "04" - } - }, - "masterKey": { - "provider": "aws", - "key": "arn:aws:kms:us-east-1:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0", - "region": "us-east-1" - } - }, - { - "_id": { - "$binary": { - "base64": "YXp1cmVhenVyZWF6dXJlYQ==", - "subType": "04" - } - }, - "masterKey": { - "provider": "azure", - "keyVaultEndpoint": "key-vault-csfle.vault.azure.net", - "keyName": "key-name-csfle" - } - }, - { - "_id": { - "$binary": { - "base64": "Z2NwZ2NwZ2NwZ2NwZ2NwZw==", - "subType": "04" - } - }, - "masterKey": { - "provider": "gcp", - "projectId": "devprod-drivers", - "location": "global", - "keyRing": "key-ring-csfle", - "keyName": "key-name-csfle" - } - }, - { - "_id": { - "$binary": { - "base64": "a21pcGttaXBrbWlwa21pcA==", - "subType": "04" - } - }, - "masterKey": { - "provider": "kmip", - "keyId": "1" - } - }, - { - "_id": { - "$binary": { - "base64": "bG9jYWxrZXlsb2NhbGtleQ==", - "subType": "04" - } - }, - "masterKey": { - "provider": "local" - } - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "find": "datakeys", - "filter": {}, - "readConcern": { - "level": "majority" - } - } - } - }, - { - "commandStartedEvent": { - "databaseName": "keyvault", - "command": { - "update": "datakeys", - "ordered": true, - "updates": [ - { - "q": { - "_id": { - "$$type": "binData" - } - }, - "u": { - "$set": { - "masterKey": { - "$$type": "object" - }, - "keyMaterial": { - "$$type": "binData" - } - }, - "$currentDate": { - "updateDate": true - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - }, - { - "q": { - "_id": { - "$$type": "binData" - } - }, - "u": { - "$set": { - "masterKey": { - "$$type": "object" - }, - "keyMaterial": { - "$$type": "binData" - } - }, - "$currentDate": { - "updateDate": true - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - }, - { - "q": { - "_id": { - "$$type": "binData" - } - }, - "u": { - "$set": { - "masterKey": { - "$$type": "object" - }, - "keyMaterial": { - "$$type": "binData" - } - }, - "$currentDate": { - "updateDate": true - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - }, - { - "q": { - "_id": { - "$$type": "binData" - } - }, - "u": { - "$set": { - "masterKey": { - "$$type": "object" - }, - "keyMaterial": { - "$$type": "binData" - } - }, - "$currentDate": { - "updateDate": true - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - }, - { - "q": { - "_id": { - "$$type": "binData" - } - }, - "u": { - "$set": { - "masterKey": { - "$$type": "object" - }, - "keyMaterial": { - "$$type": "binData" - } - }, - "$currentDate": { - "updateDate": true - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "writeConcern": { - "w": "majority" - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "find" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/client-side-encryption/unified/rewrapManyDataKey.yml b/testdata/client-side-encryption/unified/rewrapManyDataKey.yml deleted file mode 100644 index cc20e1b171..0000000000 --- a/testdata/client-side-encryption/unified/rewrapManyDataKey.yml +++ /dev/null @@ -1,438 +0,0 @@ -# To ensure consistent ordering for expectResult matching purposes, find -# commands sort the resulting documents in ascending order by the single-element -# keyAltNames array to ensure alphabetic order by original KMS provider as -# defined in initialData. -description: rewrapManyDataKey - -schemaVersion: "1.8" - -runOnRequirements: - - csfle: true - -createEntities: - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - clientEncryption: - id: &clientEncryption0 clientEncryption0 - clientEncryptionOpts: - keyVaultClient: *client0 - keyVaultNamespace: keyvault.datakeys - kmsProviders: - aws: { accessKeyId: { $$placeholder: 1 }, secretAccessKey: { $$placeholder: 1 } } - azure: { tenantId: { $$placeholder: 1 }, clientId: { $$placeholder: 1 }, clientSecret: { $$placeholder: 1 } } - gcp: { email: { $$placeholder: 1 }, privateKey: { $$placeholder: 1 } } - kmip: { endpoint: { $$placeholder: 1 } } - local: { key: { $$placeholder: 1 } } - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name keyvault - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name datakeys - -initialData: - - databaseName: *database0Name - collectionName: *collection0Name - documents: - - _id: &aws_key_id { $binary: { base64: YXdzYXdzYXdzYXdzYXdzYQ==, subType: "04" } } - keyAltNames: ["aws_key"] - keyMaterial: { $binary: { base64: AQICAHhQNmWG2CzOm1dq3kWLM+iDUZhEqnhJwH9wZVpuZ94A8gFXJqbF0Fy872MD7xl56D/2AAAAwjCBvwYJKoZIhvcNAQcGoIGxMIGuAgEAMIGoBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDO7HPisPUlGzaio9vgIBEIB7/Qow46PMh/8JbEUbdXgTGhLfXPE+KIVW7T8s6YEMlGiRvMu7TV0QCIUJlSHPKZxzlJ2iwuz5yXeOag+EdY+eIQ0RKrsJ3b8UTisZYzGjfzZnxUKLzLoeXremtRCm3x47wCuHKd1dhh6FBbYt5TL2tDaj+vL2GBrKat2L, subType: "00" } } - creationDate: { $date: { $numberLong: "1641024000000" } } - updateDate: { $date: { $numberLong: "1641024000000" } } - status: 1 - masterKey: &aws_masterkey - provider: aws - key: arn:aws:kms:us-east-1:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0 - region: us-east-1 - - _id: &azure_key_id { $binary: { base64: YXp1cmVhenVyZWF6dXJlYQ==, subType: "04" } } - keyAltNames: ["azure_key"] - keyMaterial: { $binary: { base64: pr01l7qDygUkFE/0peFwpnNlv3iIy8zrQK38Q9i12UCN2jwZHDmfyx8wokiIKMb9kAleeY+vnt3Cf1MKu9kcDmI+KxbNDd+V3ytAAGzOVLDJr77CiWjF9f8ntkXRHrAY9WwnVDANYkDwXlyU0Y2GQFTiW65jiQhUtYLYH63Tk48SsJuQvnWw1Q+PzY8ga+QeVec8wbcThwtm+r2IHsCFnc72Gv73qq7weISw+O4mN08z3wOp5FOS2ZM3MK7tBGmPdBcktW7F8ODGsOQ1FU53OrWUnyX2aTi2ftFFFMWVHqQo7EYuBZHru8RRODNKMyQk0BFfKovAeTAVRv9WH9QU7g==, subType: "00" } } - creationDate: { $date: { $numberLong: "1641024000000" } } - updateDate: { $date: { $numberLong: "1641024000000" } } - status: 1 - masterKey: &azure_masterkey - provider: azure - keyVaultEndpoint: key-vault-csfle.vault.azure.net - keyName: key-name-csfle - - _id: &gcp_key_id { $binary: { base64: Z2NwZ2NwZ2NwZ2NwZ2NwZw==, subType: "04" } } - keyAltNames: ["gcp_key"] - keyMaterial: { $binary: { base64: CiQAIgLj0USbQtof/pYRLQO96yg/JEtZbD1UxKueaC37yzT5tTkSiQEAhClWB5ZCSgzHgxv8raWjNB4r7e8ePGdsmSuYTYmLC5oHHS/BdQisConzNKFaobEQZHamTCjyhy5NotKF8MWoo+dyfQApwI29+vAGyrUIQCXzKwRnNdNQ+lb3vJtS5bqvLTvSxKHpVca2kqyC9nhonV+u4qru5Q2bAqUgVFc8fL4pBuvlowZFTQ==, subType: "00" } } - creationDate: { $date: { $numberLong: "1641024000000" } } - updateDate: { $date: { $numberLong: "1641024000000" } } - status: 1 - masterKey: &gcp_masterkey - provider: gcp - projectId: devprod-drivers - location: global - keyRing: key-ring-csfle - keyName: key-name-csfle - - _id: &kmip_key_id { $binary: { base64: a21pcGttaXBrbWlwa21pcA==, subType: "04" } } - keyAltNames: ["kmip_key"] - keyMaterial: { $binary: { base64: CklVctHzke4mcytd0TxGqvepkdkQN8NUF4+jV7aZQITAKdz6WjdDpq3lMt9nSzWGG2vAEfvRb3mFEVjV57qqGqxjq2751gmiMRHXz0btStbIK3mQ5xbY9kdye4tsixlCryEwQONr96gwlwKKI9Nubl9/8+uRF6tgYjje7Q7OjauEf1SrJwKcoQ3WwnjZmEqAug0kImCpJ/irhdqPzivRiA==, subType: "00" } } - creationDate: { $date: { $numberLong: "1641024000000" } } - updateDate: { $date: { $numberLong: "1641024000000" } } - status: 1 - masterKey: &kmip_masterkey - provider: kmip - keyId: "1" - - _id: &local_key_id { $binary: { base64: bG9jYWxrZXlsb2NhbGtleQ==, subType: "04" } } - keyAltNames: ["local_key"] - keyMaterial: { $binary: { base64: ABKBldDEoDW323yejOnIRk6YQmlD9d3eQthd16scKL75nz2LjNL9fgPDZWrFFOlqlhMCFaSrNJfGrFUjYk5JFDO7soG5Syb50k1niJoKg4ilsj0L4mpimFUtTpOr2nzZOeQtvAksEXc7gsFgq8gV7t/U3lsaXPY7I0t42DfSE8EGlPdxRjFdHnxh+OR8h7U9b8Qs5K5UuhgyeyxaBZ1Hgw==, subType: "00" } } - creationDate: { $date: { $numberLong: "1641024000000" } } - updateDate: { $date: { $numberLong: "1641024000000" } } - status: 1 - masterKey: &local_masterkey - provider: local - -tests: - - description: "no keys to rewrap due to no filter matches" - operations: - - name: rewrapManyDataKey - object: *clientEncryption0 - arguments: - filter: { keyAltNames: no_matching_keys } - opts: - provider: local - expectResult: - # If no bulk write operation, then no bulk write result. - bulkWriteResult: { $$exists: false } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - find: *collection0Name - filter: { keyAltNames: no_matching_keys } - readConcern: { level: majority } - - - description: "rewrap with new AWS KMS provider" - operations: - - name: rewrapManyDataKey - object: *clientEncryption0 - arguments: - filter: { keyAltNames: { $ne: aws_key } } - opts: - provider: aws - # Different key: 89fcc2c4-08b0-4bd9-9f25-e30687b580d0 -> 061334ae-07a8-4ceb-a813-8135540e837d. - masterKey: &new_aws_masterkey - key: arn:aws:kms:us-east-1:579766882180:key/061334ae-07a8-4ceb-a813-8135540e837d - region: us-east-1 - expectResult: - bulkWriteResult: - insertedCount: 0 - matchedCount: 4 - modifiedCount: 4 - deletedCount: 0 - upsertedCount: 0 - upsertedIds: {} - insertedIds: { $$unsetOrMatches: {} } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - find: *collection0Name - filter: { keyAltNames: { $ne: aws_key } } - readConcern: { level: majority } - - commandStartedEvent: - databaseName: *database0Name - command: - update: *collection0Name - ordered: true - updates: - - q: { _id: { $$type: binData } } - u: { $set: { masterKey: { provider: aws, <<: *new_aws_masterkey }, keyMaterial: { $$type: binData } }, $currentDate: { updateDate: true } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - q: { _id: { $$type: binData } } - u: { $set: { masterKey: { provider: aws, <<: *new_aws_masterkey }, keyMaterial: { $$type: binData } }, $currentDate: { updateDate: true } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - q: { _id: { $$type: binData } } - u: { $set: { masterKey: { provider: aws, <<: *new_aws_masterkey }, keyMaterial: { $$type: binData } }, $currentDate: { updateDate: true } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - q: { _id: { $$type: binData } } - u: { $set: { masterKey: { provider: aws, <<: *new_aws_masterkey }, keyMaterial: { $$type: binData } }, $currentDate: { updateDate: true } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - writeConcern: { w: majority } - - - description: "rewrap with new Azure KMS provider" - operations: - - name: rewrapManyDataKey - object: *clientEncryption0 - arguments: - filter: { keyAltNames: { $ne: azure_key } } - opts: - provider: azure - masterKey: &new_azure_masterkey - keyVaultEndpoint: key-vault-csfle.vault.azure.net - keyName: key-name-csfle - expectResult: - bulkWriteResult: - insertedCount: 0 - matchedCount: 4 - modifiedCount: 4 - deletedCount: 0 - upsertedCount: 0 - upsertedIds: {} - insertedIds: { $$unsetOrMatches: {} } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - find: *collection0Name - filter: { keyAltNames: { $ne: azure_key } } - readConcern: { level: majority } - - commandStartedEvent: - databaseName: *database0Name - command: - update: *collection0Name - ordered: true - updates: - - q: { _id: { $$type: binData } } - u: { $set: { masterKey: { provider: azure, <<: *new_azure_masterkey }, keyMaterial: { $$type: binData } }, $currentDate: { updateDate: true } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - q: { _id: { $$type: binData } } - u: { $set: { masterKey: { provider: azure, <<: *new_azure_masterkey }, keyMaterial: { $$type: binData } }, $currentDate: { updateDate: true } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - q: { _id: { $$type: binData } } - u: { $set: { masterKey: { provider: azure, <<: *new_azure_masterkey }, keyMaterial: { $$type: binData } }, $currentDate: { updateDate: true } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - q: { _id: { $$type: binData } } - u: { $set: { masterKey: { provider: azure, <<: *new_azure_masterkey }, keyMaterial: { $$type: binData } }, $currentDate: { updateDate: true } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - writeConcern: { w: majority } - - - description: "rewrap with new GCP KMS provider" - operations: - - name: rewrapManyDataKey - object: *clientEncryption0 - arguments: - filter: { keyAltNames: { $ne: gcp_key } } - opts: - provider: gcp - masterKey: &new_gcp_masterkey - projectId: devprod-drivers - location: global - keyRing: key-ring-csfle - keyName: key-name-csfle - expectResult: - bulkWriteResult: - insertedCount: 0 - matchedCount: 4 - modifiedCount: 4 - deletedCount: 0 - upsertedCount: 0 - upsertedIds: {} - insertedIds: { $$unsetOrMatches: {} } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - find: *collection0Name - filter: { keyAltNames: { $ne: gcp_key } } - readConcern: { level: majority } - - commandStartedEvent: - databaseName: *database0Name - command: - update: *collection0Name - ordered: true - updates: - - q: { _id: { $$type: binData } } - u: { $set: { masterKey: { provider: gcp, <<: *new_gcp_masterkey }, keyMaterial: { $$type: binData } }, $currentDate: { updateDate: true } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - q: { _id: { $$type: binData } } - u: { $set: { masterKey: { provider: gcp, <<: *new_gcp_masterkey }, keyMaterial: { $$type: binData } }, $currentDate: { updateDate: true } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - q: { _id: { $$type: binData } } - u: { $set: { masterKey: { provider: gcp, <<: *new_gcp_masterkey }, keyMaterial: { $$type: binData } }, $currentDate: { updateDate: true } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - q: { _id: { $$type: binData } } - u: { $set: { masterKey: { provider: gcp, <<: *new_gcp_masterkey }, keyMaterial: { $$type: binData } }, $currentDate: { updateDate: true } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - writeConcern: { w: majority } - - - description: "rewrap with new KMIP KMS provider" - operations: - - name: rewrapManyDataKey - object: *clientEncryption0 - arguments: - filter: { keyAltNames: { $ne: kmip_key } } - opts: - provider: kmip - expectResult: - bulkWriteResult: - insertedCount: 0 - matchedCount: 4 - modifiedCount: 4 - deletedCount: 0 - upsertedCount: 0 - upsertedIds: {} - insertedIds: { $$unsetOrMatches: {} } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - find: *collection0Name - filter: { keyAltNames: { $ne: kmip_key } } - readConcern: { level: majority } - - commandStartedEvent: - databaseName: *database0Name - command: - update: *collection0Name - ordered: true - updates: - - q: { _id: { $$type: binData } } - u: { $set: { masterKey: { provider: kmip, keyId: { $$type: string } }, keyMaterial: { $$type: binData } }, $currentDate: { updateDate: true } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - q: { _id: { $$type: binData } } - u: { $set: { masterKey: { provider: kmip, keyId: { $$type: string } }, keyMaterial: { $$type: binData } }, $currentDate: { updateDate: true } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - q: { _id: { $$type: binData } } - u: { $set: { masterKey: { provider: kmip, keyId: { $$type: string } }, keyMaterial: { $$type: binData } }, $currentDate: { updateDate: true } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - q: { _id: { $$type: binData } } - u: { $set: { masterKey: { provider: kmip, keyId: { $$type: string } }, keyMaterial: { $$type: binData } }, $currentDate: { updateDate: true } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - writeConcern: { w: majority } - - - description: "rewrap with new local KMS provider" - operations: - - name: rewrapManyDataKey - object: *clientEncryption0 - arguments: - filter: { keyAltNames: { $ne: local_key } } - opts: - provider: local - expectResult: - bulkWriteResult: - insertedCount: 0 - matchedCount: 4 - modifiedCount: 4 - deletedCount: 0 - upsertedCount: 0 - upsertedIds: {} - insertedIds: { $$unsetOrMatches: {} } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - find: *collection0Name - filter: { keyAltNames: { $ne: local_key } } - readConcern: { level: majority } - - commandStartedEvent: - databaseName: *database0Name - command: - update: *collection0Name - ordered: true - updates: - - q: { _id: { $$type: binData } } - u: { $set: { masterKey: { provider: local }, keyMaterial: { $$type: binData } }, $currentDate: { updateDate: true } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - q: { _id: { $$type: binData } } - u: { $set: { masterKey: { provider: local }, keyMaterial: { $$type: binData } }, $currentDate: { updateDate: true } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - q: { _id: { $$type: binData } } - u: { $set: { masterKey: { provider: local }, keyMaterial: { $$type: binData } }, $currentDate: { updateDate: true } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - q: { _id: { $$type: binData } } - u: { $set: { masterKey: { provider: local }, keyMaterial: { $$type: binData } }, $currentDate: { updateDate: true } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - writeConcern: { w: majority } - - - description: "rewrap with current KMS provider" - operations: - - name: rewrapManyDataKey - object: *clientEncryption0 - arguments: - filter: {} - expectResult: - bulkWriteResult: - insertedCount: 0 - matchedCount: 5 - modifiedCount: 5 - deletedCount: 0 - upsertedCount: 0 - upsertedIds: {} - insertedIds: { $$unsetOrMatches: {} } - - name: find - object: *collection0 - arguments: - filter: {} - projection: { masterKey: 1 } - sort: { keyAltNames: 1 } - expectResult: - - { _id: *aws_key_id, masterKey: *aws_masterkey } - - { _id: *azure_key_id, masterKey: *azure_masterkey } - - { _id: *gcp_key_id, masterKey: *gcp_masterkey } - - { _id: *kmip_key_id, masterKey: *kmip_masterkey } - - { _id: *local_key_id, masterKey: *local_masterkey } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - databaseName: *database0Name - command: - find: *collection0Name - filter: {} - readConcern: { level: majority } - - commandStartedEvent: - databaseName: *database0Name - command: - update: *collection0Name - ordered: true - updates: - - q: { _id: { $$type: binData } } - u: { $set: { masterKey: { $$type: object }, keyMaterial: { $$type: binData } }, $currentDate: { updateDate: true } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - q: { _id: { $$type: binData } } - u: { $set: { masterKey: { $$type: object }, keyMaterial: { $$type: binData } }, $currentDate: { updateDate: true } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - q: { _id: { $$type: binData } } - u: { $set: { masterKey: { $$type: object }, keyMaterial: { $$type: binData } }, $currentDate: { updateDate: true } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - q: { _id: { $$type: binData } } - u: { $set: { masterKey: { $$type: object }, keyMaterial: { $$type: binData } }, $currentDate: { updateDate: true } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - q: { _id: { $$type: binData } } - u: { $set: { masterKey: { $$type: object }, keyMaterial: { $$type: binData } }, $currentDate: { updateDate: true } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - writeConcern: { w: majority } - - commandStartedEvent: { commandName: find } diff --git a/testdata/client-side-operations-timeout/bulkWrite.json b/testdata/client-side-operations-timeout/bulkWrite.json deleted file mode 100644 index 14d5b654f6..0000000000 --- a/testdata/client-side-operations-timeout/bulkWrite.json +++ /dev/null @@ -1,159 +0,0 @@ -{ - "description": "timeoutMS behaves correctly for bulkWrite operations", - "schemaVersion": "1.9", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "createEntities": [ - { - "client": { - "id": "failPointClient", - "useMultipleMongoses": false - } - }, - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ], - "initialData": [ - { - "collectionName": "coll", - "databaseName": "test", - "documents": [] - } - ], - "tests": [ - { - "description": "timeoutMS applied to entire bulkWrite, not individual commands", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "insert", - "update" - ], - "blockConnection": true, - "blockTimeMS": 120 - } - } - } - }, - { - "name": "find", - "object": "collection", - "arguments": { - "filter": { - "_id": 1 - } - } - }, - { - "name": "bulkWrite", - "object": "collection", - "arguments": { - "requests": [ - { - "insertOne": { - "document": { - "_id": 1 - } - } - }, - { - "replaceOne": { - "filter": { - "_id": 1 - }, - "replacement": { - "x": 1 - } - } - } - ], - "timeoutMS": 200 - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/client-side-operations-timeout/bulkWrite.yml b/testdata/client-side-operations-timeout/bulkWrite.yml deleted file mode 100644 index b50799c2b0..0000000000 --- a/testdata/client-side-operations-timeout/bulkWrite.yml +++ /dev/null @@ -1,84 +0,0 @@ -description: "timeoutMS behaves correctly for bulkWrite operations" - -schemaVersion: "1.9" - -runOnRequirements: - - minServerVersion: "4.4" - -createEntities: - - client: - id: &failPointClient failPointClient - useMultipleMongoses: false - - client: - id: &client client - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: &databaseName test - - collection: - id: &collection collection - database: *database - collectionName: &collectionName coll - -initialData: - - collectionName: *collectionName - databaseName: *databaseName - documents: [] - -tests: - # Test that drivers do not refresh timeoutMS between commands. This is done by running a bulkWrite that will require - # two commands with timeoutMS=200 and blocking each command for 120ms. The server should take over 200ms total, so the - # bulkWrite should fail with a timeout error. - - description: "timeoutMS applied to entire bulkWrite, not individual commands" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["insert", "update"] - blockConnection: true - blockTimeMS: 120 - # Do an operation without a timeout to ensure the servers are discovered. - - name: find - object: *collection - arguments: - filter: { _id : 1 } - - name: bulkWrite - object: *collection - arguments: - requests: - - insertOne: - document: { _id: 1 } - - replaceOne: - filter: { _id: 1 } - replacement: { x: 1 } - timeoutMS: 200 - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - maxTimeMS: { $$type: ["int", "long"] } diff --git a/testdata/client-side-operations-timeout/command-execution.json b/testdata/client-side-operations-timeout/command-execution.json deleted file mode 100644 index d4f9bb1bdc..0000000000 --- a/testdata/client-side-operations-timeout/command-execution.json +++ /dev/null @@ -1,393 +0,0 @@ -{ - "description": "timeoutMS behaves correctly during command execution", - "schemaVersion": "1.9", - "runOnRequirements": [ - { - "minServerVersion": "4.9", - "topologies": [ - "single", - "replicaset", - "sharded" - ], - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "failPointClient", - "useMultipleMongoses": false - } - } - ], - "initialData": [ - { - "collectionName": "coll", - "databaseName": "test", - "documents": [] - }, - { - "collectionName": "timeoutColl", - "databaseName": "test", - "documents": [] - } - ], - "tests": [ - { - "description": "maxTimeMS value in the command is less than timeoutMS", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": "alwaysOn", - "data": { - "failCommands": [ - "hello", - "isMaster" - ], - "appName": "reduceMaxTimeMSTest", - "blockConnection": true, - "blockTimeMS": 50 - } - } - } - }, - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "uriOptions": { - "appName": "reduceMaxTimeMSTest", - "w": 1, - "timeoutMS": 500, - "heartbeatFrequencyMS": 500 - }, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "timeoutCollection", - "database": "database", - "collectionName": "timeoutColl" - } - } - ] - } - }, - { - "name": "insertOne", - "object": "timeoutCollection", - "arguments": { - "document": { - "_id": 1 - }, - "timeoutMS": 100000 - } - }, - { - "name": "wait", - "object": "testRunner", - "arguments": { - "ms": 1000 - } - }, - { - "name": "insertOne", - "object": "timeoutCollection", - "arguments": { - "document": { - "_id": 2 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "timeoutColl" - } - } - }, - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "timeoutColl", - "maxTimeMS": { - "$$lte": 451 - } - } - } - } - ] - } - ] - }, - { - "description": "command is not sent if RTT is greater than timeoutMS", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": "alwaysOn", - "data": { - "failCommands": [ - "hello", - "isMaster" - ], - "appName": "rttTooHighTest", - "blockConnection": true, - "blockTimeMS": 50 - } - } - } - }, - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "uriOptions": { - "appName": "rttTooHighTest", - "w": 1, - "timeoutMS": 10, - "heartbeatFrequencyMS": 500 - }, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "timeoutCollection", - "database": "database", - "collectionName": "timeoutColl" - } - } - ] - } - }, - { - "name": "insertOne", - "object": "timeoutCollection", - "arguments": { - "document": { - "_id": 1 - }, - "timeoutMS": 100000 - } - }, - { - "name": "wait", - "object": "testRunner", - "arguments": { - "ms": 1000 - } - }, - { - "name": "insertOne", - "object": "timeoutCollection", - "arguments": { - "document": { - "_id": 2 - } - }, - "expectError": { - "isTimeoutError": true - } - }, - { - "name": "insertOne", - "object": "timeoutCollection", - "arguments": { - "document": { - "_id": 3 - } - }, - "expectError": { - "isTimeoutError": true - } - }, - { - "name": "insertOne", - "object": "timeoutCollection", - "arguments": { - "document": { - "_id": 4 - } - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "timeoutColl" - } - } - } - ] - } - ] - }, - { - "description": "short-circuit is not enabled with only 1 RTT measurement", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": "alwaysOn", - "data": { - "failCommands": [ - "hello", - "isMaster" - ], - "appName": "reduceMaxTimeMSTest", - "blockConnection": true, - "blockTimeMS": 100 - } - } - } - }, - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "uriOptions": { - "appName": "reduceMaxTimeMSTest", - "w": 1, - "timeoutMS": 90, - "heartbeatFrequencyMS": 100000 - }, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "timeoutCollection", - "database": "database", - "collectionName": "timeoutColl" - } - } - ] - } - }, - { - "name": "insertOne", - "object": "timeoutCollection", - "arguments": { - "document": { - "_id": 1 - }, - "timeoutMS": 100000 - } - }, - { - "name": "insertOne", - "object": "timeoutCollection", - "arguments": { - "document": { - "_id": 2 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "timeoutColl" - } - } - }, - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "timeoutColl", - "maxTimeMS": { - "$$lte": 450 - } - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/client-side-operations-timeout/command-execution.yml b/testdata/client-side-operations-timeout/command-execution.yml deleted file mode 100644 index 4b05071fe5..0000000000 --- a/testdata/client-side-operations-timeout/command-execution.yml +++ /dev/null @@ -1,251 +0,0 @@ -description: "timeoutMS behaves correctly during command execution" - -schemaVersion: "1.9" - -runOnRequirements: - # The appName filter cannot be used to set a fail point on connection handshakes until server version 4.9 due to - # SERVER-49220/SERVER-49336. - - minServerVersion: "4.9" - # Skip load-balanced and serverless which do not support RTT measurements. - topologies: [ single, replicaset, sharded ] - serverless: forbid - -createEntities: - - client: - id: &failPointClient failPointClient - useMultipleMongoses: false - -initialData: - # The corresponding entities for the collections defined here are created in test-level createEntities operations. - # This is done so that tests can set fail points that will affect all of the handshakes and heartbeats done by a - # client. The collection and database names are listed here so that the collections will be dropped and re-created at - # the beginning of each test. - - collectionName: ®ularCollectionName coll - databaseName: &databaseName test - documents: [] - - collectionName: &timeoutCollectionName timeoutColl - databaseName: &databaseName test - documents: [] - -tests: - - description: "maxTimeMS value in the command is less than timeoutMS" - operations: - # Artificially increase the server RTT to ~50ms. - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: "alwaysOn" - data: - failCommands: ["hello", "isMaster"] - appName: &appName reduceMaxTimeMSTest - blockConnection: true - blockTimeMS: 50 - # Create a client with the app name specified in the fail point and timeoutMS higher than blockTimeMS. - # Also create database and collection entities derived from the new client. - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - useMultipleMongoses: false - uriOptions: - appName: *appName - w: 1 # Override server's w:majority default to speed up the test. - timeoutMS: 500 - heartbeatFrequencyMS: 500 - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &timeoutCollection timeoutCollection - database: *database - collectionName: *timeoutCollectionName - # Do an operation with a large timeout to ensure the servers are discovered. - - name: insertOne - object: *timeoutCollection - arguments: - document: { _id: 1 } - timeoutMS: 100000 - # Wait until short-circuiting has been enabled (at least 2 RTT measurements). - - name: wait - object: testRunner - arguments: - ms: 1000 - # Do an operation with timeoutCollection so the event will include a maxTimeMS field. - - name: insertOne - object: *timeoutCollection - arguments: - document: { _id: 2 } - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *timeoutCollectionName - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *timeoutCollectionName - # GODRIVER-3106: Add a 1 millisecond buffer on the expected 450ms. - maxTimeMS: { $$lte: 451 } - - - description: "command is not sent if RTT is greater than timeoutMS" - operations: - # Artificially increase the server RTT to ~50ms. - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: "alwaysOn" - data: - failCommands: ["hello", "isMaster"] - appName: &appName rttTooHighTest - blockConnection: true - blockTimeMS: 50 - # Create a client with the app name specified in the fail point. Also create database and collection entities - # derived from the new client. There is one collection entity with no timeoutMS and another with a timeoutMS - # that's lower than the fail point's blockTimeMS value. - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - useMultipleMongoses: false - uriOptions: - appName: *appName - w: 1 # Override server's w:majority default to speed up the test. - timeoutMS: 10 - heartbeatFrequencyMS: 500 - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &timeoutCollection timeoutCollection - database: *database - collectionName: *timeoutCollectionName - # Do an operation with a large timeout to ensure the servers are discovered. - - name: insertOne - object: *timeoutCollection - arguments: - document: { _id: 1 } - timeoutMS: 100000 - # Wait until short-circuiting has been enabled (at least 2 RTT measurements). - - name: wait - object: testRunner - arguments: - ms: 1000 - # Do an operation with timeoutCollection which will error. - - name: insertOne - object: *timeoutCollection - arguments: - document: { _id: 2 } - expectError: - isTimeoutError: true - # Do an operation with timeoutCollection which will error. - - name: insertOne - object: *timeoutCollection - arguments: - document: { _id: 3 } - expectError: - isTimeoutError: true - # Do an operation with timeoutCollection which will error. - - name: insertOne - object: *timeoutCollection - arguments: - document: { _id: 4 } - expectError: - isTimeoutError: true - expectEvents: - # There should only be one event, which corresponds to the first - # insertOne call. For the subsequent insertOne calls, drivers should - # fail client-side. - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *timeoutCollectionName - - - description: "short-circuit is not enabled with only 1 RTT measurement" - operations: - # Artificially increase the server RTT to ~300ms. - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: "alwaysOn" - data: - failCommands: ["hello", "isMaster"] - appName: &appName reduceMaxTimeMSTest - blockConnection: true - blockTimeMS: 100 - # Create a client with the app name specified in the fail point and timeoutMS lower than blockTimeMS. - # Also create database and collection entities derived from the new client. - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - useMultipleMongoses: false - uriOptions: - appName: *appName - w: 1 # Override server's w:majority default to speed up the test. - timeoutMS: 90 - heartbeatFrequencyMS: 100000 # Override heartbeatFrequencyMS to ensure only 1 RTT is recorded. - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &timeoutCollection timeoutCollection - database: *database - collectionName: *timeoutCollectionName - # Do an operation with a large timeout to ensure the servers are discovered. - - name: insertOne - object: *timeoutCollection - arguments: - document: { _id: 1 } - timeoutMS: 100000 - # Do an operation with timeoutCollection which will succeed. If this - # fails it indicates the driver mistakenly used the min RTT even though - # there has only been one sample. - - name: insertOne - object: *timeoutCollection - arguments: - document: { _id: 2 } - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *timeoutCollectionName - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *timeoutCollectionName - maxTimeMS: { $$lte: 450 } diff --git a/testdata/client-side-operations-timeout/error-transformations.json b/testdata/client-side-operations-timeout/error-transformations.json deleted file mode 100644 index 4889e39583..0000000000 --- a/testdata/client-side-operations-timeout/error-transformations.json +++ /dev/null @@ -1,180 +0,0 @@ -{ - "description": "MaxTimeMSExpired server errors are transformed into a custom timeout error", - "schemaVersion": "1.9", - "runOnRequirements": [ - { - "minServerVersion": "4.0", - "topologies": [ - "replicaset" - ] - }, - { - "minServerVersion": "4.2", - "topologies": [ - "sharded" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "failPointClient", - "useMultipleMongoses": false - } - }, - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ], - "initialData": [ - { - "collectionName": "coll", - "databaseName": "test", - "documents": [] - } - ], - "tests": [ - { - "description": "basic MaxTimeMSExpired error is transformed", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "errorCode": 50 - } - } - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 1 - } - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "write concern error MaxTimeMSExpired is transformed", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "writeConcernError": { - "code": 50, - "errmsg": "maxTimeMS expired" - } - } - } - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 1 - } - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/client-side-operations-timeout/error-transformations.yml b/testdata/client-side-operations-timeout/error-transformations.yml deleted file mode 100644 index 7bff4776a8..0000000000 --- a/testdata/client-side-operations-timeout/error-transformations.yml +++ /dev/null @@ -1,96 +0,0 @@ -description: "MaxTimeMSExpired server errors are transformed into a custom timeout error" - -schemaVersion: "1.9" - -# failCommand is available on 4.0 for replica sets and 4.2 for sharded clusters. -runOnRequirements: - - minServerVersion: "4.0" - topologies: ["replicaset"] - - minServerVersion: "4.2" - topologies: ["sharded"] - -createEntities: - - client: - id: &failPointClient failPointClient - useMultipleMongoses: false - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: &databaseName test - - collection: - id: &collection collection - database: *database - collectionName: &collectionName coll - -initialData: - - collectionName: *collectionName - databaseName: *databaseName - documents: [] - -tests: - # A server response like {ok: 0, code: 50, ...} is transformed. - - description: "basic MaxTimeMSExpired error is transformed" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["insert"] - errorCode: 50 - - name: insertOne - object: *collection - arguments: - document: { _id: 1 } - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - # A server response like {ok: 1, writeConcernError: {code: 50, ...}} is transformed. - - description: "write concern error MaxTimeMSExpired is transformed" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["insert"] - writeConcernError: - code: 50 - errmsg: "maxTimeMS expired" - - name: insertOne - object: *collection - arguments: - document: { _id: 1 } - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$type: ["int", "long"] } diff --git a/testdata/client-side-operations-timeout/global-timeoutMS.json b/testdata/client-side-operations-timeout/global-timeoutMS.json deleted file mode 100644 index 740bbad2e2..0000000000 --- a/testdata/client-side-operations-timeout/global-timeoutMS.json +++ /dev/null @@ -1,5830 +0,0 @@ -{ - "description": "timeoutMS can be configured on a MongoClient", - "schemaVersion": "1.9", - "runOnRequirements": [ - { - "minServerVersion": "4.4", - "topologies": [ - "replicaset", - "sharded" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "failPointClient", - "useMultipleMongoses": false - } - } - ], - "initialData": [ - { - "collectionName": "coll", - "databaseName": "test", - "documents": [] - } - ], - "tests": [ - { - "description": "timeoutMS can be configured on a MongoClient - listDatabases on client", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "listDatabases", - "object": "client", - "arguments": { - "filter": {} - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - listDatabases on client", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "listDatabases", - "object": "client", - "arguments": { - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - listDatabaseNames on client", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "listDatabaseNames", - "object": "client", - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - listDatabaseNames on client", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "listDatabaseNames", - "object": "client" - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - createChangeStream on client", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "createChangeStream", - "object": "client", - "arguments": { - "pipeline": [] - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "admin", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - createChangeStream on client", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "createChangeStream", - "object": "client", - "arguments": { - "pipeline": [] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "admin", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - aggregate on database", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "aggregate", - "object": "database", - "arguments": { - "pipeline": [ - { - "$listLocalSessions": {} - }, - { - "$limit": 1 - } - ] - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - aggregate on database", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "aggregate", - "object": "database", - "arguments": { - "pipeline": [ - { - "$listLocalSessions": {} - }, - { - "$limit": 1 - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - listCollections on database", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "listCollections", - "object": "database", - "arguments": { - "filter": {} - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - listCollections on database", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "listCollections", - "object": "database", - "arguments": { - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - listCollectionNames on database", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "listCollectionNames", - "object": "database", - "arguments": { - "filter": {} - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - listCollectionNames on database", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "listCollectionNames", - "object": "database", - "arguments": { - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - runCommand on database", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "ping" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "command": { - "ping": 1 - }, - "commandName": "ping" - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "ping", - "databaseName": "test", - "command": { - "ping": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - runCommand on database", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "ping" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "command": { - "ping": 1 - }, - "commandName": "ping" - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "ping", - "databaseName": "test", - "command": { - "ping": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - createChangeStream on database", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "createChangeStream", - "object": "database", - "arguments": { - "pipeline": [] - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - createChangeStream on database", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "createChangeStream", - "object": "database", - "arguments": { - "pipeline": [] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - aggregate on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "aggregate", - "object": "collection", - "arguments": { - "pipeline": [] - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - aggregate on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "aggregate", - "object": "collection", - "arguments": { - "pipeline": [] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - count on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "count" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "count", - "object": "collection", - "arguments": { - "filter": {} - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - count on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "count", - "object": "collection", - "arguments": { - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - countDocuments on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "filter": {} - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - countDocuments on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - estimatedDocumentCount on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "count" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "estimatedDocumentCount", - "object": "collection", - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - estimatedDocumentCount on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "estimatedDocumentCount", - "object": "collection" - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - distinct on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "distinct" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "distinct", - "object": "collection", - "arguments": { - "fieldName": "x", - "filter": {} - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "distinct", - "databaseName": "test", - "command": { - "distinct": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - distinct on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "distinct" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "distinct", - "object": "collection", - "arguments": { - "fieldName": "x", - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "distinct", - "databaseName": "test", - "command": { - "distinct": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - find on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "find" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "find", - "object": "collection", - "arguments": { - "filter": {} - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - find on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "find", - "object": "collection", - "arguments": { - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - findOne on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "find" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "findOne", - "object": "collection", - "arguments": { - "filter": {} - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - findOne on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "findOne", - "object": "collection", - "arguments": { - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - listIndexes on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "listIndexes", - "object": "collection", - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listIndexes", - "databaseName": "test", - "command": { - "listIndexes": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - listIndexes on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "listIndexes", - "object": "collection" - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listIndexes", - "databaseName": "test", - "command": { - "listIndexes": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - listIndexNames on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "listIndexNames", - "object": "collection", - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listIndexes", - "databaseName": "test", - "command": { - "listIndexes": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - listIndexNames on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "listIndexNames", - "object": "collection" - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listIndexes", - "databaseName": "test", - "command": { - "listIndexes": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - createChangeStream on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection", - "arguments": { - "pipeline": [] - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - createChangeStream on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection", - "arguments": { - "pipeline": [] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - insertOne on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "insert" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "x": 1 - } - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - insertOne on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "x": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - insertMany on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "insert" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "x": 1 - } - ] - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - insertMany on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "x": 1 - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - deleteOne on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "delete" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "deleteOne", - "object": "collection", - "arguments": { - "filter": {} - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "delete", - "databaseName": "test", - "command": { - "delete": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - deleteOne on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "delete" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "deleteOne", - "object": "collection", - "arguments": { - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "delete", - "databaseName": "test", - "command": { - "delete": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - deleteMany on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "delete" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "deleteMany", - "object": "collection", - "arguments": { - "filter": {} - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "delete", - "databaseName": "test", - "command": { - "delete": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - deleteMany on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "delete" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "deleteMany", - "object": "collection", - "arguments": { - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "delete", - "databaseName": "test", - "command": { - "delete": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - replaceOne on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "update" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "replaceOne", - "object": "collection", - "arguments": { - "filter": {}, - "replacement": { - "x": 1 - } - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - replaceOne on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "update" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "replaceOne", - "object": "collection", - "arguments": { - "filter": {}, - "replacement": { - "x": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - updateOne on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "update" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "updateOne", - "object": "collection", - "arguments": { - "filter": {}, - "update": { - "$set": { - "x": 1 - } - } - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - updateOne on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "update" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "updateOne", - "object": "collection", - "arguments": { - "filter": {}, - "update": { - "$set": { - "x": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - updateMany on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "update" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "updateMany", - "object": "collection", - "arguments": { - "filter": {}, - "update": { - "$set": { - "x": 1 - } - } - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - updateMany on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "update" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "updateMany", - "object": "collection", - "arguments": { - "filter": {}, - "update": { - "$set": { - "x": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - findOneAndDelete on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "findOneAndDelete", - "object": "collection", - "arguments": { - "filter": {} - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - findOneAndDelete on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "findOneAndDelete", - "object": "collection", - "arguments": { - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - findOneAndReplace on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "findOneAndReplace", - "object": "collection", - "arguments": { - "filter": {}, - "replacement": { - "x": 1 - } - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - findOneAndReplace on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "findOneAndReplace", - "object": "collection", - "arguments": { - "filter": {}, - "replacement": { - "x": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - findOneAndUpdate on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "findOneAndUpdate", - "object": "collection", - "arguments": { - "filter": {}, - "update": { - "$set": { - "x": 1 - } - } - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - findOneAndUpdate on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "findOneAndUpdate", - "object": "collection", - "arguments": { - "filter": {}, - "update": { - "$set": { - "x": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - bulkWrite on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "insert" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "bulkWrite", - "object": "collection", - "arguments": { - "requests": [ - { - "insertOne": { - "document": { - "_id": 1 - } - } - } - ] - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - bulkWrite on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "bulkWrite", - "object": "collection", - "arguments": { - "requests": [ - { - "insertOne": { - "document": { - "_id": 1 - } - } - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - createIndex on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "createIndexes" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "createIndex", - "object": "collection", - "arguments": { - "keys": { - "x": 1 - }, - "name": "x_1" - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "createIndexes", - "databaseName": "test", - "command": { - "createIndexes": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - createIndex on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "createIndexes" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "createIndex", - "object": "collection", - "arguments": { - "keys": { - "x": 1 - }, - "name": "x_1" - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "createIndexes", - "databaseName": "test", - "command": { - "createIndexes": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - dropIndex on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "dropIndexes" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "dropIndex", - "object": "collection", - "arguments": { - "name": "x_1" - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "dropIndexes", - "databaseName": "test", - "command": { - "dropIndexes": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - dropIndex on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "dropIndexes" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "dropIndex", - "object": "collection", - "arguments": { - "name": "x_1" - }, - "expectError": { - "isClientError": false, - "isTimeoutError": false - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "dropIndexes", - "databaseName": "test", - "command": { - "dropIndexes": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured on a MongoClient - dropIndexes on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 250 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "dropIndexes" - ], - "blockConnection": true, - "blockTimeMS": 350 - } - } - } - }, - { - "name": "dropIndexes", - "object": "collection", - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "dropIndexes", - "databaseName": "test", - "command": { - "dropIndexes": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 on a MongoClient - dropIndexes on collection", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 0 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "dropIndexes" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "dropIndexes", - "object": "collection" - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "dropIndexes", - "databaseName": "test", - "command": { - "dropIndexes": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/client-side-operations-timeout/global-timeoutMS.yml b/testdata/client-side-operations-timeout/global-timeoutMS.yml deleted file mode 100644 index 989a63f086..0000000000 --- a/testdata/client-side-operations-timeout/global-timeoutMS.yml +++ /dev/null @@ -1,3235 +0,0 @@ -# Tests in this file are generated from global-timeoutMS.yml.template. - -description: "timeoutMS can be configured on a MongoClient" - -schemaVersion: "1.9" - -runOnRequirements: - - minServerVersion: "4.4" - topologies: ["replicaset", "sharded"] - -createEntities: - - client: - id: &failPointClient failPointClient - useMultipleMongoses: false - -initialData: - - collectionName: &collectionName coll - databaseName: &databaseName test - documents: [] - -tests: - # For each operation, we execute two tests: - # - # 1. timeoutMS can be configured to a non-zero value on a MongoClient and is inherited by the operation. Each test - # constructs a client entity with timeoutMS=250 and configures a fail point to block the operation for 350ms so - # execution results in a timeout error. - # - # 2. timeoutMS can be set to 0 for a MongoClient. Each test constructs a client entity with timeoutMS=0 and - # configures a fail point to block the operation for 15ms. The tests expect the operation to succeed and the command - # sent to not contain a maxTimeMS field. - - - description: "timeoutMS can be configured on a MongoClient - listDatabases on client" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["listDatabases"] - blockConnection: true - blockTimeMS: 350 - - name: listDatabases - object: *client - arguments: - filter: {} - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - listDatabases on client" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["listDatabases"] - blockConnection: true - blockTimeMS: 15 - - name: listDatabases - object: *client - arguments: - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - listDatabaseNames on client" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["listDatabases"] - blockConnection: true - blockTimeMS: 350 - - name: listDatabaseNames - object: *client - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - listDatabaseNames on client" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["listDatabases"] - blockConnection: true - blockTimeMS: 15 - - name: listDatabaseNames - object: *client - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - createChangeStream on client" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 350 - - name: createChangeStream - object: *client - arguments: - pipeline: [] - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: admin - command: - aggregate: 1 - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - createChangeStream on client" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 15 - - name: createChangeStream - object: *client - arguments: - pipeline: [] - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: admin - command: - aggregate: 1 - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - aggregate on database" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 350 - - name: aggregate - object: *database - arguments: - pipeline: [ { $listLocalSessions: {} }, { $limit: 1 } ] - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - aggregate on database" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 15 - - name: aggregate - object: *database - arguments: - pipeline: [ { $listLocalSessions: {} }, { $limit: 1 } ] - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - listCollections on database" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["listCollections"] - blockConnection: true - blockTimeMS: 350 - - name: listCollections - object: *database - arguments: - filter: {} - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - listCollections on database" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["listCollections"] - blockConnection: true - blockTimeMS: 15 - - name: listCollections - object: *database - arguments: - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - listCollectionNames on database" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["listCollections"] - blockConnection: true - blockTimeMS: 350 - - name: listCollectionNames - object: *database - arguments: - filter: {} - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - listCollectionNames on database" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["listCollections"] - blockConnection: true - blockTimeMS: 15 - - name: listCollectionNames - object: *database - arguments: - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - runCommand on database" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["ping"] - blockConnection: true - blockTimeMS: 350 - - name: runCommand - object: *database - arguments: - command: { ping: 1 } - commandName: ping - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: ping - databaseName: *databaseName - command: - ping: 1 - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - runCommand on database" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["ping"] - blockConnection: true - blockTimeMS: 15 - - name: runCommand - object: *database - arguments: - command: { ping: 1 } - commandName: ping - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: ping - databaseName: *databaseName - command: - ping: 1 - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - createChangeStream on database" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 350 - - name: createChangeStream - object: *database - arguments: - pipeline: [] - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - createChangeStream on database" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 15 - - name: createChangeStream - object: *database - arguments: - pipeline: [] - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - aggregate on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 350 - - name: aggregate - object: *collection - arguments: - pipeline: [] - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - aggregate on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 15 - - name: aggregate - object: *collection - arguments: - pipeline: [] - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - count on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["count"] - blockConnection: true - blockTimeMS: 350 - - name: count - object: *collection - arguments: - filter: {} - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - count on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["count"] - blockConnection: true - blockTimeMS: 15 - - name: count - object: *collection - arguments: - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - countDocuments on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 350 - - name: countDocuments - object: *collection - arguments: - filter: {} - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - countDocuments on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 15 - - name: countDocuments - object: *collection - arguments: - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - estimatedDocumentCount on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["count"] - blockConnection: true - blockTimeMS: 350 - - name: estimatedDocumentCount - object: *collection - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - estimatedDocumentCount on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["count"] - blockConnection: true - blockTimeMS: 15 - - name: estimatedDocumentCount - object: *collection - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - distinct on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["distinct"] - blockConnection: true - blockTimeMS: 350 - - name: distinct - object: *collection - arguments: - fieldName: x - filter: {} - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: distinct - databaseName: *databaseName - command: - distinct: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - distinct on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["distinct"] - blockConnection: true - blockTimeMS: 15 - - name: distinct - object: *collection - arguments: - fieldName: x - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: distinct - databaseName: *databaseName - command: - distinct: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - find on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["find"] - blockConnection: true - blockTimeMS: 350 - - name: find - object: *collection - arguments: - filter: {} - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - find on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["find"] - blockConnection: true - blockTimeMS: 15 - - name: find - object: *collection - arguments: - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - findOne on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["find"] - blockConnection: true - blockTimeMS: 350 - - name: findOne - object: *collection - arguments: - filter: {} - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - findOne on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["find"] - blockConnection: true - blockTimeMS: 15 - - name: findOne - object: *collection - arguments: - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - listIndexes on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["listIndexes"] - blockConnection: true - blockTimeMS: 350 - - name: listIndexes - object: *collection - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listIndexes - databaseName: *databaseName - command: - listIndexes: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - listIndexes on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["listIndexes"] - blockConnection: true - blockTimeMS: 15 - - name: listIndexes - object: *collection - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listIndexes - databaseName: *databaseName - command: - listIndexes: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - listIndexNames on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["listIndexes"] - blockConnection: true - blockTimeMS: 350 - - name: listIndexNames - object: *collection - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listIndexes - databaseName: *databaseName - command: - listIndexes: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - listIndexNames on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["listIndexes"] - blockConnection: true - blockTimeMS: 15 - - name: listIndexNames - object: *collection - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listIndexes - databaseName: *databaseName - command: - listIndexes: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - createChangeStream on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 350 - - name: createChangeStream - object: *collection - arguments: - pipeline: [] - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - createChangeStream on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 15 - - name: createChangeStream - object: *collection - arguments: - pipeline: [] - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - insertOne on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["insert"] - blockConnection: true - blockTimeMS: 350 - - name: insertOne - object: *collection - arguments: - document: { x: 1 } - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - insertOne on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["insert"] - blockConnection: true - blockTimeMS: 15 - - name: insertOne - object: *collection - arguments: - document: { x: 1 } - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - insertMany on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["insert"] - blockConnection: true - blockTimeMS: 350 - - name: insertMany - object: *collection - arguments: - documents: - - { x: 1 } - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - insertMany on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["insert"] - blockConnection: true - blockTimeMS: 15 - - name: insertMany - object: *collection - arguments: - documents: - - { x: 1 } - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - deleteOne on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["delete"] - blockConnection: true - blockTimeMS: 350 - - name: deleteOne - object: *collection - arguments: - filter: {} - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: delete - databaseName: *databaseName - command: - delete: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - deleteOne on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["delete"] - blockConnection: true - blockTimeMS: 15 - - name: deleteOne - object: *collection - arguments: - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: delete - databaseName: *databaseName - command: - delete: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - deleteMany on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["delete"] - blockConnection: true - blockTimeMS: 350 - - name: deleteMany - object: *collection - arguments: - filter: {} - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: delete - databaseName: *databaseName - command: - delete: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - deleteMany on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["delete"] - blockConnection: true - blockTimeMS: 15 - - name: deleteMany - object: *collection - arguments: - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: delete - databaseName: *databaseName - command: - delete: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - replaceOne on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["update"] - blockConnection: true - blockTimeMS: 350 - - name: replaceOne - object: *collection - arguments: - filter: {} - replacement: { x: 1 } - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - replaceOne on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["update"] - blockConnection: true - blockTimeMS: 15 - - name: replaceOne - object: *collection - arguments: - filter: {} - replacement: { x: 1 } - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - updateOne on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["update"] - blockConnection: true - blockTimeMS: 350 - - name: updateOne - object: *collection - arguments: - filter: {} - update: { $set: { x: 1 } } - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - updateOne on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["update"] - blockConnection: true - blockTimeMS: 15 - - name: updateOne - object: *collection - arguments: - filter: {} - update: { $set: { x: 1 } } - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - updateMany on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["update"] - blockConnection: true - blockTimeMS: 350 - - name: updateMany - object: *collection - arguments: - filter: {} - update: { $set: { x: 1 } } - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - updateMany on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["update"] - blockConnection: true - blockTimeMS: 15 - - name: updateMany - object: *collection - arguments: - filter: {} - update: { $set: { x: 1 } } - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - findOneAndDelete on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["findAndModify"] - blockConnection: true - blockTimeMS: 350 - - name: findOneAndDelete - object: *collection - arguments: - filter: {} - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - findOneAndDelete on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["findAndModify"] - blockConnection: true - blockTimeMS: 15 - - name: findOneAndDelete - object: *collection - arguments: - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - findOneAndReplace on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["findAndModify"] - blockConnection: true - blockTimeMS: 350 - - name: findOneAndReplace - object: *collection - arguments: - filter: {} - replacement: { x: 1 } - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - findOneAndReplace on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["findAndModify"] - blockConnection: true - blockTimeMS: 15 - - name: findOneAndReplace - object: *collection - arguments: - filter: {} - replacement: { x: 1 } - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - findOneAndUpdate on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["findAndModify"] - blockConnection: true - blockTimeMS: 350 - - name: findOneAndUpdate - object: *collection - arguments: - filter: {} - update: { $set: { x: 1 } } - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - findOneAndUpdate on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["findAndModify"] - blockConnection: true - blockTimeMS: 15 - - name: findOneAndUpdate - object: *collection - arguments: - filter: {} - update: { $set: { x: 1 } } - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - bulkWrite on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["insert"] - blockConnection: true - blockTimeMS: 350 - - name: bulkWrite - object: *collection - arguments: - requests: - - insertOne: - document: { _id: 1 } - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - bulkWrite on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["insert"] - blockConnection: true - blockTimeMS: 15 - - name: bulkWrite - object: *collection - arguments: - requests: - - insertOne: - document: { _id: 1 } - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - createIndex on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["createIndexes"] - blockConnection: true - blockTimeMS: 350 - - name: createIndex - object: *collection - arguments: - keys: { x: 1 } - name: "x_1" - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: createIndexes - databaseName: *databaseName - command: - createIndexes: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - createIndex on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["createIndexes"] - blockConnection: true - blockTimeMS: 15 - - name: createIndex - object: *collection - arguments: - keys: { x: 1 } - name: "x_1" - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: createIndexes - databaseName: *databaseName - command: - createIndexes: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - dropIndex on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["dropIndexes"] - blockConnection: true - blockTimeMS: 350 - - name: dropIndex - object: *collection - arguments: - name: "x_1" - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: dropIndexes - databaseName: *databaseName - command: - dropIndexes: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - dropIndex on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["dropIndexes"] - blockConnection: true - blockTimeMS: 15 - - name: dropIndex - object: *collection - arguments: - name: "x_1" - - expectError: - isClientError: false - isTimeoutError: false - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: dropIndexes - databaseName: *databaseName - command: - dropIndexes: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured on a MongoClient - dropIndexes on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 250 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - # Use "times: 2" to workaround a quirk in Python on Windows where - # socket I/O can timeout ~20ms earlier than expected. With - # "times: 1" the retry would succeed within the remaining ~20ms. - mode: { times: 2 } - data: - failCommands: ["dropIndexes"] - blockConnection: true - blockTimeMS: 350 - - name: dropIndexes - object: *collection - - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: dropIndexes - databaseName: *databaseName - command: - dropIndexes: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 on a MongoClient - dropIndexes on collection" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - timeoutMS: 0 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["dropIndexes"] - blockConnection: true - blockTimeMS: 15 - - name: dropIndexes - object: *collection - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: dropIndexes - databaseName: *databaseName - command: - dropIndexes: *collectionName - maxTimeMS: { $$exists: false } diff --git a/testdata/client-side-operations-timeout/gridfs-advanced.json b/testdata/client-side-operations-timeout/gridfs-advanced.json deleted file mode 100644 index c6c0944d2f..0000000000 --- a/testdata/client-side-operations-timeout/gridfs-advanced.json +++ /dev/null @@ -1,385 +0,0 @@ -{ - "description": "timeoutMS behaves correctly for advanced GridFS API operations", - "schemaVersion": "1.9", - "runOnRequirements": [ - { - "minServerVersion": "4.4", - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "failPointClient", - "useMultipleMongoses": false - } - }, - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 75 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "bucket": { - "id": "bucket", - "database": "database" - } - }, - { - "collection": { - "id": "filesCollection", - "database": "database", - "collectionName": "fs.files" - } - }, - { - "collection": { - "id": "chunksCollection", - "database": "database", - "collectionName": "fs.chunks" - } - } - ], - "initialData": [ - { - "collectionName": "fs.files", - "databaseName": "test", - "documents": [ - { - "_id": { - "$oid": "000000000000000000000005" - }, - "length": 8, - "chunkSize": 4, - "uploadDate": { - "$date": "1970-01-01T00:00:00.000Z" - }, - "filename": "length-8", - "contentType": "application/octet-stream", - "aliases": [], - "metadata": {} - } - ] - }, - { - "collectionName": "fs.chunks", - "databaseName": "test", - "documents": [ - { - "_id": { - "$oid": "000000000000000000000005" - }, - "files_id": { - "$oid": "000000000000000000000005" - }, - "n": 0, - "data": { - "$binary": { - "base64": "ESIzRA==", - "subType": "00" - } - } - }, - { - "_id": { - "$oid": "000000000000000000000006" - }, - "files_id": { - "$oid": "000000000000000000000005" - }, - "n": 1, - "data": { - "$binary": { - "base64": "ESIzRA==", - "subType": "00" - } - } - } - ] - } - ], - "tests": [ - { - "description": "timeoutMS can be overridden for a rename", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "update" - ], - "blockConnection": true, - "blockTimeMS": 100 - } - } - } - }, - { - "name": "rename", - "object": "bucket", - "arguments": { - "id": { - "$oid": "000000000000000000000005" - }, - "newFilename": "foo", - "timeoutMS": 2000 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "fs.files", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applied to update during a rename", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "update" - ], - "blockConnection": true, - "blockTimeMS": 100 - } - } - } - }, - { - "name": "rename", - "object": "bucket", - "arguments": { - "id": { - "$oid": "000000000000000000000005" - }, - "newFilename": "foo" - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "fs.files", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be overridden for drop", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "drop" - ], - "blockConnection": true, - "blockTimeMS": 100 - } - } - } - }, - { - "name": "drop", - "object": "bucket", - "arguments": { - "timeoutMS": 2000 - } - } - ] - }, - { - "description": "timeoutMS applied to files collection drop", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "drop" - ], - "blockConnection": true, - "blockTimeMS": 100 - } - } - } - }, - { - "name": "drop", - "object": "bucket", - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "drop", - "databaseName": "test", - "command": { - "drop": "fs.files", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applied to chunks collection drop", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "skip": 1 - }, - "data": { - "failCommands": [ - "drop" - ], - "blockConnection": true, - "blockTimeMS": 100 - } - } - } - }, - { - "name": "drop", - "object": "bucket", - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "timeoutMS applied to drop as a whole, not individual parts", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "drop" - ], - "blockConnection": true, - "blockTimeMS": 50 - } - } - } - }, - { - "name": "drop", - "object": "bucket", - "expectError": { - "isTimeoutError": true - } - } - ] - } - ] -} diff --git a/testdata/client-side-operations-timeout/gridfs-advanced.yml b/testdata/client-side-operations-timeout/gridfs-advanced.yml deleted file mode 100644 index bc788bacc3..0000000000 --- a/testdata/client-side-operations-timeout/gridfs-advanced.yml +++ /dev/null @@ -1,206 +0,0 @@ -description: "timeoutMS behaves correctly for advanced GridFS API operations" - -schemaVersion: "1.9" - -runOnRequirements: - - minServerVersion: "4.4" - serverless: forbid # GridFS ops can be slow on serverless. - -createEntities: - - client: - id: &failPointClient failPointClient - useMultipleMongoses: false - - client: - id: &client client - uriOptions: - timeoutMS: 75 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: &databaseName test - - bucket: - id: &bucket bucket - database: *database - - collection: - id: &filesCollection filesCollection - database: *database - collectionName: &filesCollectionName fs.files - - collection: - id: &chunksCollection chunksCollection - database: *database - collectionName: &chunksCollectionName fs.chunks - -initialData: - - collectionName: *filesCollectionName - databaseName: *databaseName - documents: - - _id: &fileDocumentId { $oid: "000000000000000000000005" } - length: 8 - chunkSize: 4 - uploadDate: { $date: "1970-01-01T00:00:00.000Z" } - filename: "length-8" - contentType: "application/octet-stream" - aliases: [] - metadata: {} - - collectionName: *chunksCollectionName - databaseName: *databaseName - documents: - - _id: { $oid: "000000000000000000000005" } - files_id: *fileDocumentId - n: 0 - data: { $binary: { base64: "ESIzRA==", subType: "00" } } # hex: 11223344 - - _id: { $oid: "000000000000000000000006" } - files_id: *fileDocumentId - n: 1 - data: { $binary: { base64: "ESIzRA==", subType: "00" } } # hex: 11223344 - -tests: - # Tests for the "rename" operation. - - - description: "timeoutMS can be overridden for a rename" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["update"] - blockConnection: true - blockTimeMS: 100 - - name: rename - object: *bucket - arguments: - id: *fileDocumentId - newFilename: "foo" - timeoutMS: 2000 # The client timeoutMS is 75ms and the operation blocks for 100ms, so 2000ms should let it succeed. - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *filesCollectionName - maxTimeMS: { $$type: ["int", "long"] } - - - description: "timeoutMS applied to update during a rename" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["update"] - blockConnection: true - blockTimeMS: 100 - - name: rename - object: *bucket - arguments: - id: *fileDocumentId - newFilename: "foo" - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *filesCollectionName - maxTimeMS: { $$type: ["int", "long"] } - - # Tests for the "drop" opration. Any tests that might result in multiple commands being sent do not have expectEvents - # assertions as these assertions reduce test robustness and can cause flaky failures. - - - description: "timeoutMS can be overridden for drop" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["drop"] - blockConnection: true - blockTimeMS: 100 - - name: drop - object: *bucket - arguments: - timeoutMS: 2000 # The client timeoutMS is 75ms and the operation blocks for 100ms, so 2000ms should let it succeed. - - - description: "timeoutMS applied to files collection drop" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["drop"] - blockConnection: true - blockTimeMS: 100 - - name: drop - object: *bucket - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: drop - databaseName: *databaseName - command: - drop: *filesCollectionName - maxTimeMS: { $$type: ["int", "long"] } - - - description: "timeoutMS applied to chunks collection drop" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: - # Skip the drop for the files collection. - skip: 1 - data: - failCommands: ["drop"] - blockConnection: true - blockTimeMS: 100 - - name: drop - object: *bucket - expectError: - isTimeoutError: true - - - description: "timeoutMS applied to drop as a whole, not individual parts" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["drop"] - blockConnection: true - blockTimeMS: 50 - - name: drop - object: *bucket - expectError: - isTimeoutError: true diff --git a/testdata/client-side-operations-timeout/gridfs-delete.json b/testdata/client-side-operations-timeout/gridfs-delete.json deleted file mode 100644 index 9f4980114b..0000000000 --- a/testdata/client-side-operations-timeout/gridfs-delete.json +++ /dev/null @@ -1,285 +0,0 @@ -{ - "description": "timeoutMS behaves correctly for GridFS delete operations", - "schemaVersion": "1.9", - "runOnRequirements": [ - { - "minServerVersion": "4.4", - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "failPointClient", - "useMultipleMongoses": false - } - }, - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 75 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "bucket": { - "id": "bucket", - "database": "database" - } - }, - { - "collection": { - "id": "filesCollection", - "database": "database", - "collectionName": "fs.files" - } - }, - { - "collection": { - "id": "chunksCollection", - "database": "database", - "collectionName": "fs.chunks" - } - } - ], - "initialData": [ - { - "collectionName": "fs.files", - "databaseName": "test", - "documents": [ - { - "_id": { - "$oid": "000000000000000000000005" - }, - "length": 8, - "chunkSize": 4, - "uploadDate": { - "$date": "1970-01-01T00:00:00.000Z" - }, - "filename": "length-8", - "contentType": "application/octet-stream", - "aliases": [], - "metadata": {} - } - ] - }, - { - "collectionName": "fs.chunks", - "databaseName": "test", - "documents": [ - { - "_id": { - "$oid": "000000000000000000000005" - }, - "files_id": { - "$oid": "000000000000000000000005" - }, - "n": 0, - "data": { - "$binary": { - "base64": "ESIzRA==", - "subType": "00" - } - } - }, - { - "_id": { - "$oid": "000000000000000000000006" - }, - "files_id": { - "$oid": "000000000000000000000005" - }, - "n": 1, - "data": { - "$binary": { - "base64": "ESIzRA==", - "subType": "00" - } - } - } - ] - } - ], - "tests": [ - { - "description": "timeoutMS can be overridden for delete", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "delete" - ], - "blockConnection": true, - "blockTimeMS": 100 - } - } - } - }, - { - "name": "delete", - "object": "bucket", - "arguments": { - "id": { - "$oid": "000000000000000000000005" - }, - "timeoutMS": 1000 - } - } - ] - }, - { - "description": "timeoutMS applied to delete against the files collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "delete" - ], - "blockConnection": true, - "blockTimeMS": 100 - } - } - } - }, - { - "name": "delete", - "object": "bucket", - "arguments": { - "id": { - "$oid": "000000000000000000000005" - } - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "delete", - "databaseName": "test", - "command": { - "delete": "fs.files", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applied to delete against the chunks collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "skip": 1 - }, - "data": { - "failCommands": [ - "delete" - ], - "blockConnection": true, - "blockTimeMS": 100 - } - } - } - }, - { - "name": "delete", - "object": "bucket", - "arguments": { - "id": { - "$oid": "000000000000000000000005" - } - }, - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "timeoutMS applied to entire delete, not individual parts", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "delete" - ], - "blockConnection": true, - "blockTimeMS": 50 - } - } - } - }, - { - "name": "delete", - "object": "bucket", - "arguments": { - "id": { - "$oid": "000000000000000000000005" - } - }, - "expectError": { - "isTimeoutError": true - } - } - ] - } - ] -} diff --git a/testdata/client-side-operations-timeout/gridfs-delete.yml b/testdata/client-side-operations-timeout/gridfs-delete.yml deleted file mode 100644 index 9c72537c38..0000000000 --- a/testdata/client-side-operations-timeout/gridfs-delete.yml +++ /dev/null @@ -1,152 +0,0 @@ -description: "timeoutMS behaves correctly for GridFS delete operations" - -schemaVersion: "1.9" - -runOnRequirements: - - minServerVersion: "4.4" - serverless: forbid # GridFS ops can be slow on serverless. - -createEntities: - - client: - id: &failPointClient failPointClient - useMultipleMongoses: false - - client: - id: &client client - uriOptions: - timeoutMS: 75 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: &databaseName test - - bucket: - id: &bucket bucket - database: *database - - collection: - id: &filesCollection filesCollection - database: *database - collectionName: &filesCollectionName fs.files - - collection: - id: &chunksCollection chunksCollection - database: *database - collectionName: &chunksCollectionName fs.chunks - -initialData: - - collectionName: *filesCollectionName - databaseName: *databaseName - documents: - - _id: &fileDocumentId { $oid: "000000000000000000000005" } - length: 8 - chunkSize: 4 - uploadDate: { $date: "1970-01-01T00:00:00.000Z" } - filename: "length-8" - contentType: "application/octet-stream" - aliases: [] - metadata: {} - - collectionName: *chunksCollectionName - databaseName: *databaseName - documents: - - _id: { $oid: "000000000000000000000005" } - files_id: *fileDocumentId - n: 0 - data: { $binary: { base64: "ESIzRA==", subType: "00" } } # hex: 11223344 - - _id: { $oid: "000000000000000000000006" } - files_id: *fileDocumentId - n: 1 - data: { $binary: { base64: "ESIzRA==", subType: "00" } } # hex: 11223344 - -tests: - - description: "timeoutMS can be overridden for delete" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["delete"] - blockConnection: true - blockTimeMS: 100 - - name: delete - object: *bucket - arguments: - id: *fileDocumentId - timeoutMS: 1000 # The client timeoutMS is 75ms and the operation blocks for 100ms, so 1000ms should let it succeed. - - - description: "timeoutMS applied to delete against the files collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["delete"] - blockConnection: true - blockTimeMS: 100 - - name: delete - object: *bucket - arguments: - id: *fileDocumentId - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: delete - databaseName: *databaseName - command: - delete: *filesCollectionName - maxTimeMS: { $$type: ["int", "long"] } - - - description: "timeoutMS applied to delete against the chunks collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: - # The first "delete" will be against the files collection, so we skip it. - skip: 1 - data: - failCommands: ["delete"] - blockConnection: true - blockTimeMS: 100 - - name: delete - object: *bucket - arguments: - id: *fileDocumentId - expectError: - isTimeoutError: true - - # Test that drivers are not refreshing the timeout between commands. We test this by blocking both "delete" commands - # for 50ms each. The delete should inherit timeoutMS=75 from the client/database and the server takes over 75ms - # total, so the operation should fail. - - description: "timeoutMS applied to entire delete, not individual parts" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["delete"] - blockConnection: true - blockTimeMS: 50 - - name: delete - object: *bucket - arguments: - id: *fileDocumentId - expectError: - isTimeoutError: true diff --git a/testdata/client-side-operations-timeout/gridfs-find.json b/testdata/client-side-operations-timeout/gridfs-find.json deleted file mode 100644 index 7409036284..0000000000 --- a/testdata/client-side-operations-timeout/gridfs-find.json +++ /dev/null @@ -1,183 +0,0 @@ -{ - "description": "timeoutMS behaves correctly for GridFS find operations", - "schemaVersion": "1.9", - "runOnRequirements": [ - { - "minServerVersion": "4.4", - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "failPointClient", - "useMultipleMongoses": false - } - }, - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 75 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "bucket": { - "id": "bucket", - "database": "database" - } - }, - { - "collection": { - "id": "filesCollection", - "database": "database", - "collectionName": "fs.files" - } - }, - { - "collection": { - "id": "chunksCollection", - "database": "database", - "collectionName": "fs.chunks" - } - } - ], - "initialData": [ - { - "collectionName": "fs.files", - "databaseName": "test", - "documents": [] - }, - { - "collectionName": "fs.chunks", - "databaseName": "test", - "documents": [] - } - ], - "tests": [ - { - "description": "timeoutMS can be overridden for a find", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "blockConnection": true, - "blockTimeMS": 100 - } - } - } - }, - { - "name": "find", - "object": "bucket", - "arguments": { - "filter": {}, - "timeoutMS": 1000 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "fs.files", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applied to find command", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "blockConnection": true, - "blockTimeMS": 100 - } - } - } - }, - { - "name": "find", - "object": "bucket", - "arguments": { - "filter": {} - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "fs.files", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/client-side-operations-timeout/gridfs-find.yml b/testdata/client-side-operations-timeout/gridfs-find.yml deleted file mode 100644 index 000150ae67..0000000000 --- a/testdata/client-side-operations-timeout/gridfs-find.yml +++ /dev/null @@ -1,100 +0,0 @@ -description: "timeoutMS behaves correctly for GridFS find operations" - -schemaVersion: "1.9" - -runOnRequirements: - - minServerVersion: "4.4" - serverless: forbid # GridFS ops can be slow on serverless. - -createEntities: - - client: - id: &failPointClient failPointClient - useMultipleMongoses: false - - client: - id: &client client - uriOptions: - timeoutMS: 75 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - database: - id: &database database - client: *client - databaseName: &databaseName test - - bucket: - id: &bucket bucket - database: *database - - collection: - id: &filesCollection filesCollection - database: *database - collectionName: &filesCollectionName fs.files - - collection: - id: &chunksCollection chunksCollection - database: *database - collectionName: &chunksCollectionName fs.chunks - -initialData: - - collectionName: *filesCollectionName - databaseName: *databaseName - documents: [] - - collectionName: *chunksCollectionName - databaseName: *databaseName - documents: [] - -tests: - - description: "timeoutMS can be overridden for a find" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["find"] - blockConnection: true - blockTimeMS: 100 - - name: find - object: *bucket - arguments: - filter: {} - timeoutMS: 1000 # The client timeoutMS is 75ms and the operation blocks for 100ms, so 1000ms should let it succeed. - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *filesCollectionName - maxTimeMS: { $$type: ["int", "long"] } - - - description: "timeoutMS applied to find command" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["find"] - blockConnection: true - blockTimeMS: 100 - - name: find - object: *bucket - arguments: - filter: {} - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *filesCollectionName - maxTimeMS: { $$type: ["int", "long"] } diff --git a/testdata/client-side-operations-timeout/override-operation-timeoutMS.json b/testdata/client-side-operations-timeout/override-operation-timeoutMS.json deleted file mode 100644 index 6fa0bd802a..0000000000 --- a/testdata/client-side-operations-timeout/override-operation-timeoutMS.json +++ /dev/null @@ -1,3577 +0,0 @@ -{ - "description": "timeoutMS can be overridden for an operation", - "schemaVersion": "1.9", - "runOnRequirements": [ - { - "minServerVersion": "4.4", - "topologies": [ - "replicaset", - "sharded" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "failPointClient", - "useMultipleMongoses": false - } - }, - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 10 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ], - "initialData": [ - { - "collectionName": "coll", - "databaseName": "test", - "documents": [] - } - ], - "tests": [ - { - "description": "timeoutMS can be configured for an operation - listDatabases on client", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "listDatabases", - "object": "client", - "arguments": { - "timeoutMS": 1000, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - listDatabases on client", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "listDatabases", - "object": "client", - "arguments": { - "timeoutMS": 0, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - listDatabaseNames on client", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "listDatabaseNames", - "object": "client", - "arguments": { - "timeoutMS": 1000 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - listDatabaseNames on client", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "listDatabaseNames", - "object": "client", - "arguments": { - "timeoutMS": 0 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - createChangeStream on client", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "createChangeStream", - "object": "client", - "arguments": { - "timeoutMS": 1000, - "pipeline": [] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "admin", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - createChangeStream on client", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "createChangeStream", - "object": "client", - "arguments": { - "timeoutMS": 0, - "pipeline": [] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "admin", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - aggregate on database", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "aggregate", - "object": "database", - "arguments": { - "timeoutMS": 1000, - "pipeline": [ - { - "$listLocalSessions": {} - }, - { - "$limit": 1 - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - aggregate on database", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "aggregate", - "object": "database", - "arguments": { - "timeoutMS": 0, - "pipeline": [ - { - "$listLocalSessions": {} - }, - { - "$limit": 1 - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - listCollections on database", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "listCollections", - "object": "database", - "arguments": { - "timeoutMS": 1000, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - listCollections on database", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "listCollections", - "object": "database", - "arguments": { - "timeoutMS": 0, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - listCollectionNames on database", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "listCollectionNames", - "object": "database", - "arguments": { - "timeoutMS": 1000, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - listCollectionNames on database", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "listCollectionNames", - "object": "database", - "arguments": { - "timeoutMS": 0, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - runCommand on database", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "ping" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "timeoutMS": 1000, - "command": { - "ping": 1 - }, - "commandName": "ping" - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "ping", - "databaseName": "test", - "command": { - "ping": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - runCommand on database", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "ping" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "timeoutMS": 0, - "command": { - "ping": 1 - }, - "commandName": "ping" - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "ping", - "databaseName": "test", - "command": { - "ping": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - createChangeStream on database", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "createChangeStream", - "object": "database", - "arguments": { - "timeoutMS": 1000, - "pipeline": [] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - createChangeStream on database", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "createChangeStream", - "object": "database", - "arguments": { - "timeoutMS": 0, - "pipeline": [] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - aggregate on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "aggregate", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "pipeline": [] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - aggregate on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "aggregate", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "pipeline": [] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - count on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "count", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - count on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "count", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - countDocuments on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - countDocuments on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - estimatedDocumentCount on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "estimatedDocumentCount", - "object": "collection", - "arguments": { - "timeoutMS": 1000 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - estimatedDocumentCount on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "estimatedDocumentCount", - "object": "collection", - "arguments": { - "timeoutMS": 0 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - distinct on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "distinct" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "distinct", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "fieldName": "x", - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "distinct", - "databaseName": "test", - "command": { - "distinct": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - distinct on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "distinct" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "distinct", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "fieldName": "x", - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "distinct", - "databaseName": "test", - "command": { - "distinct": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - find on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "find", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - find on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "find", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - findOne on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "findOne", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - findOne on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "findOne", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - listIndexes on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "listIndexes", - "object": "collection", - "arguments": { - "timeoutMS": 1000 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listIndexes", - "databaseName": "test", - "command": { - "listIndexes": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - listIndexes on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "listIndexes", - "object": "collection", - "arguments": { - "timeoutMS": 0 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listIndexes", - "databaseName": "test", - "command": { - "listIndexes": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - listIndexNames on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "listIndexNames", - "object": "collection", - "arguments": { - "timeoutMS": 1000 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listIndexes", - "databaseName": "test", - "command": { - "listIndexes": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - listIndexNames on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "listIndexNames", - "object": "collection", - "arguments": { - "timeoutMS": 0 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listIndexes", - "databaseName": "test", - "command": { - "listIndexes": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - createChangeStream on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "pipeline": [] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - createChangeStream on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "pipeline": [] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - insertOne on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "document": { - "x": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - insertOne on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "document": { - "x": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - insertMany on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "documents": [ - { - "x": 1 - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - insertMany on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "documents": [ - { - "x": 1 - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - deleteOne on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "delete" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "deleteOne", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "delete", - "databaseName": "test", - "command": { - "delete": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - deleteOne on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "delete" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "deleteOne", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "delete", - "databaseName": "test", - "command": { - "delete": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - deleteMany on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "delete" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "deleteMany", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "delete", - "databaseName": "test", - "command": { - "delete": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - deleteMany on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "delete" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "deleteMany", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "delete", - "databaseName": "test", - "command": { - "delete": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - replaceOne on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "update" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "replaceOne", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "filter": {}, - "replacement": { - "x": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - replaceOne on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "update" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "replaceOne", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "filter": {}, - "replacement": { - "x": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - updateOne on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "update" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "updateOne", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "filter": {}, - "update": { - "$set": { - "x": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - updateOne on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "update" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "updateOne", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "filter": {}, - "update": { - "$set": { - "x": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - updateMany on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "update" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "updateMany", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "filter": {}, - "update": { - "$set": { - "x": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - updateMany on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "update" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "updateMany", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "filter": {}, - "update": { - "$set": { - "x": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - findOneAndDelete on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "findOneAndDelete", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - findOneAndDelete on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "findOneAndDelete", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - findOneAndReplace on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "findOneAndReplace", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "filter": {}, - "replacement": { - "x": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - findOneAndReplace on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "findOneAndReplace", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "filter": {}, - "replacement": { - "x": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - findOneAndUpdate on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "findOneAndUpdate", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "filter": {}, - "update": { - "$set": { - "x": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - findOneAndUpdate on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "findOneAndUpdate", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "filter": {}, - "update": { - "$set": { - "x": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - bulkWrite on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "bulkWrite", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "requests": [ - { - "insertOne": { - "document": { - "_id": 1 - } - } - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - bulkWrite on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "bulkWrite", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "requests": [ - { - "insertOne": { - "document": { - "_id": 1 - } - } - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - createIndex on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "createIndexes" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "createIndex", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "keys": { - "x": 1 - }, - "name": "x_1" - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "createIndexes", - "databaseName": "test", - "command": { - "createIndexes": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - createIndex on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "createIndexes" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "createIndex", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "keys": { - "x": 1 - }, - "name": "x_1" - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "createIndexes", - "databaseName": "test", - "command": { - "createIndexes": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - dropIndex on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "dropIndexes" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "dropIndex", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "name": "x_1" - }, - "expectError": { - "isTimeoutError": false - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "dropIndexes", - "databaseName": "test", - "command": { - "dropIndexes": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - dropIndex on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "dropIndexes" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "dropIndex", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "name": "x_1" - }, - "expectError": { - "isTimeoutError": false - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "dropIndexes", - "databaseName": "test", - "command": { - "dropIndexes": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be configured for an operation - dropIndexes on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "dropIndexes" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "dropIndexes", - "object": "collection", - "arguments": { - "timeoutMS": 1000 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "dropIndexes", - "databaseName": "test", - "command": { - "dropIndexes": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS can be set to 0 for an operation - dropIndexes on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "dropIndexes" - ], - "blockConnection": true, - "blockTimeMS": 15 - } - } - } - }, - { - "name": "dropIndexes", - "object": "collection", - "arguments": { - "timeoutMS": 0 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "dropIndexes", - "databaseName": "test", - "command": { - "dropIndexes": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/client-side-operations-timeout/override-operation-timeoutMS.yml b/testdata/client-side-operations-timeout/override-operation-timeoutMS.yml deleted file mode 100644 index 1091ec7cd5..0000000000 --- a/testdata/client-side-operations-timeout/override-operation-timeoutMS.yml +++ /dev/null @@ -1,1917 +0,0 @@ -# Tests in this file are generated from override-operation-timeoutMS.yml.template. - -description: "timeoutMS can be overridden for an operation" - -schemaVersion: "1.9" - -runOnRequirements: - - minServerVersion: "4.4" - topologies: ["replicaset", "sharded"] - -createEntities: - - client: - id: &failPointClient failPointClient - useMultipleMongoses: false - - client: - id: &client client - uriOptions: - timeoutMS: 10 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: &databaseName test - - collection: - id: &collection collection - database: *database - collectionName: &collectionName coll - -initialData: - - collectionName: *collectionName - databaseName: *databaseName - documents: [] - -tests: - # For each level operation, we execute two tests: - # - # 1. timeoutMS can be overridden to a non-zero value for an operation. Each test executes an operation using one of - # the entities defined above with an overridden timeoutMS=1000 and configures a fail point to block the operation for - # 15ms so the operation succeeds. - # - # 2. timeoutMS can be overridden to 0 for an operation. Each test executes an operation using the entities defined - # above with an overridden timeoutMS=0 so the operation succeeds. - - - description: "timeoutMS can be configured for an operation - listDatabases on client" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["listDatabases"] - blockConnection: true - blockTimeMS: 15 - - name: listDatabases - object: *client - arguments: - timeoutMS: 1000 - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - listDatabases on client" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["listDatabases"] - blockConnection: true - blockTimeMS: 15 - - name: listDatabases - object: *client - arguments: - timeoutMS: 0 - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - listDatabaseNames on client" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["listDatabases"] - blockConnection: true - blockTimeMS: 15 - - name: listDatabaseNames - object: *client - arguments: - timeoutMS: 1000 - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - listDatabaseNames on client" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["listDatabases"] - blockConnection: true - blockTimeMS: 15 - - name: listDatabaseNames - object: *client - arguments: - timeoutMS: 0 - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - createChangeStream on client" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 15 - - name: createChangeStream - object: *client - arguments: - timeoutMS: 1000 - pipeline: [] - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: admin - command: - aggregate: 1 - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - createChangeStream on client" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 15 - - name: createChangeStream - object: *client - arguments: - timeoutMS: 0 - pipeline: [] - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: admin - command: - aggregate: 1 - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - aggregate on database" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 15 - - name: aggregate - object: *database - arguments: - timeoutMS: 1000 - pipeline: [ { $listLocalSessions: {} }, { $limit: 1 } ] - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - aggregate on database" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 15 - - name: aggregate - object: *database - arguments: - timeoutMS: 0 - pipeline: [ { $listLocalSessions: {} }, { $limit: 1 } ] - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - listCollections on database" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["listCollections"] - blockConnection: true - blockTimeMS: 15 - - name: listCollections - object: *database - arguments: - timeoutMS: 1000 - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - listCollections on database" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["listCollections"] - blockConnection: true - blockTimeMS: 15 - - name: listCollections - object: *database - arguments: - timeoutMS: 0 - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - listCollectionNames on database" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["listCollections"] - blockConnection: true - blockTimeMS: 15 - - name: listCollectionNames - object: *database - arguments: - timeoutMS: 1000 - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - listCollectionNames on database" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["listCollections"] - blockConnection: true - blockTimeMS: 15 - - name: listCollectionNames - object: *database - arguments: - timeoutMS: 0 - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - runCommand on database" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["ping"] - blockConnection: true - blockTimeMS: 15 - - name: runCommand - object: *database - arguments: - timeoutMS: 1000 - command: { ping: 1 } - commandName: ping - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: ping - databaseName: *databaseName - command: - ping: 1 - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - runCommand on database" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["ping"] - blockConnection: true - blockTimeMS: 15 - - name: runCommand - object: *database - arguments: - timeoutMS: 0 - command: { ping: 1 } - commandName: ping - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: ping - databaseName: *databaseName - command: - ping: 1 - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - createChangeStream on database" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 15 - - name: createChangeStream - object: *database - arguments: - timeoutMS: 1000 - pipeline: [] - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - createChangeStream on database" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 15 - - name: createChangeStream - object: *database - arguments: - timeoutMS: 0 - pipeline: [] - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - aggregate on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 15 - - name: aggregate - object: *collection - arguments: - timeoutMS: 1000 - pipeline: [] - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - aggregate on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 15 - - name: aggregate - object: *collection - arguments: - timeoutMS: 0 - pipeline: [] - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - count on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["count"] - blockConnection: true - blockTimeMS: 15 - - name: count - object: *collection - arguments: - timeoutMS: 1000 - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - count on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["count"] - blockConnection: true - blockTimeMS: 15 - - name: count - object: *collection - arguments: - timeoutMS: 0 - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - countDocuments on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 15 - - name: countDocuments - object: *collection - arguments: - timeoutMS: 1000 - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - countDocuments on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 15 - - name: countDocuments - object: *collection - arguments: - timeoutMS: 0 - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - estimatedDocumentCount on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["count"] - blockConnection: true - blockTimeMS: 15 - - name: estimatedDocumentCount - object: *collection - arguments: - timeoutMS: 1000 - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - estimatedDocumentCount on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["count"] - blockConnection: true - blockTimeMS: 15 - - name: estimatedDocumentCount - object: *collection - arguments: - timeoutMS: 0 - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - distinct on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["distinct"] - blockConnection: true - blockTimeMS: 15 - - name: distinct - object: *collection - arguments: - timeoutMS: 1000 - fieldName: x - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: distinct - databaseName: *databaseName - command: - distinct: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - distinct on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["distinct"] - blockConnection: true - blockTimeMS: 15 - - name: distinct - object: *collection - arguments: - timeoutMS: 0 - fieldName: x - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: distinct - databaseName: *databaseName - command: - distinct: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - find on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["find"] - blockConnection: true - blockTimeMS: 15 - - name: find - object: *collection - arguments: - timeoutMS: 1000 - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - find on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["find"] - blockConnection: true - blockTimeMS: 15 - - name: find - object: *collection - arguments: - timeoutMS: 0 - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - findOne on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["find"] - blockConnection: true - blockTimeMS: 15 - - name: findOne - object: *collection - arguments: - timeoutMS: 1000 - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - findOne on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["find"] - blockConnection: true - blockTimeMS: 15 - - name: findOne - object: *collection - arguments: - timeoutMS: 0 - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - listIndexes on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["listIndexes"] - blockConnection: true - blockTimeMS: 15 - - name: listIndexes - object: *collection - arguments: - timeoutMS: 1000 - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listIndexes - databaseName: *databaseName - command: - listIndexes: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - listIndexes on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["listIndexes"] - blockConnection: true - blockTimeMS: 15 - - name: listIndexes - object: *collection - arguments: - timeoutMS: 0 - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listIndexes - databaseName: *databaseName - command: - listIndexes: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - listIndexNames on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["listIndexes"] - blockConnection: true - blockTimeMS: 15 - - name: listIndexNames - object: *collection - arguments: - timeoutMS: 1000 - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listIndexes - databaseName: *databaseName - command: - listIndexes: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - listIndexNames on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["listIndexes"] - blockConnection: true - blockTimeMS: 15 - - name: listIndexNames - object: *collection - arguments: - timeoutMS: 0 - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listIndexes - databaseName: *databaseName - command: - listIndexes: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - createChangeStream on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 15 - - name: createChangeStream - object: *collection - arguments: - timeoutMS: 1000 - pipeline: [] - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - createChangeStream on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 15 - - name: createChangeStream - object: *collection - arguments: - timeoutMS: 0 - pipeline: [] - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - insertOne on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["insert"] - blockConnection: true - blockTimeMS: 15 - - name: insertOne - object: *collection - arguments: - timeoutMS: 1000 - document: { x: 1 } - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - insertOne on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["insert"] - blockConnection: true - blockTimeMS: 15 - - name: insertOne - object: *collection - arguments: - timeoutMS: 0 - document: { x: 1 } - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - insertMany on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["insert"] - blockConnection: true - blockTimeMS: 15 - - name: insertMany - object: *collection - arguments: - timeoutMS: 1000 - documents: - - { x: 1 } - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - insertMany on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["insert"] - blockConnection: true - blockTimeMS: 15 - - name: insertMany - object: *collection - arguments: - timeoutMS: 0 - documents: - - { x: 1 } - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - deleteOne on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["delete"] - blockConnection: true - blockTimeMS: 15 - - name: deleteOne - object: *collection - arguments: - timeoutMS: 1000 - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: delete - databaseName: *databaseName - command: - delete: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - deleteOne on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["delete"] - blockConnection: true - blockTimeMS: 15 - - name: deleteOne - object: *collection - arguments: - timeoutMS: 0 - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: delete - databaseName: *databaseName - command: - delete: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - deleteMany on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["delete"] - blockConnection: true - blockTimeMS: 15 - - name: deleteMany - object: *collection - arguments: - timeoutMS: 1000 - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: delete - databaseName: *databaseName - command: - delete: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - deleteMany on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["delete"] - blockConnection: true - blockTimeMS: 15 - - name: deleteMany - object: *collection - arguments: - timeoutMS: 0 - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: delete - databaseName: *databaseName - command: - delete: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - replaceOne on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["update"] - blockConnection: true - blockTimeMS: 15 - - name: replaceOne - object: *collection - arguments: - timeoutMS: 1000 - filter: {} - replacement: { x: 1 } - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - replaceOne on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["update"] - blockConnection: true - blockTimeMS: 15 - - name: replaceOne - object: *collection - arguments: - timeoutMS: 0 - filter: {} - replacement: { x: 1 } - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - updateOne on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["update"] - blockConnection: true - blockTimeMS: 15 - - name: updateOne - object: *collection - arguments: - timeoutMS: 1000 - filter: {} - update: { $set: { x: 1 } } - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - updateOne on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["update"] - blockConnection: true - blockTimeMS: 15 - - name: updateOne - object: *collection - arguments: - timeoutMS: 0 - filter: {} - update: { $set: { x: 1 } } - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - updateMany on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["update"] - blockConnection: true - blockTimeMS: 15 - - name: updateMany - object: *collection - arguments: - timeoutMS: 1000 - filter: {} - update: { $set: { x: 1 } } - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - updateMany on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["update"] - blockConnection: true - blockTimeMS: 15 - - name: updateMany - object: *collection - arguments: - timeoutMS: 0 - filter: {} - update: { $set: { x: 1 } } - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - findOneAndDelete on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["findAndModify"] - blockConnection: true - blockTimeMS: 15 - - name: findOneAndDelete - object: *collection - arguments: - timeoutMS: 1000 - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - findOneAndDelete on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["findAndModify"] - blockConnection: true - blockTimeMS: 15 - - name: findOneAndDelete - object: *collection - arguments: - timeoutMS: 0 - filter: {} - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - findOneAndReplace on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["findAndModify"] - blockConnection: true - blockTimeMS: 15 - - name: findOneAndReplace - object: *collection - arguments: - timeoutMS: 1000 - filter: {} - replacement: { x: 1 } - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - findOneAndReplace on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["findAndModify"] - blockConnection: true - blockTimeMS: 15 - - name: findOneAndReplace - object: *collection - arguments: - timeoutMS: 0 - filter: {} - replacement: { x: 1 } - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - findOneAndUpdate on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["findAndModify"] - blockConnection: true - blockTimeMS: 15 - - name: findOneAndUpdate - object: *collection - arguments: - timeoutMS: 1000 - filter: {} - update: { $set: { x: 1 } } - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - findOneAndUpdate on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["findAndModify"] - blockConnection: true - blockTimeMS: 15 - - name: findOneAndUpdate - object: *collection - arguments: - timeoutMS: 0 - filter: {} - update: { $set: { x: 1 } } - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - bulkWrite on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["insert"] - blockConnection: true - blockTimeMS: 15 - - name: bulkWrite - object: *collection - arguments: - timeoutMS: 1000 - requests: - - insertOne: - document: { _id: 1 } - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - bulkWrite on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["insert"] - blockConnection: true - blockTimeMS: 15 - - name: bulkWrite - object: *collection - arguments: - timeoutMS: 0 - requests: - - insertOne: - document: { _id: 1 } - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - createIndex on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["createIndexes"] - blockConnection: true - blockTimeMS: 15 - - name: createIndex - object: *collection - arguments: - timeoutMS: 1000 - keys: { x: 1 } - name: "x_1" - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: createIndexes - databaseName: *databaseName - command: - createIndexes: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - createIndex on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["createIndexes"] - blockConnection: true - blockTimeMS: 15 - - name: createIndex - object: *collection - arguments: - timeoutMS: 0 - keys: { x: 1 } - name: "x_1" - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: createIndexes - databaseName: *databaseName - command: - createIndexes: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - dropIndex on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["dropIndexes"] - blockConnection: true - blockTimeMS: 15 - - name: dropIndex - object: *collection - arguments: - timeoutMS: 1000 - name: "x_1" - - expectError: - isTimeoutError: false # IndexNotFound - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: dropIndexes - databaseName: *databaseName - command: - dropIndexes: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - dropIndex on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["dropIndexes"] - blockConnection: true - blockTimeMS: 15 - - name: dropIndex - object: *collection - arguments: - timeoutMS: 0 - name: "x_1" - - expectError: - isTimeoutError: false # IndexNotFound - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: dropIndexes - databaseName: *databaseName - command: - dropIndexes: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS can be configured for an operation - dropIndexes on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["dropIndexes"] - blockConnection: true - blockTimeMS: 15 - - name: dropIndexes - object: *collection - arguments: - timeoutMS: 1000 - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: dropIndexes - databaseName: *databaseName - command: - dropIndexes: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "timeoutMS can be set to 0 for an operation - dropIndexes on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["dropIndexes"] - blockConnection: true - blockTimeMS: 15 - - name: dropIndexes - object: *collection - arguments: - timeoutMS: 0 - - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: dropIndexes - databaseName: *databaseName - command: - dropIndexes: *collectionName - maxTimeMS: { $$exists: false } diff --git a/testdata/client-side-operations-timeout/retryability-legacy-timeouts.json b/testdata/client-side-operations-timeout/retryability-legacy-timeouts.json deleted file mode 100644 index aded781aee..0000000000 --- a/testdata/client-side-operations-timeout/retryability-legacy-timeouts.json +++ /dev/null @@ -1,3042 +0,0 @@ -{ - "description": "legacy timeouts behave correctly for retryable operations", - "schemaVersion": "1.9", - "runOnRequirements": [ - { - "minServerVersion": "4.4", - "topologies": [ - "replicaset", - "sharded" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "failPointClient", - "useMultipleMongoses": false - } - }, - { - "client": { - "id": "client", - "uriOptions": { - "socketTimeoutMS": 100 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ], - "initialData": [ - { - "collectionName": "coll", - "databaseName": "test", - "documents": [] - } - ], - "tests": [ - { - "description": "operation succeeds after one socket timeout - insertOne on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "x": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation fails after two consecutive socket timeouts - insertOne on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "insert" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "x": 1 - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation succeeds after one socket timeout - insertMany on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "x": 1 - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation fails after two consecutive socket timeouts - insertMany on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "insert" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "x": 1 - } - ] - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation succeeds after one socket timeout - deleteOne on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "delete" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "deleteOne", - "object": "collection", - "arguments": { - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "delete", - "databaseName": "test", - "command": { - "delete": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "delete", - "databaseName": "test", - "command": { - "delete": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation fails after two consecutive socket timeouts - deleteOne on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "delete" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "deleteOne", - "object": "collection", - "arguments": { - "filter": {} - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "delete", - "databaseName": "test", - "command": { - "delete": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "delete", - "databaseName": "test", - "command": { - "delete": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation succeeds after one socket timeout - replaceOne on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "update" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "replaceOne", - "object": "collection", - "arguments": { - "filter": {}, - "replacement": { - "x": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation fails after two consecutive socket timeouts - replaceOne on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "update" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "replaceOne", - "object": "collection", - "arguments": { - "filter": {}, - "replacement": { - "x": 1 - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation succeeds after one socket timeout - updateOne on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "update" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "updateOne", - "object": "collection", - "arguments": { - "filter": {}, - "update": { - "$set": { - "x": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation fails after two consecutive socket timeouts - updateOne on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "update" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "updateOne", - "object": "collection", - "arguments": { - "filter": {}, - "update": { - "$set": { - "x": 1 - } - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation succeeds after one socket timeout - findOneAndDelete on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "findOneAndDelete", - "object": "collection", - "arguments": { - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation fails after two consecutive socket timeouts - findOneAndDelete on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "findOneAndDelete", - "object": "collection", - "arguments": { - "filter": {} - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation succeeds after one socket timeout - findOneAndReplace on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "findOneAndReplace", - "object": "collection", - "arguments": { - "filter": {}, - "replacement": { - "x": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation fails after two consecutive socket timeouts - findOneAndReplace on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "findOneAndReplace", - "object": "collection", - "arguments": { - "filter": {}, - "replacement": { - "x": 1 - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation succeeds after one socket timeout - findOneAndUpdate on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "findOneAndUpdate", - "object": "collection", - "arguments": { - "filter": {}, - "update": { - "$set": { - "x": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation fails after two consecutive socket timeouts - findOneAndUpdate on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "findOneAndUpdate", - "object": "collection", - "arguments": { - "filter": {}, - "update": { - "$set": { - "x": 1 - } - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation succeeds after one socket timeout - bulkWrite on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "bulkWrite", - "object": "collection", - "arguments": { - "requests": [ - { - "insertOne": { - "document": { - "_id": 1 - } - } - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation fails after two consecutive socket timeouts - bulkWrite on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "insert" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "bulkWrite", - "object": "collection", - "arguments": { - "requests": [ - { - "insertOne": { - "document": { - "_id": 1 - } - } - } - ] - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation succeeds after one socket timeout - listDatabases on client", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "listDatabases", - "object": "client", - "arguments": { - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1 - } - } - }, - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1 - } - } - } - ] - } - ] - }, - { - "description": "operation fails after two consecutive socket timeouts - listDatabases on client", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "listDatabases", - "object": "client", - "arguments": { - "filter": {} - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1 - } - } - }, - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1 - } - } - } - ] - } - ] - }, - { - "description": "operation succeeds after one socket timeout - listDatabaseNames on client", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "listDatabaseNames", - "object": "client" - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1 - } - } - }, - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1 - } - } - } - ] - } - ] - }, - { - "description": "operation fails after two consecutive socket timeouts - listDatabaseNames on client", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "listDatabaseNames", - "object": "client", - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1 - } - } - }, - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1 - } - } - } - ] - } - ] - }, - { - "description": "operation succeeds after one socket timeout - createChangeStream on client", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "createChangeStream", - "object": "client", - "arguments": { - "pipeline": [] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "admin", - "command": { - "aggregate": 1 - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "admin", - "command": { - "aggregate": 1 - } - } - } - ] - } - ] - }, - { - "description": "operation fails after two consecutive socket timeouts - createChangeStream on client", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "createChangeStream", - "object": "client", - "arguments": { - "pipeline": [] - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "admin", - "command": { - "aggregate": 1 - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "admin", - "command": { - "aggregate": 1 - } - } - } - ] - } - ] - }, - { - "description": "operation succeeds after one socket timeout - aggregate on database", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "aggregate", - "object": "database", - "arguments": { - "pipeline": [ - { - "$listLocalSessions": {} - }, - { - "$limit": 1 - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1 - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1 - } - } - } - ] - } - ] - }, - { - "description": "operation fails after two consecutive socket timeouts - aggregate on database", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "aggregate", - "object": "database", - "arguments": { - "pipeline": [ - { - "$listLocalSessions": {} - }, - { - "$limit": 1 - } - ] - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1 - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1 - } - } - } - ] - } - ] - }, - { - "description": "operation succeeds after one socket timeout - listCollections on database", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "listCollections", - "object": "database", - "arguments": { - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1 - } - } - }, - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1 - } - } - } - ] - } - ] - }, - { - "description": "operation fails after two consecutive socket timeouts - listCollections on database", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "listCollections", - "object": "database", - "arguments": { - "filter": {} - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1 - } - } - }, - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1 - } - } - } - ] - } - ] - }, - { - "description": "operation succeeds after one socket timeout - listCollectionNames on database", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "listCollectionNames", - "object": "database", - "arguments": { - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1 - } - } - }, - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1 - } - } - } - ] - } - ] - }, - { - "description": "operation fails after two consecutive socket timeouts - listCollectionNames on database", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "listCollectionNames", - "object": "database", - "arguments": { - "filter": {} - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1 - } - } - }, - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1 - } - } - } - ] - } - ] - }, - { - "description": "operation succeeds after one socket timeout - createChangeStream on database", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "createChangeStream", - "object": "database", - "arguments": { - "pipeline": [] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1 - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1 - } - } - } - ] - } - ] - }, - { - "description": "operation fails after two consecutive socket timeouts - createChangeStream on database", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "createChangeStream", - "object": "database", - "arguments": { - "pipeline": [] - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1 - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1 - } - } - } - ] - } - ] - }, - { - "description": "operation succeeds after one socket timeout - aggregate on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "aggregate", - "object": "collection", - "arguments": { - "pipeline": [] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation fails after two consecutive socket timeouts - aggregate on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "aggregate", - "object": "collection", - "arguments": { - "pipeline": [] - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation succeeds after one socket timeout - count on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "count", - "object": "collection", - "arguments": { - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation fails after two consecutive socket timeouts - count on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "count" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "count", - "object": "collection", - "arguments": { - "filter": {} - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation succeeds after one socket timeout - countDocuments on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation fails after two consecutive socket timeouts - countDocuments on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "filter": {} - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation succeeds after one socket timeout - estimatedDocumentCount on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "estimatedDocumentCount", - "object": "collection" - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation fails after two consecutive socket timeouts - estimatedDocumentCount on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "count" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "estimatedDocumentCount", - "object": "collection", - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation succeeds after one socket timeout - distinct on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "distinct" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "distinct", - "object": "collection", - "arguments": { - "fieldName": "x", - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "distinct", - "databaseName": "test", - "command": { - "distinct": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "distinct", - "databaseName": "test", - "command": { - "distinct": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation fails after two consecutive socket timeouts - distinct on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "distinct" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "distinct", - "object": "collection", - "arguments": { - "fieldName": "x", - "filter": {} - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "distinct", - "databaseName": "test", - "command": { - "distinct": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "distinct", - "databaseName": "test", - "command": { - "distinct": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation succeeds after one socket timeout - find on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "find", - "object": "collection", - "arguments": { - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation fails after two consecutive socket timeouts - find on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "find" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "find", - "object": "collection", - "arguments": { - "filter": {} - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation succeeds after one socket timeout - findOne on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "findOne", - "object": "collection", - "arguments": { - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation fails after two consecutive socket timeouts - findOne on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "find" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "findOne", - "object": "collection", - "arguments": { - "filter": {} - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation succeeds after one socket timeout - listIndexes on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "listIndexes", - "object": "collection" - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listIndexes", - "databaseName": "test", - "command": { - "listIndexes": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "listIndexes", - "databaseName": "test", - "command": { - "listIndexes": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation fails after two consecutive socket timeouts - listIndexes on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "listIndexes", - "object": "collection", - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listIndexes", - "databaseName": "test", - "command": { - "listIndexes": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "listIndexes", - "databaseName": "test", - "command": { - "listIndexes": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation succeeds after one socket timeout - createChangeStream on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection", - "arguments": { - "pipeline": [] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll" - } - } - } - ] - } - ] - }, - { - "description": "operation fails after two consecutive socket timeouts - createChangeStream on collection", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 125 - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection", - "arguments": { - "pipeline": [] - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll" - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll" - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/client-side-operations-timeout/retryability-legacy-timeouts.yml b/testdata/client-side-operations-timeout/retryability-legacy-timeouts.yml deleted file mode 100644 index 8ada5fb791..0000000000 --- a/testdata/client-side-operations-timeout/retryability-legacy-timeouts.yml +++ /dev/null @@ -1,1676 +0,0 @@ -# Tests in this file are generated from retryability-legacy-timeouts.yml.template. - -description: "legacy timeouts behave correctly for retryable operations" - -schemaVersion: "1.9" - -runOnRequirements: - - minServerVersion: "4.4" - topologies: ["replicaset", "sharded"] - -createEntities: - - client: - id: &failPointClient failPointClient - useMultipleMongoses: false - - client: - id: &client client - uriOptions: - socketTimeoutMS: 100 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: &databaseName test - - collection: - id: &collection collection - database: *database - collectionName: &collectionName coll - -initialData: - - collectionName: *collectionName - databaseName: *databaseName - documents: [] - -tests: - # For each retryable operation, run two tests: - # - # 1. Socket timeouts are retried once - Each test constructs a client entity with socketTimeoutMS=100, configures a - # fail point to block the operation once for 125ms, and expects the operation to succeed. - # - # 2. Operations fail after two consecutive socket timeouts - Same as (1) but the fail point is configured to block - # the operation twice and the test expects the operation to fail. - - - description: "operation succeeds after one socket timeout - insertOne on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["insert"] - blockConnection: true - blockTimeMS: 125 - - name: insertOne - object: *collection - arguments: - document: { x: 1 } - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - - description: "operation fails after two consecutive socket timeouts - insertOne on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["insert"] - blockConnection: true - blockTimeMS: 125 - - name: insertOne - object: *collection - arguments: - document: { x: 1 } - - expectError: - # Network errors are considered client errors by the unified test format spec. - isClientError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - - description: "operation succeeds after one socket timeout - insertMany on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["insert"] - blockConnection: true - blockTimeMS: 125 - - name: insertMany - object: *collection - arguments: - documents: - - { x: 1 } - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - - description: "operation fails after two consecutive socket timeouts - insertMany on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["insert"] - blockConnection: true - blockTimeMS: 125 - - name: insertMany - object: *collection - arguments: - documents: - - { x: 1 } - - expectError: - # Network errors are considered client errors by the unified test format spec. - isClientError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - - description: "operation succeeds after one socket timeout - deleteOne on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["delete"] - blockConnection: true - blockTimeMS: 125 - - name: deleteOne - object: *collection - arguments: - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: delete - databaseName: *databaseName - command: - delete: *collectionName - - commandStartedEvent: - commandName: delete - databaseName: *databaseName - command: - delete: *collectionName - - description: "operation fails after two consecutive socket timeouts - deleteOne on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["delete"] - blockConnection: true - blockTimeMS: 125 - - name: deleteOne - object: *collection - arguments: - filter: {} - - expectError: - # Network errors are considered client errors by the unified test format spec. - isClientError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: delete - databaseName: *databaseName - command: - delete: *collectionName - - commandStartedEvent: - commandName: delete - databaseName: *databaseName - command: - delete: *collectionName - - description: "operation succeeds after one socket timeout - replaceOne on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["update"] - blockConnection: true - blockTimeMS: 125 - - name: replaceOne - object: *collection - arguments: - filter: {} - replacement: { x: 1 } - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - - description: "operation fails after two consecutive socket timeouts - replaceOne on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["update"] - blockConnection: true - blockTimeMS: 125 - - name: replaceOne - object: *collection - arguments: - filter: {} - replacement: { x: 1 } - - expectError: - # Network errors are considered client errors by the unified test format spec. - isClientError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - - description: "operation succeeds after one socket timeout - updateOne on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["update"] - blockConnection: true - blockTimeMS: 125 - - name: updateOne - object: *collection - arguments: - filter: {} - update: { $set: { x: 1 } } - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - - description: "operation fails after two consecutive socket timeouts - updateOne on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["update"] - blockConnection: true - blockTimeMS: 125 - - name: updateOne - object: *collection - arguments: - filter: {} - update: { $set: { x: 1 } } - - expectError: - # Network errors are considered client errors by the unified test format spec. - isClientError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - - description: "operation succeeds after one socket timeout - findOneAndDelete on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["findAndModify"] - blockConnection: true - blockTimeMS: 125 - - name: findOneAndDelete - object: *collection - arguments: - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - - description: "operation fails after two consecutive socket timeouts - findOneAndDelete on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["findAndModify"] - blockConnection: true - blockTimeMS: 125 - - name: findOneAndDelete - object: *collection - arguments: - filter: {} - - expectError: - # Network errors are considered client errors by the unified test format spec. - isClientError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - - description: "operation succeeds after one socket timeout - findOneAndReplace on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["findAndModify"] - blockConnection: true - blockTimeMS: 125 - - name: findOneAndReplace - object: *collection - arguments: - filter: {} - replacement: { x: 1 } - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - - description: "operation fails after two consecutive socket timeouts - findOneAndReplace on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["findAndModify"] - blockConnection: true - blockTimeMS: 125 - - name: findOneAndReplace - object: *collection - arguments: - filter: {} - replacement: { x: 1 } - - expectError: - # Network errors are considered client errors by the unified test format spec. - isClientError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - - description: "operation succeeds after one socket timeout - findOneAndUpdate on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["findAndModify"] - blockConnection: true - blockTimeMS: 125 - - name: findOneAndUpdate - object: *collection - arguments: - filter: {} - update: { $set: { x: 1 } } - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - - description: "operation fails after two consecutive socket timeouts - findOneAndUpdate on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["findAndModify"] - blockConnection: true - blockTimeMS: 125 - - name: findOneAndUpdate - object: *collection - arguments: - filter: {} - update: { $set: { x: 1 } } - - expectError: - # Network errors are considered client errors by the unified test format spec. - isClientError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - - description: "operation succeeds after one socket timeout - bulkWrite on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["insert"] - blockConnection: true - blockTimeMS: 125 - - name: bulkWrite - object: *collection - arguments: - requests: - - insertOne: - document: { _id: 1 } - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - - description: "operation fails after two consecutive socket timeouts - bulkWrite on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["insert"] - blockConnection: true - blockTimeMS: 125 - - name: bulkWrite - object: *collection - arguments: - requests: - - insertOne: - document: { _id: 1 } - - expectError: - # Network errors are considered client errors by the unified test format spec. - isClientError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - - description: "operation succeeds after one socket timeout - listDatabases on client" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["listDatabases"] - blockConnection: true - blockTimeMS: 125 - - name: listDatabases - object: *client - arguments: - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - - description: "operation fails after two consecutive socket timeouts - listDatabases on client" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["listDatabases"] - blockConnection: true - blockTimeMS: 125 - - name: listDatabases - object: *client - arguments: - filter: {} - - expectError: - # Network errors are considered client errors by the unified test format spec. - isClientError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - - description: "operation succeeds after one socket timeout - listDatabaseNames on client" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["listDatabases"] - blockConnection: true - blockTimeMS: 125 - - name: listDatabaseNames - object: *client - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - - description: "operation fails after two consecutive socket timeouts - listDatabaseNames on client" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["listDatabases"] - blockConnection: true - blockTimeMS: 125 - - name: listDatabaseNames - object: *client - - expectError: - # Network errors are considered client errors by the unified test format spec. - isClientError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - - description: "operation succeeds after one socket timeout - createChangeStream on client" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 125 - - name: createChangeStream - object: *client - arguments: - pipeline: [] - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: admin - command: - aggregate: 1 - - commandStartedEvent: - commandName: aggregate - databaseName: admin - command: - aggregate: 1 - - description: "operation fails after two consecutive socket timeouts - createChangeStream on client" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 125 - - name: createChangeStream - object: *client - arguments: - pipeline: [] - - expectError: - # Network errors are considered client errors by the unified test format spec. - isClientError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: admin - command: - aggregate: 1 - - commandStartedEvent: - commandName: aggregate - databaseName: admin - command: - aggregate: 1 - - description: "operation succeeds after one socket timeout - aggregate on database" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 125 - - name: aggregate - object: *database - arguments: - pipeline: [ { $listLocalSessions: {} }, { $limit: 1 } ] - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - - description: "operation fails after two consecutive socket timeouts - aggregate on database" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 125 - - name: aggregate - object: *database - arguments: - pipeline: [ { $listLocalSessions: {} }, { $limit: 1 } ] - - expectError: - # Network errors are considered client errors by the unified test format spec. - isClientError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - - description: "operation succeeds after one socket timeout - listCollections on database" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["listCollections"] - blockConnection: true - blockTimeMS: 125 - - name: listCollections - object: *database - arguments: - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - - description: "operation fails after two consecutive socket timeouts - listCollections on database" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["listCollections"] - blockConnection: true - blockTimeMS: 125 - - name: listCollections - object: *database - arguments: - filter: {} - - expectError: - # Network errors are considered client errors by the unified test format spec. - isClientError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - - description: "operation succeeds after one socket timeout - listCollectionNames on database" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["listCollections"] - blockConnection: true - blockTimeMS: 125 - - name: listCollectionNames - object: *database - arguments: - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - - description: "operation fails after two consecutive socket timeouts - listCollectionNames on database" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["listCollections"] - blockConnection: true - blockTimeMS: 125 - - name: listCollectionNames - object: *database - arguments: - filter: {} - - expectError: - # Network errors are considered client errors by the unified test format spec. - isClientError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - - description: "operation succeeds after one socket timeout - createChangeStream on database" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 125 - - name: createChangeStream - object: *database - arguments: - pipeline: [] - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - - description: "operation fails after two consecutive socket timeouts - createChangeStream on database" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 125 - - name: createChangeStream - object: *database - arguments: - pipeline: [] - - expectError: - # Network errors are considered client errors by the unified test format spec. - isClientError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - - description: "operation succeeds after one socket timeout - aggregate on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 125 - - name: aggregate - object: *collection - arguments: - pipeline: [] - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - - description: "operation fails after two consecutive socket timeouts - aggregate on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 125 - - name: aggregate - object: *collection - arguments: - pipeline: [] - - expectError: - # Network errors are considered client errors by the unified test format spec. - isClientError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - - description: "operation succeeds after one socket timeout - count on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["count"] - blockConnection: true - blockTimeMS: 125 - - name: count - object: *collection - arguments: - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - - description: "operation fails after two consecutive socket timeouts - count on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["count"] - blockConnection: true - blockTimeMS: 125 - - name: count - object: *collection - arguments: - filter: {} - - expectError: - # Network errors are considered client errors by the unified test format spec. - isClientError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - - description: "operation succeeds after one socket timeout - countDocuments on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 125 - - name: countDocuments - object: *collection - arguments: - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - - description: "operation fails after two consecutive socket timeouts - countDocuments on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 125 - - name: countDocuments - object: *collection - arguments: - filter: {} - - expectError: - # Network errors are considered client errors by the unified test format spec. - isClientError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - - description: "operation succeeds after one socket timeout - estimatedDocumentCount on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["count"] - blockConnection: true - blockTimeMS: 125 - - name: estimatedDocumentCount - object: *collection - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - - description: "operation fails after two consecutive socket timeouts - estimatedDocumentCount on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["count"] - blockConnection: true - blockTimeMS: 125 - - name: estimatedDocumentCount - object: *collection - - expectError: - # Network errors are considered client errors by the unified test format spec. - isClientError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - - description: "operation succeeds after one socket timeout - distinct on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["distinct"] - blockConnection: true - blockTimeMS: 125 - - name: distinct - object: *collection - arguments: - fieldName: x - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: distinct - databaseName: *databaseName - command: - distinct: *collectionName - - commandStartedEvent: - commandName: distinct - databaseName: *databaseName - command: - distinct: *collectionName - - description: "operation fails after two consecutive socket timeouts - distinct on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["distinct"] - blockConnection: true - blockTimeMS: 125 - - name: distinct - object: *collection - arguments: - fieldName: x - filter: {} - - expectError: - # Network errors are considered client errors by the unified test format spec. - isClientError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: distinct - databaseName: *databaseName - command: - distinct: *collectionName - - commandStartedEvent: - commandName: distinct - databaseName: *databaseName - command: - distinct: *collectionName - - description: "operation succeeds after one socket timeout - find on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["find"] - blockConnection: true - blockTimeMS: 125 - - name: find - object: *collection - arguments: - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - - description: "operation fails after two consecutive socket timeouts - find on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["find"] - blockConnection: true - blockTimeMS: 125 - - name: find - object: *collection - arguments: - filter: {} - - expectError: - # Network errors are considered client errors by the unified test format spec. - isClientError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - - description: "operation succeeds after one socket timeout - findOne on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["find"] - blockConnection: true - blockTimeMS: 125 - - name: findOne - object: *collection - arguments: - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - - description: "operation fails after two consecutive socket timeouts - findOne on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["find"] - blockConnection: true - blockTimeMS: 125 - - name: findOne - object: *collection - arguments: - filter: {} - - expectError: - # Network errors are considered client errors by the unified test format spec. - isClientError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - - description: "operation succeeds after one socket timeout - listIndexes on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["listIndexes"] - blockConnection: true - blockTimeMS: 125 - - name: listIndexes - object: *collection - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listIndexes - databaseName: *databaseName - command: - listIndexes: *collectionName - - commandStartedEvent: - commandName: listIndexes - databaseName: *databaseName - command: - listIndexes: *collectionName - - description: "operation fails after two consecutive socket timeouts - listIndexes on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["listIndexes"] - blockConnection: true - blockTimeMS: 125 - - name: listIndexes - object: *collection - - expectError: - # Network errors are considered client errors by the unified test format spec. - isClientError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listIndexes - databaseName: *databaseName - command: - listIndexes: *collectionName - - commandStartedEvent: - commandName: listIndexes - databaseName: *databaseName - command: - listIndexes: *collectionName - - description: "operation succeeds after one socket timeout - createChangeStream on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 125 - - name: createChangeStream - object: *collection - arguments: - pipeline: [] - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - - description: "operation fails after two consecutive socket timeouts - createChangeStream on collection" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 125 - - name: createChangeStream - object: *collection - arguments: - pipeline: [] - - expectError: - # Network errors are considered client errors by the unified test format spec. - isClientError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - diff --git a/testdata/client-side-operations-timeout/retryability-timeoutMS.json b/testdata/client-side-operations-timeout/retryability-timeoutMS.json deleted file mode 100644 index 9daad260ef..0000000000 --- a/testdata/client-side-operations-timeout/retryability-timeoutMS.json +++ /dev/null @@ -1,5688 +0,0 @@ -{ - "description": "timeoutMS behaves correctly for retryable operations", - "schemaVersion": "1.9", - "runOnRequirements": [ - { - "minServerVersion": "4.0", - "topologies": [ - "replicaset" - ] - }, - { - "minServerVersion": "4.2", - "topologies": [ - "sharded" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "failPointClient", - "useMultipleMongoses": false - } - }, - { - "client": { - "id": "client", - "uriOptions": { - "timeoutMS": 100 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "test" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ], - "initialData": [ - { - "collectionName": "coll", - "databaseName": "test", - "documents": [] - } - ], - "tests": [ - { - "description": "timeoutMS applies to whole operation, not individual attempts - insertOne on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "insert" - ], - "blockConnection": true, - "blockTimeMS": 60, - "errorCode": 7, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "x": 1 - } - }, - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "operation is retried multiple times for non-zero timeoutMS - insertOne on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "insert" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "document": { - "x": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "operation is retried multiple times if timeoutMS is zero - insertOne on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "insert" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "document": { - "x": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applies to whole operation, not individual attempts - insertMany on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "insert" - ], - "blockConnection": true, - "blockTimeMS": 60, - "errorCode": 7, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "x": 1 - } - ] - }, - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "operation is retried multiple times for non-zero timeoutMS - insertMany on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "insert" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "documents": [ - { - "x": 1 - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "operation is retried multiple times if timeoutMS is zero - insertMany on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "insert" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "documents": [ - { - "x": 1 - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applies to whole operation, not individual attempts - deleteOne on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "delete" - ], - "blockConnection": true, - "blockTimeMS": 60, - "errorCode": 7, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "deleteOne", - "object": "collection", - "arguments": { - "filter": {} - }, - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "operation is retried multiple times for non-zero timeoutMS - deleteOne on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "delete" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "deleteOne", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "delete", - "databaseName": "test", - "command": { - "delete": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "delete", - "databaseName": "test", - "command": { - "delete": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "delete", - "databaseName": "test", - "command": { - "delete": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "operation is retried multiple times if timeoutMS is zero - deleteOne on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "delete" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "deleteOne", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "delete", - "databaseName": "test", - "command": { - "delete": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "delete", - "databaseName": "test", - "command": { - "delete": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "delete", - "databaseName": "test", - "command": { - "delete": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applies to whole operation, not individual attempts - replaceOne on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "update" - ], - "blockConnection": true, - "blockTimeMS": 60, - "errorCode": 7, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "replaceOne", - "object": "collection", - "arguments": { - "filter": {}, - "replacement": { - "x": 1 - } - }, - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "operation is retried multiple times for non-zero timeoutMS - replaceOne on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "update" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "replaceOne", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "filter": {}, - "replacement": { - "x": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "operation is retried multiple times if timeoutMS is zero - replaceOne on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "update" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "replaceOne", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "filter": {}, - "replacement": { - "x": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applies to whole operation, not individual attempts - updateOne on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "update" - ], - "blockConnection": true, - "blockTimeMS": 60, - "errorCode": 7, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "updateOne", - "object": "collection", - "arguments": { - "filter": {}, - "update": { - "$set": { - "x": 1 - } - } - }, - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "operation is retried multiple times for non-zero timeoutMS - updateOne on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "update" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "updateOne", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "filter": {}, - "update": { - "$set": { - "x": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "operation is retried multiple times if timeoutMS is zero - updateOne on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "update" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "updateOne", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "filter": {}, - "update": { - "$set": { - "x": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "update", - "databaseName": "test", - "command": { - "update": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applies to whole operation, not individual attempts - findOneAndDelete on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "blockConnection": true, - "blockTimeMS": 60, - "errorCode": 7, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "findOneAndDelete", - "object": "collection", - "arguments": { - "filter": {} - }, - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "operation is retried multiple times for non-zero timeoutMS - findOneAndDelete on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "findOneAndDelete", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "operation is retried multiple times if timeoutMS is zero - findOneAndDelete on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "findOneAndDelete", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applies to whole operation, not individual attempts - findOneAndReplace on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "blockConnection": true, - "blockTimeMS": 60, - "errorCode": 7, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "findOneAndReplace", - "object": "collection", - "arguments": { - "filter": {}, - "replacement": { - "x": 1 - } - }, - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "operation is retried multiple times for non-zero timeoutMS - findOneAndReplace on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "findOneAndReplace", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "filter": {}, - "replacement": { - "x": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "operation is retried multiple times if timeoutMS is zero - findOneAndReplace on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "findOneAndReplace", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "filter": {}, - "replacement": { - "x": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applies to whole operation, not individual attempts - findOneAndUpdate on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "blockConnection": true, - "blockTimeMS": 60, - "errorCode": 7, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "findOneAndUpdate", - "object": "collection", - "arguments": { - "filter": {}, - "update": { - "$set": { - "x": 1 - } - } - }, - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "operation is retried multiple times for non-zero timeoutMS - findOneAndUpdate on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "findOneAndUpdate", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "filter": {}, - "update": { - "$set": { - "x": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "operation is retried multiple times if timeoutMS is zero - findOneAndUpdate on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "findOneAndUpdate", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "filter": {}, - "update": { - "$set": { - "x": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "findAndModify", - "databaseName": "test", - "command": { - "findAndModify": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applies to whole operation, not individual attempts - bulkWrite on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "insert" - ], - "blockConnection": true, - "blockTimeMS": 60, - "errorCode": 7, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "bulkWrite", - "object": "collection", - "arguments": { - "requests": [ - { - "insertOne": { - "document": { - "_id": 1 - } - } - } - ] - }, - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "operation is retried multiple times for non-zero timeoutMS - bulkWrite on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "insert" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "bulkWrite", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "requests": [ - { - "insertOne": { - "document": { - "_id": 1 - } - } - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "operation is retried multiple times if timeoutMS is zero - bulkWrite on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "insert" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "bulkWrite", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "requests": [ - { - "insertOne": { - "document": { - "_id": 1 - } - } - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "insert", - "databaseName": "test", - "command": { - "insert": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applies to whole operation, not individual attempts - listDatabases on client", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "blockConnection": true, - "blockTimeMS": 60, - "errorCode": 7, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "listDatabases", - "object": "client", - "arguments": { - "filter": {} - }, - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "operation is retried multiple times for non-zero timeoutMS - listDatabases on client", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "listDatabases", - "object": "client", - "arguments": { - "timeoutMS": 1000, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "operation is retried multiple times if timeoutMS is zero - listDatabases on client", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "listDatabases", - "object": "client", - "arguments": { - "timeoutMS": 0, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applies to whole operation, not individual attempts - listDatabaseNames on client", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "blockConnection": true, - "blockTimeMS": 60, - "errorCode": 7, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "listDatabaseNames", - "object": "client", - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "operation is retried multiple times for non-zero timeoutMS - listDatabaseNames on client", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "listDatabaseNames", - "object": "client", - "arguments": { - "timeoutMS": 1000 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "operation is retried multiple times if timeoutMS is zero - listDatabaseNames on client", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "listDatabaseNames", - "object": "client", - "arguments": { - "timeoutMS": 0 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "listDatabases", - "databaseName": "admin", - "command": { - "listDatabases": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applies to whole operation, not individual attempts - createChangeStream on client", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 60, - "errorCode": 7, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "createChangeStream", - "object": "client", - "arguments": { - "pipeline": [] - }, - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "operation is retried multiple times for non-zero timeoutMS - createChangeStream on client", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "createChangeStream", - "object": "client", - "arguments": { - "timeoutMS": 1000, - "pipeline": [] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "admin", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "admin", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "admin", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "operation is retried multiple times if timeoutMS is zero - createChangeStream on client", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "createChangeStream", - "object": "client", - "arguments": { - "timeoutMS": 0, - "pipeline": [] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "admin", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "admin", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "admin", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applies to whole operation, not individual attempts - aggregate on database", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 60, - "errorCode": 7, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "aggregate", - "object": "database", - "arguments": { - "pipeline": [ - { - "$listLocalSessions": {} - }, - { - "$limit": 1 - } - ] - }, - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "operation is retried multiple times for non-zero timeoutMS - aggregate on database", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "aggregate", - "object": "database", - "arguments": { - "timeoutMS": 1000, - "pipeline": [ - { - "$listLocalSessions": {} - }, - { - "$limit": 1 - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "operation is retried multiple times if timeoutMS is zero - aggregate on database", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "aggregate", - "object": "database", - "arguments": { - "timeoutMS": 0, - "pipeline": [ - { - "$listLocalSessions": {} - }, - { - "$limit": 1 - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applies to whole operation, not individual attempts - listCollections on database", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "blockConnection": true, - "blockTimeMS": 60, - "errorCode": 7, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "listCollections", - "object": "database", - "arguments": { - "filter": {} - }, - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "operation is retried multiple times for non-zero timeoutMS - listCollections on database", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "listCollections", - "object": "database", - "arguments": { - "timeoutMS": 1000, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "operation is retried multiple times if timeoutMS is zero - listCollections on database", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "listCollections", - "object": "database", - "arguments": { - "timeoutMS": 0, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applies to whole operation, not individual attempts - listCollectionNames on database", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "blockConnection": true, - "blockTimeMS": 60, - "errorCode": 7, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "listCollectionNames", - "object": "database", - "arguments": { - "filter": {} - }, - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "operation is retried multiple times for non-zero timeoutMS - listCollectionNames on database", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "listCollectionNames", - "object": "database", - "arguments": { - "timeoutMS": 1000, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "operation is retried multiple times if timeoutMS is zero - listCollectionNames on database", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "listCollectionNames", - "object": "database", - "arguments": { - "timeoutMS": 0, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "listCollections", - "databaseName": "test", - "command": { - "listCollections": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applies to whole operation, not individual attempts - createChangeStream on database", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 60, - "errorCode": 7, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "createChangeStream", - "object": "database", - "arguments": { - "pipeline": [] - }, - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "operation is retried multiple times for non-zero timeoutMS - createChangeStream on database", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "createChangeStream", - "object": "database", - "arguments": { - "timeoutMS": 1000, - "pipeline": [] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "operation is retried multiple times if timeoutMS is zero - createChangeStream on database", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "createChangeStream", - "object": "database", - "arguments": { - "timeoutMS": 0, - "pipeline": [] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": 1, - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applies to whole operation, not individual attempts - aggregate on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 60, - "errorCode": 7, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "aggregate", - "object": "collection", - "arguments": { - "pipeline": [] - }, - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "operation is retried multiple times for non-zero timeoutMS - aggregate on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "aggregate", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "pipeline": [] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "operation is retried multiple times if timeoutMS is zero - aggregate on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "aggregate", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "pipeline": [] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applies to whole operation, not individual attempts - count on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "count" - ], - "blockConnection": true, - "blockTimeMS": 60, - "errorCode": 7, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "count", - "object": "collection", - "arguments": { - "filter": {} - }, - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "operation is retried multiple times for non-zero timeoutMS - count on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "count", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "operation is retried multiple times if timeoutMS is zero - count on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "count", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applies to whole operation, not individual attempts - countDocuments on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 60, - "errorCode": 7, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "filter": {} - }, - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "operation is retried multiple times for non-zero timeoutMS - countDocuments on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "operation is retried multiple times if timeoutMS is zero - countDocuments on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applies to whole operation, not individual attempts - estimatedDocumentCount on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "count" - ], - "blockConnection": true, - "blockTimeMS": 60, - "errorCode": 7, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "estimatedDocumentCount", - "object": "collection", - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "operation is retried multiple times for non-zero timeoutMS - estimatedDocumentCount on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "estimatedDocumentCount", - "object": "collection", - "arguments": { - "timeoutMS": 1000 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "operation is retried multiple times if timeoutMS is zero - estimatedDocumentCount on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "estimatedDocumentCount", - "object": "collection", - "arguments": { - "timeoutMS": 0 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "count", - "databaseName": "test", - "command": { - "count": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applies to whole operation, not individual attempts - distinct on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "distinct" - ], - "blockConnection": true, - "blockTimeMS": 60, - "errorCode": 7, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "distinct", - "object": "collection", - "arguments": { - "fieldName": "x", - "filter": {} - }, - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "operation is retried multiple times for non-zero timeoutMS - distinct on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "distinct" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "distinct", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "fieldName": "x", - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "distinct", - "databaseName": "test", - "command": { - "distinct": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "distinct", - "databaseName": "test", - "command": { - "distinct": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "distinct", - "databaseName": "test", - "command": { - "distinct": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "operation is retried multiple times if timeoutMS is zero - distinct on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "distinct" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "distinct", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "fieldName": "x", - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "distinct", - "databaseName": "test", - "command": { - "distinct": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "distinct", - "databaseName": "test", - "command": { - "distinct": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "distinct", - "databaseName": "test", - "command": { - "distinct": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applies to whole operation, not individual attempts - find on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "find" - ], - "blockConnection": true, - "blockTimeMS": 60, - "errorCode": 7, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "find", - "object": "collection", - "arguments": { - "filter": {} - }, - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "operation is retried multiple times for non-zero timeoutMS - find on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "find", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "operation is retried multiple times if timeoutMS is zero - find on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "find", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applies to whole operation, not individual attempts - findOne on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "find" - ], - "blockConnection": true, - "blockTimeMS": 60, - "errorCode": 7, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "findOne", - "object": "collection", - "arguments": { - "filter": {} - }, - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "operation is retried multiple times for non-zero timeoutMS - findOne on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "findOne", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "operation is retried multiple times if timeoutMS is zero - findOne on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "findOne", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "test", - "command": { - "find": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applies to whole operation, not individual attempts - listIndexes on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "blockConnection": true, - "blockTimeMS": 60, - "errorCode": 7, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "listIndexes", - "object": "collection", - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "operation is retried multiple times for non-zero timeoutMS - listIndexes on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "listIndexes", - "object": "collection", - "arguments": { - "timeoutMS": 1000 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listIndexes", - "databaseName": "test", - "command": { - "listIndexes": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "listIndexes", - "databaseName": "test", - "command": { - "listIndexes": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "listIndexes", - "databaseName": "test", - "command": { - "listIndexes": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "operation is retried multiple times if timeoutMS is zero - listIndexes on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "listIndexes", - "object": "collection", - "arguments": { - "timeoutMS": 0 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "listIndexes", - "databaseName": "test", - "command": { - "listIndexes": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "listIndexes", - "databaseName": "test", - "command": { - "listIndexes": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "listIndexes", - "databaseName": "test", - "command": { - "listIndexes": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "timeoutMS applies to whole operation, not individual attempts - createChangeStream on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "blockConnection": true, - "blockTimeMS": 60, - "errorCode": 7, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection", - "arguments": { - "pipeline": [] - }, - "expectError": { - "isTimeoutError": true - } - } - ] - }, - { - "description": "operation is retried multiple times for non-zero timeoutMS - createChangeStream on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection", - "arguments": { - "timeoutMS": 1000, - "pipeline": [] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ] - }, - { - "description": "operation is retried multiple times if timeoutMS is zero - createChangeStream on collection", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 7, - "closeConnection": false, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "createChangeStream", - "object": "collection", - "arguments": { - "timeoutMS": 0, - "pipeline": [] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "aggregate", - "databaseName": "test", - "command": { - "aggregate": "coll", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/client-side-operations-timeout/retryability-timeoutMS.yml b/testdata/client-side-operations-timeout/retryability-timeoutMS.yml deleted file mode 100644 index b15d22a4ba..0000000000 --- a/testdata/client-side-operations-timeout/retryability-timeoutMS.yml +++ /dev/null @@ -1,2823 +0,0 @@ -# Tests in this file are generated from retryability-timeoutMS.yml.template. - -description: "timeoutMS behaves correctly for retryable operations" - -schemaVersion: "1.9" - -# failCommand is available on 4.0+ replica sets and 4.2+ sharded clusters. -runOnRequirements: - - minServerVersion: "4.0" - topologies: ["replicaset"] - - minServerVersion: "4.2" - topologies: ["sharded"] - -createEntities: - - client: - id: &failPointClient failPointClient - useMultipleMongoses: false - - client: - id: &client client - uriOptions: - timeoutMS: 100 - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - ignoreCommandMonitoringEvents: - - killCursors - - database: - id: &database database - client: *client - databaseName: &databaseName test - - collection: - id: &collection collection - database: *database - collectionName: &collectionName coll - -initialData: - - collectionName: *collectionName - databaseName: *databaseName - documents: [] - -tests: - # For each retryable operation, run three tests: - # - # 1. timeoutMS applies to the whole operation, not to individual attempts - Client timeoutMS=100 and the operation is - # fails with a retryable error after being blocked server-side for 60ms. The operation should fail with a timeout error - # because the second attempt should take it over the 100ms limit. This test only runs on 4.4+ because it uses the - # blockConnection option in failCommand. - # - # 2. operation is retried multiple times if timeoutMS is set to a non-zero value - Client timeoutMS=100 and the - # operation fails with a retryable error twice. Drivers should send the original operation and two retries, the - # second of which should succeed. - # - # 3. operation is retried multiple times if timeoutMS is set to a zero - Override timeoutMS to zero for the operation - # and set a fail point to force a retryable error twice. Drivers should send the original operation and two retries, - # the second of which should succeed. - # - # The fail points in these tests use error code 7 (HostNotFound) because it is a retryable error but does not trigger - # an SDAM state change so we don't lose any time to server rediscovery. The tests also explicitly specify an - # errorLabels array in the fail point to avoid behavioral differences among server types and ensure that the error - # will be considered retryable. - - - description: "timeoutMS applies to whole operation, not individual attempts - insertOne on collection" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 4 } - data: - failCommands: ["insert"] - blockConnection: true - blockTimeMS: 60 - errorCode: 7 - errorLabels: ["RetryableWriteError"] - - name: insertOne - object: *collection - arguments: - document: { x: 1 } - - expectError: - isTimeoutError: true - - description: "operation is retried multiple times for non-zero timeoutMS - insertOne on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["insert"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: insertOne - object: *collection - arguments: - timeoutMS: 1000 - document: { x: 1 } - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "operation is retried multiple times if timeoutMS is zero - insertOne on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["insert"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: insertOne - object: *collection - arguments: - timeoutMS: 0 - document: { x: 1 } - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS applies to whole operation, not individual attempts - insertMany on collection" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 4 } - data: - failCommands: ["insert"] - blockConnection: true - blockTimeMS: 60 - errorCode: 7 - errorLabels: ["RetryableWriteError"] - - name: insertMany - object: *collection - arguments: - documents: - - { x: 1 } - - expectError: - isTimeoutError: true - - description: "operation is retried multiple times for non-zero timeoutMS - insertMany on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["insert"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: insertMany - object: *collection - arguments: - timeoutMS: 1000 - documents: - - { x: 1 } - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "operation is retried multiple times if timeoutMS is zero - insertMany on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["insert"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: insertMany - object: *collection - arguments: - timeoutMS: 0 - documents: - - { x: 1 } - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS applies to whole operation, not individual attempts - deleteOne on collection" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 4 } - data: - failCommands: ["delete"] - blockConnection: true - blockTimeMS: 60 - errorCode: 7 - errorLabels: ["RetryableWriteError"] - - name: deleteOne - object: *collection - arguments: - filter: {} - - expectError: - isTimeoutError: true - - description: "operation is retried multiple times for non-zero timeoutMS - deleteOne on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["delete"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: deleteOne - object: *collection - arguments: - timeoutMS: 1000 - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: delete - databaseName: *databaseName - command: - delete: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: delete - databaseName: *databaseName - command: - delete: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: delete - databaseName: *databaseName - command: - delete: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "operation is retried multiple times if timeoutMS is zero - deleteOne on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["delete"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: deleteOne - object: *collection - arguments: - timeoutMS: 0 - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: delete - databaseName: *databaseName - command: - delete: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: delete - databaseName: *databaseName - command: - delete: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: delete - databaseName: *databaseName - command: - delete: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS applies to whole operation, not individual attempts - replaceOne on collection" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 4 } - data: - failCommands: ["update"] - blockConnection: true - blockTimeMS: 60 - errorCode: 7 - errorLabels: ["RetryableWriteError"] - - name: replaceOne - object: *collection - arguments: - filter: {} - replacement: { x: 1 } - - expectError: - isTimeoutError: true - - description: "operation is retried multiple times for non-zero timeoutMS - replaceOne on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["update"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: replaceOne - object: *collection - arguments: - timeoutMS: 1000 - filter: {} - replacement: { x: 1 } - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "operation is retried multiple times if timeoutMS is zero - replaceOne on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["update"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: replaceOne - object: *collection - arguments: - timeoutMS: 0 - filter: {} - replacement: { x: 1 } - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS applies to whole operation, not individual attempts - updateOne on collection" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 4 } - data: - failCommands: ["update"] - blockConnection: true - blockTimeMS: 60 - errorCode: 7 - errorLabels: ["RetryableWriteError"] - - name: updateOne - object: *collection - arguments: - filter: {} - update: { $set: { x: 1 } } - - expectError: - isTimeoutError: true - - description: "operation is retried multiple times for non-zero timeoutMS - updateOne on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["update"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: updateOne - object: *collection - arguments: - timeoutMS: 1000 - filter: {} - update: { $set: { x: 1 } } - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "operation is retried multiple times if timeoutMS is zero - updateOne on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["update"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: updateOne - object: *collection - arguments: - timeoutMS: 0 - filter: {} - update: { $set: { x: 1 } } - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: update - databaseName: *databaseName - command: - update: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS applies to whole operation, not individual attempts - findOneAndDelete on collection" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 4 } - data: - failCommands: ["findAndModify"] - blockConnection: true - blockTimeMS: 60 - errorCode: 7 - errorLabels: ["RetryableWriteError"] - - name: findOneAndDelete - object: *collection - arguments: - filter: {} - - expectError: - isTimeoutError: true - - description: "operation is retried multiple times for non-zero timeoutMS - findOneAndDelete on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["findAndModify"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: findOneAndDelete - object: *collection - arguments: - timeoutMS: 1000 - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "operation is retried multiple times if timeoutMS is zero - findOneAndDelete on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["findAndModify"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: findOneAndDelete - object: *collection - arguments: - timeoutMS: 0 - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS applies to whole operation, not individual attempts - findOneAndReplace on collection" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 4 } - data: - failCommands: ["findAndModify"] - blockConnection: true - blockTimeMS: 60 - errorCode: 7 - errorLabels: ["RetryableWriteError"] - - name: findOneAndReplace - object: *collection - arguments: - filter: {} - replacement: { x: 1 } - - expectError: - isTimeoutError: true - - description: "operation is retried multiple times for non-zero timeoutMS - findOneAndReplace on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["findAndModify"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: findOneAndReplace - object: *collection - arguments: - timeoutMS: 1000 - filter: {} - replacement: { x: 1 } - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "operation is retried multiple times if timeoutMS is zero - findOneAndReplace on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["findAndModify"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: findOneAndReplace - object: *collection - arguments: - timeoutMS: 0 - filter: {} - replacement: { x: 1 } - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS applies to whole operation, not individual attempts - findOneAndUpdate on collection" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 4 } - data: - failCommands: ["findAndModify"] - blockConnection: true - blockTimeMS: 60 - errorCode: 7 - errorLabels: ["RetryableWriteError"] - - name: findOneAndUpdate - object: *collection - arguments: - filter: {} - update: { $set: { x: 1 } } - - expectError: - isTimeoutError: true - - description: "operation is retried multiple times for non-zero timeoutMS - findOneAndUpdate on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["findAndModify"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: findOneAndUpdate - object: *collection - arguments: - timeoutMS: 1000 - filter: {} - update: { $set: { x: 1 } } - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "operation is retried multiple times if timeoutMS is zero - findOneAndUpdate on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["findAndModify"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: findOneAndUpdate - object: *collection - arguments: - timeoutMS: 0 - filter: {} - update: { $set: { x: 1 } } - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: findAndModify - databaseName: *databaseName - command: - findAndModify: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS applies to whole operation, not individual attempts - bulkWrite on collection" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 4 } - data: - failCommands: ["insert"] - blockConnection: true - blockTimeMS: 60 - errorCode: 7 - errorLabels: ["RetryableWriteError"] - - name: bulkWrite - object: *collection - arguments: - requests: - - insertOne: - document: { _id: 1 } - - expectError: - isTimeoutError: true - - description: "operation is retried multiple times for non-zero timeoutMS - bulkWrite on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["insert"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: bulkWrite - object: *collection - arguments: - timeoutMS: 1000 - requests: - - insertOne: - document: { _id: 1 } - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "operation is retried multiple times if timeoutMS is zero - bulkWrite on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["insert"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: bulkWrite - object: *collection - arguments: - timeoutMS: 0 - requests: - - insertOne: - document: { _id: 1 } - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: insert - databaseName: *databaseName - command: - insert: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS applies to whole operation, not individual attempts - listDatabases on client" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 4 } - data: - failCommands: ["listDatabases"] - blockConnection: true - blockTimeMS: 60 - errorCode: 7 - errorLabels: ["RetryableWriteError"] - - name: listDatabases - object: *client - arguments: - filter: {} - - expectError: - isTimeoutError: true - - description: "operation is retried multiple times for non-zero timeoutMS - listDatabases on client" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["listDatabases"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: listDatabases - object: *client - arguments: - timeoutMS: 1000 - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - maxTimeMS: { $$type: ["int", "long"] } - - description: "operation is retried multiple times if timeoutMS is zero - listDatabases on client" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["listDatabases"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: listDatabases - object: *client - arguments: - timeoutMS: 0 - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - maxTimeMS: { $$exists: false } - - description: "timeoutMS applies to whole operation, not individual attempts - listDatabaseNames on client" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 4 } - data: - failCommands: ["listDatabases"] - blockConnection: true - blockTimeMS: 60 - errorCode: 7 - errorLabels: ["RetryableWriteError"] - - name: listDatabaseNames - object: *client - - expectError: - isTimeoutError: true - - description: "operation is retried multiple times for non-zero timeoutMS - listDatabaseNames on client" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["listDatabases"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: listDatabaseNames - object: *client - arguments: - timeoutMS: 1000 - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - maxTimeMS: { $$type: ["int", "long"] } - - description: "operation is retried multiple times if timeoutMS is zero - listDatabaseNames on client" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["listDatabases"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: listDatabaseNames - object: *client - arguments: - timeoutMS: 0 - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: listDatabases - databaseName: admin - command: - listDatabases: 1 - maxTimeMS: { $$exists: false } - - description: "timeoutMS applies to whole operation, not individual attempts - createChangeStream on client" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 4 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 60 - errorCode: 7 - errorLabels: ["RetryableWriteError"] - - name: createChangeStream - object: *client - arguments: - pipeline: [] - - expectError: - isTimeoutError: true - - description: "operation is retried multiple times for non-zero timeoutMS - createChangeStream on client" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["aggregate"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: createChangeStream - object: *client - arguments: - timeoutMS: 1000 - pipeline: [] - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: admin - command: - aggregate: 1 - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: aggregate - databaseName: admin - command: - aggregate: 1 - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: aggregate - databaseName: admin - command: - aggregate: 1 - maxTimeMS: { $$type: ["int", "long"] } - - description: "operation is retried multiple times if timeoutMS is zero - createChangeStream on client" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["aggregate"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: createChangeStream - object: *client - arguments: - timeoutMS: 0 - pipeline: [] - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: admin - command: - aggregate: 1 - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: aggregate - databaseName: admin - command: - aggregate: 1 - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: aggregate - databaseName: admin - command: - aggregate: 1 - maxTimeMS: { $$exists: false } - - description: "timeoutMS applies to whole operation, not individual attempts - aggregate on database" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 4 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 60 - errorCode: 7 - errorLabels: ["RetryableWriteError"] - - name: aggregate - object: *database - arguments: - pipeline: [ { $listLocalSessions: {} }, { $limit: 1 } ] - - expectError: - isTimeoutError: true - - description: "operation is retried multiple times for non-zero timeoutMS - aggregate on database" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["aggregate"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: aggregate - object: *database - arguments: - timeoutMS: 1000 - pipeline: [ { $listLocalSessions: {} }, { $limit: 1 } ] - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - maxTimeMS: { $$type: ["int", "long"] } - - description: "operation is retried multiple times if timeoutMS is zero - aggregate on database" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["aggregate"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: aggregate - object: *database - arguments: - timeoutMS: 0 - pipeline: [ { $listLocalSessions: {} }, { $limit: 1 } ] - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - maxTimeMS: { $$exists: false } - - description: "timeoutMS applies to whole operation, not individual attempts - listCollections on database" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 4 } - data: - failCommands: ["listCollections"] - blockConnection: true - blockTimeMS: 60 - errorCode: 7 - errorLabels: ["RetryableWriteError"] - - name: listCollections - object: *database - arguments: - filter: {} - - expectError: - isTimeoutError: true - - description: "operation is retried multiple times for non-zero timeoutMS - listCollections on database" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["listCollections"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: listCollections - object: *database - arguments: - timeoutMS: 1000 - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - maxTimeMS: { $$type: ["int", "long"] } - - description: "operation is retried multiple times if timeoutMS is zero - listCollections on database" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["listCollections"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: listCollections - object: *database - arguments: - timeoutMS: 0 - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - maxTimeMS: { $$exists: false } - - description: "timeoutMS applies to whole operation, not individual attempts - listCollectionNames on database" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 4 } - data: - failCommands: ["listCollections"] - blockConnection: true - blockTimeMS: 60 - errorCode: 7 - errorLabels: ["RetryableWriteError"] - - name: listCollectionNames - object: *database - arguments: - filter: {} - - expectError: - isTimeoutError: true - - description: "operation is retried multiple times for non-zero timeoutMS - listCollectionNames on database" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["listCollections"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: listCollectionNames - object: *database - arguments: - timeoutMS: 1000 - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - maxTimeMS: { $$type: ["int", "long"] } - - description: "operation is retried multiple times if timeoutMS is zero - listCollectionNames on database" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["listCollections"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: listCollectionNames - object: *database - arguments: - timeoutMS: 0 - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: listCollections - databaseName: *databaseName - command: - listCollections: 1 - maxTimeMS: { $$exists: false } - - description: "timeoutMS applies to whole operation, not individual attempts - createChangeStream on database" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 4 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 60 - errorCode: 7 - errorLabels: ["RetryableWriteError"] - - name: createChangeStream - object: *database - arguments: - pipeline: [] - - expectError: - isTimeoutError: true - - description: "operation is retried multiple times for non-zero timeoutMS - createChangeStream on database" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["aggregate"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: createChangeStream - object: *database - arguments: - timeoutMS: 1000 - pipeline: [] - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - maxTimeMS: { $$type: ["int", "long"] } - - description: "operation is retried multiple times if timeoutMS is zero - createChangeStream on database" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["aggregate"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: createChangeStream - object: *database - arguments: - timeoutMS: 0 - pipeline: [] - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: 1 - maxTimeMS: { $$exists: false } - - description: "timeoutMS applies to whole operation, not individual attempts - aggregate on collection" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 4 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 60 - errorCode: 7 - errorLabels: ["RetryableWriteError"] - - name: aggregate - object: *collection - arguments: - pipeline: [] - - expectError: - isTimeoutError: true - - description: "operation is retried multiple times for non-zero timeoutMS - aggregate on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["aggregate"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: aggregate - object: *collection - arguments: - timeoutMS: 1000 - pipeline: [] - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "operation is retried multiple times if timeoutMS is zero - aggregate on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["aggregate"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: aggregate - object: *collection - arguments: - timeoutMS: 0 - pipeline: [] - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS applies to whole operation, not individual attempts - count on collection" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 4 } - data: - failCommands: ["count"] - blockConnection: true - blockTimeMS: 60 - errorCode: 7 - errorLabels: ["RetryableWriteError"] - - name: count - object: *collection - arguments: - filter: {} - - expectError: - isTimeoutError: true - - description: "operation is retried multiple times for non-zero timeoutMS - count on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["count"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: count - object: *collection - arguments: - timeoutMS: 1000 - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "operation is retried multiple times if timeoutMS is zero - count on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["count"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: count - object: *collection - arguments: - timeoutMS: 0 - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS applies to whole operation, not individual attempts - countDocuments on collection" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 4 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 60 - errorCode: 7 - errorLabels: ["RetryableWriteError"] - - name: countDocuments - object: *collection - arguments: - filter: {} - - expectError: - isTimeoutError: true - - description: "operation is retried multiple times for non-zero timeoutMS - countDocuments on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["aggregate"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: countDocuments - object: *collection - arguments: - timeoutMS: 1000 - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "operation is retried multiple times if timeoutMS is zero - countDocuments on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["aggregate"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: countDocuments - object: *collection - arguments: - timeoutMS: 0 - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS applies to whole operation, not individual attempts - estimatedDocumentCount on collection" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 4 } - data: - failCommands: ["count"] - blockConnection: true - blockTimeMS: 60 - errorCode: 7 - errorLabels: ["RetryableWriteError"] - - name: estimatedDocumentCount - object: *collection - - expectError: - isTimeoutError: true - - description: "operation is retried multiple times for non-zero timeoutMS - estimatedDocumentCount on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["count"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: estimatedDocumentCount - object: *collection - arguments: - timeoutMS: 1000 - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "operation is retried multiple times if timeoutMS is zero - estimatedDocumentCount on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["count"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: estimatedDocumentCount - object: *collection - arguments: - timeoutMS: 0 - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: count - databaseName: *databaseName - command: - count: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS applies to whole operation, not individual attempts - distinct on collection" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 4 } - data: - failCommands: ["distinct"] - blockConnection: true - blockTimeMS: 60 - errorCode: 7 - errorLabels: ["RetryableWriteError"] - - name: distinct - object: *collection - arguments: - fieldName: x - filter: {} - - expectError: - isTimeoutError: true - - description: "operation is retried multiple times for non-zero timeoutMS - distinct on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["distinct"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: distinct - object: *collection - arguments: - timeoutMS: 1000 - fieldName: x - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: distinct - databaseName: *databaseName - command: - distinct: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: distinct - databaseName: *databaseName - command: - distinct: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: distinct - databaseName: *databaseName - command: - distinct: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "operation is retried multiple times if timeoutMS is zero - distinct on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["distinct"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: distinct - object: *collection - arguments: - timeoutMS: 0 - fieldName: x - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: distinct - databaseName: *databaseName - command: - distinct: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: distinct - databaseName: *databaseName - command: - distinct: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: distinct - databaseName: *databaseName - command: - distinct: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS applies to whole operation, not individual attempts - find on collection" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 4 } - data: - failCommands: ["find"] - blockConnection: true - blockTimeMS: 60 - errorCode: 7 - errorLabels: ["RetryableWriteError"] - - name: find - object: *collection - arguments: - filter: {} - - expectError: - isTimeoutError: true - - description: "operation is retried multiple times for non-zero timeoutMS - find on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["find"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: find - object: *collection - arguments: - timeoutMS: 1000 - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "operation is retried multiple times if timeoutMS is zero - find on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["find"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: find - object: *collection - arguments: - timeoutMS: 0 - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS applies to whole operation, not individual attempts - findOne on collection" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 4 } - data: - failCommands: ["find"] - blockConnection: true - blockTimeMS: 60 - errorCode: 7 - errorLabels: ["RetryableWriteError"] - - name: findOne - object: *collection - arguments: - filter: {} - - expectError: - isTimeoutError: true - - description: "operation is retried multiple times for non-zero timeoutMS - findOne on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["find"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: findOne - object: *collection - arguments: - timeoutMS: 1000 - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "operation is retried multiple times if timeoutMS is zero - findOne on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["find"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: findOne - object: *collection - arguments: - timeoutMS: 0 - filter: {} - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: find - databaseName: *databaseName - command: - find: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS applies to whole operation, not individual attempts - listIndexes on collection" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 4 } - data: - failCommands: ["listIndexes"] - blockConnection: true - blockTimeMS: 60 - errorCode: 7 - errorLabels: ["RetryableWriteError"] - - name: listIndexes - object: *collection - - expectError: - isTimeoutError: true - - description: "operation is retried multiple times for non-zero timeoutMS - listIndexes on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["listIndexes"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: listIndexes - object: *collection - arguments: - timeoutMS: 1000 - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listIndexes - databaseName: *databaseName - command: - listIndexes: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: listIndexes - databaseName: *databaseName - command: - listIndexes: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: listIndexes - databaseName: *databaseName - command: - listIndexes: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "operation is retried multiple times if timeoutMS is zero - listIndexes on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["listIndexes"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: listIndexes - object: *collection - arguments: - timeoutMS: 0 - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: listIndexes - databaseName: *databaseName - command: - listIndexes: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: listIndexes - databaseName: *databaseName - command: - listIndexes: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: listIndexes - databaseName: *databaseName - command: - listIndexes: *collectionName - maxTimeMS: { $$exists: false } - - description: "timeoutMS applies to whole operation, not individual attempts - createChangeStream on collection" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 4 } - data: - failCommands: ["aggregate"] - blockConnection: true - blockTimeMS: 60 - errorCode: 7 - errorLabels: ["RetryableWriteError"] - - name: createChangeStream - object: *collection - arguments: - pipeline: [] - - expectError: - isTimeoutError: true - - description: "operation is retried multiple times for non-zero timeoutMS - createChangeStream on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["aggregate"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: createChangeStream - object: *collection - arguments: - timeoutMS: 1000 - pipeline: [] - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$type: ["int", "long"] } - - description: "operation is retried multiple times if timeoutMS is zero - createChangeStream on collection" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["aggregate"] - errorCode: 7 - closeConnection: false - errorLabels: ["RetryableWriteError"] - - name: createChangeStream - object: *collection - arguments: - timeoutMS: 0 - pipeline: [] - - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: aggregate - databaseName: *databaseName - command: - aggregate: *collectionName - maxTimeMS: { $$exists: false } diff --git a/testdata/client-side-operations-timeout/runCursorCommand.json b/testdata/client-side-operations-timeout/runCursorCommand.json deleted file mode 100644 index 5fc0be3399..0000000000 --- a/testdata/client-side-operations-timeout/runCursorCommand.json +++ /dev/null @@ -1,583 +0,0 @@ -{ - "description": "runCursorCommand", - "schemaVersion": "1.9", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "createEntities": [ - { - "client": { - "id": "failPointClient", - "useMultipleMongoses": false - } - }, - { - "client": { - "id": "commandClient", - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent", - "commandSucceededEvent" - ] - } - }, - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "killCursors" - ] - } - }, - { - "database": { - "id": "commandDb", - "client": "commandClient", - "databaseName": "commandDb" - } - }, - { - "database": { - "id": "db", - "client": "client", - "databaseName": "db" - } - }, - { - "collection": { - "id": "collection", - "database": "db", - "collectionName": "collection" - } - } - ], - "initialData": [ - { - "collectionName": "collection", - "databaseName": "db", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 5, - "x": 55 - } - ] - } - ], - "tests": [ - { - "description": "errors if timeoutMode is set without timeoutMS", - "operations": [ - { - "name": "runCursorCommand", - "object": "db", - "arguments": { - "commandName": "find", - "command": { - "find": "collection" - }, - "timeoutMode": "cursorLifetime" - }, - "expectError": { - "isClientError": true - } - } - ] - }, - { - "description": "error if timeoutMode is cursorLifetime and cursorType is tailableAwait", - "operations": [ - { - "name": "runCursorCommand", - "object": "db", - "arguments": { - "commandName": "find", - "command": { - "find": "collection" - }, - "timeoutMode": "cursorLifetime", - "cursorType": "tailableAwait" - }, - "expectError": { - "isClientError": true - } - } - ] - }, - { - "description": "Non-tailable cursor lifetime remaining timeoutMS applied to getMore if timeoutMode is unset", - "runOnRequirements": [ - { - "serverless": "forbid" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "find", - "getMore" - ], - "blockConnection": true, - "blockTimeMS": 60 - } - } - } - }, - { - "name": "runCursorCommand", - "object": "db", - "arguments": { - "commandName": "find", - "timeoutMS": 100, - "command": { - "find": "collection", - "batchSize": 2 - } - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "find", - "command": { - "find": "collection", - "maxTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "getMore", - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "collection", - "maxTimeMS": { - "$$exists": true - } - } - } - } - ] - } - ] - }, - { - "description": "Non=tailable cursor iteration timeoutMS is refreshed for getMore if timeoutMode is iteration - failure", - "runOnRequirements": [ - { - "serverless": "forbid" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "getMore" - ], - "blockConnection": true, - "blockTimeMS": 60 - } - } - } - }, - { - "name": "runCursorCommand", - "object": "db", - "arguments": { - "commandName": "find", - "command": { - "find": "collection", - "batchSize": 2 - }, - "timeoutMode": "iteration", - "timeoutMS": 100, - "batchSize": 2 - }, - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "db", - "command": { - "find": "collection", - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "getMore", - "databaseName": "db", - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "collection", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "Tailable cursor iteration timeoutMS is refreshed for getMore - failure", - "runOnRequirements": [ - { - "serverless": "forbid" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "getMore" - ], - "blockConnection": true, - "blockTimeMS": 60 - } - } - } - }, - { - "name": "dropCollection", - "object": "db", - "arguments": { - "collection": "cappedCollection" - } - }, - { - "name": "createCollection", - "object": "db", - "arguments": { - "collection": "cappedCollection", - "capped": true, - "size": 4096, - "max": 3 - }, - "saveResultAsEntity": "cappedCollection" - }, - { - "name": "insertMany", - "object": "cappedCollection", - "arguments": { - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - }, - { - "name": "createCommandCursor", - "object": "db", - "arguments": { - "commandName": "find", - "command": { - "find": "cappedCollection", - "batchSize": 1, - "tailable": true - }, - "timeoutMode": "iteration", - "timeoutMS": 100, - "batchSize": 1, - "cursorType": "tailable" - }, - "saveResultAsEntity": "tailableCursor" - }, - { - "name": "iterateUntilDocumentOrError", - "object": "tailableCursor" - }, - { - "name": "iterateUntilDocumentOrError", - "object": "tailableCursor", - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "drop" - } - }, - { - "commandStartedEvent": { - "commandName": "create" - } - }, - { - "commandStartedEvent": { - "commandName": "insert" - } - }, - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "db", - "command": { - "find": "cappedCollection", - "tailable": true, - "awaitData": { - "$$exists": false - }, - "maxTimeMS": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "getMore", - "databaseName": "db", - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "cappedCollection", - "maxTimeMS": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "Tailable cursor awaitData iteration timeoutMS is refreshed for getMore - failure", - "runOnRequirements": [ - { - "serverless": "forbid" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "getMore" - ], - "blockConnection": true, - "blockTimeMS": 60 - } - } - } - }, - { - "name": "dropCollection", - "object": "db", - "arguments": { - "collection": "cappedCollection" - } - }, - { - "name": "createCollection", - "object": "db", - "arguments": { - "collection": "cappedCollection", - "capped": true, - "size": 4096, - "max": 3 - }, - "saveResultAsEntity": "cappedCollection" - }, - { - "name": "insertMany", - "object": "cappedCollection", - "arguments": { - "documents": [ - { - "foo": "bar" - }, - { - "fizz": "buzz" - } - ] - } - }, - { - "name": "createCommandCursor", - "object": "db", - "arguments": { - "command": { - "find": "cappedCollection", - "tailable": true, - "awaitData": true - }, - "cursorType": "tailableAwait", - "batchSize": 1 - }, - "saveResultAsEntity": "tailableCursor" - }, - { - "name": "iterateUntilDocumentOrError", - "object": "tailableCursor" - }, - { - "name": "iterateUntilDocumentOrError", - "object": "tailableCursor", - "expectError": { - "isTimeoutError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "drop" - } - }, - { - "commandStartedEvent": { - "commandName": "create" - } - }, - { - "commandStartedEvent": { - "commandName": "insert" - } - }, - { - "commandStartedEvent": { - "commandName": "find", - "databaseName": "db", - "command": { - "find": "cappedCollection", - "tailable": true, - "awaitData": true, - "maxTimeMS": { - "$$exists": true - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "getMore", - "databaseName": "db", - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "cappedCollection" - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/client-side-operations-timeout/runCursorCommand.yml b/testdata/client-side-operations-timeout/runCursorCommand.yml deleted file mode 100644 index 16a648e028..0000000000 --- a/testdata/client-side-operations-timeout/runCursorCommand.yml +++ /dev/null @@ -1,304 +0,0 @@ -description: runCursorCommand - -schemaVersion: '1.9' - -runOnRequirements: - - minServerVersion: "4.4" - -createEntities: - - client: - id: &failPointClient failPointClient - useMultipleMongoses: false - - client: - id: &commandClient commandClient - useMultipleMongoses: false - observeEvents: [commandStartedEvent, commandSucceededEvent] - - client: - id: &client client - useMultipleMongoses: false - observeEvents: [commandStartedEvent] - ignoreCommandMonitoringEvents: [killCursors] - - database: # For tests that need success event assertions - id: &commandDb commandDb - client: *commandClient - databaseName: *commandDb - - database: - id: &db db - client: *client - databaseName: *db - - collection: - id: &collection collection - database: *db - collectionName: *collection - -initialData: - - collectionName: *collection - databaseName: *db - documents: &documents - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - - { _id: 4, x: 44 } - - { _id: 5, x: 55 } - -tests: - - description: errors if timeoutMode is set without timeoutMS - operations: - - name: runCursorCommand - object: *db - arguments: - commandName: find - command: { find: *collection } - timeoutMode: cursorLifetime - expectError: - isClientError: true - - - description: error if timeoutMode is cursorLifetime and cursorType is tailableAwait - operations: - - name: runCursorCommand - object: *db - arguments: - commandName: find - command: { find: *collection } - timeoutMode: cursorLifetime - cursorType: tailableAwait - expectError: - isClientError: true - - # If timeoutMode is unset, it should default to CURSOR_LIFETIME and the time remaining after the find succeeds should be applied to the getMore - - description: Non-tailable cursor lifetime remaining timeoutMS applied to getMore if timeoutMode is unset - runOnRequirements: - - serverless: forbid - operations: - # Block find/getMore for 15ms. - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: [find, getMore] - blockConnection: true - blockTimeMS: 60 - # Run a find with timeoutMS less than double our failPoint blockTimeMS and - # batchSize less than the total document count will cause a find and a getMore to be sent. - # Both will block for 60ms so together they will go over the timeout. - - name: runCursorCommand - object: *db - arguments: - commandName: find - timeoutMS: 100 - command: { find: *collection, batchSize: 2 } - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: find - command: - find: *collection - maxTimeMS: { $$type: [int, long] } - - commandStartedEvent: - commandName: getMore - command: - getMore: { $$type: [int, long] } - collection: *collection - maxTimeMS: { $$exists: true } - - # If timeoutMode=ITERATION, timeoutMS applies separately to the initial find and the getMore on the cursor. Neither - # command should have a maxTimeMS field. This is a failure test. The "find" inherits timeoutMS=100 and "getMore" - # commands are blocked for 60ms, causing iteration to fail with a timeout error. - - description: Non=tailable cursor iteration timeoutMS is refreshed for getMore if timeoutMode is iteration - failure - runOnRequirements: - - serverless: forbid - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["getMore"] - blockConnection: true - blockTimeMS: 60 - - name: runCursorCommand - object: *db - arguments: - commandName: find - command: { find: *collection, batchSize: 2 } - timeoutMode: iteration - timeoutMS: 100 - batchSize: 2 - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: find - databaseName: *db - command: - find: *collection - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: getMore - databaseName: *db - command: - getMore: { $$type: ["int", "long"] } - collection: *collection - maxTimeMS: { $$exists: false } - - # The timeoutMS option should apply separately to the initial "find" and each getMore. This is a failure test. The - # find inherits timeoutMS=100 from the collection and the getMore command blocks for 60ms, causing iteration to fail - # with a timeout error. - - description: Tailable cursor iteration timeoutMS is refreshed for getMore - failure - runOnRequirements: - - serverless: forbid - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["getMore"] - blockConnection: true - blockTimeMS: 60 - - name: dropCollection - object: *db - arguments: - collection: &cappedCollection cappedCollection - - name: createCollection - object: *db - arguments: - collection: *cappedCollection - capped: true - size: 4096 - max: 3 - saveResultAsEntity: *cappedCollection - - name: insertMany - object: *cappedCollection - arguments: - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - name: createCommandCursor - object: *db - arguments: - commandName: find - command: { find: *cappedCollection, batchSize: 1, tailable: true } - timeoutMode: iteration - timeoutMS: 100 - batchSize: 1 - cursorType: tailable - saveResultAsEntity: &tailableCursor tailableCursor - # Iterate the cursor twice: the first iteration will return the document from the batch in the find and the - # second will do a getMore. - - name: iterateUntilDocumentOrError - object: *tailableCursor - - name: iterateUntilDocumentOrError - object: *tailableCursor - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: drop - - commandStartedEvent: - commandName: create - - commandStartedEvent: - commandName: insert - - commandStartedEvent: - commandName: find - databaseName: *db - command: - find: *cappedCollection - tailable: true - awaitData: { $$exists: false } - maxTimeMS: { $$exists: false } - - commandStartedEvent: - commandName: getMore - databaseName: *db - command: - getMore: { $$type: ["int", "long"] } - collection: *cappedCollection - maxTimeMS: { $$exists: false } - - # The timeoutMS value should be refreshed for getMore's. This is a failure test. The find inherits timeoutMS=10 from - # the collection and the getMore blocks for 15ms, causing iteration to fail with a timeout error. - - description: Tailable cursor awaitData iteration timeoutMS is refreshed for getMore - failure - runOnRequirements: - - serverless: forbid - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["getMore"] - blockConnection: true - blockTimeMS: 60 - - name: dropCollection - object: *db - arguments: - collection: &cappedCollection cappedCollection - - name: createCollection - object: *db - arguments: - collection: *cappedCollection - capped: true - size: 4096 - max: 3 - saveResultAsEntity: *cappedCollection - - name: insertMany - object: *cappedCollection - arguments: - documents: [ { foo: bar }, { fizz: buzz } ] - - name: createCommandCursor - object: *db - arguments: - command: { find: *cappedCollection, tailable: true, awaitData: true } - cursorType: tailableAwait - batchSize: 1 - saveResultAsEntity: &tailableCursor tailableCursor - # Iterate twice to force a getMore. - - name: iterateUntilDocumentOrError - object: *tailableCursor - - name: iterateUntilDocumentOrError - object: *tailableCursor - expectError: - isTimeoutError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: drop - - commandStartedEvent: - commandName: create - - commandStartedEvent: - commandName: insert - - commandStartedEvent: - commandName: find - databaseName: *db - command: - find: *cappedCollection - tailable: true - awaitData: true - maxTimeMS: { $$exists: true } - - commandStartedEvent: - commandName: getMore - databaseName: *db - command: - getMore: { $$type: ["int", "long"] } - collection: *cappedCollection diff --git a/testdata/collection-management/clustered-indexes.json b/testdata/collection-management/clustered-indexes.json deleted file mode 100644 index cfe9714162..0000000000 --- a/testdata/collection-management/clustered-indexes.json +++ /dev/null @@ -1,291 +0,0 @@ -{ - "description": "clustered-indexes", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "5.3", - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "ci-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test" - } - } - ], - "initialData": [ - { - "collectionName": "test", - "databaseName": "ci-tests", - "documents": [] - } - ], - "tests": [ - { - "description": "createCollection with clusteredIndex", - "operations": [ - { - "name": "dropCollection", - "object": "database0", - "arguments": { - "collection": "test" - } - }, - { - "name": "createCollection", - "object": "database0", - "arguments": { - "collection": "test", - "clusteredIndex": { - "key": { - "_id": 1 - }, - "unique": true, - "name": "test index" - } - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "databaseName": "ci-tests", - "collectionName": "test" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "drop": "test" - }, - "databaseName": "ci-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "create": "test", - "clusteredIndex": { - "key": { - "_id": 1 - }, - "unique": true, - "name": "test index" - } - }, - "databaseName": "ci-tests" - } - } - ] - } - ] - }, - { - "description": "listCollections includes clusteredIndex", - "operations": [ - { - "name": "dropCollection", - "object": "database0", - "arguments": { - "collection": "test" - } - }, - { - "name": "createCollection", - "object": "database0", - "arguments": { - "collection": "test", - "clusteredIndex": { - "key": { - "_id": 1 - }, - "unique": true, - "name": "test index" - } - } - }, - { - "name": "listCollections", - "object": "database0", - "arguments": { - "filter": { - "name": { - "$eq": "test" - } - } - }, - "expectResult": [ - { - "name": "test", - "options": { - "clusteredIndex": { - "key": { - "_id": 1 - }, - "unique": true, - "name": "test index", - "v": { - "$$type": [ - "int", - "long" - ] - } - } - } - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "drop": "test" - }, - "databaseName": "ci-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "create": "test", - "clusteredIndex": { - "key": { - "_id": 1 - }, - "unique": true, - "name": "test index" - } - }, - "databaseName": "ci-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "listCollections": 1, - "filter": { - "name": { - "$eq": "test" - } - } - }, - "databaseName": "ci-tests" - } - } - ] - } - ] - }, - { - "description": "listIndexes returns the index", - "operations": [ - { - "name": "dropCollection", - "object": "database0", - "arguments": { - "collection": "test" - } - }, - { - "name": "createCollection", - "object": "database0", - "arguments": { - "collection": "test", - "clusteredIndex": { - "key": { - "_id": 1 - }, - "unique": true, - "name": "test index" - } - } - }, - { - "name": "listIndexes", - "object": "collection0", - "expectResult": [ - { - "key": { - "_id": 1 - }, - "name": "test index", - "clustered": true, - "unique": true, - "v": { - "$$type": [ - "int", - "long" - ] - } - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "drop": "test" - }, - "databaseName": "ci-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "create": "test", - "clusteredIndex": { - "key": { - "_id": 1 - }, - "unique": true, - "name": "test index" - } - }, - "databaseName": "ci-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "listIndexes": "test" - }, - "databaseName": "ci-tests" - } - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/testdata/collection-management/clustered-indexes.yml b/testdata/collection-management/clustered-indexes.yml deleted file mode 100644 index 965bb22e26..0000000000 --- a/testdata/collection-management/clustered-indexes.yml +++ /dev/null @@ -1,135 +0,0 @@ -description: "clustered-indexes" - -schemaVersion: "1.4" - -runOnRequirements: - - minServerVersion: "5.3" - serverless: forbid - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name ci-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name test - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: [] - -tests: - - description: "createCollection with clusteredIndex" - operations: - - name: dropCollection - object: *database0 - arguments: - collection: *collection0Name - - name: createCollection - object: *database0 - arguments: - collection: *collection0Name - clusteredIndex: &clusteredIndex - key: { _id: 1 } - unique: true - name: &index0Name "test index" - - name: assertCollectionExists - object: testRunner - arguments: - databaseName: *database0Name - collectionName: *collection0Name - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - drop: *collection0Name - databaseName: *database0Name - - commandStartedEvent: - command: - create: *collection0Name - clusteredIndex: *clusteredIndex - databaseName: *database0Name - - - description: "listCollections includes clusteredIndex" - operations: - - name: dropCollection - object: *database0 - arguments: - collection: *collection0Name - - name: createCollection - object: *database0 - arguments: - collection: *collection0Name - clusteredIndex: *clusteredIndex - - name: listCollections - object: *database0 - arguments: - filter: &filter { name: { $eq: *collection0Name } } - expectResult: - - name: *collection0Name - options: - clusteredIndex: - key: { _id: 1 } - unique: true - name: *index0Name - v: { $$type: [ int, long ] } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - drop: *collection0Name - databaseName: *database0Name - - commandStartedEvent: - command: - create: *collection0Name - clusteredIndex: *clusteredIndex - databaseName: *database0Name - - commandStartedEvent: - command: - listCollections: 1 - filter: *filter - databaseName: *database0Name - - - description: "listIndexes returns the index" - operations: - - name: dropCollection - object: *database0 - arguments: - collection: *collection0Name - - name: createCollection - object: *database0 - arguments: - collection: *collection0Name - clusteredIndex: *clusteredIndex - - name: listIndexes - object: *collection0 - expectResult: - - key: { _id: 1 } - name: *index0Name - clustered: true - unique: true - v: { $$type: [ int, long ] } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - drop: *collection0Name - databaseName: *database0Name - - commandStartedEvent: - command: - create: *collection0Name - clusteredIndex: *clusteredIndex - databaseName: *database0Name - - commandStartedEvent: - command: - listIndexes: *collection0Name - databaseName: *database0Name \ No newline at end of file diff --git a/testdata/collection-management/createCollection-pre_and_post_images.json b/testdata/collection-management/createCollection-pre_and_post_images.json deleted file mode 100644 index f488deacd8..0000000000 --- a/testdata/collection-management/createCollection-pre_and_post_images.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "description": "createCollection-pre_and_post_images", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "6.0", - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "papi-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test" - } - } - ], - "tests": [ - { - "description": "createCollection with changeStreamPreAndPostImages enabled", - "operations": [ - { - "name": "dropCollection", - "object": "database0", - "arguments": { - "collection": "test" - } - }, - { - "name": "createCollection", - "object": "database0", - "arguments": { - "collection": "test", - "changeStreamPreAndPostImages": { - "enabled": true - } - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "databaseName": "papi-tests", - "collectionName": "test" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "drop": "test" - }, - "databaseName": "papi-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "create": "test", - "changeStreamPreAndPostImages": { - "enabled": true - } - }, - "databaseName": "papi-tests" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/collection-management/createCollection-pre_and_post_images.yml b/testdata/collection-management/createCollection-pre_and_post_images.yml deleted file mode 100644 index 100e9a1d7c..0000000000 --- a/testdata/collection-management/createCollection-pre_and_post_images.yml +++ /dev/null @@ -1,50 +0,0 @@ -description: "createCollection-pre_and_post_images" - -schemaVersion: "1.4" - -runOnRequirements: - - minServerVersion: "6.0" - serverless: forbid - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name papi-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name test - -tests: - - description: "createCollection with changeStreamPreAndPostImages enabled" - operations: - - name: dropCollection - object: *database0 - arguments: - collection: *collection0Name - - name: createCollection - object: *database0 - arguments: - collection: *collection0Name - changeStreamPreAndPostImages: { enabled: true } - - name: assertCollectionExists - object: testRunner - arguments: - databaseName: *database0Name - collectionName: *collection0Name - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - drop: *collection0Name - databaseName: *database0Name - - commandStartedEvent: - command: - create: *collection0Name - changeStreamPreAndPostImages: { enabled: true } - databaseName: *database0Name diff --git a/testdata/collection-management/modifyCollection-errorResponse.json b/testdata/collection-management/modifyCollection-errorResponse.json deleted file mode 100644 index adbd3167d7..0000000000 --- a/testdata/collection-management/modifyCollection-errorResponse.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "description": "modifyCollection-errorResponse", - "schemaVersion": "1.12", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "collMod-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test" - } - } - ], - "initialData": [ - { - "collectionName": "test", - "databaseName": "collMod-tests", - "documents": [ - { - "_id": 1, - "x": 1 - }, - { - "_id": 2, - "x": 1 - } - ] - } - ], - "tests": [ - { - "description": "modifyCollection prepareUnique violations are accessible", - "runOnRequirements": [ - { - "minServerVersion": "5.2" - } - ], - "operations": [ - { - "name": "createIndex", - "object": "collection0", - "arguments": { - "keys": { - "x": 1 - } - } - }, - { - "name": "modifyCollection", - "object": "database0", - "arguments": { - "collection": "test", - "index": { - "keyPattern": { - "x": 1 - }, - "prepareUnique": true - } - } - }, - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 3, - "x": 1 - } - }, - "expectError": { - "errorCode": 11000 - } - }, - { - "name": "modifyCollection", - "object": "database0", - "arguments": { - "collection": "test", - "index": { - "keyPattern": { - "x": 1 - }, - "unique": true - } - }, - "expectError": { - "isClientError": false, - "errorCode": 359, - "errorResponse": { - "violations": [ - { - "ids": [ - 1, - 2 - ] - } - ] - } - } - } - ] - } - ] - } \ No newline at end of file diff --git a/testdata/collection-management/modifyCollection-errorResponse.yml b/testdata/collection-management/modifyCollection-errorResponse.yml deleted file mode 100644 index edff573295..0000000000 --- a/testdata/collection-management/modifyCollection-errorResponse.yml +++ /dev/null @@ -1,59 +0,0 @@ -description: "modifyCollection-errorResponse" - -schemaVersion: "1.12" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name collMod-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name test - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 1 } - - { _id: 2, x: 1 } - -tests: - - description: "modifyCollection prepareUnique violations are accessible" - runOnRequirements: - - minServerVersion: "5.2" # SERVER-61158 - operations: - - name: createIndex - object: *collection0 - arguments: - keys: { x: 1 } - - name: modifyCollection - object: *database0 - arguments: - collection: *collection0Name - index: - keyPattern: { x: 1 } - prepareUnique: true - - name: insertOne - object: *collection0 - arguments: - document: { _id: 3, x: 1 } - expectError: - errorCode: 11000 # DuplicateKey - - name: modifyCollection - object: *database0 - arguments: - collection: *collection0Name - index: - keyPattern: { x: 1 } - unique: true - expectError: - isClientError: false - errorCode: 359 # CannotConvertIndexToUnique - errorResponse: - violations: - - { ids: [ 1, 2 ] } \ No newline at end of file diff --git a/testdata/collection-management/modifyCollection-pre_and_post_images.json b/testdata/collection-management/modifyCollection-pre_and_post_images.json deleted file mode 100644 index 8026faeb17..0000000000 --- a/testdata/collection-management/modifyCollection-pre_and_post_images.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "description": "modifyCollection-pre_and_post_images", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "6.0", - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "papi-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test" - } - } - ], - "tests": [ - { - "description": "modifyCollection to changeStreamPreAndPostImages enabled", - "operations": [ - { - "name": "dropCollection", - "object": "database0", - "arguments": { - "collection": "test" - } - }, - { - "name": "createCollection", - "object": "database0", - "arguments": { - "collection": "test", - "changeStreamPreAndPostImages": { - "enabled": false - } - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "databaseName": "papi-tests", - "collectionName": "test" - } - }, - { - "name": "modifyCollection", - "object": "database0", - "arguments": { - "collection": "test", - "changeStreamPreAndPostImages": { - "enabled": true - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "drop": "test" - }, - "databaseName": "papi-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "create": "test", - "changeStreamPreAndPostImages": { - "enabled": false - } - } - } - }, - { - "commandStartedEvent": { - "command": { - "collMod": "test", - "changeStreamPreAndPostImages": { - "enabled": true - } - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/collection-management/modifyCollection-pre_and_post_images.yml b/testdata/collection-management/modifyCollection-pre_and_post_images.yml deleted file mode 100644 index 75675bf2c7..0000000000 --- a/testdata/collection-management/modifyCollection-pre_and_post_images.yml +++ /dev/null @@ -1,58 +0,0 @@ -description: "modifyCollection-pre_and_post_images" - -schemaVersion: "1.4" - -runOnRequirements: - - minServerVersion: "6.0" - serverless: forbid - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name papi-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name test - -tests: - - description: "modifyCollection to changeStreamPreAndPostImages enabled" - operations: - - name: dropCollection - object: *database0 - arguments: - collection: *collection0Name - - name: createCollection - object: *database0 - arguments: - collection: *collection0Name - changeStreamPreAndPostImages: { enabled: false } - - name: assertCollectionExists - object: testRunner - arguments: - databaseName: *database0Name - collectionName: *collection0Name - - name: modifyCollection - object: *database0 - arguments: - collection: *collection0Name - changeStreamPreAndPostImages: { enabled: true } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - drop: *collection0Name - databaseName: *database0Name - - commandStartedEvent: - command: - create: *collection0Name - changeStreamPreAndPostImages: { enabled: false } - - commandStartedEvent: - command: - collMod: *collection0Name - changeStreamPreAndPostImages: { enabled: true } diff --git a/testdata/collection-management/timeseries-collection.json b/testdata/collection-management/timeseries-collection.json deleted file mode 100644 index 8525056fd1..0000000000 --- a/testdata/collection-management/timeseries-collection.json +++ /dev/null @@ -1,320 +0,0 @@ -{ - "description": "timeseries-collection", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "ts-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test" - } - } - ], - "initialData": [ - { - "collectionName": "test", - "databaseName": "ts-tests", - "documents": [] - } - ], - "tests": [ - { - "description": "createCollection with all options", - "operations": [ - { - "name": "dropCollection", - "object": "database0", - "arguments": { - "collection": "test" - } - }, - { - "name": "createCollection", - "object": "database0", - "arguments": { - "collection": "test", - "expireAfterSeconds": 604800, - "timeseries": { - "timeField": "time", - "metaField": "meta", - "granularity": "minutes" - } - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "databaseName": "ts-tests", - "collectionName": "test" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "drop": "test" - }, - "databaseName": "ts-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "create": "test", - "expireAfterSeconds": 604800, - "timeseries": { - "timeField": "time", - "metaField": "meta", - "granularity": "minutes" - } - }, - "databaseName": "ts-tests" - } - } - ] - } - ] - }, - { - "description": "insertMany with duplicate ids", - "operations": [ - { - "name": "dropCollection", - "object": "database0", - "arguments": { - "collection": "test" - } - }, - { - "name": "createCollection", - "object": "database0", - "arguments": { - "collection": "test", - "expireAfterSeconds": 604800, - "timeseries": { - "timeField": "time", - "metaField": "meta", - "granularity": "minutes" - } - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "databaseName": "ts-tests", - "collectionName": "test" - } - }, - { - "name": "insertMany", - "object": "collection0", - "arguments": { - "documents": [ - { - "_id": 1, - "time": { - "$date": { - "$numberLong": "1552949630482" - } - } - }, - { - "_id": 1, - "time": { - "$date": { - "$numberLong": "1552949630483" - } - } - } - ] - } - }, - { - "name": "find", - "object": "collection0", - "arguments": { - "filter": {}, - "sort": { - "time": 1 - } - }, - "expectResult": [ - { - "_id": 1, - "time": { - "$date": { - "$numberLong": "1552949630482" - } - } - }, - { - "_id": 1, - "time": { - "$date": { - "$numberLong": "1552949630483" - } - } - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "drop": "test" - }, - "databaseName": "ts-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "create": "test", - "expireAfterSeconds": 604800, - "timeseries": { - "timeField": "time", - "metaField": "meta", - "granularity": "minutes" - } - }, - "databaseName": "ts-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1, - "time": { - "$date": { - "$numberLong": "1552949630482" - } - } - }, - { - "_id": 1, - "time": { - "$date": { - "$numberLong": "1552949630483" - } - } - } - ] - } - } - }, - { - "commandStartedEvent": { - "command": { - "find": "test", - "filter": {}, - "sort": { - "time": 1 - } - }, - "databaseName": "ts-tests" - } - } - ] - } - ] - }, - { - "description": "createCollection with bucketing options", - "runOnRequirements": [ - { - "minServerVersion": "7.0" - } - ], - "operations": [ - { - "name": "dropCollection", - "object": "database0", - "arguments": { - "collection": "test" - } - }, - { - "name": "createCollection", - "object": "database0", - "arguments": { - "collection": "test", - "timeseries": { - "timeField": "time", - "bucketMaxSpanSeconds": 3600, - "bucketRoundingSeconds": 3600 - } - } - }, - { - "name": "assertCollectionExists", - "object": "testRunner", - "arguments": { - "databaseName": "ts-tests", - "collectionName": "test" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "drop": "test" - }, - "databaseName": "ts-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "create": "test", - "timeseries": { - "timeField": "time", - "bucketMaxSpanSeconds": 3600, - "bucketRoundingSeconds": 3600 - } - }, - "databaseName": "ts-tests" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/collection-management/timeseries-collection.yml b/testdata/collection-management/timeseries-collection.yml deleted file mode 100644 index 992b939131..0000000000 --- a/testdata/collection-management/timeseries-collection.yml +++ /dev/null @@ -1,163 +0,0 @@ -description: "timeseries-collection" - -schemaVersion: "1.0" - -runOnRequirements: - - minServerVersion: "5.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name ts-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name test - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: [] - -tests: - - description: "createCollection with all options" - operations: - - name: dropCollection - object: *database0 - arguments: - collection: *collection0Name - - name: createCollection - object: *database0 - arguments: - collection: *collection0Name - # expireAfterSeconds should be an int64 (as it is stored on the server). - expireAfterSeconds: 604800 - timeseries: ×eries0 - timeField: "time" - metaField: "meta" - granularity: "minutes" - - name: assertCollectionExists - object: testRunner - arguments: - databaseName: *database0Name - collectionName: *collection0Name - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - drop: *collection0Name - databaseName: *database0Name - - commandStartedEvent: - command: - create: *collection0Name - expireAfterSeconds: 604800 - timeseries: *timeseries0 - databaseName: *database0Name - - # Unlike regular collections, time-series collections allow duplicate ids. - - description: "insertMany with duplicate ids" - operations: - - name: dropCollection - object: *database0 - arguments: - collection: *collection0Name - - name: createCollection - object: *database0 - arguments: - collection: *collection0Name - # expireAfterSeconds should be an int64 (as it is stored on the server). - expireAfterSeconds: 604800 - timeseries: *timeseries0 - - name: assertCollectionExists - object: testRunner - arguments: - databaseName: *database0Name - collectionName: *collection0Name - - name: insertMany - object: *collection0 - arguments: - documents: &docs - - { - _id: 1, - time: { - $date: { - $numberLong: "1552949630482" - } - } - } - - { - _id: 1, - time: { - $date: { - $numberLong: "1552949630483" - } - } - } - - name: find - object: *collection0 - arguments: - filter: {} - sort: { time: 1 } - expectResult: *docs - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - drop: *collection0Name - databaseName: *database0Name - - commandStartedEvent: - command: - create: *collection0Name - expireAfterSeconds: 604800 - timeseries: *timeseries0 - databaseName: *database0Name - - commandStartedEvent: - command: - insert: *collection0Name - documents: *docs - - commandStartedEvent: - command: - find: *collection0Name - filter: {} - sort: { time: 1 } - databaseName: *database0Name - - - description: "createCollection with bucketing options" - runOnRequirements: - - minServerVersion: "7.0" - operations: - - name: dropCollection - object: *database0 - arguments: - collection: *collection0Name - - name: createCollection - object: *database0 - arguments: - collection: *collection0Name - timeseries: ×eries1 - timeField: "time" - bucketMaxSpanSeconds: 3600 - bucketRoundingSeconds: 3600 - - name: assertCollectionExists - object: testRunner - arguments: - databaseName: *database0Name - collectionName: *collection0Name - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - drop: *collection0Name - databaseName: *database0Name - - commandStartedEvent: - command: - create: *collection0Name - timeseries: *timeseries1 - databaseName: *database0Name diff --git a/testdata/command-monitoring/bulkWrite.json b/testdata/command-monitoring/bulkWrite.json deleted file mode 100644 index 49c728442e..0000000000 --- a/testdata/command-monitoring/bulkWrite.json +++ /dev/null @@ -1,154 +0,0 @@ -{ - "description": "bulkWrite", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client", - "observeEvents": [ - "commandStartedEvent", - "commandSucceededEvent", - "commandFailedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "command-monitoring-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "test" - } - } - ], - "initialData": [ - { - "collectionName": "test", - "databaseName": "command-monitoring-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "A successful mixed bulk write", - "operations": [ - { - "name": "bulkWrite", - "object": "collection", - "arguments": { - "requests": [ - { - "insertOne": { - "document": { - "_id": 4, - "x": 44 - } - } - }, - { - "updateOne": { - "filter": { - "_id": 3 - }, - "update": { - "$set": { - "x": 333 - } - } - } - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 4, - "x": 44 - } - ], - "ordered": true - }, - "commandName": "insert", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "n": 1 - }, - "commandName": "insert" - } - }, - { - "commandStartedEvent": { - "command": { - "update": "test", - "updates": [ - { - "q": { - "_id": 3 - }, - "u": { - "$set": { - "x": 333 - } - }, - "upsert": { - "$$unsetOrMatches": false - }, - "multi": { - "$$unsetOrMatches": false - } - } - ], - "ordered": true - }, - "commandName": "update", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "n": 1 - }, - "commandName": "update" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/command-monitoring/bulkWrite.yml b/testdata/command-monitoring/bulkWrite.yml deleted file mode 100644 index 607b2d1ca7..0000000000 --- a/testdata/command-monitoring/bulkWrite.yml +++ /dev/null @@ -1,68 +0,0 @@ -description: "bulkWrite" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client client - observeEvents: - - commandStartedEvent - - commandSucceededEvent - - commandFailedEvent - - database: - id: &database database - client: *client - databaseName: &databaseName command-monitoring-tests - - collection: - id: &collection collection - database: *database - collectionName: &collectionName test - -initialData: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -tests: - - description: "A successful mixed bulk write" - operations: - - name: bulkWrite - object: *collection - arguments: - requests: - - insertOne: - document: { _id: 4, x: 44 } - - updateOne: - filter: { _id: 3 } - update: { $set: { x: 333 } } - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - insert: *collectionName - documents: - - { _id: 4, x: 44 } - ordered: true - commandName: insert - databaseName: *databaseName - - commandSucceededEvent: - reply: { ok: 1, n: 1 } - commandName: insert - - commandStartedEvent: - command: - update: *collectionName - updates: - - q: {_id: 3 } - u: { $set: { x: 333 } } - upsert: { $$unsetOrMatches: false } - multi: { $$unsetOrMatches: false } - ordered: true - commandName: update - databaseName: *databaseName - - commandSucceededEvent: - reply: { ok: 1, n: 1 } - commandName: update diff --git a/testdata/command-monitoring/command.json b/testdata/command-monitoring/command.json deleted file mode 100644 index c28af95fed..0000000000 --- a/testdata/command-monitoring/command.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "description": "command", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client", - "observeEvents": [ - "commandStartedEvent", - "commandSucceededEvent", - "commandFailedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "command-monitoring-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "test" - } - } - ], - "initialData": [ - { - "collectionName": "test", - "databaseName": "command-monitoring-tests", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ], - "tests": [ - { - "description": "A successful command", - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "command": { - "ping": 1 - }, - "commandName": "ping" - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "ping": 1 - }, - "commandName": "ping", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1 - }, - "commandName": "ping" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/command-monitoring/command.yml b/testdata/command-monitoring/command.yml deleted file mode 100644 index f8c3363606..0000000000 --- a/testdata/command-monitoring/command.yml +++ /dev/null @@ -1,50 +0,0 @@ -description: "command" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client client - observeEvents: - - commandStartedEvent - - commandSucceededEvent - - commandFailedEvent - - database: - id: &database database - client: *client - databaseName: &databaseName command-monitoring-tests - - collection: - id: &collection collection - database: *database - collectionName: &collectionName test - -initialData: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - -tests: - - description: "A successful command" - operations: - - name: runCommand - object: *database - arguments: - command: { ping: 1 } - commandName: ping - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - ping: 1 - commandName: ping - databaseName: *databaseName - - commandSucceededEvent: - reply: - ok: 1 - commandName: ping - -# The legacy "A failed command event" test was removed in the test conversion, as the -# behavior when a command fails is already covered by the test "A failed find event" -# in find.yml. diff --git a/testdata/command-monitoring/deleteMany.json b/testdata/command-monitoring/deleteMany.json deleted file mode 100644 index 78ebad1f98..0000000000 --- a/testdata/command-monitoring/deleteMany.json +++ /dev/null @@ -1,162 +0,0 @@ -{ - "description": "deleteMany", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client", - "observeEvents": [ - "commandStartedEvent", - "commandSucceededEvent", - "commandFailedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "command-monitoring-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "test" - } - } - ], - "initialData": [ - { - "collectionName": "test", - "databaseName": "command-monitoring-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "A successful deleteMany", - "operations": [ - { - "name": "deleteMany", - "object": "collection", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "test", - "deletes": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "limit": 0 - } - ], - "ordered": true - }, - "commandName": "delete", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "n": 2 - }, - "commandName": "delete" - } - } - ] - } - ] - }, - { - "description": "A successful deleteMany with write errors", - "operations": [ - { - "name": "deleteMany", - "object": "collection", - "arguments": { - "filter": { - "_id": { - "$unsupported": 1 - } - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "test", - "deletes": [ - { - "q": { - "_id": { - "$unsupported": 1 - } - }, - "limit": 0 - } - ], - "ordered": true - }, - "commandName": "delete", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "n": 0, - "writeErrors": { - "$$type": "array" - } - }, - "commandName": "delete" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/command-monitoring/deleteMany.yml b/testdata/command-monitoring/deleteMany.yml deleted file mode 100644 index 2804b26613..0000000000 --- a/testdata/command-monitoring/deleteMany.yml +++ /dev/null @@ -1,79 +0,0 @@ -description: "deleteMany" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client client - observeEvents: - - commandStartedEvent - - commandSucceededEvent - - commandFailedEvent - - database: - id: &database database - client: *client - databaseName: &databaseName command-monitoring-tests - - collection: - id: &collection collection - database: *database - collectionName: &collectionName test - -initialData: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -tests: - - description: "A successful deleteMany" - operations: - - name: deleteMany - object: *collection - arguments: - filter: { _id: { $gt: 1 } } - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - delete: *collectionName - deletes: - - { q: { _id: { $gt: 1 }}, limit: 0 } - ordered: true - commandName: delete - databaseName: *databaseName - - commandSucceededEvent: - reply: { ok: 1, n: 2 } - commandName: delete - - - description: "A successful deleteMany with write errors" - operations: - - name: deleteMany - object: *collection - arguments: - filter: { _id: { $unsupported: 1 } } - expectError: - isClientError: false - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - delete: *collectionName - deletes: - - { q: { _id: { $unsupported: 1 }}, limit: 0 } - ordered: true - commandName: delete - databaseName: *databaseName - - commandSucceededEvent: - reply: - ok: 1 - n: 0 - # The legacy version of this test included an assertion that writeErrors contained a single document - # with index=0, a "code" value, and a non-empty "errmsg". However, writeErrors can contain extra fields - # beyond these, and the unified format currently does not permit allowing extra fields in sub-documents, - # so those assertions are not present here. - writeErrors: { $$type: array } - commandName: delete diff --git a/testdata/command-monitoring/deleteOne.json b/testdata/command-monitoring/deleteOne.json deleted file mode 100644 index 2420794fe5..0000000000 --- a/testdata/command-monitoring/deleteOne.json +++ /dev/null @@ -1,162 +0,0 @@ -{ - "description": "deleteOne", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client", - "observeEvents": [ - "commandStartedEvent", - "commandSucceededEvent", - "commandFailedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "command-monitoring-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "test" - } - } - ], - "initialData": [ - { - "collectionName": "test", - "databaseName": "command-monitoring-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "A successful deleteOne", - "operations": [ - { - "name": "deleteOne", - "object": "collection", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "test", - "deletes": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "limit": 1 - } - ], - "ordered": true - }, - "commandName": "delete", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "n": 1 - }, - "commandName": "delete" - } - } - ] - } - ] - }, - { - "description": "A successful deleteOne with write errors", - "operations": [ - { - "name": "deleteOne", - "object": "collection", - "arguments": { - "filter": { - "_id": { - "$unsupported": 1 - } - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "test", - "deletes": [ - { - "q": { - "_id": { - "$unsupported": 1 - } - }, - "limit": 1 - } - ], - "ordered": true - }, - "commandName": "delete", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "n": 0, - "writeErrors": { - "$$type": "array" - } - }, - "commandName": "delete" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/command-monitoring/deleteOne.yml b/testdata/command-monitoring/deleteOne.yml deleted file mode 100644 index 4081567d5b..0000000000 --- a/testdata/command-monitoring/deleteOne.yml +++ /dev/null @@ -1,79 +0,0 @@ -description: "deleteOne" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client client - observeEvents: - - commandStartedEvent - - commandSucceededEvent - - commandFailedEvent - - database: - id: &database database - client: *client - databaseName: &databaseName command-monitoring-tests - - collection: - id: &collection collection - database: *database - collectionName: &collectionName test - -initialData: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -tests: - - description: "A successful deleteOne" - operations: - - name: deleteOne - object: *collection - arguments: - filter: { _id: { $gt: 1 } } - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - delete: *collectionName - deletes: - - { q: { _id: { $gt: 1 }}, limit: 1 } - ordered: true - commandName: delete - databaseName: *databaseName - - commandSucceededEvent: - reply: { ok: 1, n: 1 } - commandName: delete - - - description: "A successful deleteOne with write errors" - operations: - - name: deleteOne - object: *collection - arguments: - filter: { _id: { $unsupported: 1 } } - expectError: - isClientError: false - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - delete: *collectionName - deletes: - - { q: { _id: { $unsupported: 1 }}, limit: 1 } - ordered: true - commandName: delete - databaseName: *databaseName - - commandSucceededEvent: - reply: - ok: 1 - n: 0 - # The legacy version of this test included an assertion that writeErrors contained a single document - # with index=0, a "code" value, and a non-empty "errmsg". However, writeErrors can contain extra fields - # beyond these, and the unified format currently does not permit allowing extra fields in sub-documents, - # so those assertions are not present here. - writeErrors: { $$type: array } - commandName: delete diff --git a/testdata/command-monitoring/find.json b/testdata/command-monitoring/find.json deleted file mode 100644 index bc9668499b..0000000000 --- a/testdata/command-monitoring/find.json +++ /dev/null @@ -1,558 +0,0 @@ -{ - "description": "find", - "schemaVersion": "1.15", - "createEntities": [ - { - "client": { - "id": "client", - "observeEvents": [ - "commandStartedEvent", - "commandSucceededEvent", - "commandFailedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "command-monitoring-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "test" - } - } - ], - "_yamlAnchors": { - "namespace": "command-monitoring-tests.test" - }, - "initialData": [ - { - "collectionName": "test", - "databaseName": "command-monitoring-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 5, - "x": 55 - } - ] - } - ], - "tests": [ - { - "description": "A successful find with no options", - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": { - "_id": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "test", - "filter": { - "_id": 1 - } - }, - "commandName": "find", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "cursor": { - "id": 0, - "ns": "command-monitoring-tests.test", - "firstBatch": [ - { - "_id": 1, - "x": 11 - } - ] - } - }, - "commandName": "find", - "databaseName": "command-monitoring-tests" - } - } - ] - } - ] - }, - { - "description": "A successful find with options", - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "sort": { - "x": -1 - }, - "projection": { - "_id": 0, - "x": 1 - }, - "skip": 2, - "comment": "test", - "hint": { - "_id": 1 - }, - "max": { - "_id": 6 - }, - "maxTimeMS": 6000, - "min": { - "_id": 0 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "test", - "filter": { - "_id": { - "$gt": 1 - } - }, - "sort": { - "x": -1 - }, - "projection": { - "_id": 0, - "x": 1 - }, - "skip": 2, - "comment": "test", - "hint": { - "_id": 1 - }, - "max": { - "_id": 6 - }, - "maxTimeMS": 6000, - "min": { - "_id": 0 - } - }, - "commandName": "find", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "cursor": { - "id": 0, - "ns": "command-monitoring-tests.test", - "firstBatch": [ - { - "x": 33 - }, - { - "x": 22 - } - ] - } - }, - "commandName": "find", - "databaseName": "command-monitoring-tests" - } - } - ] - } - ] - }, - { - "description": "A successful find with showRecordId and returnKey", - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": {}, - "sort": { - "_id": 1 - }, - "showRecordId": true, - "returnKey": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "test", - "showRecordId": true, - "returnKey": true - }, - "commandName": "find", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "cursor": { - "id": 0, - "ns": "command-monitoring-tests.test", - "firstBatch": [ - { - "_id": 1 - }, - { - "_id": 2 - }, - { - "_id": 3 - }, - { - "_id": 4 - }, - { - "_id": 5 - } - ] - } - }, - "commandName": "find", - "databaseName": "command-monitoring-tests" - } - } - ] - } - ] - }, - { - "description": "A successful find with a getMore", - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": { - "_id": { - "$gte": 1 - } - }, - "sort": { - "_id": 1 - }, - "batchSize": 3 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "test", - "filter": { - "_id": { - "$gte": 1 - } - }, - "sort": { - "_id": 1 - }, - "batchSize": 3 - }, - "commandName": "find", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "cursor": { - "id": { - "$$type": [ - "int", - "long" - ] - }, - "ns": "command-monitoring-tests.test", - "firstBatch": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - }, - "commandName": "find", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "test", - "batchSize": 3 - }, - "commandName": "getMore", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "cursor": { - "id": 0, - "ns": "command-monitoring-tests.test", - "nextBatch": [ - { - "_id": 4, - "x": 44 - }, - { - "_id": 5, - "x": 55 - } - ] - } - }, - "commandName": "getMore", - "databaseName": "command-monitoring-tests" - } - } - ] - } - ] - }, - { - "description": "A successful find event with a getmore and the server kills the cursor (<= 4.4)", - "runOnRequirements": [ - { - "minServerVersion": "3.1", - "maxServerVersion": "4.4.99", - "topologies": [ - "single", - "replicaset" - ] - } - ], - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": { - "_id": { - "$gte": 1 - } - }, - "sort": { - "_id": 1 - }, - "batchSize": 3, - "limit": 4 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "test", - "filter": { - "_id": { - "$gte": 1 - } - }, - "sort": { - "_id": 1 - }, - "batchSize": 3, - "limit": 4 - }, - "commandName": "find", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "cursor": { - "id": { - "$$type": [ - "int", - "long" - ] - }, - "ns": "command-monitoring-tests.test", - "firstBatch": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - }, - "commandName": "find", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "test", - "batchSize": 1 - }, - "commandName": "getMore", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "cursor": { - "id": 0, - "ns": "command-monitoring-tests.test", - "nextBatch": [ - { - "_id": 4, - "x": 44 - } - ] - } - }, - "commandName": "getMore", - "databaseName": "command-monitoring-tests" - } - } - ] - } - ] - }, - { - "description": "A failed find event", - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": { - "$or": true - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "test", - "filter": { - "$or": true - } - }, - "commandName": "find", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandFailedEvent": { - "commandName": "find", - "databaseName": "command-monitoring-tests" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/command-monitoring/find.yml b/testdata/command-monitoring/find.yml deleted file mode 100644 index 479e4a460c..0000000000 --- a/testdata/command-monitoring/find.yml +++ /dev/null @@ -1,262 +0,0 @@ -description: "find" - -schemaVersion: "1.15" - -createEntities: - - client: - id: &client client - observeEvents: - - commandStartedEvent - - commandSucceededEvent - - commandFailedEvent - - database: - id: &database database - client: *client - databaseName: &databaseName command-monitoring-tests - - collection: - id: &collection collection - database: *database - collectionName: &collectionName test - -_yamlAnchors: - namespace: &namespace "command-monitoring-tests.test" - -initialData: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - - { _id: 4, x: 44 } - - { _id: 5, x: 55 } - -tests: - - description: "A successful find with no options" - operations: - - name: find - object: *collection - arguments: - filter: { _id: 1 } - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - find: *collectionName - filter: { _id: 1 } - commandName: find - databaseName: *databaseName - - commandSucceededEvent: - reply: - ok: 1 - cursor: - id: 0 - ns: *namespace - firstBatch: - - { _id: 1, x: 11 } - commandName: find - databaseName: *databaseName - - - description: "A successful find with options" - operations: - - name: find - object: *collection - arguments: - filter: { _id: { $gt: 1 } } - sort: { x: -1 } - projection: { _id: 0, x: 1 } - skip: 2 - comment: "test" - hint: { _id: 1 } - max: { _id: 6 } - maxTimeMS: 6000 - min: { _id: 0 } - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - find: *collectionName - filter: { _id: { $gt: 1 } } - sort: { x: -1 } - projection: { _id: 0, x: 1 } - skip: 2 - comment: "test" - hint: { _id: 1 } - max: { _id: 6 } - maxTimeMS: 6000 - min: { _id: 0 } - commandName: find - databaseName: *databaseName - - commandSucceededEvent: - reply: - ok: 1 - cursor: - id: 0 - ns: *namespace - firstBatch: - - { x: 33 } - - { x: 22 } - commandName: find - databaseName: *databaseName - - - description: "A successful find with showRecordId and returnKey" - operations: - - name: find - object: *collection - arguments: - filter: { } - sort: { _id: 1 } - showRecordId: true - returnKey: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - find: *collectionName - showRecordId: true - returnKey: true - commandName: find - databaseName: *databaseName - - commandSucceededEvent: - reply: - ok: 1 - cursor: - id: 0 - ns: *namespace - firstBatch: - - { _id: 1 } - - { _id: 2 } - - { _id: 3 } - - { _id: 4 } - - { _id: 5 } - commandName: find - databaseName: *databaseName - - - description: "A successful find with a getMore" - operations: - - name: find - object: *collection - arguments: - filter: { _id: { $gte: 1 }} - sort: { _id: 1 } - batchSize: 3 - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - find: *collectionName - filter: { _id: { $gte: 1 }} - sort: { _id: 1 } - batchSize: 3 - commandName: find - databaseName: *databaseName - - commandSucceededEvent: - reply: - ok: 1 - cursor: - id: { $$type: [ int, long ] } - ns: *namespace - firstBatch: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - commandName: find - databaseName: *databaseName - - commandStartedEvent: - command: - getMore: { $$type: [ int, long ] } - collection: *collectionName - batchSize: 3 - commandName: getMore - databaseName: *databaseName - - commandSucceededEvent: - reply: - ok: 1 - cursor: - id: 0 - ns: *namespace - nextBatch: - - { _id: 4, x: 44 } - - { _id: 5, x: 55 } - commandName: getMore - databaseName: *databaseName - - - description: "A successful find event with a getmore and the server kills the cursor (<= 4.4)" - runOnRequirements: - - minServerVersion: "3.1" - maxServerVersion: "4.4.99" - topologies: [ single, replicaset ] - operations: - - name: find - object: *collection - arguments: - filter: { _id: { $gte: 1 } } - sort: { _id: 1 } - batchSize: 3 - limit: 4 - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - find: *collectionName - filter: { _id: { $gte: 1 } } - sort: { _id: 1 } - batchSize: 3 - limit: 4 - commandName: find - databaseName: *databaseName - - commandSucceededEvent: - reply: - ok: 1 - cursor: - id: { $$type: [ int, long ] } - ns: *namespace - firstBatch: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - commandName: find - databaseName: *databaseName - - commandStartedEvent: - command: - getMore: { $$type: [ int, long ] } - collection: *collectionName - batchSize: 1 - commandName: getMore - databaseName: *databaseName - - commandSucceededEvent: - reply: - ok: 1 - cursor: - id: 0 - ns: *namespace - nextBatch: - - { _id: 4, x: 44 } - commandName: getMore - databaseName: *databaseName - - - description: "A failed find event" - operations: - - name: find - object: *collection - arguments: - filter: { $or: true } - expectError: - isClientError: false - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - find: *collectionName - filter: { $or: true } - commandName: find - databaseName: *databaseName - - commandFailedEvent: - commandName: find - databaseName: *databaseName diff --git a/testdata/command-monitoring/insertMany.json b/testdata/command-monitoring/insertMany.json deleted file mode 100644 index a80a218c67..0000000000 --- a/testdata/command-monitoring/insertMany.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "description": "insertMany", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client", - "observeEvents": [ - "commandStartedEvent", - "commandSucceededEvent", - "commandFailedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "command-monitoring-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "test" - } - } - ], - "initialData": [ - { - "collectionName": "test", - "databaseName": "command-monitoring-tests", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ], - "tests": [ - { - "description": "A successful insertMany", - "operations": [ - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 2, - "x": 22 - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 2, - "x": 22 - } - ], - "ordered": true - }, - "commandName": "insert", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "n": 1 - }, - "commandName": "insert" - } - } - ] - } - ] - }, - { - "description": "A successful insertMany with write errors", - "operations": [ - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1, - "x": 11 - } - ], - "ordered": true - }, - "commandName": "insert", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "n": 0, - "writeErrors": { - "$$type": "array" - } - }, - "commandName": "insert" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/command-monitoring/insertMany.yml b/testdata/command-monitoring/insertMany.yml deleted file mode 100644 index 88c7e14900..0000000000 --- a/testdata/command-monitoring/insertMany.yml +++ /dev/null @@ -1,79 +0,0 @@ -description: "insertMany" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client client - observeEvents: - - commandStartedEvent - - commandSucceededEvent - - commandFailedEvent - - database: - id: &database database - client: *client - databaseName: &databaseName command-monitoring-tests - - collection: - id: &collection collection - database: *database - collectionName: &collectionName test - -initialData: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - -tests: - - description: "A successful insertMany" - operations: - - name: insertMany - object: *collection - arguments: - documents: - - { _id: 2, x: 22 } - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - insert: *collectionName - documents: - - { _id: 2, x: 22 } - ordered: true - commandName: insert - databaseName: *databaseName - - commandSucceededEvent: - reply: { ok: 1, n: 1 } - commandName: insert - - - description: "A successful insertMany with write errors" - operations: - - name: insertMany - object: *collection - arguments: - documents: - - { _id: 1, x: 11 } - expectError: - isClientError: false - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - insert: *collectionName - documents: - - { _id: 1, x: 11 } - ordered: true - commandName: insert - databaseName: *databaseName - - commandSucceededEvent: - reply: - ok: 1 - n: 0 - # The legacy version of this test included an assertion that writeErrors contained a single document - # with index=0, a "code" value, and a non-empty "errmsg". However, writeErrors can contain extra fields - # beyond these, and the unified format currently does not permit allowing extra fields in sub-documents, - # so those assertions are not present here. - writeErrors: { $$type: array } - commandName: insert diff --git a/testdata/command-monitoring/insertOne.json b/testdata/command-monitoring/insertOne.json deleted file mode 100644 index 6ff732e41b..0000000000 --- a/testdata/command-monitoring/insertOne.json +++ /dev/null @@ -1,144 +0,0 @@ -{ - "description": "insertOne", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client", - "observeEvents": [ - "commandStartedEvent", - "commandSucceededEvent", - "commandFailedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "command-monitoring-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "test" - } - } - ], - "initialData": [ - { - "collectionName": "test", - "databaseName": "command-monitoring-tests", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ], - "tests": [ - { - "description": "A successful insertOne", - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 2, - "x": 22 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 2, - "x": 22 - } - ], - "ordered": true - }, - "commandName": "insert", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "n": 1 - }, - "commandName": "insert" - } - } - ] - } - ] - }, - { - "description": "A successful insertOne with write errors", - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 1, - "x": 11 - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1, - "x": 11 - } - ], - "ordered": true - }, - "commandName": "insert", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "n": 0, - "writeErrors": { - "$$type": "array" - } - }, - "commandName": "insert" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/command-monitoring/insertOne.yml b/testdata/command-monitoring/insertOne.yml deleted file mode 100644 index cd4431295b..0000000000 --- a/testdata/command-monitoring/insertOne.yml +++ /dev/null @@ -1,77 +0,0 @@ -description: "insertOne" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client client - observeEvents: - - commandStartedEvent - - commandSucceededEvent - - commandFailedEvent - - database: - id: &database database - client: *client - databaseName: &databaseName command-monitoring-tests - - collection: - id: &collection collection - database: *database - collectionName: &collectionName test - -initialData: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - -tests: - - description: "A successful insertOne" - operations: - - name: insertOne - object: *collection - arguments: - document: { _id: 2, x: 22 } - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - insert: *collectionName - documents: - - { _id: 2, x: 22 } - ordered: true - commandName: insert - databaseName: *databaseName - - commandSucceededEvent: - reply: { ok: 1, n: 1 } - commandName: insert - - - description: "A successful insertOne with write errors" - operations: - - name: insertOne - object: *collection - arguments: - document: { _id: 1, x: 11 } - expectError: - isClientError: false - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - insert: *collectionName - documents: - - { _id: 1, x: 11 } - ordered: true - commandName: insert - databaseName: *databaseName - - commandSucceededEvent: - reply: - ok: 1 - n: 0 - # The legacy version of this test included an assertion that writeErrors contained a single document - # with index=0, a "code" value, and a non-empty "errmsg". However, writeErrors can contain extra fields - # beyond these, and the unified format currently does not permit allowing extra fields in sub-documents, - # so those assertions are not present here. - writeErrors: { $$type: array } - commandName: insert diff --git a/testdata/command-monitoring/logging/command.json b/testdata/command-monitoring/logging/command.json deleted file mode 100644 index d2970df692..0000000000 --- a/testdata/command-monitoring/logging/command.json +++ /dev/null @@ -1,215 +0,0 @@ -{ - "description": "command-logging", - "schemaVersion": "1.13", - "createEntities": [ - { - "client": { - "id": "client", - "observeLogMessages": { - "command": "debug" - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "logging-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "logging-tests-collection" - } - } - ], - "initialData": [ - { - "collectionName": "logging-tests-collection", - "databaseName": "logging-tests", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ], - "tests": [ - { - "description": "A successful command", - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "command": { - "ping": 1 - }, - "commandName": "ping" - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-tests", - "commandName": "ping", - "command": { - "$$matchAsDocument": { - "$$matchAsRoot": { - "ping": 1, - "$db": "logging-tests" - } - } - }, - "requestId": { - "$$type": [ - "int", - "long" - ] - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command succeeded", - "databaseName": "logging-tests", - "commandName": "ping", - "reply": { - "$$type": "string" - }, - "requestId": { - "$$type": [ - "int", - "long" - ] - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - }, - "durationMS": { - "$$type": [ - "double", - "int", - "long" - ] - } - } - } - ] - } - ] - }, - { - "description": "A failed command", - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": { - "$or": true - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-tests", - "commandName": "find", - "command": { - "$$type": "string" - }, - "requestId": { - "$$type": [ - "int", - "long" - ] - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command failed", - "databaseName": "logging-tests", - "commandName": "find", - "failure": { - "$$exists": true - }, - "requestId": { - "$$type": [ - "int", - "long" - ] - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - }, - "durationMS": { - "$$type": [ - "double", - "int", - "long" - ] - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/command-monitoring/logging/command.yml b/testdata/command-monitoring/logging/command.yml deleted file mode 100644 index 3e3410b06d..0000000000 --- a/testdata/command-monitoring/logging/command.yml +++ /dev/null @@ -1,95 +0,0 @@ -description: "command-logging" - -schemaVersion: "1.13" - -createEntities: - - client: - id: &client client - observeLogMessages: - command: debug - - database: - id: &database database - client: *client - databaseName: &databaseName logging-tests - - collection: - id: &collection collection - database: *database - collectionName: &collectionName logging-tests-collection - -initialData: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - -tests: - - description: "A successful command" - operations: - - name: runCommand - object: *database - arguments: - command: { ping: 1 } - commandName: &commandName ping - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: *commandName - command: - $$matchAsDocument: - $$matchAsRoot: - ping: 1 - $db: *databaseName - requestId: { $$type: [int, long] } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - - level: debug - component: command - data: - message: "Command succeeded" - databaseName: *databaseName - commandName: *commandName - reply: { $$type: string } - requestId: { $$type: [int, long] } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - durationMS: { $$type: [double, int, long] } - - - description: "A failed command" - operations: - - name: &commandName find - object: *collection - arguments: - filter: { $or: true } - expectError: - isClientError: false - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: *commandName - command: { $$type: string } - requestId: { $$type: [int, long] } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - - level: debug - component: command - data: - message: "Command failed" - databaseName: *databaseName - commandName: *commandName - failure: { $$exists: true } - requestId: { $$type: [int, long] } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - durationMS: { $$type: [double, int, long] } diff --git a/testdata/command-monitoring/logging/driver-connection-id.json b/testdata/command-monitoring/logging/driver-connection-id.json deleted file mode 100644 index 40db98d6fa..0000000000 --- a/testdata/command-monitoring/logging/driver-connection-id.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "description": "driver-connection-id", - "schemaVersion": "1.13", - "createEntities": [ - { - "client": { - "id": "client", - "observeLogMessages": { - "command": "debug" - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "logging-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "logging-tests-collection" - } - } - ], - "initialData": [ - { - "collectionName": "logging-tests-collection", - "databaseName": "logging-tests", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ], - "tests": [ - { - "description": "A successful command", - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "command": { - "ping": 1 - }, - "commandName": "ping" - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-tests", - "commandName": "ping", - "driverConnectionId": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command succeeded", - "commandName": "ping", - "driverConnectionId": { - "$$type": [ - "int", - "long" - ] - } - } - } - ] - } - ] - }, - { - "description": "A failed command", - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": { - "$or": true - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-tests", - "commandName": "find", - "driverConnectionId": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command failed", - "commandName": "find", - "driverConnectionId": { - "$$type": [ - "int", - "long" - ] - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/command-monitoring/logging/driver-connection-id.yml b/testdata/command-monitoring/logging/driver-connection-id.yml deleted file mode 100644 index b6b3235ee0..0000000000 --- a/testdata/command-monitoring/logging/driver-connection-id.yml +++ /dev/null @@ -1,76 +0,0 @@ -# This is a separate test so that drivers that do not implement CMAP can easily skip it. -description: "driver-connection-id" - -schemaVersion: "1.13" - -createEntities: - - client: - id: &client client - observeLogMessages: - command: debug - - database: - id: &database database - client: *client - databaseName: &databaseName logging-tests - - collection: - id: &collection collection - database: *database - collectionName: &collectionName logging-tests-collection - -initialData: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - -tests: - - description: "A successful command" - operations: - - name: runCommand - object: *database - arguments: - command: { ping: 1 } - commandName: &commandName ping - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: *commandName - driverConnectionId: { $$type: [int, long] } - - - level: debug - component: command - data: - message: "Command succeeded" - commandName: *commandName - driverConnectionId: { $$type: [int, long] } - - - description: "A failed command" - operations: - - name: &commandName find - object: *collection - arguments: - filter: { $or: true } - expectError: - isClientError: false - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: *commandName - driverConnectionId: { $$type: [int, long] } - - - level: debug - component: command - data: - message: "Command failed" - commandName: *commandName - driverConnectionId: { $$type: [int, long] } diff --git a/testdata/command-monitoring/logging/no-handshake-messages.json b/testdata/command-monitoring/logging/no-handshake-messages.json deleted file mode 100644 index a61e208798..0000000000 --- a/testdata/command-monitoring/logging/no-handshake-messages.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "description": "no-handshake-command-logs", - "schemaVersion": "1.13", - "tests": [ - { - "description": "Handshake commands should not generate log messages", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeLogMessages": { - "command": "debug" - }, - "observeEvents": [ - "connectionCreatedEvent", - "connectionReadyEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "logging-tests" - } - } - ] - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "command": { - "ping": 1 - }, - "commandName": "ping" - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "connectionCreatedEvent": {} - }, - "count": 1 - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "connectionReadyEvent": {} - }, - "count": 1 - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-tests", - "commandName": "ping" - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command succeeded", - "commandName": "ping" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/command-monitoring/logging/no-handshake-messages.yml b/testdata/command-monitoring/logging/no-handshake-messages.yml deleted file mode 100644 index bb7dd18e09..0000000000 --- a/testdata/command-monitoring/logging/no-handshake-messages.yml +++ /dev/null @@ -1,58 +0,0 @@ -description: "no-handshake-command-logs" - -schemaVersion: "1.13" - -tests: - - description: "Handshake commands should not generate log messages" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - observeLogMessages: - command: debug - observeEvents: - - connectionCreatedEvent - - connectionReadyEvent - - database: - id: &database database - client: *client - databaseName: &databaseName logging-tests - - name: runCommand - object: *database - arguments: - command: { ping: 1 } - commandName: &commandName ping - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - connectionCreatedEvent: {} - count: 1 - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - connectionReadyEvent: {} - count: 1 - expectLogMessages: - # since the ping happens after the handshake, seeing events for only the ping - # implies the driver did not emit any log messages for the handshake. - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: *commandName - - - level: debug - component: command - data: - message: "Command succeeded" - commandName: *commandName diff --git a/testdata/command-monitoring/logging/no-heartbeat-messages.json b/testdata/command-monitoring/logging/no-heartbeat-messages.json deleted file mode 100644 index 525be9171d..0000000000 --- a/testdata/command-monitoring/logging/no-heartbeat-messages.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "description": "no-heartbeat-command-logs", - "schemaVersion": "1.13", - "runOnRequirements": [ - { - "topologies": [ - "single", - "replicaset", - "sharded" - ] - } - ], - "tests": [ - { - "description": "Heartbeat commands should not generate log messages", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeLogMessages": { - "command": "debug" - }, - "observeEvents": [ - "serverDescriptionChangedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "logging-tests" - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": {} - }, - "count": 1 - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "command": { - "ping": 1 - }, - "commandName": "ping" - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-tests", - "commandName": "ping" - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command succeeded", - "commandName": "ping" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/command-monitoring/logging/no-heartbeat-messages.yml b/testdata/command-monitoring/logging/no-heartbeat-messages.yml deleted file mode 100644 index 7d35fbe003..0000000000 --- a/testdata/command-monitoring/logging/no-heartbeat-messages.yml +++ /dev/null @@ -1,58 +0,0 @@ -description: "no-heartbeat-command-logs" - -schemaVersion: "1.13" - -# no heartbeats in load balanced mode. -runOnRequirements: - - topologies: - - single - - replicaset - - sharded - -tests: - - description: "Heartbeat commands should not generate log messages" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - observeLogMessages: - command: debug - observeEvents: - - serverDescriptionChangedEvent - - database: - id: &database database - client: *client - databaseName: &databaseName logging-tests - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - # a server description change implies that a heartbeat has happened. - serverDescriptionChangedEvent: {} - count: 1 - - name: runCommand - object: *database - arguments: - command: { ping: 1 } - commandName: &commandName ping - expectLogMessages: - # since the ping happens after the heartbeat, seeing events for only the ping - # implies the driver did not emit a log message for the heartbeat. - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: *commandName - - - level: debug - component: command - data: - message: "Command succeeded" - commandName: *commandName diff --git a/testdata/command-monitoring/logging/operation-id.json b/testdata/command-monitoring/logging/operation-id.json deleted file mode 100644 index b1a3cec3d9..0000000000 --- a/testdata/command-monitoring/logging/operation-id.json +++ /dev/null @@ -1,198 +0,0 @@ -{ - "description": "operation-id", - "schemaVersion": "1.13", - "createEntities": [ - { - "client": { - "id": "client", - "observeLogMessages": { - "command": "debug" - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "logging-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "logging-tests-collection" - } - } - ], - "initialData": [ - { - "collectionName": "logging-tests-collection", - "databaseName": "logging-tests", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ], - "tests": [ - { - "description": "Successful bulk write command log messages include operationIds", - "operations": [ - { - "name": "bulkWrite", - "object": "collection", - "arguments": { - "requests": [ - { - "insertOne": { - "document": { - "x": 1 - } - } - }, - { - "deleteOne": { - "filter": { - "x": 1 - } - } - } - ] - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-tests", - "commandName": "insert", - "operationId": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command succeeded", - "commandName": "insert", - "operationId": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-tests", - "commandName": "delete", - "operationId": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command succeeded", - "commandName": "delete", - "operationId": { - "$$type": [ - "int", - "long" - ] - } - } - } - ] - } - ] - }, - { - "description": "Failed bulk write command log message includes operationId", - "operations": [ - { - "name": "bulkWrite", - "object": "collection", - "arguments": { - "requests": [ - { - "updateOne": { - "filter": { - "x": 1 - }, - "update": [ - { - "$invalidOperator": true - } - ] - } - } - ] - }, - "expectError": { - "isClientError": false - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-tests", - "commandName": "update", - "operationId": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command failed", - "commandName": "update", - "operationId": { - "$$type": [ - "int", - "long" - ] - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/command-monitoring/logging/operation-id.yml b/testdata/command-monitoring/logging/operation-id.yml deleted file mode 100644 index 9456faa9c7..0000000000 --- a/testdata/command-monitoring/logging/operation-id.yml +++ /dev/null @@ -1,99 +0,0 @@ -# This test only applies to drivers that generate operationIds to enable users to link -# together bulk writes. -description: "operation-id" - -schemaVersion: "1.13" - -createEntities: - - client: - id: &client client - observeLogMessages: - command: debug - - database: - id: &database database - client: *client - databaseName: &databaseName logging-tests - - collection: - id: &collection collection - database: *database - collectionName: &collectionName logging-tests-collection - -initialData: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - -tests: - - description: "Successful bulk write command log messages include operationIds" - operations: - - name: bulkWrite - object: *collection - arguments: - requests: - - insertOne: - document: { x: 1 } - - deleteOne: - filter: { x: 1 } - - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: insert - operationId: { $$type: [int, long] } - - - level: debug - component: command - data: - message: "Command succeeded" - commandName: insert - operationId: { $$type: [int, long] } - - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: delete - operationId: { $$type: [int, long] } - - - level: debug - component: command - data: - message: "Command succeeded" - commandName: delete - operationId: { $$type: [int, long] } - - - description: "Failed bulk write command log message includes operationId" - operations: - - name: bulkWrite - object: *collection - arguments: - requests: - - updateOne: - filter: { x: 1 } - update: [{ $invalidOperator: true }] - expectError: - isClientError: false - - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: update - operationId: { $$type: [int, long] } - - level: debug - component: command - data: - message: "Command failed" - commandName: update - operationId: { $$type: [int, long] } diff --git a/testdata/command-monitoring/logging/pre-42-server-connection-id.json b/testdata/command-monitoring/logging/pre-42-server-connection-id.json deleted file mode 100644 index d5ebd86590..0000000000 --- a/testdata/command-monitoring/logging/pre-42-server-connection-id.json +++ /dev/null @@ -1,119 +0,0 @@ -{ - "description": "pre-42-server-connection-id", - "schemaVersion": "1.13", - "runOnRequirements": [ - { - "maxServerVersion": "4.0.99" - } - ], - "createEntities": [ - { - "client": { - "id": "client", - "observeLogMessages": { - "command": "debug" - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "logging-server-connection-id-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "logging-tests-collection" - } - } - ], - "initialData": [ - { - "databaseName": "logging-server-connection-id-tests", - "collectionName": "logging-tests-collection", - "documents": [] - } - ], - "tests": [ - { - "description": "command log messages do not include server connection id", - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "find", - "object": "collection", - "arguments": { - "filter": { - "$or": true - } - }, - "expectError": { - "isError": true - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "commandName": "insert", - "serverConnectionId": { - "$$exists": false - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command succeeded", - "commandName": "insert", - "serverConnectionId": { - "$$exists": false - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "commandName": "find", - "serverConnectionId": { - "$$exists": false - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command failed", - "commandName": "find", - "serverConnectionId": { - "$$exists": false - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/command-monitoring/logging/pre-42-server-connection-id.yml b/testdata/command-monitoring/logging/pre-42-server-connection-id.yml deleted file mode 100644 index 7dc80eea07..0000000000 --- a/testdata/command-monitoring/logging/pre-42-server-connection-id.yml +++ /dev/null @@ -1,66 +0,0 @@ -description: "pre-42-server-connection-id" - -schemaVersion: "1.13" - -runOnRequirements: - - maxServerVersion: "4.0.99" - -createEntities: - - client: - id: &client client - observeLogMessages: - command: debug - - database: - id: &database database - client: *client - databaseName: &databaseName logging-server-connection-id-tests - - collection: - id: &collection collection - database: *database - collectionName: &collectionName logging-tests-collection - -initialData: - - databaseName: *databaseName - collectionName: *collectionName - documents: [] - -tests: - - description: "command log messages do not include server connection id" - operations: - - name: insertOne - object: *collection - arguments: - document: { x: 1 } - - name: find - object: *collection - arguments: - filter: { $or: true } - expectError: - isError: true - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - commandName: insert - serverConnectionId: { $$exists: false } - - level: debug - component: command - data: - message: "Command succeeded" - commandName: insert - serverConnectionId: { $$exists: false } - - level: debug - component: command - data: - message: "Command started" - commandName: find - serverConnectionId: { $$exists: false } - - level: debug - component: command - data: - message: "Command failed" - commandName: find - serverConnectionId: { $$exists: false } diff --git a/testdata/command-monitoring/logging/redacted-commands.json b/testdata/command-monitoring/logging/redacted-commands.json deleted file mode 100644 index 43b9ff74f2..0000000000 --- a/testdata/command-monitoring/logging/redacted-commands.json +++ /dev/null @@ -1,1438 +0,0 @@ -{ - "description": "redacted-commands", - "schemaVersion": "1.13", - "runOnRequirements": [ - { - "minServerVersion": "5.0", - "auth": false - } - ], - "createEntities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeLogMessages": { - "command": "debug" - } - } - }, - { - "client": { - "id": "failPointClient", - "useMultipleMongoses": false - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "logging-redaction-tests" - } - } - ], - "tests": [ - { - "description": "authenticate command and resulting server-generated error are redacted", - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "authenticate", - "command": { - "authenticate": 1, - "mechanism": "MONGODB-X509", - "user": "CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry", - "db": "$external" - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-redaction-tests", - "commandName": "authenticate", - "command": { - "$$matchAsDocument": {} - } - } - }, - { - "level": "debug", - "component": "command", - "failureIsRedacted": true, - "data": { - "message": "Command failed", - "commandName": "authenticate", - "failure": { - "$$exists": true - } - } - } - ] - } - ] - }, - { - "description": "network error in response to authenticate is not redacted", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "authenticate" - ], - "closeConnection": true - } - } - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "authenticate", - "command": { - "authenticate": 1, - "mechanism": "MONGODB-X509", - "user": "CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry" - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-redaction-tests", - "commandName": "authenticate", - "command": { - "$$matchAsDocument": {} - } - } - }, - { - "level": "debug", - "component": "command", - "failureIsRedacted": false, - "data": { - "message": "Command failed", - "commandName": "authenticate", - "failure": { - "$$exists": true - } - } - } - ] - } - ] - }, - { - "description": "saslStart command and resulting server-generated error are redacted", - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "saslStart", - "command": { - "saslStart": 1, - "payload": "definitely-invalid-payload", - "db": "admin" - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-redaction-tests", - "commandName": "saslStart", - "command": { - "$$matchAsDocument": {} - } - } - }, - { - "level": "debug", - "component": "command", - "failureIsRedacted": true, - "data": { - "message": "Command failed", - "commandName": "saslStart", - "failure": { - "$$exists": true - } - } - } - ] - } - ] - }, - { - "description": "network error in response to saslStart is not redacted", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "saslStart" - ], - "closeConnection": true - } - } - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "saslStart", - "command": { - "saslStart": 1, - "payload": "ZmFrZXNhc2xwYXlsb2Fk", - "mechanism": "MONGODB-X509" - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-redaction-tests", - "commandName": "saslStart", - "command": { - "$$matchAsDocument": {} - } - } - }, - { - "level": "debug", - "component": "command", - "failureIsRedacted": false, - "data": { - "message": "Command failed", - "commandName": "saslStart", - "failure": { - "$$exists": true - } - } - } - ] - } - ] - }, - { - "description": "saslContinue command and resulting server-generated error are redacted", - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "saslContinue", - "command": { - "saslContinue": 1, - "conversationId": 0, - "payload": "definitely-invalid-payload" - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-redaction-tests", - "commandName": "saslContinue", - "command": { - "$$matchAsDocument": {} - } - } - }, - { - "level": "debug", - "component": "command", - "failureIsRedacted": true, - "data": { - "message": "Command failed", - "commandName": "saslContinue", - "failure": { - "$$exists": true - } - } - } - ] - } - ] - }, - { - "description": "network error in response to saslContinue is not redacted", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "saslContinue" - ], - "closeConnection": true - } - } - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "saslContinue", - "command": { - "saslContinue": 1, - "conversationId": 0, - "payload": "ZmFrZXNhc2xwYXlsb2Fk" - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-redaction-tests", - "commandName": "saslContinue", - "command": { - "$$matchAsDocument": {} - } - } - }, - { - "level": "debug", - "component": "command", - "failureIsRedacted": false, - "data": { - "message": "Command failed", - "commandName": "saslContinue", - "failure": { - "$$exists": true - } - } - } - ] - } - ] - }, - { - "description": "getnonce command and server reply are redacted", - "runOnRequirements": [ - { - "maxServerVersion": "6.1.99" - } - ], - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "getnonce", - "command": { - "getnonce": 1 - } - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-redaction-tests", - "commandName": "getnonce", - "command": { - "$$matchAsDocument": {} - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command succeeded", - "commandName": "getnonce", - "reply": { - "$$matchAsDocument": {} - } - } - } - ] - } - ] - }, - { - "description": "network error in response to getnonce is not redacted", - "runOnRequirements": [ - { - "maxServerVersion": "6.1.99" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "getnonce" - ], - "closeConnection": true - } - } - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "getnonce", - "command": { - "getnonce": 1 - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-redaction-tests", - "commandName": "getnonce", - "command": { - "$$matchAsDocument": {} - } - } - }, - { - "level": "debug", - "component": "command", - "failureIsRedacted": false, - "data": { - "message": "Command failed", - "commandName": "getnonce", - "failure": { - "$$exists": true - } - } - } - ] - } - ] - }, - { - "description": "createUser command and resulting server-generated error are redacted", - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "createUser", - "command": { - "createUser": "private", - "pwd": {}, - "roles": [] - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-redaction-tests", - "commandName": "createUser", - "command": { - "$$matchAsDocument": {} - } - } - }, - { - "level": "debug", - "component": "command", - "failureIsRedacted": true, - "data": { - "message": "Command failed", - "commandName": "createUser", - "failure": { - "$$exists": true - } - } - } - ] - } - ] - }, - { - "description": "network error in response to createUser is not redacted", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "createUser" - ], - "closeConnection": true - } - } - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "createUser", - "command": { - "createUser": "private", - "pwd": "pwd", - "roles": [] - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-redaction-tests", - "commandName": "createUser", - "command": { - "$$matchAsDocument": {} - } - } - }, - { - "level": "debug", - "component": "command", - "failureIsRedacted": false, - "data": { - "message": "Command failed", - "commandName": "createUser", - "failure": { - "$$exists": true - } - } - } - ] - } - ] - }, - { - "description": "updateUser command and resulting server-generated error are redacted", - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "updateUser", - "command": { - "updateUser": "private", - "pwd": {}, - "roles": [] - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-redaction-tests", - "commandName": "updateUser", - "command": { - "$$matchAsDocument": {} - } - } - }, - { - "level": "debug", - "component": "command", - "failureIsRedacted": true, - "data": { - "message": "Command failed", - "commandName": "updateUser", - "failure": { - "$$exists": true - } - } - } - ] - } - ] - }, - { - "description": "network error in response to updateUser is not redacted", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "updateUser" - ], - "closeConnection": true - } - } - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "updateUser", - "command": { - "updateUser": "private", - "pwd": "pwd", - "roles": [] - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-redaction-tests", - "commandName": "updateUser", - "command": { - "$$matchAsDocument": {} - } - } - }, - { - "level": "debug", - "component": "command", - "failureIsRedacted": false, - "data": { - "message": "Command failed", - "commandName": "updateUser", - "failure": { - "$$exists": true - } - } - } - ] - } - ] - }, - { - "description": "copydbgetnonce command and resulting server-generated error are redacted", - "runOnRequirements": [ - { - "maxServerVersion": "3.6.99" - } - ], - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "copydbgetnonce", - "command": { - "copydbgetnonce": "private" - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-redaction-tests", - "commandName": "copydbgetnonce", - "command": { - "$$matchAsDocument": {} - } - } - }, - { - "level": "debug", - "component": "command", - "failureIsRedacted": true, - "data": { - "message": "Command failed", - "commandName": "copydbgetnonce", - "failure": { - "$$exists": true - } - } - } - ] - } - ] - }, - { - "description": "network error in response to copydbgetnonce is not redacted", - "runOnRequirements": [ - { - "maxServerVersion": "3.6.99" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "copydbgetnonce" - ], - "closeConnection": true - } - } - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "copydbgetnonce", - "command": { - "copydbgetnonce": "private" - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-redaction-tests", - "commandName": "copydbgetnonce", - "command": { - "$$matchAsDocument": {} - } - } - }, - { - "level": "debug", - "component": "command", - "failureIsRedacted": false, - "data": { - "message": "Command failed", - "commandName": "copydbgetnonce", - "failure": { - "$$exists": true - } - } - } - ] - } - ] - }, - { - "description": "copydbsaslstart command and resulting server-generated error are redacted", - "runOnRequirements": [ - { - "maxServerVersion": "4.0.99" - } - ], - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "copydbsaslstart", - "command": { - "copydbsaslstart": "private" - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-redaction-tests", - "commandName": "copydbsaslstart", - "command": { - "$$matchAsDocument": {} - } - } - }, - { - "level": "debug", - "component": "command", - "failureIsRedacted": true, - "data": { - "message": "Command failed", - "commandName": "copydbsaslstart", - "failure": { - "$$exists": true - } - } - } - ] - } - ] - }, - { - "description": "network error in response to copydbsaslstart is not redacted", - "runOnRequirements": [ - { - "maxServerVersion": "4.0.99" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "copydbsaslstart" - ], - "closeConnection": true - } - } - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "copydbsaslstart", - "command": { - "copydbsaslstart": "private" - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-redaction-tests", - "commandName": "copydbgetnonce", - "command": { - "$$matchAsDocument": {} - } - } - }, - { - "level": "debug", - "component": "command", - "failureIsRedacted": false, - "data": { - "message": "Command failed", - "commandName": "copydbgetnonce", - "failure": { - "$$exists": true - } - } - } - ] - } - ] - }, - { - "description": "copydb command and resulting server-generated error are redacted", - "runOnRequirements": [ - { - "maxServerVersion": "4.0.99" - } - ], - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "copydb", - "command": { - "copydb": "private" - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-redaction-tests", - "commandName": "copydb", - "command": { - "$$matchAsDocument": {} - } - } - }, - { - "level": "debug", - "component": "command", - "failureIsRedacted": true, - "data": { - "message": "Command failed", - "commandName": "copydb", - "failure": { - "$$exists": true - } - } - } - ] - } - ] - }, - { - "description": "network error in response to copydb is not redacted", - "runOnRequirements": [ - { - "maxServerVersion": "4.0.99" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "copydb" - ], - "closeConnection": true - } - } - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "copydb", - "command": { - "copydb": "private" - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-redaction-tests", - "commandName": "copydb", - "command": { - "$$matchAsDocument": {} - } - } - }, - { - "level": "debug", - "component": "command", - "failureIsRedacted": false, - "data": { - "message": "Command failed", - "commandName": "copydb", - "failure": { - "$$exists": true - } - } - } - ] - } - ] - }, - { - "description": "hello with speculative authenticate command and server reply are redacted", - "runOnRequirements": [ - { - "minServerVersion": "4.9" - } - ], - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "hello", - "command": { - "hello": 1, - "speculativeAuthenticate": { - "saslStart": 1 - } - } - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-redaction-tests", - "commandName": "hello", - "command": { - "$$matchAsDocument": {} - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command succeeded", - "commandName": "hello", - "reply": { - "$$matchAsDocument": {} - } - } - } - ] - } - ] - }, - { - "description": "legacy hello with speculative authenticate command and server reply are redacted", - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "ismaster", - "command": { - "ismaster": 1, - "speculativeAuthenticate": { - "saslStart": 1 - } - } - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "isMaster", - "command": { - "isMaster": 1, - "speculativeAuthenticate": { - "saslStart": 1 - } - } - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-redaction-tests", - "commandName": "ismaster", - "command": { - "$$matchAsDocument": {} - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command succeeded", - "commandName": "ismaster", - "reply": { - "$$matchAsDocument": {} - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-redaction-tests", - "commandName": "isMaster", - "command": { - "$$matchAsDocument": {} - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command succeeded", - "commandName": "isMaster", - "reply": { - "$$matchAsDocument": {} - } - } - } - ] - } - ] - }, - { - "description": "hello without speculative authenticate command and server reply are not redacted", - "runOnRequirements": [ - { - "minServerVersion": "4.9" - } - ], - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "hello", - "command": { - "hello": 1 - } - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-redaction-tests", - "commandName": "hello", - "command": { - "$$matchAsDocument": { - "$$matchAsRoot": { - "hello": 1 - } - } - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command succeeded", - "commandName": "hello", - "reply": { - "$$matchAsDocument": { - "$$matchAsRoot": { - "ok": 1, - "isWritablePrimary": true - } - } - } - } - } - ] - } - ] - }, - { - "description": "legacy hello without speculative authenticate command and server reply are not redacted", - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "ismaster", - "command": { - "ismaster": 1 - } - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "isMaster", - "command": { - "isMaster": 1 - } - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-redaction-tests", - "commandName": "ismaster", - "command": { - "$$matchAsDocument": { - "$$matchAsRoot": { - "ismaster": 1 - } - } - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command succeeded", - "commandName": "ismaster", - "reply": { - "$$matchAsDocument": { - "$$matchAsRoot": { - "ok": 1, - "ismaster": true - } - } - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-redaction-tests", - "commandName": "isMaster", - "command": { - "$$matchAsDocument": { - "$$matchAsRoot": { - "isMaster": 1 - } - } - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command succeeded", - "commandName": "isMaster", - "reply": { - "$$matchAsDocument": { - "$$matchAsRoot": { - "ok": 1, - "ismaster": true - } - } - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/command-monitoring/logging/redacted-commands.yml b/testdata/command-monitoring/logging/redacted-commands.yml deleted file mode 100644 index e1485571bd..0000000000 --- a/testdata/command-monitoring/logging/redacted-commands.yml +++ /dev/null @@ -1,850 +0,0 @@ -description: "redacted-commands" - -schemaVersion: "1.13" - -runOnRequirements: - - minServerVersion: "5.0" - auth: false - -createEntities: - - client: - id: &client client - useMultipleMongoses: false - observeLogMessages: - command: debug - - client: - id: &failPointClient failPointClient - useMultipleMongoses: false - - database: - id: &database database - client: *client - databaseName: &databaseName logging-redaction-tests - -tests: - - description: "authenticate command and resulting server-generated error are redacted" - operations: - - name: runCommand - object: *database - arguments: - commandName: authenticate - command: - authenticate: 1 - mechanism: "MONGODB-X509" - user: "CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry" - db: "$external" - # An authentication error is expected, but we want to check that the - # CommandStartedEvent is redacted - expectError: - isClientError: false - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: authenticate - command: - $$matchAsDocument: {} - - level: debug - component: command - failureIsRedacted: true - data: - message: "Command failed" - commandName: authenticate - failure: { $$exists: true } - - - description: "network error in response to authenticate is not redacted" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["authenticate"] - closeConnection: true - - name: runCommand - object: *database - arguments: - commandName: authenticate - command: - authenticate: 1 - mechanism: "MONGODB-X509" - user: "CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry" - expectError: - isClientError: true - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: authenticate - command: - $$matchAsDocument: {} - - level: debug - component: command - failureIsRedacted: false - data: - message: "Command failed" - commandName: authenticate - failure: { $$exists: true } - - - description: "saslStart command and resulting server-generated error are redacted" - operations: - - name: runCommand - object: *database - arguments: - commandName: saslStart - command: - saslStart: 1 - payload: "definitely-invalid-payload" - db: "admin" - expectError: - isClientError: false - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: saslStart - command: - $$matchAsDocument: {} - - level: debug - component: command - failureIsRedacted: true - data: - message: "Command failed" - commandName: saslStart - failure: { $$exists: true } - - - description: "network error in response to saslStart is not redacted" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["saslStart"] - closeConnection: true - - name: runCommand - object: *database - arguments: - commandName: saslStart - command: - saslStart: 1 - payload: ZmFrZXNhc2xwYXlsb2Fk - mechanism: MONGODB-X509 - expectError: - isClientError: true - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: saslStart - command: - $$matchAsDocument: {} - - level: debug - component: command - failureIsRedacted: false - data: - message: "Command failed" - commandName: saslStart - failure: { $$exists: true } - - - description: "saslContinue command and resulting server-generated error are redacted" - operations: - - name: runCommand - object: *database - arguments: - commandName: saslContinue - command: - saslContinue: 1 - conversationId: 0 - payload: "definitely-invalid-payload" - expectError: - isClientError: false - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: saslContinue - command: - $$matchAsDocument: {} - - level: debug - component: command - failureIsRedacted: true - data: - message: "Command failed" - commandName: saslContinue - failure: { $$exists: true } - - - description: "network error in response to saslContinue is not redacted" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["saslContinue"] - closeConnection: true - - name: runCommand - object: *database - arguments: - commandName: saslContinue - command: - saslContinue: 1 - conversationId: 0 - payload: ZmFrZXNhc2xwYXlsb2Fk - expectError: - isClientError: true - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: saslContinue - command: - $$matchAsDocument: {} - - level: debug - component: command - failureIsRedacted: false - data: - message: "Command failed" - commandName: saslContinue - failure: { $$exists: true } - - - description: "getnonce command and server reply are redacted" - runOnRequirements: - - maxServerVersion: 6.1.99 # getnonce removed as of 6.2 via SERVER-71007 - operations: - - name: runCommand - object: *database - arguments: - commandName: getnonce - command: - getnonce: 1 - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: getnonce - command: - $$matchAsDocument: {} - - level: debug - component: command - data: - message: "Command succeeded" - commandName: getnonce - reply: - $$matchAsDocument: {} - - - description: "network error in response to getnonce is not redacted" - runOnRequirements: - - maxServerVersion: 6.1.99 # getnonce removed as of 6.2 via SERVER-71007 - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["getnonce"] - closeConnection: true - - name: runCommand - object: *database - arguments: - commandName: getnonce - command: - getnonce: 1 - expectError: - isClientError: true - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: getnonce - command: - $$matchAsDocument: {} - - level: debug - component: command - failureIsRedacted: false - data: - message: "Command failed" - commandName: getnonce - failure: { $$exists: true } - - - description: "createUser command and resulting server-generated error are redacted" - operations: - - name: runCommand - object: *database - arguments: - commandName: createUser - command: - createUser: "private" - # Passing an object is prohibited and we want to trigger a command - # failure - pwd: {} - roles: [] - expectError: - isClientError: false - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: createUser - command: - $$matchAsDocument: {} - - level: debug - component: command - failureIsRedacted: true - data: - message: "Command failed" - commandName: createUser - failure: { $$exists: true } - - - description: "network error in response to createUser is not redacted" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["createUser"] - closeConnection: true - - name: runCommand - object: *database - arguments: - commandName: createUser - command: - createUser: "private" - pwd: "pwd" - roles: [] - expectError: - isClientError: true - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: createUser - command: - $$matchAsDocument: {} - - level: debug - component: command - failureIsRedacted: false - data: - message: "Command failed" - commandName: createUser - failure: { $$exists: true } - - - description: "updateUser command and resulting server-generated error are redacted" - operations: - - name: runCommand - object: *database - arguments: - commandName: updateUser - command: - updateUser: "private" - pwd: {} - roles: [] - expectError: - isClientError: false - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: updateUser - command: - $$matchAsDocument: {} - - level: debug - component: command - failureIsRedacted: true - data: - message: "Command failed" - commandName: updateUser - failure: { $$exists: true } - - - description: "network error in response to updateUser is not redacted" - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["updateUser"] - closeConnection: true - - name: runCommand - object: *database - arguments: - commandName: updateUser - command: - updateUser: "private" - pwd: "pwd" - roles: [] - expectError: - isClientError: true - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: updateUser - command: - $$matchAsDocument: {} - - level: debug - component: command - failureIsRedacted: false - data: - message: "Command failed" - commandName: updateUser - failure: { $$exists: true } - - - description: "copydbgetnonce command and resulting server-generated error are redacted" - runOnRequirements: - - maxServerVersion: 3.6.99 # copydbgetnonce was removed as of 4.0 via SERVER-32276 - operations: - - name: runCommand - object: *database - arguments: - commandName: copydbgetnonce - command: - copydbgetnonce: "private" - expectError: - isClientError: false - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: copydbgetnonce - command: - $$matchAsDocument: {} - - level: debug - component: command - failureIsRedacted: true - data: - message: "Command failed" - commandName: copydbgetnonce - failure: { $$exists: true } - - - description: "network error in response to copydbgetnonce is not redacted" - runOnRequirements: - - maxServerVersion: 3.6.99 # copydbgetnonce was removed as of 4.0 via SERVER-32276 - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["copydbgetnonce"] - closeConnection: true - - name: runCommand - object: *database - arguments: - commandName: copydbgetnonce - command: - copydbgetnonce: "private" - expectError: - isClientError: true - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: copydbgetnonce - command: - $$matchAsDocument: {} - - level: debug - component: command - failureIsRedacted: false - data: - message: "Command failed" - commandName: copydbgetnonce - failure: { $$exists: true } - - - description: "copydbsaslstart command and resulting server-generated error are redacted" - runOnRequirements: - - maxServerVersion: 4.0.99 # copydbsaslstart was removed as of 4.2 via SERVER-36211 - operations: - - name: runCommand - object: *database - arguments: - commandName: copydbsaslstart - command: - copydbsaslstart: "private" - expectError: - isClientError: false - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: copydbsaslstart - command: - $$matchAsDocument: {} - - level: debug - component: command - failureIsRedacted: true - data: - message: "Command failed" - commandName: copydbsaslstart - failure: { $$exists: true } - - - description: "network error in response to copydbsaslstart is not redacted" - runOnRequirements: - - maxServerVersion: 4.0.99 # copydbsaslstart was removed as of 4.2 via SERVER-36211 - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["copydbsaslstart"] - closeConnection: true - - name: runCommand - object: *database - arguments: - commandName: copydbsaslstart - command: - copydbsaslstart: "private" - expectError: - isClientError: true - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: copydbgetnonce - command: - $$matchAsDocument: {} - - level: debug - component: command - failureIsRedacted: false - data: - message: "Command failed" - commandName: copydbgetnonce - failure: { $$exists: true } - - - description: "copydb command and resulting server-generated error are redacted" - runOnRequirements: - - maxServerVersion: 4.0.99 # copydb was removed as of 4.2 via SERVER-36257 - operations: - - name: runCommand - object: *database - arguments: - commandName: copydb - command: - copydb: "private" - expectError: - isClientError: false - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: copydb - command: - $$matchAsDocument: {} - - level: debug - component: command - failureIsRedacted: true - data: - message: "Command failed" - commandName: copydb - failure: { $$exists: true } - - - description: "network error in response to copydb is not redacted" - runOnRequirements: - - maxServerVersion: 4.0.99 # copydb was removed as of 4.2 via SERVER-36257 - operations: - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["copydb"] - closeConnection: true - - name: runCommand - object: *database - arguments: - commandName: copydb - command: - copydb: "private" - expectError: - isClientError: true - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: copydb - command: - $$matchAsDocument: {} - - level: debug - component: command - failureIsRedacted: false - data: - message: "Command failed" - commandName: copydb - failure: { $$exists: true } - - - description: "hello with speculative authenticate command and server reply are redacted" - runOnRequirements: - - minServerVersion: "4.9" - operations: - - name: runCommand - object: *database - arguments: - commandName: hello - command: - hello: 1 - speculativeAuthenticate: - saslStart: 1 - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: hello - command: - $$matchAsDocument: {} - - level: debug - component: command - data: - message: "Command succeeded" - commandName: hello - reply: - $$matchAsDocument: {} - - - - description: "legacy hello with speculative authenticate command and server reply are redacted" - operations: - - name: runCommand - object: *database - arguments: - commandName: ismaster - command: - ismaster: 1 - speculativeAuthenticate: - saslStart: 1 - - name: runCommand - object: *database - arguments: - commandName: isMaster - command: - isMaster: 1 - speculativeAuthenticate: - saslStart: 1 - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: ismaster - command: - $$matchAsDocument: {} - - level: debug - component: command - data: - message: "Command succeeded" - commandName: ismaster - reply: - $$matchAsDocument: {} - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: isMaster - command: - $$matchAsDocument: {} - - level: debug - component: command - data: - message: "Command succeeded" - commandName: isMaster - reply: - $$matchAsDocument: {} - - - description: "hello without speculative authenticate command and server reply are not redacted" - runOnRequirements: - - minServerVersion: "4.9" - operations: - - name: runCommand - object: *database - arguments: - commandName: hello - command: - hello: 1 - - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: hello - command: - $$matchAsDocument: - $$matchAsRoot: - hello: 1 - - level: debug - component: command - data: - message: "Command succeeded" - commandName: hello - reply: - $$matchAsDocument: - $$matchAsRoot: - ok: 1 - isWritablePrimary: true - - - description: "legacy hello without speculative authenticate command and server reply are not redacted" - operations: - - name: runCommand - object: *database - arguments: - commandName: ismaster - command: - ismaster: 1 - - name: runCommand - object: *database - arguments: - commandName: isMaster - command: - isMaster: 1 - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: ismaster - command: - $$matchAsDocument: - $$matchAsRoot: - ismaster: 1 - - level: debug - component: command - data: - message: "Command succeeded" - commandName: ismaster - reply: - $$matchAsDocument: - $$matchAsRoot: - ok: 1 - ismaster: true - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: isMaster - command: - $$matchAsDocument: - $$matchAsRoot: - isMaster: 1 - - level: debug - component: command - data: - message: "Command succeeded" - commandName: isMaster - reply: - $$matchAsDocument: - $$matchAsRoot: - ok: 1 - ismaster: true diff --git a/testdata/command-monitoring/logging/server-connection-id.json b/testdata/command-monitoring/logging/server-connection-id.json deleted file mode 100644 index abbbbc7442..0000000000 --- a/testdata/command-monitoring/logging/server-connection-id.json +++ /dev/null @@ -1,131 +0,0 @@ -{ - "description": "server-connection-id", - "schemaVersion": "1.13", - "runOnRequirements": [ - { - "minServerVersion": "4.2" - } - ], - "createEntities": [ - { - "client": { - "id": "client", - "observeLogMessages": { - "command": "debug" - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "logging-server-connection-id-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "logging-tests-collection" - } - } - ], - "initialData": [ - { - "databaseName": "logging-server-connection-id-tests", - "collectionName": "logging-tests-collection", - "documents": [] - } - ], - "tests": [ - { - "description": "command log messages include server connection id", - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "find", - "object": "collection", - "arguments": { - "filter": { - "$or": true - } - }, - "expectError": { - "isError": true - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "commandName": "insert", - "serverConnectionId": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command succeeded", - "commandName": "insert", - "serverConnectionId": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "commandName": "find", - "serverConnectionId": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command failed", - "commandName": "find", - "serverConnectionId": { - "$$type": [ - "int", - "long" - ] - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/command-monitoring/logging/server-connection-id.yml b/testdata/command-monitoring/logging/server-connection-id.yml deleted file mode 100644 index 4f54d1207e..0000000000 --- a/testdata/command-monitoring/logging/server-connection-id.yml +++ /dev/null @@ -1,66 +0,0 @@ -description: "server-connection-id" - -schemaVersion: "1.13" - -runOnRequirements: - - minServerVersion: "4.2" - -createEntities: - - client: - id: &client client - observeLogMessages: - command: debug - - database: - id: &database database - client: *client - databaseName: &databaseName logging-server-connection-id-tests - - collection: - id: &collection collection - database: *database - collectionName: &collectionName logging-tests-collection - -initialData: - - databaseName: *databaseName - collectionName: *collectionName - documents: [] - -tests: - - description: "command log messages include server connection id" - operations: - - name: insertOne - object: *collection - arguments: - document: { x: 1 } - - name: find - object: *collection - arguments: - filter: { $or: true } - expectError: - isError: true - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - commandName: insert - serverConnectionId: { $$type: [int, long] } - - level: debug - component: command - data: - message: "Command succeeded" - commandName: insert - serverConnectionId: { $$type: [int, long] } - - level: debug - component: command - data: - message: "Command started" - commandName: find - serverConnectionId: { $$type: [int, long] } - - level: debug - component: command - data: - message: "Command failed" - commandName: find - serverConnectionId: { $$type: [int, long] } diff --git a/testdata/command-monitoring/logging/service-id.json b/testdata/command-monitoring/logging/service-id.json deleted file mode 100644 index ea39d61231..0000000000 --- a/testdata/command-monitoring/logging/service-id.json +++ /dev/null @@ -1,207 +0,0 @@ -{ - "description": "service-id", - "schemaVersion": "1.13", - "createEntities": [ - { - "client": { - "id": "client", - "observeLogMessages": { - "command": "debug" - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "logging-server-connection-id-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "logging-tests-collection" - } - } - ], - "initialData": [ - { - "databaseName": "logging-server-connection-id-tests", - "collectionName": "logging-tests-collection", - "documents": [] - } - ], - "tests": [ - { - "description": "command log messages include serviceId when in LB mode", - "runOnRequirements": [ - { - "topologies": [ - "load-balanced" - ] - } - ], - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "find", - "object": "collection", - "arguments": { - "filter": { - "$or": true - } - }, - "expectError": { - "isError": true - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "commandName": "insert", - "serviceId": { - "$$type": "string" - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command succeeded", - "commandName": "insert", - "serviceId": { - "$$type": "string" - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "commandName": "find", - "serviceId": { - "$$type": "string" - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command failed", - "commandName": "find", - "serviceId": { - "$$type": "string" - } - } - } - ] - } - ] - }, - { - "description": "command log messages omit serviceId when not in LB mode", - "runOnRequirements": [ - { - "topologies": [ - "single", - "replicaset", - "sharded" - ] - } - ], - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "find", - "object": "collection", - "arguments": { - "filter": { - "$or": true - } - }, - "expectError": { - "isError": true - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "commandName": "insert", - "serviceId": { - "$$exists": false - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command succeeded", - "commandName": "insert", - "serviceId": { - "$$exists": false - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "commandName": "find", - "serviceId": { - "$$exists": false - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command failed", - "commandName": "find", - "serviceId": { - "$$exists": false - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/command-monitoring/logging/service-id.yml b/testdata/command-monitoring/logging/service-id.yml deleted file mode 100644 index 0c0f444e23..0000000000 --- a/testdata/command-monitoring/logging/service-id.yml +++ /dev/null @@ -1,111 +0,0 @@ -description: "service-id" - -schemaVersion: "1.13" - -createEntities: - - client: - id: &client client - observeLogMessages: - command: debug - - database: - id: &database database - client: *client - databaseName: &databaseName logging-server-connection-id-tests - - collection: - id: &collection collection - database: *database - collectionName: &collectionName logging-tests-collection - -initialData: - - databaseName: *databaseName - collectionName: *collectionName - documents: [] - -tests: - - description: "command log messages include serviceId when in LB mode" - runOnRequirements: - - topologies: - - load-balanced - operations: - - name: insertOne - object: *collection - arguments: - document: { x: 1 } - - name: find - object: *collection - arguments: - filter: { $or: true } - expectError: - isError: true - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - commandName: insert - serviceId: { $$type: string } - - level: debug - component: command - data: - message: "Command succeeded" - commandName: insert - serviceId: { $$type: string } - - level: debug - component: command - data: - message: "Command started" - commandName: find - serviceId: { $$type: string } - - level: debug - component: command - data: - message: "Command failed" - commandName: find - serviceId: { $$type: string } - - - description: "command log messages omit serviceId when not in LB mode" - runOnRequirements: - - topologies: - - single - - replicaset - - sharded - operations: - - name: insertOne - object: *collection - arguments: - document: { x: 1 } - - name: find - object: *collection - arguments: - filter: { $or: true } - expectError: - isError: true - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - commandName: insert - serviceId: { $$exists: false } - - level: debug - component: command - data: - message: "Command succeeded" - commandName: insert - serviceId: { $$exists: false } - - level: debug - component: command - data: - message: "Command started" - commandName: find - serviceId: { $$exists: false } - - level: debug - component: command - data: - message: "Command failed" - commandName: find - serviceId: { $$exists: false } diff --git a/testdata/command-monitoring/logging/unacknowledged-write.json b/testdata/command-monitoring/logging/unacknowledged-write.json deleted file mode 100644 index 21e247df66..0000000000 --- a/testdata/command-monitoring/logging/unacknowledged-write.json +++ /dev/null @@ -1,134 +0,0 @@ -{ - "description": "unacknowledged-write", - "schemaVersion": "1.13", - "createEntities": [ - { - "client": { - "id": "client", - "observeLogMessages": { - "command": "debug" - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "logging-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "logging-tests-collection", - "collectionOptions": { - "writeConcern": { - "w": 0 - } - } - } - } - ], - "initialData": [ - { - "collectionName": "logging-tests-collection", - "databaseName": "logging-tests", - "documents": [ - { - "_id": 1 - } - ] - } - ], - "tests": [ - { - "description": "An unacknowledged write generates a succeeded log message with ok: 1 reply", - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 2 - } - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "command", - "data": { - "message": "Command started", - "databaseName": "logging-tests", - "commandName": "insert", - "command": { - "$$matchAsDocument": { - "$$matchAsRoot": { - "insert": "logging-tests-collection", - "$db": "logging-tests" - } - } - }, - "requestId": { - "$$type": [ - "int", - "long" - ] - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "command", - "data": { - "message": "Command succeeded", - "commandName": "insert", - "reply": { - "$$matchAsDocument": { - "ok": 1 - } - }, - "requestId": { - "$$type": [ - "int", - "long" - ] - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - }, - "durationMS": { - "$$type": [ - "double", - "int", - "long" - ] - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/command-monitoring/logging/unacknowledged-write.yml b/testdata/command-monitoring/logging/unacknowledged-write.yml deleted file mode 100644 index e567788851..0000000000 --- a/testdata/command-monitoring/logging/unacknowledged-write.yml +++ /dev/null @@ -1,63 +0,0 @@ -description: "unacknowledged-write" - -schemaVersion: "1.13" - -createEntities: - - client: - id: &client client - observeLogMessages: - command: debug - - database: - id: &database database - client: *client - databaseName: &databaseName logging-tests - - collection: - id: &collection collection - database: *database - collectionName: &collectionName logging-tests-collection - collectionOptions: - writeConcern: { w: 0 } - -initialData: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1 } - -tests: - - description: "An unacknowledged write generates a succeeded log message with ok: 1 reply" - operations: - - name: insertOne - object: *collection - arguments: - document: { _id: 2 } - expectLogMessages: - - client: *client - messages: - - level: debug - component: command - data: - message: "Command started" - databaseName: *databaseName - commandName: insert - command: - $$matchAsDocument: - $$matchAsRoot: - insert: *collectionName - $db: *databaseName - requestId: { $$type: [int, long] } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - - level: debug - component: command - data: - message: "Command succeeded" - commandName: insert - reply: - $$matchAsDocument: - ok: 1 - requestId: { $$type: [int, long] } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - durationMS: { $$type: [double, int, long] } diff --git a/testdata/command-monitoring/pre-42-server-connection-id.json b/testdata/command-monitoring/pre-42-server-connection-id.json deleted file mode 100644 index 141fbe584f..0000000000 --- a/testdata/command-monitoring/pre-42-server-connection-id.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "description": "pre-42-server-connection-id", - "schemaVersion": "1.6", - "runOnRequirements": [ - { - "maxServerVersion": "4.0.99" - } - ], - "createEntities": [ - { - "client": { - "id": "client", - "observeEvents": [ - "commandStartedEvent", - "commandSucceededEvent", - "commandFailedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "server-connection-id-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ], - "initialData": [ - { - "databaseName": "server-connection-id-tests", - "collectionName": "coll", - "documents": [] - } - ], - "tests": [ - { - "description": "command events do not include server connection id", - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "find", - "object": "collection", - "arguments": { - "filter": { - "$or": true - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "hasServerConnectionId": false - } - }, - { - "commandSucceededEvent": { - "commandName": "insert", - "hasServerConnectionId": false - } - }, - { - "commandStartedEvent": { - "commandName": "find", - "hasServerConnectionId": false - } - }, - { - "commandFailedEvent": { - "commandName": "find", - "hasServerConnectionId": false - } - } - ] - } - ] - } - ] -} diff --git a/testdata/command-monitoring/pre-42-server-connection-id.yml b/testdata/command-monitoring/pre-42-server-connection-id.yml deleted file mode 100644 index 483a8a3c19..0000000000 --- a/testdata/command-monitoring/pre-42-server-connection-id.yml +++ /dev/null @@ -1,56 +0,0 @@ -description: "pre-42-server-connection-id" - -schemaVersion: "1.6" - -runOnRequirements: - - maxServerVersion: "4.0.99" - -createEntities: - - client: - id: &client client - observeEvents: - - commandStartedEvent - - commandSucceededEvent - - commandFailedEvent - - database: - id: &database database - client: *client - databaseName: &databaseName server-connection-id-tests - - collection: - id: &collection collection - database: *database - collectionName: &collectionName coll - -initialData: - - databaseName: *databaseName - collectionName: *collectionName - documents: [] - -tests: - - description: "command events do not include server connection id" - operations: - - name: insertOne - object: *collection - arguments: - document: { x: 1 } - - name: find - object: *collection - arguments: - filter: { $or: true } - expectError: - isError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - hasServerConnectionId: false - - commandSucceededEvent: - commandName: insert - hasServerConnectionId: false - - commandStartedEvent: - commandName: find - hasServerConnectionId: false - - commandFailedEvent: - commandName: find - hasServerConnectionId: false diff --git a/testdata/command-monitoring/redacted-commands.json b/testdata/command-monitoring/redacted-commands.json deleted file mode 100644 index 4302ba8900..0000000000 --- a/testdata/command-monitoring/redacted-commands.json +++ /dev/null @@ -1,679 +0,0 @@ -{ - "description": "redacted-commands", - "schemaVersion": "1.5", - "runOnRequirements": [ - { - "minServerVersion": "5.0", - "auth": false - } - ], - "createEntities": [ - { - "client": { - "id": "client", - "observeEvents": [ - "commandStartedEvent", - "commandSucceededEvent" - ], - "observeSensitiveCommands": true - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "command-monitoring-tests" - } - } - ], - "tests": [ - { - "description": "authenticate", - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "authenticate", - "command": { - "authenticate": 1, - "mechanism": "MONGODB-X509", - "user": "CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry", - "db": "$external" - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "authenticate", - "command": { - "authenticate": { - "$$exists": false - }, - "mechanism": { - "$$exists": false - }, - "user": { - "$$exists": false - }, - "db": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "saslStart", - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "saslStart", - "command": { - "saslStart": 1, - "payload": "definitely-invalid-payload", - "db": "admin" - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "saslStart", - "command": { - "saslStart": { - "$$exists": false - }, - "payload": { - "$$exists": false - }, - "db": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "saslContinue", - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "saslContinue", - "command": { - "saslContinue": 1, - "conversationId": 0, - "payload": "definitely-invalid-payload" - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "saslContinue", - "command": { - "saslContinue": { - "$$exists": false - }, - "conversationId": { - "$$exists": false - }, - "payload": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "getnonce", - "runOnRequirements": [ - { - "maxServerVersion": "6.1.99" - } - ], - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "getnonce", - "command": { - "getnonce": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "getnonce", - "command": { - "getnonce": { - "$$exists": false - } - } - } - }, - { - "commandSucceededEvent": { - "commandName": "getnonce", - "reply": { - "ok": { - "$$exists": false - }, - "nonce": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "createUser", - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "createUser", - "command": { - "createUser": "private", - "pwd": {}, - "roles": [] - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "createUser", - "command": { - "createUser": { - "$$exists": false - }, - "pwd": { - "$$exists": false - }, - "roles": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "updateUser", - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "updateUser", - "command": { - "updateUser": "private", - "pwd": {}, - "roles": [] - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "updateUser", - "command": { - "updateUser": { - "$$exists": false - }, - "pwd": { - "$$exists": false - }, - "roles": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "copydbgetnonce", - "runOnRequirements": [ - { - "maxServerVersion": "3.6.99" - } - ], - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "copydbgetnonce", - "command": { - "copydbgetnonce": "private" - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "copydbgetnonce", - "command": { - "copydbgetnonce": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "copydbsaslstart", - "runOnRequirements": [ - { - "maxServerVersion": "4.0.99" - } - ], - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "copydbsaslstart", - "command": { - "copydbsaslstart": "private" - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "copydbsaslstart", - "command": { - "copydbsaslstart": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "copydb", - "runOnRequirements": [ - { - "maxServerVersion": "4.0.99" - } - ], - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "copydb", - "command": { - "copydb": "private" - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "copydb", - "command": { - "copydb": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "hello with speculative authenticate", - "runOnRequirements": [ - { - "minServerVersion": "4.9" - } - ], - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "hello", - "command": { - "hello": 1, - "speculativeAuthenticate": { - "saslStart": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "hello", - "command": { - "hello": { - "$$exists": false - }, - "speculativeAuthenticate": { - "$$exists": false - } - } - } - }, - { - "commandSucceededEvent": { - "commandName": "hello", - "reply": { - "isWritablePrimary": { - "$$exists": false - }, - "speculativeAuthenticate": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "legacy hello with speculative authenticate", - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "ismaster", - "command": { - "ismaster": 1, - "speculativeAuthenticate": { - "saslStart": 1 - } - } - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "isMaster", - "command": { - "isMaster": 1, - "speculativeAuthenticate": { - "saslStart": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "ismaster", - "command": { - "ismaster": { - "$$exists": false - }, - "speculativeAuthenticate": { - "$$exists": false - } - } - } - }, - { - "commandSucceededEvent": { - "commandName": "ismaster", - "reply": { - "ismaster": { - "$$exists": false - }, - "speculativeAuthenticate": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "isMaster", - "command": { - "isMaster": { - "$$exists": false - }, - "speculativeAuthenticate": { - "$$exists": false - } - } - } - }, - { - "commandSucceededEvent": { - "commandName": "isMaster", - "reply": { - "ismaster": { - "$$exists": false - }, - "speculativeAuthenticate": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "hello without speculative authenticate is not redacted", - "runOnRequirements": [ - { - "minServerVersion": "4.9" - } - ], - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "hello", - "command": { - "hello": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "hello", - "command": { - "hello": 1 - } - } - }, - { - "commandSucceededEvent": { - "commandName": "hello", - "reply": { - "isWritablePrimary": { - "$$exists": true - } - } - } - } - ] - } - ] - }, - { - "description": "legacy hello without speculative authenticate is not redacted", - "operations": [ - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "ismaster", - "command": { - "ismaster": 1 - } - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "commandName": "isMaster", - "command": { - "isMaster": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "ismaster", - "command": { - "ismaster": 1 - } - } - }, - { - "commandSucceededEvent": { - "commandName": "ismaster", - "reply": { - "ismaster": { - "$$exists": true - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "isMaster", - "command": { - "isMaster": 1 - } - } - }, - { - "commandSucceededEvent": { - "commandName": "isMaster", - "reply": { - "ismaster": { - "$$exists": true - } - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/command-monitoring/redacted-commands.yml b/testdata/command-monitoring/redacted-commands.yml deleted file mode 100644 index adeab99b18..0000000000 --- a/testdata/command-monitoring/redacted-commands.yml +++ /dev/null @@ -1,348 +0,0 @@ -description: "redacted-commands" - -schemaVersion: "1.5" - -runOnRequirements: - - minServerVersion: "5.0" - auth: false - -createEntities: - - client: - id: &client client - observeEvents: - - commandStartedEvent - - commandSucceededEvent - observeSensitiveCommands: true - - database: - id: &database database - client: *client - databaseName: &databaseName command-monitoring-tests - -tests: - - description: "authenticate" - operations: - - name: runCommand - object: *database - arguments: - commandName: authenticate - command: - authenticate: 1 - mechanism: "MONGODB-X509" - user: "CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry" - db: "$external" - # An authentication error is expected, but we want to check that the - # CommandStartedEvent is redacted - expectError: - isError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: authenticate - # We cannot simply assert that command is an empty document - # because it's at root-level, so we make a best effort to make - # sure sensitive fields are redacted. - command: - authenticate: { $$exists: false } - mechanism: { $$exists: false } - user: { $$exists: false } - db: { $$exists: false } - - - description: "saslStart" - operations: - - name: runCommand - object: *database - arguments: - commandName: saslStart - command: - saslStart: 1 - payload: "definitely-invalid-payload" - db: "admin" - expectError: - isError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: saslStart - command: - saslStart: { $$exists: false } - payload: { $$exists: false } - db: { $$exists: false } - - - description: "saslContinue" - operations: - - name: runCommand - object: *database - arguments: - commandName: saslContinue - command: - saslContinue: 1 - conversationId: 0 - payload: "definitely-invalid-payload" - expectError: - isError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: saslContinue - command: - saslContinue: { $$exists: false } - conversationId: { $$exists: false } - payload: { $$exists: false } - - - description: "getnonce" - runOnRequirements: - - maxServerVersion: 6.1.99 # getnonce removed as of 6.2 via SERVER-71007 - operations: - - name: runCommand - object: *database - arguments: - commandName: getnonce - command: - getnonce: 1 - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: getnonce - command: { getnonce: { $$exists: false } } - - commandSucceededEvent: - commandName: getnonce - reply: - ok: { $$exists: false } - nonce: { $$exists: false } - - - description: "createUser" - operations: - - name: runCommand - object: *database - arguments: - commandName: createUser - command: - createUser: "private" - # Passing an object is prohibited and we want to trigger a command - # failure - pwd: {} - roles: [] - expectError: - isError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: createUser - command: - createUser: { $$exists: false } - pwd: { $$exists: false } - roles: { $$exists: false } - - - description: "updateUser" - operations: - - name: runCommand - object: *database - arguments: - commandName: updateUser - command: - updateUser: "private" - pwd: {} - roles: [] - expectError: - isError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: updateUser - command: - updateUser: { $$exists: false } - pwd: { $$exists: false } - roles: { $$exists: false } - - - description: "copydbgetnonce" - runOnRequirements: - - maxServerVersion: 3.6.99 # copydbgetnonce was removed as of 4.0 via SERVER-32276 - operations: - - name: runCommand - object: *database - arguments: - commandName: copydbgetnonce - command: - copydbgetnonce: "private" - expectError: - isError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: copydbgetnonce - command: { copydbgetnonce: { $$exists: false } } - - - description: "copydbsaslstart" - runOnRequirements: - - maxServerVersion: 4.0.99 # copydbsaslstart was removed as of 4.2 via SERVER-36211 - operations: - - name: runCommand - object: *database - arguments: - commandName: copydbsaslstart - command: - copydbsaslstart: "private" - expectError: - isError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: copydbsaslstart - command: { copydbsaslstart: { $$exists: false } } - - - description: "copydb" - runOnRequirements: - - maxServerVersion: 4.0.99 # copydb was removed as of 4.2 via SERVER-36257 - operations: - - name: runCommand - object: *database - arguments: - commandName: copydb - command: - copydb: "private" - expectError: - isError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: copydb - command: { copydb: { $$exists: false } } - - - description: "hello with speculative authenticate" - runOnRequirements: - - minServerVersion: "4.9" - operations: - - name: runCommand - object: *database - arguments: - commandName: hello - command: - hello: 1 - speculativeAuthenticate: - saslStart: 1 - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: hello - command: - hello: { $$exists: false } - speculativeAuthenticate: { $$exists: false } - - commandSucceededEvent: - commandName: hello - reply: - # Even though authentication above fails and the reply does not - # contain sensitive information, we're expecting the reply to be - # redacted as well. - isWritablePrimary: { $$exists: false } - # This assertion will currently always hold true since we're - # not expecting successful authentication, in which case this - # field is missing anyways. - speculativeAuthenticate: { $$exists: false } - - - description: "legacy hello with speculative authenticate" - operations: - - name: runCommand - object: *database - arguments: - commandName: ismaster - command: - ismaster: 1 - speculativeAuthenticate: - saslStart: 1 - - name: runCommand - object: *database - arguments: - commandName: isMaster - command: - isMaster: 1 - speculativeAuthenticate: - saslStart: 1 - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: ismaster - command: - ismaster: { $$exists: false } - speculativeAuthenticate: { $$exists: false } - - commandSucceededEvent: - commandName: ismaster - reply: - ismaster: { $$exists: false } - speculativeAuthenticate: { $$exists: false } - - commandStartedEvent: - commandName: isMaster - command: - isMaster: { $$exists: false } - speculativeAuthenticate: { $$exists: false } - - commandSucceededEvent: - commandName: isMaster - reply: - ismaster: { $$exists: false } - speculativeAuthenticate: { $$exists: false } - - - description: "hello without speculative authenticate is not redacted" - runOnRequirements: - - minServerVersion: "4.9" - operations: - - name: runCommand - object: *database - arguments: - commandName: hello - command: - hello: 1 - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: hello - command: - hello: 1 - - commandSucceededEvent: - commandName: hello - reply: - isWritablePrimary: { $$exists: true } - - - description: "legacy hello without speculative authenticate is not redacted" - operations: - - name: runCommand - object: *database - arguments: - commandName: ismaster - command: - ismaster: 1 - - name: runCommand - object: *database - arguments: - commandName: isMaster - command: - isMaster: 1 - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: ismaster - command: - ismaster: 1 - - commandSucceededEvent: - commandName: ismaster - reply: - ismaster: { $$exists: true } - - commandStartedEvent: - commandName: isMaster - command: - isMaster: 1 - - commandSucceededEvent: - commandName: isMaster - reply: - ismaster: { $$exists: true } diff --git a/testdata/command-monitoring/server-connection-id.json b/testdata/command-monitoring/server-connection-id.json deleted file mode 100644 index a8f27637fc..0000000000 --- a/testdata/command-monitoring/server-connection-id.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "description": "server-connection-id", - "schemaVersion": "1.6", - "runOnRequirements": [ - { - "minServerVersion": "4.2" - } - ], - "createEntities": [ - { - "client": { - "id": "client", - "observeEvents": [ - "commandStartedEvent", - "commandSucceededEvent", - "commandFailedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "server-connection-id-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "coll" - } - } - ], - "initialData": [ - { - "databaseName": "server-connection-id-tests", - "collectionName": "coll", - "documents": [] - } - ], - "tests": [ - { - "description": "command events include server connection id", - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "x": 1 - } - } - }, - { - "name": "find", - "object": "collection", - "arguments": { - "filter": { - "$or": true - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert", - "hasServerConnectionId": true - } - }, - { - "commandSucceededEvent": { - "commandName": "insert", - "hasServerConnectionId": true - } - }, - { - "commandStartedEvent": { - "commandName": "find", - "hasServerConnectionId": true - } - }, - { - "commandFailedEvent": { - "commandName": "find", - "hasServerConnectionId": true - } - } - ] - } - ] - } - ] -} diff --git a/testdata/command-monitoring/server-connection-id.yml b/testdata/command-monitoring/server-connection-id.yml deleted file mode 100644 index abd34dad6e..0000000000 --- a/testdata/command-monitoring/server-connection-id.yml +++ /dev/null @@ -1,56 +0,0 @@ -description: "server-connection-id" - -schemaVersion: "1.6" - -runOnRequirements: - - minServerVersion: "4.2" - -createEntities: - - client: - id: &client client - observeEvents: - - commandStartedEvent - - commandSucceededEvent - - commandFailedEvent - - database: - id: &database database - client: *client - databaseName: &databaseName server-connection-id-tests - - collection: - id: &collection collection - database: *database - collectionName: &collectionName coll - -initialData: - - databaseName: *databaseName - collectionName: *collectionName - documents: [] - -tests: - - description: "command events include server connection id" - operations: - - name: insertOne - object: *collection - arguments: - document: { x: 1 } - - name: find - object: *collection - arguments: - filter: { $or: true } - expectError: - isError: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: insert - hasServerConnectionId: true - - commandSucceededEvent: - commandName: insert - hasServerConnectionId: true - - commandStartedEvent: - commandName: find - hasServerConnectionId: true - - commandFailedEvent: - commandName: find - hasServerConnectionId: true diff --git a/testdata/command-monitoring/unacknowledged-client-bulkWrite.json b/testdata/command-monitoring/unacknowledged-client-bulkWrite.json deleted file mode 100644 index 61bb00726c..0000000000 --- a/testdata/command-monitoring/unacknowledged-client-bulkWrite.json +++ /dev/null @@ -1,220 +0,0 @@ -{ - "description": "unacknowledged-client-bulkWrite", - "schemaVersion": "1.7", - "runOnRequirements": [ - { - "minServerVersion": "8.0", - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent", - "commandSucceededEvent", - "commandFailedEvent" - ], - "uriOptions": { - "w": 0 - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "command-monitoring-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "test" - } - } - ], - "initialData": [ - { - "collectionName": "test", - "databaseName": "command-monitoring-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "_yamlAnchors": { - "namespace": "command-monitoring-tests.test" - }, - "tests": [ - { - "description": "A successful mixed client bulkWrite", - "operations": [ - { - "object": "client", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "command-monitoring-tests.test", - "document": { - "_id": 4, - "x": 44 - } - } - }, - { - "updateOne": { - "namespace": "command-monitoring-tests.test", - "filter": { - "_id": 3 - }, - "update": { - "$set": { - "x": 333 - } - } - } - } - ], - "ordered": false - }, - "expectResult": { - "insertedCount": { - "$$unsetOrMatches": 0 - }, - "upsertedCount": { - "$$unsetOrMatches": 0 - }, - "matchedCount": { - "$$unsetOrMatches": 0 - }, - "modifiedCount": { - "$$unsetOrMatches": 0 - }, - "deletedCount": { - "$$unsetOrMatches": 0 - }, - "insertResults": { - "$$unsetOrMatches": {} - }, - "updateResults": { - "$$unsetOrMatches": {} - }, - "deleteResults": { - "$$unsetOrMatches": {} - } - } - }, - { - "object": "collection", - "name": "find", - "arguments": { - "filter": {} - }, - "expectResult": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 333 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "expectEvents": [ - { - "client": "client", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": true, - "ordered": false, - "ops": [ - { - "insert": 0, - "document": { - "_id": 4, - "x": 44 - } - }, - { - "update": 0, - "filter": { - "_id": 3 - }, - "updateMods": { - "$set": { - "x": 333 - } - }, - "multi": false - } - ], - "nsInfo": [ - { - "ns": "command-monitoring-tests.test" - } - ] - } - } - }, - { - "commandSucceededEvent": { - "commandName": "bulkWrite", - "reply": { - "ok": 1, - "nInserted": { - "$$exists": false - }, - "nMatched": { - "$$exists": false - }, - "nModified": { - "$$exists": false - }, - "nUpserted": { - "$$exists": false - }, - "nDeleted": { - "$$exists": false - } - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/command-monitoring/unacknowledged-client-bulkWrite.yml b/testdata/command-monitoring/unacknowledged-client-bulkWrite.yml deleted file mode 100644 index 2d54525953..0000000000 --- a/testdata/command-monitoring/unacknowledged-client-bulkWrite.yml +++ /dev/null @@ -1,111 +0,0 @@ -description: "unacknowledged-client-bulkWrite" - -schemaVersion: "1.7" - -runOnRequirements: - - minServerVersion: "8.0" - serverless: forbid - -createEntities: - - client: - id: &client client - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - commandSucceededEvent - - commandFailedEvent - uriOptions: - w: 0 - - database: - id: &database database - client: *client - databaseName: &databaseName command-monitoring-tests - - collection: - id: &collection collection - database: *database - collectionName: &collectionName test - -initialData: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -_yamlAnchors: - namespace: &namespace "command-monitoring-tests.test" - -tests: - - description: 'A successful mixed client bulkWrite' - operations: - - object: *client - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: { _id: 4, x: 44 } - - updateOne: - namespace: *namespace - filter: { _id: 3 } - update: { $set: { x: 333 } } - ordered: false - expectResult: - insertedCount: - $$unsetOrMatches: 0 - upsertedCount: - $$unsetOrMatches: 0 - matchedCount: - $$unsetOrMatches: 0 - modifiedCount: - $$unsetOrMatches: 0 - deletedCount: - $$unsetOrMatches: 0 - insertResults: - $$unsetOrMatches: {} - updateResults: - $$unsetOrMatches: {} - deleteResults: - $$unsetOrMatches: {} - # Force completion of the w:0 write by executing a find on the same connection - - object: *collection - name: find - arguments: - filter: {} - expectResult: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 333 } - - { _id: 4, x: 44 } - - expectEvents: - - - client: *client - ignoreExtraEvents: true - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: true - ordered: false - ops: - - insert: 0 - document: { _id: 4, x: 44 } - - update: 0 - filter: { _id: 3 } - updateMods: { $set: { x: 333 } } - multi: false - nsInfo: - - ns: *namespace - - commandSucceededEvent: - commandName: bulkWrite - reply: - ok: 1 - nInserted: { $$exists: false } - nMatched: { $$exists: false } - nModified: { $$exists: false } - nUpserted: { $$exists: false } - nDeleted: { $$exists: false } diff --git a/testdata/command-monitoring/unacknowledgedBulkWrite.json b/testdata/command-monitoring/unacknowledgedBulkWrite.json deleted file mode 100644 index 61bb00726c..0000000000 --- a/testdata/command-monitoring/unacknowledgedBulkWrite.json +++ /dev/null @@ -1,220 +0,0 @@ -{ - "description": "unacknowledged-client-bulkWrite", - "schemaVersion": "1.7", - "runOnRequirements": [ - { - "minServerVersion": "8.0", - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent", - "commandSucceededEvent", - "commandFailedEvent" - ], - "uriOptions": { - "w": 0 - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "command-monitoring-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "test" - } - } - ], - "initialData": [ - { - "collectionName": "test", - "databaseName": "command-monitoring-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "_yamlAnchors": { - "namespace": "command-monitoring-tests.test" - }, - "tests": [ - { - "description": "A successful mixed client bulkWrite", - "operations": [ - { - "object": "client", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "command-monitoring-tests.test", - "document": { - "_id": 4, - "x": 44 - } - } - }, - { - "updateOne": { - "namespace": "command-monitoring-tests.test", - "filter": { - "_id": 3 - }, - "update": { - "$set": { - "x": 333 - } - } - } - } - ], - "ordered": false - }, - "expectResult": { - "insertedCount": { - "$$unsetOrMatches": 0 - }, - "upsertedCount": { - "$$unsetOrMatches": 0 - }, - "matchedCount": { - "$$unsetOrMatches": 0 - }, - "modifiedCount": { - "$$unsetOrMatches": 0 - }, - "deletedCount": { - "$$unsetOrMatches": 0 - }, - "insertResults": { - "$$unsetOrMatches": {} - }, - "updateResults": { - "$$unsetOrMatches": {} - }, - "deleteResults": { - "$$unsetOrMatches": {} - } - } - }, - { - "object": "collection", - "name": "find", - "arguments": { - "filter": {} - }, - "expectResult": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 333 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "expectEvents": [ - { - "client": "client", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": true, - "ordered": false, - "ops": [ - { - "insert": 0, - "document": { - "_id": 4, - "x": 44 - } - }, - { - "update": 0, - "filter": { - "_id": 3 - }, - "updateMods": { - "$set": { - "x": 333 - } - }, - "multi": false - } - ], - "nsInfo": [ - { - "ns": "command-monitoring-tests.test" - } - ] - } - } - }, - { - "commandSucceededEvent": { - "commandName": "bulkWrite", - "reply": { - "ok": 1, - "nInserted": { - "$$exists": false - }, - "nMatched": { - "$$exists": false - }, - "nModified": { - "$$exists": false - }, - "nUpserted": { - "$$exists": false - }, - "nDeleted": { - "$$exists": false - } - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/command-monitoring/unacknowledgedBulkWrite.yml b/testdata/command-monitoring/unacknowledgedBulkWrite.yml deleted file mode 100644 index 2d54525953..0000000000 --- a/testdata/command-monitoring/unacknowledgedBulkWrite.yml +++ /dev/null @@ -1,111 +0,0 @@ -description: "unacknowledged-client-bulkWrite" - -schemaVersion: "1.7" - -runOnRequirements: - - minServerVersion: "8.0" - serverless: forbid - -createEntities: - - client: - id: &client client - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - commandSucceededEvent - - commandFailedEvent - uriOptions: - w: 0 - - database: - id: &database database - client: *client - databaseName: &databaseName command-monitoring-tests - - collection: - id: &collection collection - database: *database - collectionName: &collectionName test - -initialData: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -_yamlAnchors: - namespace: &namespace "command-monitoring-tests.test" - -tests: - - description: 'A successful mixed client bulkWrite' - operations: - - object: *client - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: { _id: 4, x: 44 } - - updateOne: - namespace: *namespace - filter: { _id: 3 } - update: { $set: { x: 333 } } - ordered: false - expectResult: - insertedCount: - $$unsetOrMatches: 0 - upsertedCount: - $$unsetOrMatches: 0 - matchedCount: - $$unsetOrMatches: 0 - modifiedCount: - $$unsetOrMatches: 0 - deletedCount: - $$unsetOrMatches: 0 - insertResults: - $$unsetOrMatches: {} - updateResults: - $$unsetOrMatches: {} - deleteResults: - $$unsetOrMatches: {} - # Force completion of the w:0 write by executing a find on the same connection - - object: *collection - name: find - arguments: - filter: {} - expectResult: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 333 } - - { _id: 4, x: 44 } - - expectEvents: - - - client: *client - ignoreExtraEvents: true - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: true - ordered: false - ops: - - insert: 0 - document: { _id: 4, x: 44 } - - update: 0 - filter: { _id: 3 } - updateMods: { $set: { x: 333 } } - multi: false - nsInfo: - - ns: *namespace - - commandSucceededEvent: - commandName: bulkWrite - reply: - ok: 1 - nInserted: { $$exists: false } - nMatched: { $$exists: false } - nModified: { $$exists: false } - nUpserted: { $$exists: false } - nDeleted: { $$exists: false } diff --git a/testdata/command-monitoring/updateMany.json b/testdata/command-monitoring/updateMany.json deleted file mode 100644 index b15434226c..0000000000 --- a/testdata/command-monitoring/updateMany.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "description": "updateMany", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client", - "observeEvents": [ - "commandStartedEvent", - "commandSucceededEvent", - "commandFailedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "command-monitoring-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "test" - } - } - ], - "initialData": [ - { - "collectionName": "test", - "databaseName": "command-monitoring-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "A successful updateMany", - "operations": [ - { - "name": "updateMany", - "object": "collection", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "$inc": { - "x": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test", - "updates": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "u": { - "$inc": { - "x": 1 - } - }, - "upsert": { - "$$unsetOrMatches": false - }, - "multi": true - } - ], - "ordered": true - }, - "commandName": "update", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "n": 2 - }, - "commandName": "update" - } - } - ] - } - ] - }, - { - "description": "A successful updateMany with write errors", - "operations": [ - { - "name": "updateMany", - "object": "collection", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "$unsupported": { - "x": 1 - } - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test", - "updates": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "u": { - "$unsupported": { - "x": 1 - } - }, - "upsert": { - "$$unsetOrMatches": false - }, - "multi": true - } - ], - "ordered": true - }, - "commandName": "update", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "n": 0, - "writeErrors": { - "$$type": "array" - } - }, - "commandName": "update" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/command-monitoring/updateMany.yml b/testdata/command-monitoring/updateMany.yml deleted file mode 100644 index 244bad94f6..0000000000 --- a/testdata/command-monitoring/updateMany.yml +++ /dev/null @@ -1,87 +0,0 @@ -description: "updateMany" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client client - observeEvents: - - commandStartedEvent - - commandSucceededEvent - - commandFailedEvent - - database: - id: &database database - client: *client - databaseName: &databaseName command-monitoring-tests - - collection: - id: &collection collection - database: *database - collectionName: &collectionName test - -initialData: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -tests: - - description: "A successful updateMany" - operations: - - name: updateMany - object: *collection - arguments: - filter: { _id: { $gt: 1 } } - update: { $inc: { x: 1 } } - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - update: *collectionName - updates: - - q: { _id: { $gt: 1 } } - u: { $inc: { x: 1 } } - upsert: { $$unsetOrMatches: false } - multi: true - ordered: true - commandName: update - databaseName: *databaseName - - commandSucceededEvent: - reply: { ok: 1, n: 2 } - commandName: update - - - description: "A successful updateMany with write errors" - operations: - - name: updateMany - object: *collection - arguments: - filter: { _id: { $gt: 1 } } - update: { $unsupported: { x: 1 } } - expectError: - isClientError: false - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - update: *collectionName - updates: - - q: { _id: { $gt: 1 } } - u: { $unsupported: { x: 1 } } - upsert: { $$unsetOrMatches: false } - multi: true - ordered: true - commandName: update - databaseName: *databaseName - - commandSucceededEvent: - reply: - ok: 1 - n: 0 - # The legacy version of this test included an assertion that writeErrors contained a single document - # with index=0, a "code" value, and a non-empty "errmsg". However, writeErrors can contain extra fields - # beyond these, and the unified format currently does not permit allowing extra fields in sub-documents, - # so those assertions are not present here. - writeErrors: { $$type: array } - commandName: update diff --git a/testdata/command-monitoring/updateOne.json b/testdata/command-monitoring/updateOne.json deleted file mode 100644 index a0ae99e88d..0000000000 --- a/testdata/command-monitoring/updateOne.json +++ /dev/null @@ -1,260 +0,0 @@ -{ - "description": "updateOne", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client", - "observeEvents": [ - "commandStartedEvent", - "commandSucceededEvent", - "commandFailedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "command-monitoring-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "test" - } - } - ], - "initialData": [ - { - "collectionName": "test", - "databaseName": "command-monitoring-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "A successful updateOne", - "operations": [ - { - "name": "updateOne", - "object": "collection", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "$inc": { - "x": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test", - "updates": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "u": { - "$inc": { - "x": 1 - } - }, - "upsert": { - "$$unsetOrMatches": false - }, - "multi": { - "$$unsetOrMatches": false - } - } - ], - "ordered": true - }, - "commandName": "update", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "n": 1 - }, - "commandName": "update" - } - } - ] - } - ] - }, - { - "description": "A successful updateOne with upsert where the upserted id is not an ObjectId", - "operations": [ - { - "name": "updateOne", - "object": "collection", - "arguments": { - "filter": { - "_id": 4 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "upsert": true - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test", - "updates": [ - { - "q": { - "_id": 4 - }, - "u": { - "$inc": { - "x": 1 - } - }, - "upsert": true, - "multi": { - "$$unsetOrMatches": false - } - } - ], - "ordered": true - }, - "commandName": "update", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "n": 1, - "upserted": [ - { - "index": 0, - "_id": 4 - } - ] - }, - "commandName": "update" - } - } - ] - } - ] - }, - { - "description": "A successful updateOne with write errors", - "operations": [ - { - "name": "updateOne", - "object": "collection", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "$unsupported": { - "x": 1 - } - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test", - "updates": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "u": { - "$unsupported": { - "x": 1 - } - }, - "upsert": { - "$$unsetOrMatches": false - }, - "multi": { - "$$unsetOrMatches": false - } - } - ], - "ordered": true - }, - "commandName": "update", - "databaseName": "command-monitoring-tests" - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "n": 0, - "writeErrors": { - "$$type": "array" - } - }, - "commandName": "update" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/command-monitoring/updateOne.yml b/testdata/command-monitoring/updateOne.yml deleted file mode 100644 index 7abc7bae00..0000000000 --- a/testdata/command-monitoring/updateOne.yml +++ /dev/null @@ -1,118 +0,0 @@ -description: "updateOne" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client client - observeEvents: - - commandStartedEvent - - commandSucceededEvent - - commandFailedEvent - - database: - id: &database database - client: *client - databaseName: &databaseName command-monitoring-tests - - collection: - id: &collection collection - database: *database - collectionName: &collectionName test - -initialData: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -tests: - - description: "A successful updateOne" - operations: - - name: updateOne - object: *collection - arguments: - filter: { _id: { $gt: 1 } } - update: { $inc: { x: 1 } } - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - update: *collectionName - updates: - - q: { _id: { $gt: 1 } } - u: { $inc: { x: 1 } } - upsert: { $$unsetOrMatches: false } - multi: { $$unsetOrMatches: false } - ordered: true - commandName: update - databaseName: *databaseName - - commandSucceededEvent: - reply: { ok: 1, n: 1 } - commandName: update - - - description: "A successful updateOne with upsert where the upserted id is not an ObjectId" - operations: - - name: updateOne - object: *collection - arguments: - filter: { _id: 4 } - update: { $inc: { x: 1 } } - upsert: true - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - update: *collectionName - updates: - - q: { _id: 4 } - u: { $inc: { x: 1 } } - upsert: true - multi: { $$unsetOrMatches: false } - ordered: true - commandName: update - databaseName: *databaseName - - commandSucceededEvent: - reply: - ok: 1 - n: 1 - upserted: - - index: 0 - _id: 4 - commandName: update - - - description: "A successful updateOne with write errors" - operations: - - name: updateOne - object: *collection - arguments: - filter: { _id: { $gt: 1 } } - update: { $unsupported: { x: 1 } } - expectError: - isClientError: false - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - update: *collectionName - updates: - - q: { _id: { $gt: 1 } } - u: { $unsupported: { x: 1 } } - upsert: { $$unsetOrMatches: false } - multi: { $$unsetOrMatches: false } - ordered: true - commandName: update - databaseName: *databaseName - - commandSucceededEvent: - reply: - ok: 1 - n: 0 - # The legacy version of this test included an assertion that writeErrors contained a single document - # with index=0, a "code" value, and a non-empty "errmsg". However, writeErrors can contain extra fields - # beyond these, and the unified format currently does not permit allowing extra fields in sub-documents, - # so those assertions are not present here. - writeErrors: { $$type: array } - commandName: update diff --git a/testdata/connection-monitoring-and-pooling/connection-must-have-id.json b/testdata/connection-monitoring-and-pooling/connection-must-have-id.json deleted file mode 100644 index f2d6fb95e9..0000000000 --- a/testdata/connection-monitoring-and-pooling/connection-must-have-id.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "must have an ID number associated with it", - "operations": [ - { - "name": "ready" - }, - { - "name": "checkOut" - }, - { - "name": "checkOut" - } - ], - "events": [ - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCreated", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCreated", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 42, - "address": 42 - } - ], - "ignore": [ - "ConnectionPoolCreated", - "ConnectionPoolReady", - "ConnectionPoolClosed", - "ConnectionReady" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/connection-must-have-id.yml b/testdata/connection-monitoring-and-pooling/connection-must-have-id.yml deleted file mode 100644 index b4a2cd3440..0000000000 --- a/testdata/connection-monitoring-and-pooling/connection-must-have-id.yml +++ /dev/null @@ -1,29 +0,0 @@ -version: 1 -style: unit -description: must have an ID number associated with it -operations: - - name: ready - - name: checkOut - - name: checkOut -events: - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCreated - connectionId: 42 - address: 42 - - type: ConnectionCheckedOut - connectionId: 42 - address: 42 - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCreated - connectionId: 42 - address: 42 - - type: ConnectionCheckedOut - connectionId: 42 - address: 42 -ignore: - - ConnectionPoolCreated - - ConnectionPoolReady - - ConnectionPoolClosed - - ConnectionReady diff --git a/testdata/connection-monitoring-and-pooling/connection-must-order-ids.json b/testdata/connection-monitoring-and-pooling/connection-must-order-ids.json deleted file mode 100644 index b7c2751dd7..0000000000 --- a/testdata/connection-monitoring-and-pooling/connection-must-order-ids.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "must have IDs assigned in order of creation", - "operations": [ - { - "name": "ready" - }, - { - "name": "checkOut" - }, - { - "name": "checkOut" - } - ], - "events": [ - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCreated", - "connectionId": 1, - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 1, - "address": 42 - }, - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCreated", - "connectionId": 2, - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 2, - "address": 42 - } - ], - "ignore": [ - "ConnectionPoolCreated", - "ConnectionPoolReady", - "ConnectionPoolClosed", - "ConnectionReady" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/connection-must-order-ids.yml b/testdata/connection-monitoring-and-pooling/connection-must-order-ids.yml deleted file mode 100644 index 3e352e7160..0000000000 --- a/testdata/connection-monitoring-and-pooling/connection-must-order-ids.yml +++ /dev/null @@ -1,29 +0,0 @@ -version: 1 -style: unit -description: must have IDs assigned in order of creation -operations: - - name: ready - - name: checkOut - - name: checkOut -events: - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCreated - connectionId: 1 - address: 42 - - type: ConnectionCheckedOut - connectionId: 1 - address: 42 - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCreated - connectionId: 2 - address: 42 - - type: ConnectionCheckedOut - connectionId: 2 - address: 42 -ignore: - - ConnectionPoolCreated - - ConnectionPoolReady - - ConnectionPoolClosed - - ConnectionReady diff --git a/testdata/connection-monitoring-and-pooling/logging/connection-logging.json b/testdata/connection-monitoring-and-pooling/logging/connection-logging.json deleted file mode 100644 index 3186f2be98..0000000000 --- a/testdata/connection-monitoring-and-pooling/logging/connection-logging.json +++ /dev/null @@ -1,525 +0,0 @@ -{ - "description": "connection-logging", - "schemaVersion": "1.13", - "runOnRequirements": [ - { - "topologies": [ - "single" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "failPointClient" - } - } - ], - "tests": [ - { - "description": "Create a client, run a command, and close the client", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeLogMessages": { - "connection": "debug" - } - } - } - ] - } - }, - { - "name": "listDatabases", - "object": "client", - "arguments": { - "filter": {} - } - }, - { - "name": "close", - "object": "client" - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection pool created", - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection pool ready", - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection checkout started", - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection created", - "driverConnectionId": { - "$$type": [ - "int", - "long" - ] - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection ready", - "driverConnectionId": { - "$$type": [ - "int", - "long" - ] - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - }, - "durationMS": { - "$$type": [ - "double", - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection checked out", - "driverConnectionId": { - "$$type": [ - "int", - "long" - ] - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - }, - "durationMS": { - "$$type": [ - "double", - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection checked in", - "driverConnectionId": { - "$$type": [ - "int", - "long" - ] - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection checkout started", - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection checked out", - "driverConnectionId": { - "$$type": [ - "int", - "long" - ] - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - }, - "durationMS": { - "$$type": [ - "double", - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection checked in", - "driverConnectionId": { - "$$type": [ - "int", - "long" - ] - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection closed", - "driverConnectionId": { - "$$type": [ - "int", - "long" - ] - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - }, - "reason": "Connection pool was closed" - } - }, - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection pool closed", - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - } - ] - } - ] - }, - { - "description": "Connection checkout fails due to error establishing connection", - "runOnRequirements": [ - { - "auth": true, - "minServerVersion": "4.0" - } - ], - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "retryReads": false, - "appname": "clientAppName", - "heartbeatFrequencyMS": 10000 - }, - "observeLogMessages": { - "connection": "debug" - } - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "saslContinue" - ], - "closeConnection": true, - "appName": "clientAppName" - } - } - } - }, - { - "name": "listDatabases", - "object": "client", - "arguments": { - "filter": {} - }, - "expectError": { - "isClientError": true - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection pool created", - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection pool ready", - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection checkout started", - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection created", - "driverConnectionId": { - "$$type": [ - "int", - "long" - ] - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection pool cleared", - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "connection", - "unordered": true, - "data": { - "message": "Connection closed", - "driverConnectionId": { - "$$type": [ - "int", - "long" - ] - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - }, - "reason": "An error occurred while using the connection", - "error": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "connection", - "unordered": true, - "data": { - "message": "Connection checkout failed", - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - }, - "reason": "An error occurred while trying to establish a new connection", - "error": { - "$$exists": true - }, - "durationMS": { - "$$type": [ - "double", - "int", - "long" - ] - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/connection-monitoring-and-pooling/logging/connection-logging.yml b/testdata/connection-monitoring-and-pooling/logging/connection-logging.yml deleted file mode 100644 index 61d9ed3297..0000000000 --- a/testdata/connection-monitoring-and-pooling/logging/connection-logging.yml +++ /dev/null @@ -1,226 +0,0 @@ -description: "connection-logging" - -schemaVersion: "1.13" - -runOnRequirements: - - topologies: - - single # The number of log messages is different for each topology since there is a connection pool per host. - -createEntities: - - client: - id: &failPointClient failPointClient - -tests: - - description: "Create a client, run a command, and close the client" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - observeLogMessages: - connection: debug - - name: listDatabases - object: *client - arguments: - filter: {} - - name: close - object: *client - expectLogMessages: - - client: *client - messages: - - level: debug - component: connection - data: - message: "Connection pool created" - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - - level: debug - component: connection - data: - message: "Connection pool ready" - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - - level: debug - component: connection - data: - message: "Connection checkout started" - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - - level: debug - component: connection - data: - message: "Connection created" - driverConnectionId: { $$type: [int, long] } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - - level: debug - component: connection - data: - message: "Connection ready" - driverConnectionId: { $$type: [int, long] } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - durationMS: { $$type: [double, int, long] } - - - level: debug - component: connection - data: - message: "Connection checked out" - driverConnectionId: { $$type: [int, long] } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - durationMS: { $$type: [double, int, long] } - - - level: debug - component: connection - data: - message: "Connection checked in" - driverConnectionId: { $$type: [int, long] } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - # The next three expected logs are for ending a session. - - level: debug - component: connection - data: - message: "Connection checkout started" - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - - level: debug - component: connection - data: - message: "Connection checked out" - driverConnectionId: { $$type: [int, long] } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - durationMS: { $$type: [double, int, long] } - - - level: debug - component: connection - data: - message: "Connection checked in" - driverConnectionId: { $$type: [int, long] } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - - level: debug - component: connection - data: - message: "Connection closed" - driverConnectionId: { $$type: [int, long] } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - reason: "Connection pool was closed" - - - level: debug - component: connection - data: - message: "Connection pool closed" - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - # This test exists to provide coverage of checkout failed and pool cleared events. - - description: "Connection checkout fails due to error establishing connection" - runOnRequirements: - - auth: true - minServerVersion: "4.0" # failCommand was added to mongod in 4.0 - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - uriOptions: - retryReads: false - appname: &clientAppName clientAppName - # use a high heartbeatFrequencyMS to avoid a successful monitor check marking the pool as - # ready (and emitting another event) during the course of test execution. - heartbeatFrequencyMS: 10000 - observeLogMessages: - connection: debug - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["saslContinue"] - closeConnection: true - appName: *clientAppName - - name: listDatabases - object: *client - arguments: - filter: {} - expectError: - isClientError: true - - expectLogMessages: - - client: *client - messages: - - level: debug - component: connection - data: - message: "Connection pool created" - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - - level: debug - component: connection - data: - message: "Connection pool ready" - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - - level: debug - component: connection - data: - message: "Connection checkout started" - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - - level: debug - component: connection - data: - message: "Connection created" - driverConnectionId: { $$type: [int, long] } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - - level: debug - component: connection - data: - message: "Connection pool cleared" - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - - level: debug - component: connection - data: - message: "Connection closed" - driverConnectionId: { $$type: [int, long] } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - reason: "An error occurred while using the connection" - error: { $$exists: true } - unordered: true - - - level: debug - component: connection - data: - message: "Connection checkout failed" - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - reason: "An error occurred while trying to establish a new connection" - error: { $$exists: true } - durationMS: { $$type: [double, int, long] } - unordered: true diff --git a/testdata/connection-monitoring-and-pooling/logging/connection-pool-options.json b/testdata/connection-monitoring-and-pooling/logging/connection-pool-options.json deleted file mode 100644 index 7055a54869..0000000000 --- a/testdata/connection-monitoring-and-pooling/logging/connection-pool-options.json +++ /dev/null @@ -1,458 +0,0 @@ -{ - "description": "connection-pool-options", - "schemaVersion": "1.13", - "runOnRequirements": [ - { - "topologies": [ - "single" - ] - } - ], - "tests": [ - { - "description": "Options should be included in connection pool created message when specified", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeEvents": [ - "connectionReadyEvent" - ], - "observeLogMessages": { - "connection": "debug" - }, - "uriOptions": { - "minPoolSize": 1, - "maxPoolSize": 5, - "maxIdleTimeMS": 10000 - } - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "connectionReadyEvent": {} - }, - "count": 1 - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection pool created", - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - }, - "minPoolSize": 1, - "maxPoolSize": 5, - "maxIdleTimeMS": 10000 - } - }, - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection pool ready", - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection created", - "driverConnectionId": { - "$$type": [ - "int", - "long" - ] - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection ready", - "driverConnectionId": { - "$$type": [ - "int", - "long" - ] - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - }, - "durationMS": { - "$$type": [ - "double", - "int", - "long" - ] - } - } - } - ] - } - ] - }, - { - "description": "maxConnecting should be included in connection pool created message when specified", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeEvents": [ - "poolReadyEvent" - ], - "observeLogMessages": { - "connection": "debug" - }, - "uriOptions": { - "maxConnecting": 5 - } - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolReadyEvent": {} - }, - "count": 1 - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection pool created", - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - }, - "maxConnecting": 5 - } - }, - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection pool ready", - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - } - ] - } - ] - }, - { - "description": "waitQueueTimeoutMS should be included in connection pool created message when specified", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeEvents": [ - "poolReadyEvent" - ], - "observeLogMessages": { - "connection": "debug" - }, - "uriOptions": { - "waitQueueTimeoutMS": 10000 - } - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolReadyEvent": {} - }, - "count": 1 - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection pool created", - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - }, - "waitQueueTimeoutMS": 10000 - } - }, - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection pool ready", - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - } - ] - } - ] - }, - { - "description": "waitQueueSize should be included in connection pool created message when specified", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeEvents": [ - "poolReadyEvent" - ], - "observeLogMessages": { - "connection": "debug" - }, - "uriOptions": { - "waitQueueSize": 100 - } - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolReadyEvent": {} - }, - "count": 1 - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection pool created", - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - }, - "waitQueueSize": 100 - } - }, - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection pool ready", - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - } - ] - } - ] - }, - { - "description": "waitQueueMultiple should be included in connection pool created message when specified", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeEvents": [ - "poolReadyEvent" - ], - "observeLogMessages": { - "connection": "debug" - }, - "uriOptions": { - "waitQueueSize": 5 - } - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolReadyEvent": {} - }, - "count": 1 - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection pool created", - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - }, - "waitQueueMultiple": 5 - } - }, - { - "level": "debug", - "component": "connection", - "data": { - "message": "Connection pool ready", - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/connection-monitoring-and-pooling/logging/connection-pool-options.yml b/testdata/connection-monitoring-and-pooling/logging/connection-pool-options.yml deleted file mode 100644 index 790dab6fed..0000000000 --- a/testdata/connection-monitoring-and-pooling/logging/connection-pool-options.yml +++ /dev/null @@ -1,254 +0,0 @@ -description: "connection-pool-options" - -schemaVersion: "1.13" - -runOnRequirements: - - topologies: - - single # The number of log messages is different for each topology since there is a connection pool per host. - -tests: - - description: "Options should be included in connection pool created message when specified" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - # Observe and wait on a connection ready event for the connection created in the background. - # This is to avoid raciness around whether the background thread has created the connection - # (and whether corresponding log messages have been generated) by the time log message assertions - # are made. - observeEvents: - - connectionReadyEvent - observeLogMessages: - connection: debug - uriOptions: - minPoolSize: 1 - maxPoolSize: 5 - maxIdleTimeMS: 10000 - - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - connectionReadyEvent: {} - count: 1 - - expectLogMessages: - - client: *client - messages: - - level: debug - component: connection - data: - message: "Connection pool created" - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - minPoolSize: 1 - maxPoolSize: 5 - maxIdleTimeMS: 10000 - - - level: debug - component: connection - data: - message: "Connection pool ready" - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - - level: debug - component: connection - data: - message: "Connection created" - driverConnectionId: { $$type: [int, long] } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - - level: debug - component: connection - data: - message: "Connection ready" - driverConnectionId: { $$type: [int, long] } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - durationMS: { $$type: [double, int, long] } - - # Drivers who have not done DRIVERS-1943 will need to skip this test. - - description: "maxConnecting should be included in connection pool created message when specified" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - # Observe and wait for a poolReadyEvent so we can ensure the pool has been created and is - # ready by the time we assert on log messages, in order to avoid raciness around which messages - # are emitted. - observeEvents: - - poolReadyEvent - observeLogMessages: - connection: debug - uriOptions: - maxConnecting: 5 - - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - poolReadyEvent: {} - count: 1 - - expectLogMessages: - - client: *client - messages: - - level: debug - component: connection - data: - message: "Connection pool created" - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - maxConnecting: 5 - - - level: debug - component: connection - data: - message: "Connection pool ready" - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - # Drivers that do not support waitQueueTimeoutMS will need to skip this test. - - description: "waitQueueTimeoutMS should be included in connection pool created message when specified" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - # Observe and wait for a poolReadyEvent so we can ensure the pool has been created and is - # ready by the time we assert on log messages, in order to avoid raciness around which messages - # are emitted. - observeEvents: - - poolReadyEvent - observeLogMessages: - connection: debug - uriOptions: - waitQueueTimeoutMS: 10000 - - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - poolReadyEvent: {} - count: 1 - - expectLogMessages: - - client: *client - messages: - - level: debug - component: connection - data: - message: "Connection pool created" - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - waitQueueTimeoutMS: 10000 - - - level: debug - component: connection - data: - message: "Connection pool ready" - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - # Drivers that do not support waitQueueSize will need to skip this test. - - description: "waitQueueSize should be included in connection pool created message when specified" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - # Observe and wait for a poolReadyEvent so we can ensure the pool has been created and is - # ready by the time we assert on log messages, in order to avoid raciness around which messages - # are emitted. - observeEvents: - - poolReadyEvent - observeLogMessages: - connection: debug - uriOptions: - waitQueueSize: 100 - - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - poolReadyEvent: {} - count: 1 - - expectLogMessages: - - client: *client - messages: - - level: debug - component: connection - data: - message: "Connection pool created" - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - waitQueueSize: 100 - - - level: debug - component: connection - data: - message: "Connection pool ready" - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - # Drivers that do not support waitQueueMultiple will need to skip this test. - - description: "waitQueueMultiple should be included in connection pool created message when specified" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - # Observe and wait for a poolReadyEvent so we can ensure the pool has been created and is - # ready by the time we assert on log messages, in order to avoid raciness around which messages - # are emitted. - observeEvents: - - poolReadyEvent - observeLogMessages: - connection: debug - uriOptions: - waitQueueSize: 5 - - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - poolReadyEvent: {} - count: 1 - - expectLogMessages: - - client: *client - messages: - - level: debug - component: connection - data: - message: "Connection pool created" - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - waitQueueMultiple: 5 - - - level: debug - component: connection - data: - message: "Connection pool ready" - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } diff --git a/testdata/connection-monitoring-and-pooling/pool-checkin-destroy-closed.json b/testdata/connection-monitoring-and-pooling/pool-checkin-destroy-closed.json deleted file mode 100644 index 55d0c03752..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkin-destroy-closed.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "must destroy checked in connection if pool has been closed", - "operations": [ - { - "name": "ready" - }, - { - "name": "checkOut", - "label": "conn" - }, - { - "name": "close" - }, - { - "name": "checkIn", - "connection": "conn" - } - ], - "events": [ - { - "type": "ConnectionCheckedOut", - "connectionId": 1, - "address": 42 - }, - { - "type": "ConnectionPoolClosed", - "address": 42 - }, - { - "type": "ConnectionCheckedIn", - "connectionId": 1, - "address": 42 - }, - { - "type": "ConnectionClosed", - "connectionId": 1, - "reason": "poolClosed", - "address": 42 - } - ], - "ignore": [ - "ConnectionPoolCreated", - "ConnectionPoolReady", - "ConnectionCreated", - "ConnectionReady", - "ConnectionCheckOutStarted" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-checkin-destroy-closed.yml b/testdata/connection-monitoring-and-pooling/pool-checkin-destroy-closed.yml deleted file mode 100644 index cd6f6bb27c..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkin-destroy-closed.yml +++ /dev/null @@ -1,29 +0,0 @@ -version: 1 -style: unit -description: must destroy checked in connection if pool has been closed -operations: - - name: ready - - name: checkOut - label: conn - - name: close - - name: checkIn - connection: conn -events: - - type: ConnectionCheckedOut - connectionId: 1 - address: 42 - - type: ConnectionPoolClosed - address: 42 - - type: ConnectionCheckedIn - connectionId: 1 - address: 42 - - type: ConnectionClosed - connectionId: 1 - reason: poolClosed - address: 42 -ignore: - - ConnectionPoolCreated - - ConnectionPoolReady - - ConnectionCreated - - ConnectionReady - - ConnectionCheckOutStarted diff --git a/testdata/connection-monitoring-and-pooling/pool-checkin-destroy-stale.json b/testdata/connection-monitoring-and-pooling/pool-checkin-destroy-stale.json deleted file mode 100644 index 6ffb8f53d1..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkin-destroy-stale.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "must destroy checked in connection if it is stale", - "operations": [ - { - "name": "ready" - }, - { - "name": "checkOut", - "label": "conn" - }, - { - "name": "clear" - }, - { - "name": "checkIn", - "connection": "conn" - } - ], - "events": [ - { - "type": "ConnectionCheckedOut", - "connectionId": 1, - "address": 42 - }, - { - "type": "ConnectionPoolCleared", - "address": 42 - }, - { - "type": "ConnectionCheckedIn", - "connectionId": 1, - "address": 42 - }, - { - "type": "ConnectionClosed", - "connectionId": 1, - "reason": "stale", - "address": 42 - } - ], - "ignore": [ - "ConnectionPoolCreated", - "ConnectionPoolReady", - "ConnectionCreated", - "ConnectionReady", - "ConnectionCheckOutStarted" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-checkin-destroy-stale.yml b/testdata/connection-monitoring-and-pooling/pool-checkin-destroy-stale.yml deleted file mode 100644 index f54ae7675d..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkin-destroy-stale.yml +++ /dev/null @@ -1,29 +0,0 @@ -version: 1 -style: unit -description: must destroy checked in connection if it is stale -operations: - - name: ready - - name: checkOut - label: conn - - name: clear - - name: checkIn - connection: conn -events: - - type: ConnectionCheckedOut - connectionId: 1 - address: 42 - - type: ConnectionPoolCleared - address: 42 - - type: ConnectionCheckedIn - connectionId: 1 - address: 42 - - type: ConnectionClosed - connectionId: 1 - reason: stale - address: 42 -ignore: - - ConnectionPoolCreated - - ConnectionPoolReady - - ConnectionCreated - - ConnectionReady - - ConnectionCheckOutStarted diff --git a/testdata/connection-monitoring-and-pooling/pool-checkin-make-available.json b/testdata/connection-monitoring-and-pooling/pool-checkin-make-available.json deleted file mode 100644 index 41c522ae67..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkin-make-available.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "must make valid checked in connection available", - "operations": [ - { - "name": "ready" - }, - { - "name": "checkOut", - "label": "conn" - }, - { - "name": "checkIn", - "connection": "conn" - }, - { - "name": "checkOut" - } - ], - "events": [ - { - "type": "ConnectionCheckedOut", - "connectionId": 1, - "address": 42 - }, - { - "type": "ConnectionCheckedIn", - "connectionId": 1, - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 1, - "address": 42 - } - ], - "ignore": [ - "ConnectionPoolCreated", - "ConnectionPoolReady", - "ConnectionCreated", - "ConnectionReady", - "ConnectionCheckOutStarted" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-checkin-make-available.yml b/testdata/connection-monitoring-and-pooling/pool-checkin-make-available.yml deleted file mode 100644 index 5179432788..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkin-make-available.yml +++ /dev/null @@ -1,26 +0,0 @@ -version: 1 -style: unit -description: must make valid checked in connection available -operations: - - name: ready - - name: checkOut - label: conn - - name: checkIn - connection: conn - - name: checkOut -events: - - type: ConnectionCheckedOut - connectionId: 1 - address: 42 - - type: ConnectionCheckedIn - connectionId: 1 - address: 42 - - type: ConnectionCheckedOut - connectionId: 1 - address: 42 -ignore: - - ConnectionPoolCreated - - ConnectionPoolReady - - ConnectionCreated - - ConnectionReady - - ConnectionCheckOutStarted diff --git a/testdata/connection-monitoring-and-pooling/pool-checkin.json b/testdata/connection-monitoring-and-pooling/pool-checkin.json deleted file mode 100644 index 3b40cec6f4..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkin.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "must have a method of allowing the driver to check in a connection", - "operations": [ - { - "name": "ready" - }, - { - "name": "checkOut", - "label": "conn" - }, - { - "name": "checkIn", - "connection": "conn" - } - ], - "events": [ - { - "type": "ConnectionCheckedIn", - "connectionId": 42, - "address": 42 - } - ], - "ignore": [ - "ConnectionPoolCreated", - "ConnectionPoolReady", - "ConnectionCreated", - "ConnectionReady", - "ConnectionClosed", - "ConnectionCheckOutStarted", - "ConnectionCheckedOut" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-checkin.yml b/testdata/connection-monitoring-and-pooling/pool-checkin.yml deleted file mode 100644 index b6a4320376..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkin.yml +++ /dev/null @@ -1,21 +0,0 @@ -version: 1 -style: unit -description: must have a method of allowing the driver to check in a connection -operations: - - name: ready - - name: checkOut - label: conn - - name: checkIn - connection: conn -events: - - type: ConnectionCheckedIn - connectionId: 42 - address: 42 -ignore: - - ConnectionPoolCreated - - ConnectionPoolReady - - ConnectionCreated - - ConnectionReady - - ConnectionClosed - - ConnectionCheckOutStarted - - ConnectionCheckedOut diff --git a/testdata/connection-monitoring-and-pooling/pool-checkout-connection.json b/testdata/connection-monitoring-and-pooling/pool-checkout-connection.json deleted file mode 100644 index d89b342605..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkout-connection.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "must be able to check out a connection", - "operations": [ - { - "name": "ready" - }, - { - "name": "checkOut" - } - ], - "events": [ - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCreated", - "connectionId": 1, - "address": 42 - }, - { - "type": "ConnectionReady", - "connectionId": 1, - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 1, - "address": 42 - } - ], - "ignore": [ - "ConnectionPoolReady", - "ConnectionPoolCreated" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-checkout-connection.yml b/testdata/connection-monitoring-and-pooling/pool-checkout-connection.yml deleted file mode 100644 index bbbd03ff5c..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkout-connection.yml +++ /dev/null @@ -1,21 +0,0 @@ -version: 1 -style: unit -description: must be able to check out a connection -operations: - - name: ready - - name: checkOut -events: - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCreated - connectionId: 1 - address: 42 - - type: ConnectionReady - connectionId: 1 - address: 42 - - type: ConnectionCheckedOut - connectionId: 1 - address: 42 -ignore: - - ConnectionPoolReady - - ConnectionPoolCreated diff --git a/testdata/connection-monitoring-and-pooling/pool-checkout-custom-maxConnecting-is-enforced.json b/testdata/connection-monitoring-and-pooling/pool-checkout-custom-maxConnecting-is-enforced.json deleted file mode 100644 index 6620f82fd9..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkout-custom-maxConnecting-is-enforced.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "version": 1, - "style": "integration", - "description": "custom maxConnecting is enforced", - "runOn": [ - { - "minServerVersion": "4.4.0" - } - ], - "failPoint": { - "configureFailPoint": "failCommand", - "mode": "alwaysOn", - "data": { - "failCommands": [ - "isMaster", - "hello" - ], - "closeConnection": false, - "blockConnection": true, - "blockTimeMS": 500 - } - }, - "poolOptions": { - "maxConnecting": 1, - "maxPoolSize": 2, - "waitQueueTimeoutMS": 5000 - }, - "operations": [ - { - "name": "ready" - }, - { - "name": "start", - "target": "thread1" - }, - { - "name": "start", - "target": "thread2" - }, - { - "name": "checkOut", - "thread": "thread1" - }, - { - "name": "waitForEvent", - "event": "ConnectionCreated", - "count": 1 - }, - { - "name": "checkOut", - "thread": "thread2" - }, - { - "name": "waitForEvent", - "event": "ConnectionReady", - "count": 2 - } - ], - "events": [ - { - "type": "ConnectionCreated" - }, - { - "type": "ConnectionReady" - }, - { - "type": "ConnectionCreated" - }, - { - "type": "ConnectionReady" - } - ], - "ignore": [ - "ConnectionCheckOutStarted", - "ConnectionCheckedIn", - "ConnectionCheckedOut", - "ConnectionClosed", - "ConnectionPoolCreated", - "ConnectionPoolReady" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-checkout-custom-maxConnecting-is-enforced.yml b/testdata/connection-monitoring-and-pooling/pool-checkout-custom-maxConnecting-is-enforced.yml deleted file mode 100644 index dc8852696e..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkout-custom-maxConnecting-is-enforced.yml +++ /dev/null @@ -1,50 +0,0 @@ -version: 1 -style: integration -description: custom maxConnecting is enforced -runOn: - - - minServerVersion: "4.4.0" -failPoint: - configureFailPoint: failCommand - mode: "alwaysOn" - data: - failCommands: ["isMaster","hello"] - closeConnection: false - blockConnection: true - blockTimeMS: 500 -poolOptions: - maxConnecting: 1 - # gives opportunity for the checkout in thread2 to establish a new connection, which it must not do until thread1 establishes one - maxPoolSize: 2 - waitQueueTimeoutMS: 5000 -operations: - - name: ready - # thread1 exists to consume the single permit to open a connection, - # so that thread2 would be blocked acquiring a permit, which results in ordering its ConnectionCreated event after - # the ConnectionReady event from thread1. - - name: start - target: thread1 - - name: start - target: thread2 - - name: checkOut - thread: thread1 - - name: waitForEvent - event: ConnectionCreated - count: 1 - - name: checkOut - thread: thread2 - - name: waitForEvent - event: ConnectionReady - count: 2 -events: - - type: ConnectionCreated - - type: ConnectionReady - - type: ConnectionCreated - - type: ConnectionReady -ignore: - - ConnectionCheckOutStarted - - ConnectionCheckedIn - - ConnectionCheckedOut - - ConnectionClosed - - ConnectionPoolCreated - - ConnectionPoolReady diff --git a/testdata/connection-monitoring-and-pooling/pool-checkout-error-closed.json b/testdata/connection-monitoring-and-pooling/pool-checkout-error-closed.json deleted file mode 100644 index ee2926e1c0..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkout-error-closed.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "must throw error if checkOut is called on a closed pool", - "operations": [ - { - "name": "ready" - }, - { - "name": "checkOut", - "label": "conn1" - }, - { - "name": "checkIn", - "connection": "conn1" - }, - { - "name": "close" - }, - { - "name": "checkOut" - } - ], - "error": { - "type": "PoolClosedError", - "message": "Attempted to check out a connection from closed connection pool" - }, - "events": [ - { - "type": "ConnectionPoolCreated", - "address": 42, - "options": 42 - }, - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "address": 42, - "connectionId": 42 - }, - { - "type": "ConnectionCheckedIn", - "address": 42, - "connectionId": 42 - }, - { - "type": "ConnectionPoolClosed", - "address": 42 - }, - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCheckOutFailed", - "address": 42, - "reason": "poolClosed" - } - ], - "ignore": [ - "ConnectionPoolReady", - "ConnectionCreated", - "ConnectionReady", - "ConnectionClosed" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-checkout-error-closed.yml b/testdata/connection-monitoring-and-pooling/pool-checkout-error-closed.yml deleted file mode 100644 index 4d1b0f3b29..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkout-error-closed.yml +++ /dev/null @@ -1,38 +0,0 @@ -version: 1 -style: unit -description: must throw error if checkOut is called on a closed pool -operations: - - name: ready - - name: checkOut - label: conn1 - - name: checkIn - connection: conn1 - - name: close - - name: checkOut -error: - type: PoolClosedError - message: Attempted to check out a connection from closed connection pool -events: - - type: ConnectionPoolCreated - address: 42 - options: 42 - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCheckedOut - address: 42 - connectionId: 42 - - type: ConnectionCheckedIn - address: 42 - connectionId: 42 - - type: ConnectionPoolClosed - address: 42 - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCheckOutFailed - address: 42 - reason: poolClosed -ignore: - - ConnectionPoolReady - - ConnectionCreated - - ConnectionReady - - ConnectionClosed diff --git a/testdata/connection-monitoring-and-pooling/pool-checkout-maxConnecting-is-enforced.json b/testdata/connection-monitoring-and-pooling/pool-checkout-maxConnecting-is-enforced.json deleted file mode 100644 index 732478bf7e..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkout-maxConnecting-is-enforced.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "version": 1, - "style": "integration", - "description": "maxConnecting is enforced", - "runOn": [ - { - "minServerVersion": "4.4.0" - } - ], - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 50 - }, - "data": { - "failCommands": [ - "isMaster", - "hello" - ], - "closeConnection": false, - "blockConnection": true, - "blockTimeMS": 750 - } - }, - "poolOptions": { - "maxPoolSize": 10, - "waitQueueTimeoutMS": 5000 - }, - "operations": [ - { - "name": "ready" - }, - { - "name": "start", - "target": "thread1" - }, - { - "name": "start", - "target": "thread2" - }, - { - "name": "start", - "target": "thread3" - }, - { - "name": "checkOut", - "thread": "thread1" - }, - { - "name": "waitForEvent", - "event": "ConnectionCreated", - "count": 1 - }, - { - "name": "wait", - "ms": 100 - }, - { - "name": "checkOut", - "thread": "thread2" - }, - { - "name": "checkOut", - "thread": "thread3" - }, - { - "name": "waitForEvent", - "event": "ConnectionReady", - "count": 3 - } - ], - "events": [ - { - "type": "ConnectionCreated", - "address": 42, - "connectionId": 1 - }, - { - "type": "ConnectionCreated", - "address": 42 - }, - { - "type": "ConnectionReady", - "address": 42, - "connectionId": 1 - }, - { - "type": "ConnectionCreated", - "address": 42 - }, - { - "type": "ConnectionReady", - "address": 42 - }, - { - "type": "ConnectionReady", - "address": 42 - } - ], - "ignore": [ - "ConnectionCheckOutStarted", - "ConnectionCheckedIn", - "ConnectionCheckedOut", - "ConnectionClosed", - "ConnectionPoolCreated", - "ConnectionPoolReady" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-checkout-maxConnecting-is-enforced.yml b/testdata/connection-monitoring-and-pooling/pool-checkout-maxConnecting-is-enforced.yml deleted file mode 100644 index 1b7c4bdeed..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkout-maxConnecting-is-enforced.yml +++ /dev/null @@ -1,79 +0,0 @@ -version: 1 -style: integration -description: maxConnecting is enforced -runOn: - - - # required for blockConnection in fail point - minServerVersion: "4.4.0" -failPoint: - configureFailPoint: failCommand - # high amount to ensure not interfered with by monitor checks. - mode: { times: 50 } - data: - failCommands: ["isMaster","hello"] - closeConnection: false - blockConnection: true - blockTimeMS: 750 -poolOptions: - maxPoolSize: 10 - waitQueueTimeoutMS: 5000 -operations: - - name: ready - # start 3 threads - - name: start - target: thread1 - - name: start - target: thread2 - - name: start - target: thread3 - # start creating a Connection. This will take a while - # due to the fail point. - - name: checkOut - thread: thread1 - # wait for thread1 to actually start creating a Connection - - name: waitForEvent - event: ConnectionCreated - count: 1 - # wait some more time to ensure thread1 has begun establishing a Connection - - name: wait - ms: 100 - # start 2 check out requests. Only one thread should - # start creating a Connection and the other one should be - # waiting for pendingConnectionCount to be less than maxConnecting, - # only starting once thread1 finishes creating its Connection. - - name: checkOut - thread: thread2 - - name: checkOut - thread: thread3 - # wait until all Connections have been created. - - name: waitForEvent - event: ConnectionReady - count: 3 -events: - # thread1 creates its connection - - type: ConnectionCreated - address: 42 - connectionId: 1 - # either thread2 or thread3 creates its connection - # the other thread is stuck waiting for maxConnecting to come down - - type: ConnectionCreated - address: 42 - # thread1 finishes establishing its connection, freeing - # up the blocked thread to start establishing - - type: ConnectionReady - address: 42 - connectionId: 1 - - type: ConnectionCreated - address: 42 - # the remaining two Connections finish establishing - - type: ConnectionReady - address: 42 - - type: ConnectionReady - address: 42 -ignore: - - ConnectionCheckOutStarted - - ConnectionCheckedIn - - ConnectionCheckedOut - - ConnectionClosed - - ConnectionPoolCreated - - ConnectionPoolReady diff --git a/testdata/connection-monitoring-and-pooling/pool-checkout-maxConnecting-timeout.json b/testdata/connection-monitoring-and-pooling/pool-checkout-maxConnecting-timeout.json deleted file mode 100644 index 84ddf8fdba..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkout-maxConnecting-timeout.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "version": 1, - "style": "integration", - "description": "waiting on maxConnecting is limited by WaitQueueTimeoutMS", - "runOn": [ - { - "minServerVersion": "4.4.0" - } - ], - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 50 - }, - "data": { - "failCommands": [ - "isMaster", - "hello" - ], - "closeConnection": false, - "blockConnection": true, - "blockTimeMS": 750 - } - }, - "poolOptions": { - "maxPoolSize": 10, - "waitQueueTimeoutMS": 50 - }, - "operations": [ - { - "name": "ready" - }, - { - "name": "start", - "target": "thread1" - }, - { - "name": "checkOut", - "thread": "thread1" - }, - { - "name": "start", - "target": "thread2" - }, - { - "name": "checkOut", - "thread": "thread2" - }, - { - "name": "waitForEvent", - "event": "ConnectionCreated", - "count": 2 - }, - { - "name": "start", - "target": "thread3" - }, - { - "name": "checkOut", - "thread": "thread3" - }, - { - "name": "waitForEvent", - "event": "ConnectionCheckOutFailed", - "count": 1 - }, - { - "name": "waitForThread", - "target": "thread3" - } - ], - "error": { - "type": "WaitQueueTimeoutError", - "message": "Timed out while checking out a connection from connection pool" - }, - "events": [ - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCheckOutFailed", - "reason": "timeout", - "address": 42 - } - ], - "ignore": [ - "ConnectionCreated", - "ConnectionCheckedIn", - "ConnectionCheckedOut", - "ConnectionClosed", - "ConnectionPoolCreated", - "ConnectionPoolReady" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-checkout-maxConnecting-timeout.yml b/testdata/connection-monitoring-and-pooling/pool-checkout-maxConnecting-timeout.yml deleted file mode 100644 index 383f666ad0..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkout-maxConnecting-timeout.yml +++ /dev/null @@ -1,69 +0,0 @@ -version: 1 -style: integration -description: waiting on maxConnecting is limited by WaitQueueTimeoutMS -runOn: - - - # required for blockConnection in fail point - minServerVersion: "4.4.0" -failPoint: - configureFailPoint: failCommand - # high amount to ensure not interfered with by monitor checks. - mode: { times: 50 } - data: - failCommands: ["isMaster","hello"] - closeConnection: false - blockConnection: true - blockTimeMS: 750 -poolOptions: - maxPoolSize: 10 - # Drivers that limit connection establishment by waitQueueTimeoutMS may skip - # this test. While waitQueueTimeoutMS is technically not supposed to limit establishment time, - # it will soon be deprecated, so it is easier for those drivers to just skip this test. - waitQueueTimeoutMS: 50 -operations: - - name: ready - # start creating two connections simultaneously. - - name: start - target: thread1 - - name: checkOut - thread: thread1 - - name: start - target: thread2 - - name: checkOut - thread: thread2 - # wait for other two threads to start establishing - - name: waitForEvent - event: ConnectionCreated - count: 2 - # start a third thread that will be blocked waiting for - # one of the other two to finish - - name: start - target: thread3 - - name: checkOut - thread: thread3 - - name: waitForEvent - event: ConnectionCheckOutFailed - count: 1 - # rejoin thread3, should experience error - - name: waitForThread - target: thread3 -error: - type: WaitQueueTimeoutError - message: Timed out while checking out a connection from connection pool -events: - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCheckOutFailed - reason: timeout - address: 42 -ignore: - - ConnectionCreated - - ConnectionCheckedIn - - ConnectionCheckedOut - - ConnectionClosed - - ConnectionPoolCreated - - ConnectionPoolReady diff --git a/testdata/connection-monitoring-and-pooling/pool-checkout-minPoolSize-connection-maxConnecting.json b/testdata/connection-monitoring-and-pooling/pool-checkout-minPoolSize-connection-maxConnecting.json deleted file mode 100644 index 3b0d43e877..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkout-minPoolSize-connection-maxConnecting.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "version": 1, - "style": "integration", - "description": "threads blocked by maxConnecting check out minPoolSize connections", - "runOn": [ - { - "minServerVersion": "4.4.0" - } - ], - "failPoint": { - "configureFailPoint": "failCommand", - "mode": "alwaysOn", - "data": { - "failCommands": [ - "isMaster", - "hello" - ], - "closeConnection": false, - "blockConnection": true, - "blockTimeMS": 500 - } - }, - "poolOptions": { - "minPoolSize": 2, - "maxPoolSize": 3, - "waitQueueTimeoutMS": 5000 - }, - "operations": [ - { - "name": "ready" - }, - { - "name": "start", - "target": "thread1" - }, - { - "name": "start", - "target": "thread2" - }, - { - "name": "wait", - "ms": 200 - }, - { - "name": "checkOut", - "thread": "thread1" - }, - { - "name": "waitForEvent", - "event": "ConnectionCreated", - "count": 2 - }, - { - "name": "checkOut", - "thread": "thread2" - }, - { - "name": "waitForEvent", - "event": "ConnectionCheckedOut", - "count": 2 - } - ], - "events": [ - { - "type": "ConnectionCreated", - "address": 42 - }, - { - "type": "ConnectionCreated", - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "address": 42 - } - ], - "ignore": [ - "ConnectionPoolReady", - "ConnectionClosed", - "ConnectionReady", - "ConnectionPoolCreated", - "ConnectionCheckOutStarted" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-checkout-minPoolSize-connection-maxConnecting.yml b/testdata/connection-monitoring-and-pooling/pool-checkout-minPoolSize-connection-maxConnecting.yml deleted file mode 100644 index 0491c53982..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkout-minPoolSize-connection-maxConnecting.yml +++ /dev/null @@ -1,63 +0,0 @@ -version: 1 -style: integration -description: threads blocked by maxConnecting check out minPoolSize connections -runOn: - - - # required for blockConnection in fail point - minServerVersion: "4.4.0" -failPoint: - configureFailPoint: failCommand - mode: "alwaysOn" - data: - failCommands: ["isMaster","hello"] - closeConnection: false - blockConnection: true - blockTimeMS: 500 -poolOptions: - # allows both thread1 and the background thread to start opening connections concurrently - minPoolSize: 2 - # gives opportunity for the checkout in thread2 to open a new connection, which it must not do nonetheless - maxPoolSize: 3 - waitQueueTimeoutMS: 5000 -operations: - - name: ready - # thread1 exists to hold on one of the two permits to open a connection (the other one is initially held by the background thread), - # so that thread2 would be blocked acquiring a permit, which opens an opportunity for it to grab the connection newly opened - # by the background thread instead of opening a third connection. - - name: start - target: thread1 - - name: start - target: thread2 - # Ideally, thread1 should be holding for its permit to open a connection till the end of the test, but we cannot express that. - # This delay emulates the above requirement: - # - it is long enough to make sure that the background thread opens a connection before thread1 releases its permit; - # - it is short enough to allow thread2 to become blocked acquiring a permit to open a connection, and then grab the connection - # opened by the background thread, before the background thread releases its permit. - - name: wait - ms: 200 - - name: checkOut - thread: thread1 - - name: waitForEvent - event: ConnectionCreated - count: 2 - - name: checkOut - thread: thread2 - - name: waitForEvent - event: ConnectionCheckedOut - count: 2 -events: - # exactly 2 connections must be created and checked out - - type: ConnectionCreated - address: 42 - - type: ConnectionCreated - address: 42 - - type: ConnectionCheckedOut - address: 42 - - type: ConnectionCheckedOut - address: 42 -ignore: - - ConnectionPoolReady - - ConnectionClosed - - ConnectionReady - - ConnectionPoolCreated - - ConnectionCheckOutStarted diff --git a/testdata/connection-monitoring-and-pooling/pool-checkout-multiple.json b/testdata/connection-monitoring-and-pooling/pool-checkout-multiple.json deleted file mode 100644 index 07a4eda629..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkout-multiple.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "must be able to check out multiple connections at the same time", - "operations": [ - { - "name": "ready" - }, - { - "name": "start", - "target": "thread1" - }, - { - "name": "start", - "target": "thread2" - }, - { - "name": "start", - "target": "thread3" - }, - { - "name": "checkOut", - "thread": "thread1" - }, - { - "name": "checkOut", - "thread": "thread2" - }, - { - "name": "checkOut", - "thread": "thread3" - }, - { - "name": "waitForThread", - "target": "thread1" - }, - { - "name": "waitForThread", - "target": "thread2" - }, - { - "name": "waitForThread", - "target": "thread3" - } - ], - "events": [ - { - "type": "ConnectionCheckedOut", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 42, - "address": 42 - } - ], - "ignore": [ - "ConnectionCreated", - "ConnectionPoolReady", - "ConnectionReady", - "ConnectionPoolCreated", - "ConnectionCheckOutStarted" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-checkout-multiple.yml b/testdata/connection-monitoring-and-pooling/pool-checkout-multiple.yml deleted file mode 100644 index 03a355df06..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkout-multiple.yml +++ /dev/null @@ -1,39 +0,0 @@ -version: 1 -style: unit -description: must be able to check out multiple connections at the same time -operations: - - name: ready - - name: start - target: thread1 - - name: start - target: thread2 - - name: start - target: thread3 - - name: checkOut - thread: thread1 - - name: checkOut - thread: thread2 - - name: checkOut - thread: thread3 - - name: waitForThread - target: thread1 - - name: waitForThread - target: thread2 - - name: waitForThread - target: thread3 -events: - - type: ConnectionCheckedOut - connectionId: 42 - address: 42 - - type: ConnectionCheckedOut - connectionId: 42 - address: 42 - - type: ConnectionCheckedOut - connectionId: 42 - address: 42 -ignore: - - ConnectionCreated - - ConnectionPoolReady - - ConnectionReady - - ConnectionPoolCreated - - ConnectionCheckOutStarted diff --git a/testdata/connection-monitoring-and-pooling/pool-checkout-no-idle.json b/testdata/connection-monitoring-and-pooling/pool-checkout-no-idle.json deleted file mode 100644 index 0b0fe572ff..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkout-no-idle.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "must destroy and must not check out an idle connection if found while iterating available connections", - "poolOptions": { - "maxIdleTimeMS": 10, - "backgroundThreadIntervalMS": -1 - }, - "operations": [ - { - "name": "ready" - }, - { - "name": "checkOut", - "label": "conn" - }, - { - "name": "checkIn", - "connection": "conn" - }, - { - "name": "wait", - "ms": 50 - }, - { - "name": "checkOut" - }, - { - "name": "waitForEvent", - "event": "ConnectionCheckedOut", - "count": 2 - } - ], - "events": [ - { - "type": "ConnectionPoolCreated", - "address": 42, - "options": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 1, - "address": 42 - }, - { - "type": "ConnectionCheckedIn", - "connectionId": 1, - "address": 42 - }, - { - "type": "ConnectionClosed", - "connectionId": 1, - "reason": "idle", - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 2, - "address": 42 - } - ], - "ignore": [ - "ConnectionReady", - "ConnectionPoolReady", - "ConnectionCreated", - "ConnectionCheckOutStarted" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-checkout-no-idle.yml b/testdata/connection-monitoring-and-pooling/pool-checkout-no-idle.yml deleted file mode 100644 index 4df351211c..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkout-no-idle.yml +++ /dev/null @@ -1,41 +0,0 @@ -version: 1 -style: unit -description: must destroy and must not check out an idle connection if found while iterating available connections -poolOptions: - maxIdleTimeMS: 10 - backgroundThreadIntervalMS: -1 -operations: - - name: ready - - name: checkOut - label: conn - - name: checkIn - connection: conn - - name: wait - ms: 50 - - name: checkOut - - name: waitForEvent - event: ConnectionCheckedOut - count: 2 -events: - - type: ConnectionPoolCreated - address: 42 - options: 42 - - type: ConnectionCheckedOut - connectionId: 1 - address: 42 - - type: ConnectionCheckedIn - connectionId: 1 - address: 42 - # In between these, wait so connection becomes idle - - type: ConnectionClosed - connectionId: 1 - reason: idle - address: 42 - - type: ConnectionCheckedOut - connectionId: 2 - address: 42 -ignore: - - ConnectionReady - - ConnectionPoolReady - - ConnectionCreated - - ConnectionCheckOutStarted diff --git a/testdata/connection-monitoring-and-pooling/pool-checkout-no-stale.json b/testdata/connection-monitoring-and-pooling/pool-checkout-no-stale.json deleted file mode 100644 index ec76f4e9c8..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkout-no-stale.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "must destroy and must not check out a stale connection if found while iterating available connections", - "poolOptions": { - "backgroundThreadIntervalMS": -1 - }, - "operations": [ - { - "name": "ready" - }, - { - "name": "checkOut", - "label": "conn" - }, - { - "name": "checkIn", - "connection": "conn" - }, - { - "name": "clear" - }, - { - "name": "ready" - }, - { - "name": "checkOut" - }, - { - "name": "waitForEvent", - "event": "ConnectionCheckedOut", - "count": 2 - } - ], - "events": [ - { - "type": "ConnectionPoolCreated", - "address": 42, - "options": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 1, - "address": 42 - }, - { - "type": "ConnectionCheckedIn", - "connectionId": 1, - "address": 42 - }, - { - "type": "ConnectionPoolCleared", - "address": 42 - }, - { - "type": "ConnectionClosed", - "connectionId": 1, - "reason": "stale", - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 2, - "address": 42 - } - ], - "ignore": [ - "ConnectionReady", - "ConnectionPoolReady", - "ConnectionCreated", - "ConnectionCheckOutStarted" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-checkout-no-stale.yml b/testdata/connection-monitoring-and-pooling/pool-checkout-no-stale.yml deleted file mode 100644 index 02d827b773..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkout-no-stale.yml +++ /dev/null @@ -1,41 +0,0 @@ -version: 1 -style: unit -description: must destroy and must not check out a stale connection if found while iterating available connections -poolOptions: - backgroundThreadIntervalMS: -1 -operations: - - name: ready - - name: checkOut - label: conn - - name: checkIn - connection: conn - - name: clear - - name: ready - - name: checkOut - - name: waitForEvent - event: ConnectionCheckedOut - count: 2 -events: - - type: ConnectionPoolCreated - address: 42 - options: 42 - - type: ConnectionCheckedOut - connectionId: 1 - address: 42 - - type: ConnectionCheckedIn - connectionId: 1 - address: 42 - - type: ConnectionPoolCleared - address: 42 - - type: ConnectionClosed - connectionId: 1 - reason: stale - address: 42 - - type: ConnectionCheckedOut - connectionId: 2 - address: 42 -ignore: - - ConnectionReady - - ConnectionPoolReady - - ConnectionCreated - - ConnectionCheckOutStarted diff --git a/testdata/connection-monitoring-and-pooling/pool-checkout-returned-connection-maxConnecting.json b/testdata/connection-monitoring-and-pooling/pool-checkout-returned-connection-maxConnecting.json deleted file mode 100644 index 965d56f6d8..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkout-returned-connection-maxConnecting.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "version": 1, - "style": "integration", - "description": "threads blocked by maxConnecting check out returned connections", - "runOn": [ - { - "minServerVersion": "4.4.0" - } - ], - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 50 - }, - "data": { - "failCommands": [ - "isMaster", - "hello" - ], - "closeConnection": false, - "blockConnection": true, - "blockTimeMS": 750 - } - }, - "poolOptions": { - "maxPoolSize": 10, - "waitQueueTimeoutMS": 5000 - }, - "operations": [ - { - "name": "ready" - }, - { - "name": "checkOut", - "label": "conn0" - }, - { - "name": "start", - "target": "thread1" - }, - { - "name": "checkOut", - "thread": "thread1" - }, - { - "name": "start", - "target": "thread2" - }, - { - "name": "checkOut", - "thread": "thread2" - }, - { - "name": "start", - "target": "thread3" - }, - { - "name": "checkOut", - "thread": "thread3" - }, - { - "name": "waitForEvent", - "event": "ConnectionCheckOutStarted", - "count": 4 - }, - { - "name": "wait", - "ms": 100 - }, - { - "name": "checkIn", - "connection": "conn0" - }, - { - "name": "waitForEvent", - "event": "ConnectionCheckedOut", - "count": 4 - } - ], - "events": [ - { - "type": "ConnectionCreated", - "address": 42, - "connectionId": 1 - }, - { - "type": "ConnectionCheckedOut", - "address": 42 - }, - { - "type": "ConnectionCreated", - "address": 42 - }, - { - "type": "ConnectionCreated", - "address": 42 - }, - { - "type": "ConnectionCheckedIn", - "connectionId": 1, - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 1, - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "address": 42 - } - ], - "ignore": [ - "ConnectionPoolReady", - "ConnectionClosed", - "ConnectionReady", - "ConnectionPoolCreated", - "ConnectionCheckOutStarted" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-checkout-returned-connection-maxConnecting.yml b/testdata/connection-monitoring-and-pooling/pool-checkout-returned-connection-maxConnecting.yml deleted file mode 100644 index dab6e557d8..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-checkout-returned-connection-maxConnecting.yml +++ /dev/null @@ -1,86 +0,0 @@ -version: 1 -style: integration -description: threads blocked by maxConnecting check out returned connections -runOn: - - - # required for blockConnection in fail point - minServerVersion: "4.4.0" -failPoint: - configureFailPoint: failCommand - # high amount to ensure not interfered with by monitor checks. - mode: { times: 50 } - data: - failCommands: ["isMaster","hello"] - closeConnection: false - blockConnection: true - blockTimeMS: 750 -poolOptions: - maxPoolSize: 10 - waitQueueTimeoutMS: 5000 -operations: - - name: ready - # check out a connection and hold on to it. - - name: checkOut - label: conn0 - # then start three threads that all attempt to check out. Two threads - # will fill maxConnecting, and the other should be waiting either for - # the other two to finish or for the main thread to check its connection - # back in. - - name: start - target: thread1 - - name: checkOut - thread: thread1 - - name: start - target: thread2 - - name: checkOut - thread: thread2 - - name: start - target: thread3 - - name: checkOut - thread: thread3 - # wait for all three to start checking out and a little longer - # for the establishments to begin. - - name: waitForEvent - event: ConnectionCheckOutStarted - count: 4 - - name: wait - ms: 100 - # check original connection back in, so the thread that isn't - # currently establishing will become unblocked. Then wait for - # all threads to complete. - - name: checkIn - connection: conn0 - - name: waitForEvent - event: ConnectionCheckedOut - count: 4 -events: - # main thread checking out a Connection and holding it - - type: ConnectionCreated - address: 42 - connectionId: 1 - - type: ConnectionCheckedOut - address: 42 - # two threads creating their Connections - - type: ConnectionCreated - address: 42 - - type: ConnectionCreated - address: 42 - # main thread checking its Connection back in - - type: ConnectionCheckedIn - connectionId: 1 - address: 42 - # remaining thread checking out the returned Connection - - type: ConnectionCheckedOut - connectionId: 1 - address: 42 - # first two threads finishing Connection establishment - - type: ConnectionCheckedOut - address: 42 - - type: ConnectionCheckedOut - address: 42 -ignore: - - ConnectionPoolReady - - ConnectionClosed - - ConnectionReady - - ConnectionPoolCreated - - ConnectionCheckOutStarted diff --git a/testdata/connection-monitoring-and-pooling/pool-clear-clears-waitqueue.json b/testdata/connection-monitoring-and-pooling/pool-clear-clears-waitqueue.json deleted file mode 100644 index d4aef928c7..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-clear-clears-waitqueue.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "clearing pool clears the WaitQueue", - "poolOptions": { - "maxPoolSize": 1, - "waitQueueTimeoutMS": 30000 - }, - "operations": [ - { - "name": "ready" - }, - { - "name": "checkOut" - }, - { - "name": "start", - "target": "thread1" - }, - { - "name": "checkOut", - "thread": "thread1" - }, - { - "name": "start", - "target": "thread2" - }, - { - "name": "checkOut", - "thread": "thread2" - }, - { - "name": "start", - "target": "thread3" - }, - { - "name": "checkOut", - "thread": "thread3" - }, - { - "name": "waitForEvent", - "event": "ConnectionCheckOutStarted", - "count": 4 - }, - { - "name": "clear" - }, - { - "name": "waitForEvent", - "event": "ConnectionCheckOutFailed", - "count": 3, - "timeout": 1000 - } - ], - "events": [ - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "address": 42 - }, - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCheckOutFailed", - "reason": "connectionError", - "address": 42 - }, - { - "type": "ConnectionCheckOutFailed", - "reason": "connectionError", - "address": 42 - }, - { - "type": "ConnectionCheckOutFailed", - "reason": "connectionError", - "address": 42 - } - ], - "ignore": [ - "ConnectionPoolReady", - "ConnectionPoolCleared", - "ConnectionPoolCreated", - "ConnectionCreated", - "ConnectionReady", - "ConnectionCheckedIn", - "ConnectionClosed" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-clear-clears-waitqueue.yml b/testdata/connection-monitoring-and-pooling/pool-clear-clears-waitqueue.yml deleted file mode 100644 index 521f8ed245..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-clear-clears-waitqueue.yml +++ /dev/null @@ -1,63 +0,0 @@ -version: 1 -style: unit -description: clearing pool clears the WaitQueue -poolOptions: - maxPoolSize: 1 - waitQueueTimeoutMS: 30000 -operations: - - name: ready - # check out only connection in the pool - - name: checkOut - # start a few threads that all will enter - # the wait queue - - name: start - target: thread1 - - name: checkOut - thread: thread1 - - name: start - target: thread2 - - name: checkOut - thread: thread2 - - name: start - target: thread3 - - name: checkOut - thread: thread3 - # wait for the 3 threads to start checking out a connection - - name: waitForEvent - event: ConnectionCheckOutStarted - count: 4 - # clear the pool, ejecting the previous three threads - # from the WaitQueue - - name: clear - - name: waitForEvent - event: ConnectionCheckOutFailed - count: 3 - timeout: 1000 -events: - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCheckedOut - address: 42 - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCheckOutFailed - reason: connectionError - address: 42 - - type: ConnectionCheckOutFailed - reason: connectionError - address: 42 - - type: ConnectionCheckOutFailed - reason: connectionError - address: 42 -ignore: - - ConnectionPoolReady - - ConnectionPoolCleared - - ConnectionPoolCreated - - ConnectionCreated - - ConnectionReady - - ConnectionCheckedIn - - ConnectionClosed diff --git a/testdata/connection-monitoring-and-pooling/pool-clear-interrupting-pending-connections.json b/testdata/connection-monitoring-and-pooling/pool-clear-interrupting-pending-connections.json deleted file mode 100644 index ceae07a1c7..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-clear-interrupting-pending-connections.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "version": 1, - "style": "integration", - "description": "clear with interruptInUseConnections = true closes pending connections", - "runOn": [ - { - "minServerVersion": "4.9.0" - } - ], - "failPoint": { - "configureFailPoint": "failCommand", - "mode": "alwaysOn", - "data": { - "failCommands": [ - "isMaster", - "hello" - ], - "closeConnection": false, - "blockConnection": true, - "blockTimeMS": 1000 - } - }, - "poolOptions": { - "minPoolSize": 0 - }, - "operations": [ - { - "name": "ready" - }, - { - "name": "start", - "target": "thread1" - }, - { - "name": "checkOut", - "thread": "thread1" - }, - { - "name": "waitForEvent", - "event": "ConnectionCreated", - "count": 1 - }, - { - "name": "clear", - "interruptInUseConnections": true - }, - { - "name": "waitForEvent", - "event": "ConnectionCheckOutFailed", - "count": 1 - } - ], - "events": [ - { - "type": "ConnectionCheckOutStarted" - }, - { - "type": "ConnectionCreated" - }, - { - "type": "ConnectionPoolCleared", - "interruptInUseConnections": true - }, - { - "type": "ConnectionClosed" - }, - { - "type": "ConnectionCheckOutFailed" - } - ], - "ignore": [ - "ConnectionCheckedIn", - "ConnectionCheckedOut", - "ConnectionPoolCreated", - "ConnectionPoolReady" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-clear-interrupting-pending-connections.yml b/testdata/connection-monitoring-and-pooling/pool-clear-interrupting-pending-connections.yml deleted file mode 100644 index d13257c3c4..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-clear-interrupting-pending-connections.yml +++ /dev/null @@ -1,42 +0,0 @@ -version: 1 -style: integration -description: clear with interruptInUseConnections = true closes pending connections -runOn: - - - minServerVersion: "4.9.0" -failPoint: - configureFailPoint: failCommand - mode: "alwaysOn" - data: - failCommands: ["isMaster","hello"] - closeConnection: false - blockConnection: true - blockTimeMS: 1000 -poolOptions: - minPoolSize: 0 -operations: - - name: ready - - name: start - target: thread1 - - name: checkOut - thread: thread1 - - name: waitForEvent - event: ConnectionCreated - count: 1 - - name: clear - interruptInUseConnections: true - - name: waitForEvent - event: ConnectionCheckOutFailed - count: 1 -events: - - type: ConnectionCheckOutStarted - - type: ConnectionCreated - - type: ConnectionPoolCleared - interruptInUseConnections: true - - type: ConnectionClosed - - type: ConnectionCheckOutFailed -ignore: - - ConnectionCheckedIn - - ConnectionCheckedOut - - ConnectionPoolCreated - - ConnectionPoolReady \ No newline at end of file diff --git a/testdata/connection-monitoring-and-pooling/pool-clear-min-size.json b/testdata/connection-monitoring-and-pooling/pool-clear-min-size.json deleted file mode 100644 index 239df871b8..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-clear-min-size.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "pool clear halts background minPoolSize establishments", - "poolOptions": { - "minPoolSize": 1, - "backgroundThreadIntervalMS": 50 - }, - "operations": [ - { - "name": "ready" - }, - { - "name": "waitForEvent", - "event": "ConnectionReady", - "count": 1 - }, - { - "name": "clear" - }, - { - "name": "wait", - "ms": 200 - }, - { - "name": "ready" - }, - { - "name": "waitForEvent", - "event": "ConnectionReady", - "count": 2 - } - ], - "events": [ - { - "type": "ConnectionPoolReady", - "address": 42 - }, - { - "type": "ConnectionCreated", - "address": 42 - }, - { - "type": "ConnectionReady", - "address": 42 - }, - { - "type": "ConnectionPoolCleared", - "address": 42 - }, - { - "type": "ConnectionPoolReady", - "address": 42 - }, - { - "type": "ConnectionCreated", - "address": 42 - }, - { - "type": "ConnectionReady", - "address": 42 - } - ], - "ignore": [ - "ConnectionPoolCreated", - "ConnectionClosed" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-clear-min-size.yml b/testdata/connection-monitoring-and-pooling/pool-clear-min-size.yml deleted file mode 100644 index 959c6ccafe..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-clear-min-size.yml +++ /dev/null @@ -1,37 +0,0 @@ -version: 1 -style: unit -description: pool clear halts background minPoolSize establishments -poolOptions: - minPoolSize: 1 - backgroundThreadIntervalMS: 50 -operations: - - name: ready - - name: waitForEvent - event: ConnectionReady - count: 1 - - name: clear - # ensure no connections created after clear - - name: wait - ms: 200 - - name: ready - - name: waitForEvent - event: ConnectionReady - count: 2 -events: - - type: ConnectionPoolReady - address: 42 - - type: ConnectionCreated - address: 42 - - type: ConnectionReady - address: 42 - - type: ConnectionPoolCleared - address: 42 - - type: ConnectionPoolReady - address: 42 - - type: ConnectionCreated - address: 42 - - type: ConnectionReady - address: 42 -ignore: - - ConnectionPoolCreated - - ConnectionClosed diff --git a/testdata/connection-monitoring-and-pooling/pool-clear-paused.json b/testdata/connection-monitoring-and-pooling/pool-clear-paused.json deleted file mode 100644 index 847f08d849..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-clear-paused.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "clearing a paused pool emits no events", - "operations": [ - { - "name": "clear" - }, - { - "name": "ready" - }, - { - "name": "clear" - }, - { - "name": "clear" - } - ], - "events": [ - { - "type": "ConnectionPoolReady", - "address": 42 - }, - { - "type": "ConnectionPoolCleared", - "address": 42 - } - ], - "ignore": [ - "ConnectionPoolCreated" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-clear-paused.yml b/testdata/connection-monitoring-and-pooling/pool-clear-paused.yml deleted file mode 100644 index 5f311f6ff8..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-clear-paused.yml +++ /dev/null @@ -1,15 +0,0 @@ -version: 1 -style: unit -description: clearing a paused pool emits no events -operations: - - name: clear - - name: ready - - name: clear - - name: clear -events: - - type: ConnectionPoolReady - address: 42 - - type: ConnectionPoolCleared - address: 42 -ignore: - - ConnectionPoolCreated diff --git a/testdata/connection-monitoring-and-pooling/pool-clear-ready.json b/testdata/connection-monitoring-and-pooling/pool-clear-ready.json deleted file mode 100644 index 800c3545ad..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-clear-ready.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "after clear, cannot check out connections until pool ready", - "operations": [ - { - "name": "ready" - }, - { - "name": "checkOut" - }, - { - "name": "clear" - }, - { - "name": "start", - "target": "thread1" - }, - { - "name": "checkOut", - "thread": "thread1" - }, - { - "name": "waitForEvent", - "event": "ConnectionCheckOutFailed", - "count": 1 - }, - { - "name": "ready" - }, - { - "name": "checkOut" - } - ], - "events": [ - { - "type": "ConnectionPoolReady", - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "address": 42, - "connectionId": 42 - }, - { - "type": "ConnectionPoolCleared", - "address": 42 - }, - { - "type": "ConnectionCheckOutFailed", - "address": 42, - "reason": "connectionError" - }, - { - "type": "ConnectionPoolReady", - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "address": 42 - } - ], - "ignore": [ - "ConnectionPoolCreated", - "ConnectionReady", - "ConnectionCheckOutStarted", - "ConnectionCreated" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-clear-ready.yml b/testdata/connection-monitoring-and-pooling/pool-clear-ready.yml deleted file mode 100644 index c783d4d096..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-clear-ready.yml +++ /dev/null @@ -1,36 +0,0 @@ -version: 1 -style: unit -description: after clear, cannot check out connections until pool ready -operations: - - name: ready - - name: checkOut - - name: clear - - name: start - target: thread1 - - name: checkOut - thread: thread1 - - name: waitForEvent - event: ConnectionCheckOutFailed - count: 1 - - name: ready - - name: checkOut -events: - - type: ConnectionPoolReady - address: 42 - - type: ConnectionCheckedOut - address: 42 - connectionId: 42 - - type: ConnectionPoolCleared - address: 42 - - type: ConnectionCheckOutFailed - address: 42 - reason: connectionError - - type: ConnectionPoolReady - address: 42 - - type: ConnectionCheckedOut - address: 42 -ignore: - - ConnectionPoolCreated - - ConnectionReady - - ConnectionCheckOutStarted - - ConnectionCreated diff --git a/testdata/connection-monitoring-and-pooling/pool-clear-schedule-run-interruptInUseConnections-false.json b/testdata/connection-monitoring-and-pooling/pool-clear-schedule-run-interruptInUseConnections-false.json deleted file mode 100644 index 3d7536951d..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-clear-schedule-run-interruptInUseConnections-false.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "Pool clear SHOULD schedule the next background thread run immediately (interruptInUseConnections = false)", - "poolOptions": { - "backgroundThreadIntervalMS": 10000 - }, - "operations": [ - { - "name": "ready" - }, - { - "name": "checkOut" - }, - { - "name": "checkOut", - "label": "conn" - }, - { - "name": "checkIn", - "connection": "conn" - }, - { - "name": "clear", - "interruptInUseConnections": false - }, - { - "name": "waitForEvent", - "event": "ConnectionPoolCleared", - "count": 1, - "timeout": 1000 - }, - { - "name": "waitForEvent", - "event": "ConnectionClosed", - "count": 1, - "timeout": 1000 - }, - { - "name": "close" - } - ], - "events": [ - { - "type": "ConnectionCheckedOut", - "connectionId": 1, - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 2, - "address": 42 - }, - { - "type": "ConnectionCheckedIn", - "connectionId": 2, - "address": 42 - }, - { - "type": "ConnectionPoolCleared", - "interruptInUseConnections": false - }, - { - "type": "ConnectionClosed", - "connectionId": 2, - "reason": "stale", - "address": 42 - }, - { - "type": "ConnectionPoolClosed", - "address": 42 - } - ], - "ignore": [ - "ConnectionCreated", - "ConnectionPoolReady", - "ConnectionReady", - "ConnectionCheckOutStarted", - "ConnectionPoolCreated" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-clear-schedule-run-interruptInUseConnections-false.yml b/testdata/connection-monitoring-and-pooling/pool-clear-schedule-run-interruptInUseConnections-false.yml deleted file mode 100644 index e156b691c8..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-clear-schedule-run-interruptInUseConnections-false.yml +++ /dev/null @@ -1,48 +0,0 @@ -version: 1 -style: unit -description: Pool clear SHOULD schedule the next background thread run immediately (interruptInUseConnections = false) -poolOptions: - # ensure it's not involved by default - backgroundThreadIntervalMS: 10000 -operations: - - name: ready - - name: checkOut - - name: checkOut - label: conn - - name: checkIn - connection: conn - - name: clear - interruptInUseConnections: false - - name: waitForEvent - event: ConnectionPoolCleared - count: 1 - timeout: 1000 - - name: waitForEvent - event: ConnectionClosed - count: 1 - timeout: 1000 - - name: close -events: - - type: ConnectionCheckedOut - connectionId: 1 - address: 42 - - type: ConnectionCheckedOut - connectionId: 2 - address: 42 - - type: ConnectionCheckedIn - connectionId: 2 - address: 42 - - type: ConnectionPoolCleared - interruptInUseConnections: false - - type: ConnectionClosed - connectionId: 2 - reason: stale - address: 42 - - type: ConnectionPoolClosed - address: 42 -ignore: - - ConnectionCreated - - ConnectionPoolReady - - ConnectionReady - - ConnectionCheckOutStarted - - ConnectionPoolCreated \ No newline at end of file diff --git a/testdata/connection-monitoring-and-pooling/pool-close-destroy-conns.json b/testdata/connection-monitoring-and-pooling/pool-close-destroy-conns.json deleted file mode 100644 index a3d58a2136..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-close-destroy-conns.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "When a pool is closed, it MUST first destroy all available connections in that pool", - "operations": [ - { - "name": "ready" - }, - { - "name": "checkOut" - }, - { - "name": "checkOut", - "label": "conn" - }, - { - "name": "checkOut" - }, - { - "name": "checkIn", - "connection": "conn" - }, - { - "name": "close" - } - ], - "events": [ - { - "type": "ConnectionCheckedIn", - "connectionId": 2, - "address": 42 - }, - { - "type": "ConnectionClosed", - "connectionId": 2, - "reason": "poolClosed", - "address": 42 - }, - { - "type": "ConnectionPoolClosed", - "address": 42 - } - ], - "ignore": [ - "ConnectionCreated", - "ConnectionPoolReady", - "ConnectionReady", - "ConnectionPoolCreated", - "ConnectionCheckOutStarted", - "ConnectionCheckedOut" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-close-destroy-conns.yml b/testdata/connection-monitoring-and-pooling/pool-close-destroy-conns.yml deleted file mode 100644 index 0140cdd198..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-close-destroy-conns.yml +++ /dev/null @@ -1,30 +0,0 @@ -version: 1 -style: unit -description: When a pool is closed, it MUST first destroy all available connections in that pool -operations: - - name: ready - - name: checkOut - - name: checkOut - label: conn - - name: checkOut - - name: checkIn - connection: conn - - name: close -events: - - type: ConnectionCheckedIn - connectionId: 2 - address: 42 - - type: ConnectionClosed - connectionId: 2 - reason: poolClosed - address: 42 - - type: ConnectionPoolClosed - address: 42 -ignore: - - ConnectionCreated - - ConnectionPoolReady - - ConnectionReady - - ConnectionPoolCreated - - ConnectionCheckOutStarted - - ConnectionCheckedOut - diff --git a/testdata/connection-monitoring-and-pooling/pool-close.json b/testdata/connection-monitoring-and-pooling/pool-close.json deleted file mode 100644 index fe083d73e6..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-close.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "must be able to manually close a pool", - "operations": [ - { - "name": "close" - } - ], - "events": [ - { - "type": "ConnectionPoolCreated", - "address": 42, - "options": 42 - }, - { - "type": "ConnectionPoolClosed", - "address": 42 - } - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-close.yml b/testdata/connection-monitoring-and-pooling/pool-close.yml deleted file mode 100644 index 2562224b43..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-close.yml +++ /dev/null @@ -1,11 +0,0 @@ -version: 1 -style: unit -description: must be able to manually close a pool -operations: - - name: close -events: - - type: ConnectionPoolCreated - address: 42 - options: 42 - - type: ConnectionPoolClosed - address: 42 diff --git a/testdata/connection-monitoring-and-pooling/pool-create-max-size.json b/testdata/connection-monitoring-and-pooling/pool-create-max-size.json deleted file mode 100644 index e3a1fa8eda..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-create-max-size.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "must never exceed maxPoolSize total connections", - "poolOptions": { - "maxPoolSize": 3 - }, - "operations": [ - { - "name": "ready" - }, - { - "name": "checkOut", - "label": "conn1" - }, - { - "name": "checkOut" - }, - { - "name": "checkOut", - "label": "conn2" - }, - { - "name": "checkIn", - "connection": "conn2" - }, - { - "name": "checkOut" - }, - { - "name": "start", - "target": "thread1" - }, - { - "name": "checkOut", - "thread": "thread1" - }, - { - "name": "waitForEvent", - "event": "ConnectionCheckOutStarted", - "count": 5 - }, - { - "name": "checkIn", - "connection": "conn1" - }, - { - "name": "waitForThread", - "target": "thread1" - } - ], - "events": [ - { - "type": "ConnectionPoolCreated", - "address": 42, - "options": 42 - }, - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCreated", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCreated", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCreated", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCheckedIn", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCheckedIn", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 42, - "address": 42 - } - ], - "ignore": [ - "ConnectionReady", - "ConnectionPoolReady" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-create-max-size.yml b/testdata/connection-monitoring-and-pooling/pool-create-max-size.yml deleted file mode 100644 index fa85d9eb48..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-create-max-size.yml +++ /dev/null @@ -1,73 +0,0 @@ -version: 1 -style: unit -description: must never exceed maxPoolSize total connections -poolOptions: - maxPoolSize: 3 -operations: - - name: ready - - name: checkOut - label: conn1 - - name: checkOut - - name: checkOut - label: conn2 - - name: checkIn - connection: conn2 - - name: checkOut - - name: start - target: thread1 - - name: checkOut - thread: thread1 - - name: waitForEvent - event: ConnectionCheckOutStarted - count: 5 - - name: checkIn - connection: conn1 - - name: waitForThread - target: thread1 -events: - - type: ConnectionPoolCreated - address: 42 - options: 42 - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCreated - connectionId: 42 - address: 42 - - type: ConnectionCheckedOut - connectionId: 42 - address: 42 - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCreated - connectionId: 42 - address: 42 - - type: ConnectionCheckedOut - connectionId: 42 - address: 42 - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCreated - connectionId: 42 - address: 42 - - type: ConnectionCheckedOut - connectionId: 42 - address: 42 - - type: ConnectionCheckedIn - connectionId: 42 - address: 42 - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCheckedOut - connectionId: 42 - address: 42 - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCheckedIn - connectionId: 42 - address: 42 - - type: ConnectionCheckedOut - connectionId: 42 - address: 42 -ignore: - - ConnectionReady - - ConnectionPoolReady diff --git a/testdata/connection-monitoring-and-pooling/pool-create-min-size-error.json b/testdata/connection-monitoring-and-pooling/pool-create-min-size-error.json deleted file mode 100644 index 1c744b850c..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-create-min-size-error.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "version": 1, - "style": "integration", - "description": "error during minPoolSize population clears pool", - "runOn": [ - { - "minServerVersion": "4.9.0" - } - ], - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 50 - }, - "data": { - "failCommands": [ - "isMaster", - "hello" - ], - "closeConnection": true, - "appName": "poolCreateMinSizeErrorTest" - } - }, - "poolOptions": { - "minPoolSize": 1, - "backgroundThreadIntervalMS": 50, - "appName": "poolCreateMinSizeErrorTest" - }, - "operations": [ - { - "name": "ready" - }, - { - "name": "waitForEvent", - "event": "ConnectionPoolCleared", - "count": 1 - }, - { - "name": "wait", - "ms": 200 - } - ], - "events": [ - { - "type": "ConnectionPoolReady", - "address": 42 - }, - { - "type": "ConnectionCreated", - "address": 42 - }, - { - "type": "ConnectionClosed", - "address": 42, - "connectionId": 42, - "reason": "error" - }, - { - "type": "ConnectionPoolCleared", - "address": 42 - } - ], - "ignore": [ - "ConnectionPoolCreated" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-create-min-size-error.yml b/testdata/connection-monitoring-and-pooling/pool-create-min-size-error.yml deleted file mode 100644 index dd5890b1d9..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-create-min-size-error.yml +++ /dev/null @@ -1,40 +0,0 @@ -version: 1 -style: integration -description: error during minPoolSize population clears pool -runOn: - - - # required for appName in fail point - minServerVersion: "4.9.0" -failPoint: - configureFailPoint: failCommand - # high amount to ensure not interfered with by monitor checks. - mode: { times: 50 } - data: - failCommands: ["isMaster","hello"] - closeConnection: true - appName: "poolCreateMinSizeErrorTest" -poolOptions: - minPoolSize: 1 - backgroundThreadIntervalMS: 50 - appName: "poolCreateMinSizeErrorTest" -operations: - - name: ready - - name: waitForEvent - event: ConnectionPoolCleared - count: 1 - # ensure pool doesn't start making new connections - - name: wait - ms: 200 -events: - - type: ConnectionPoolReady - address: 42 - - type: ConnectionCreated - address: 42 - - type: ConnectionClosed - address: 42 - connectionId: 42 - reason: error - - type: ConnectionPoolCleared - address: 42 -ignore: - - ConnectionPoolCreated diff --git a/testdata/connection-monitoring-and-pooling/pool-create-min-size.json b/testdata/connection-monitoring-and-pooling/pool-create-min-size.json deleted file mode 100644 index 43118f7841..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-create-min-size.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "must be able to start a pool with minPoolSize connections", - "poolOptions": { - "minPoolSize": 3 - }, - "operations": [ - { - "name": "wait", - "ms": 200 - }, - { - "name": "ready" - }, - { - "name": "waitForEvent", - "event": "ConnectionCreated", - "count": 3 - }, - { - "name": "waitForEvent", - "event": "ConnectionReady", - "count": 3 - }, - { - "name": "checkOut" - } - ], - "events": [ - { - "type": "ConnectionPoolCreated", - "address": 42, - "options": 42 - }, - { - "type": "ConnectionPoolReady", - "address": 42 - }, - { - "type": "ConnectionCreated", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCreated", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCreated", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 42, - "address": 42 - } - ], - "ignore": [ - "ConnectionReady", - "ConnectionClosed", - "ConnectionCheckOutStarted" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-create-min-size.yml b/testdata/connection-monitoring-and-pooling/pool-create-min-size.yml deleted file mode 100644 index a91e33f7a9..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-create-min-size.yml +++ /dev/null @@ -1,40 +0,0 @@ -version: 1 -style: unit -description: must be able to start a pool with minPoolSize connections -poolOptions: - minPoolSize: 3 -operations: - # ensure no connections are created until this pool is ready - - name: wait - ms: 200 - - name: ready - - name: waitForEvent - event: ConnectionCreated - count: 3 - - name: waitForEvent - event: ConnectionReady - count: 3 - - name: checkOut -events: - - type: ConnectionPoolCreated - address: 42 - options: 42 - - type: ConnectionPoolReady - address: 42 - - type: ConnectionCreated - connectionId: 42 - address: 42 - - type: ConnectionCreated - connectionId: 42 - address: 42 - - type: ConnectionCreated - connectionId: 42 - address: 42 - # Ensures that by the time pool is closed, there are at least 3 connections - - type: ConnectionCheckedOut - connectionId: 42 - address: 42 -ignore: - - ConnectionReady - - ConnectionClosed - - ConnectionCheckOutStarted diff --git a/testdata/connection-monitoring-and-pooling/pool-create-with-options.json b/testdata/connection-monitoring-and-pooling/pool-create-with-options.json deleted file mode 100644 index 4e8223f91e..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-create-with-options.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "must be able to start a pool with various options set", - "poolOptions": { - "maxPoolSize": 50, - "minPoolSize": 5, - "maxIdleTimeMS": 100 - }, - "operations": [ - { - "name": "waitForEvent", - "event": "ConnectionPoolCreated", - "count": 1 - } - ], - "events": [ - { - "type": "ConnectionPoolCreated", - "address": 42, - "options": { - "maxPoolSize": 50, - "minPoolSize": 5, - "maxIdleTimeMS": 100 - } - } - ], - "ignore": [ - "ConnectionCreated", - "ConnectionReady" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-create-with-options.yml b/testdata/connection-monitoring-and-pooling/pool-create-with-options.yml deleted file mode 100644 index 32c8d0e54c..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-create-with-options.yml +++ /dev/null @@ -1,21 +0,0 @@ -version: 1 -style: unit -description: must be able to start a pool with various options set -poolOptions: - maxPoolSize: 50 - minPoolSize: 5 - maxIdleTimeMS: 100 -operations: - - name: waitForEvent - event: ConnectionPoolCreated - count: 1 -events: - - type: ConnectionPoolCreated - address: 42 - options: - maxPoolSize: 50 - minPoolSize: 5 - maxIdleTimeMS: 100 -ignore: - - ConnectionCreated - - ConnectionReady diff --git a/testdata/connection-monitoring-and-pooling/pool-create.json b/testdata/connection-monitoring-and-pooling/pool-create.json deleted file mode 100644 index 8c1f85537f..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-create.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "must be able to create a pool", - "operations": [ - { - "name": "waitForEvent", - "event": "ConnectionPoolCreated", - "count": 1 - } - ], - "events": [ - { - "type": "ConnectionPoolCreated", - "address": 42, - "options": 42 - } - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-create.yml b/testdata/connection-monitoring-and-pooling/pool-create.yml deleted file mode 100644 index f4989e8d4b..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-create.yml +++ /dev/null @@ -1,12 +0,0 @@ -version: 1 -style: unit -description: must be able to create a pool -operations: - - name: waitForEvent - event: ConnectionPoolCreated - count: 1 -events: - - type: ConnectionPoolCreated - address: 42 - options: 42 - diff --git a/testdata/connection-monitoring-and-pooling/pool-ready-ready.json b/testdata/connection-monitoring-and-pooling/pool-ready-ready.json deleted file mode 100644 index 25dfa9c97c..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-ready-ready.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "readying a ready pool emits no events", - "operations": [ - { - "name": "ready" - }, - { - "name": "ready" - }, - { - "name": "ready" - }, - { - "name": "clear" - }, - { - "name": "ready" - } - ], - "events": [ - { - "type": "ConnectionPoolReady", - "address": 42 - }, - { - "type": "ConnectionPoolCleared", - "address": 42 - }, - { - "type": "ConnectionPoolReady", - "address": 42 - } - ], - "ignore": [ - "ConnectionPoolCreated" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-ready-ready.yml b/testdata/connection-monitoring-and-pooling/pool-ready-ready.yml deleted file mode 100644 index b3d3ae7ad1..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-ready-ready.yml +++ /dev/null @@ -1,19 +0,0 @@ -version: 1 -style: unit -description: readying a ready pool emits no events -operations: - - name: ready - - name: ready - - name: ready - # the first ready after this clear should emit an event - - name: clear - - name: ready -events: - - type: ConnectionPoolReady - address: 42 - - type: ConnectionPoolCleared - address: 42 - - type: ConnectionPoolReady - address: 42 -ignore: - - ConnectionPoolCreated diff --git a/testdata/connection-monitoring-and-pooling/pool-ready.json b/testdata/connection-monitoring-and-pooling/pool-ready.json deleted file mode 100644 index 29ce7326cf..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-ready.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "pool starts as cleared and becomes ready", - "operations": [ - { - "name": "start", - "target": "thread1" - }, - { - "name": "checkOut", - "thread": "thread1" - }, - { - "name": "waitForEvent", - "event": "ConnectionCheckOutFailed", - "count": 1 - }, - { - "name": "ready" - }, - { - "name": "checkOut" - } - ], - "events": [ - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCheckOutFailed", - "reason": "connectionError", - "address": 42 - }, - { - "type": "ConnectionPoolReady", - "address": 42 - }, - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCreated", - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "address": 42 - } - ], - "ignore": [ - "ConnectionPoolCreated", - "ConnectionReady" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/pool-ready.yml b/testdata/connection-monitoring-and-pooling/pool-ready.yml deleted file mode 100644 index 730d4d27b7..0000000000 --- a/testdata/connection-monitoring-and-pooling/pool-ready.yml +++ /dev/null @@ -1,30 +0,0 @@ -version: 1 -style: unit -description: pool starts as cleared and becomes ready -operations: - - name: start - target: thread1 - - name: checkOut - thread: thread1 - - name: waitForEvent - event: ConnectionCheckOutFailed - count: 1 - - name: ready - - name: checkOut -events: - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCheckOutFailed - reason: connectionError - address: 42 - - type: ConnectionPoolReady - address: 42 - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCreated - address: 42 - - type: ConnectionCheckedOut - address: 42 -ignore: - - ConnectionPoolCreated - - ConnectionReady diff --git a/testdata/connection-monitoring-and-pooling/wait-queue-fairness.json b/testdata/connection-monitoring-and-pooling/wait-queue-fairness.json deleted file mode 100644 index 88a67c60ec..0000000000 --- a/testdata/connection-monitoring-and-pooling/wait-queue-fairness.json +++ /dev/null @@ -1,196 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "must issue Connections to threads in the order that the threads entered the queue", - "poolOptions": { - "maxPoolSize": 1, - "waitQueueTimeoutMS": 5000 - }, - "operations": [ - { - "name": "ready" - }, - { - "name": "checkOut", - "label": "conn0" - }, - { - "name": "start", - "target": "thread1" - }, - { - "name": "checkOut", - "thread": "thread1", - "label": "conn1" - }, - { - "name": "waitForEvent", - "event": "ConnectionCheckOutStarted", - "count": 2 - }, - { - "name": "wait", - "ms": 100 - }, - { - "name": "start", - "target": "thread2" - }, - { - "name": "checkOut", - "thread": "thread2", - "label": "conn2" - }, - { - "name": "waitForEvent", - "event": "ConnectionCheckOutStarted", - "count": 3 - }, - { - "name": "wait", - "ms": 100 - }, - { - "name": "start", - "target": "thread3" - }, - { - "name": "checkOut", - "thread": "thread3", - "label": "conn3" - }, - { - "name": "waitForEvent", - "event": "ConnectionCheckOutStarted", - "count": 4 - }, - { - "name": "wait", - "ms": 100 - }, - { - "name": "start", - "target": "thread4" - }, - { - "name": "checkOut", - "thread": "thread4", - "label": "conn4" - }, - { - "name": "waitForEvent", - "event": "ConnectionCheckOutStarted", - "count": 5 - }, - { - "name": "wait", - "ms": 100 - }, - { - "name": "checkIn", - "connection": "conn0" - }, - { - "name": "waitForThread", - "target": "thread1" - }, - { - "name": "checkIn", - "connection": "conn1" - }, - { - "name": "waitForThread", - "target": "thread2" - }, - { - "name": "checkIn", - "connection": "conn2" - }, - { - "name": "waitForThread", - "target": "thread3" - }, - { - "name": "checkIn", - "connection": "conn3" - }, - { - "name": "waitForThread", - "target": "thread4" - } - ], - "events": [ - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCheckedIn", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCheckedIn", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCheckedIn", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCheckedIn", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 42, - "address": 42 - } - ], - "ignore": [ - "ConnectionCreated", - "ConnectionReady", - "ConnectionClosed", - "ConnectionPoolReady", - "ConnectionPoolCreated" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/wait-queue-fairness.yml b/testdata/connection-monitoring-and-pooling/wait-queue-fairness.yml deleted file mode 100644 index e7027c3304..0000000000 --- a/testdata/connection-monitoring-and-pooling/wait-queue-fairness.yml +++ /dev/null @@ -1,126 +0,0 @@ -version: 1 -style: unit -description: must issue Connections to threads in the order that the threads entered the queue -poolOptions: - maxPoolSize: 1 - waitQueueTimeoutMS: 5000 -operations: - - name: ready - # Check out sole connection in pool - - name: checkOut - label: conn0 - # Create 4 threads, have them all queue up for connections - # Note: this might become non-deterministic depending on how you - # implement your test runner. The goal is for each thread to - # have started and begun checkOut before the next thread starts. - # The sleep operations should make this more consistent. - - name: start - target: thread1 - - name: checkOut - thread: thread1 - label: conn1 - - name: waitForEvent - event: ConnectionCheckOutStarted - count: 2 - # Give thread1 some time to actually enter the wait queue since the - # ConnectionCheckOutStarted event is publish beforehand. - - name: wait - ms: 100 - - name: start - target: thread2 - - name: checkOut - thread: thread2 - label: conn2 - - name: waitForEvent - event: ConnectionCheckOutStarted - count: 3 - # Give thread2 some time to actually enter the wait queue since the - # ConnectionCheckOutStarted event is publish beforehand. - - name: wait - ms: 100 - - name: start - target: thread3 - - name: checkOut - thread: thread3 - label: conn3 - - name: waitForEvent - event: ConnectionCheckOutStarted - count: 4 - # Give thread3 some time to actually enter the wait queue since the - # ConnectionCheckOutStarted event is publish beforehand. - - name: wait - ms: 100 - - name: start - target: thread4 - - name: checkOut - thread: thread4 - label: conn4 - - name: waitForEvent - event: ConnectionCheckOutStarted - count: 5 - # Give thread4 some time to actually enter the wait queue since the - # ConnectionCheckOutStarted event is publish beforehand. - - name: wait - ms: 100 - # From main thread, keep checking in connection and then wait for appropriate thread - # Test will timeout if threads are not enqueued in proper order - - name: checkIn - connection: conn0 - - name: waitForThread - target: thread1 - - name: checkIn - connection: conn1 - - name: waitForThread - target: thread2 - - name: checkIn - connection: conn2 - - name: waitForThread - target: thread3 - - name: checkIn - connection: conn3 - - name: waitForThread - target: thread4 -events: - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCheckedOut - connectionId: 42 - address: 42 - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCheckedIn - connectionId: 42 - address: 42 - - type: ConnectionCheckedOut - connectionId: 42 - address: 42 - - type: ConnectionCheckedIn - connectionId: 42 - address: 42 - - type: ConnectionCheckedOut - connectionId: 42 - address: 42 - - type: ConnectionCheckedIn - connectionId: 42 - address: 42 - - type: ConnectionCheckedOut - connectionId: 42 - address: 42 - - type: ConnectionCheckedIn - connectionId: 42 - address: 42 - - type: ConnectionCheckedOut - connectionId: 42 - address: 42 -ignore: - - ConnectionCreated - - ConnectionReady - - ConnectionClosed - - ConnectionPoolReady - - ConnectionPoolCreated diff --git a/testdata/connection-monitoring-and-pooling/wait-queue-timeout.json b/testdata/connection-monitoring-and-pooling/wait-queue-timeout.json deleted file mode 100644 index fbcbdfb04d..0000000000 --- a/testdata/connection-monitoring-and-pooling/wait-queue-timeout.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "version": 1, - "style": "unit", - "description": "must aggressively timeout threads enqueued longer than waitQueueTimeoutMS", - "poolOptions": { - "maxPoolSize": 1, - "waitQueueTimeoutMS": 50 - }, - "operations": [ - { - "name": "ready" - }, - { - "name": "checkOut", - "label": "conn0" - }, - { - "name": "start", - "target": "thread1" - }, - { - "name": "checkOut", - "thread": "thread1" - }, - { - "name": "waitForEvent", - "event": "ConnectionCheckOutFailed", - "count": 1 - }, - { - "name": "checkIn", - "connection": "conn0" - }, - { - "name": "waitForThread", - "target": "thread1" - } - ], - "error": { - "type": "WaitQueueTimeoutError", - "message": "Timed out while checking out a connection from connection pool" - }, - "events": [ - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCheckedOut", - "connectionId": 42, - "address": 42 - }, - { - "type": "ConnectionCheckOutStarted", - "address": 42 - }, - { - "type": "ConnectionCheckOutFailed", - "reason": "timeout", - "address": 42 - }, - { - "type": "ConnectionCheckedIn", - "connectionId": 42, - "address": 42 - } - ], - "ignore": [ - "ConnectionCreated", - "ConnectionReady", - "ConnectionClosed", - "ConnectionPoolCreated", - "ConnectionPoolReady" - ] -} diff --git a/testdata/connection-monitoring-and-pooling/wait-queue-timeout.yml b/testdata/connection-monitoring-and-pooling/wait-queue-timeout.yml deleted file mode 100644 index 5433c14898..0000000000 --- a/testdata/connection-monitoring-and-pooling/wait-queue-timeout.yml +++ /dev/null @@ -1,48 +0,0 @@ -version: 1 -style: unit -description: must aggressively timeout threads enqueued longer than waitQueueTimeoutMS -poolOptions: - maxPoolSize: 1 - waitQueueTimeoutMS: 50 -operations: - - name: ready - # Check out only possible connection - - name: checkOut - label: conn0 - # Start a thread, have it enter the wait queue - - name: start - target: thread1 - - name: checkOut - thread: thread1 - # Wait for other thread to time out, then check in connection - - name: waitForEvent - event: ConnectionCheckOutFailed - count: 1 - - name: checkIn - connection: conn0 - # Rejoin thread1, should experience error - - name: waitForThread - target: thread1 -error: - type: WaitQueueTimeoutError - message: Timed out while checking out a connection from connection pool -events: - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCheckedOut - connectionId: 42 - address: 42 - - type: ConnectionCheckOutStarted - address: 42 - - type: ConnectionCheckOutFailed - reason: timeout - address: 42 - - type: ConnectionCheckedIn - connectionId: 42 - address: 42 -ignore: - - ConnectionCreated - - ConnectionReady - - ConnectionClosed - - ConnectionPoolCreated - - ConnectionPoolReady diff --git a/testdata/connection-string/invalid-uris.json b/testdata/connection-string/invalid-uris.json deleted file mode 100644 index 2a182fac7e..0000000000 --- a/testdata/connection-string/invalid-uris.json +++ /dev/null @@ -1,274 +0,0 @@ -{ - "tests": [ - { - "description": "Empty string", - "uri": "", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Invalid scheme", - "uri": "mongo://localhost:27017", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Missing host", - "uri": "mongodb://", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Double colon in host identifier", - "uri": "mongodb://localhost::27017", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Double colon in host identifier and trailing slash", - "uri": "mongodb://localhost::27017/", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Double colon in host identifier with missing host and port", - "uri": "mongodb://::", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Double colon in host identifier with missing port", - "uri": "mongodb://localhost,localhost::", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Double colon in host identifier and second host", - "uri": "mongodb://localhost::27017,abc", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Invalid port (negative number) with hostname", - "uri": "mongodb://localhost:-1", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Invalid port (zero) with hostname", - "uri": "mongodb://localhost:0/", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Invalid port (positive number) with hostname", - "uri": "mongodb://localhost:65536", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Invalid port (positive number) with hostname and trailing slash", - "uri": "mongodb://localhost:65536/", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Invalid port (non-numeric string) with hostname", - "uri": "mongodb://localhost:foo", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Invalid port (negative number) with IP literal", - "uri": "mongodb://[::1]:-1", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Invalid port (zero) with IP literal", - "uri": "mongodb://[::1]:0/", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Invalid port (positive number) with IP literal", - "uri": "mongodb://[::1]:65536", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Invalid port (positive number) with IP literal and trailing slash", - "uri": "mongodb://[::1]:65536/", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Invalid port (non-numeric string) with IP literal", - "uri": "mongodb://[::1]:foo", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Missing delimiting slash between hosts and options", - "uri": "mongodb://example.com?w=1", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Incomplete key value pair for option", - "uri": "mongodb://example.com/?w", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Username with password containing an unescaped colon", - "uri": "mongodb://alice:foo:bar@127.0.0.1", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Username containing an unescaped at-sign", - "uri": "mongodb://alice@@127.0.0.1", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Username with password containing an unescaped at-sign", - "uri": "mongodb://alice@foo:bar@127.0.0.1", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Username containing an unescaped slash", - "uri": "mongodb://alice/@localhost/db", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Username containing unescaped slash with password", - "uri": "mongodb://alice/bob:foo@localhost/db", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Username with password containing an unescaped slash", - "uri": "mongodb://alice:foo/bar@localhost/db", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Host with unescaped slash", - "uri": "mongodb:///tmp/mongodb-27017.sock/", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "mongodb+srv with multiple service names", - "uri": "mongodb+srv://test5.test.mongodb.com,test6.test.mongodb.com", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "mongodb+srv with port number", - "uri": "mongodb+srv://test7.test.mongodb.com:27018", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - }, - { - "description": "Username with password containing an unescaped percent sign", - "uri": "mongodb://alice%foo:bar@127.0.0.1", - "valid": false, - "warning": null, - "hosts": null, - "auth": null, - "options": null - } - ] -} diff --git a/testdata/connection-string/invalid-uris.yml b/testdata/connection-string/invalid-uris.yml deleted file mode 100644 index 766be5282c..0000000000 --- a/testdata/connection-string/invalid-uris.yml +++ /dev/null @@ -1,241 +0,0 @@ -tests: - - - description: "Empty string" - uri: "" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Invalid scheme" - uri: "mongo://localhost:27017" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Missing host" - uri: "mongodb://" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Double colon in host identifier" - uri: "mongodb://localhost::27017" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Double colon in host identifier and trailing slash" - uri: "mongodb://localhost::27017/" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Double colon in host identifier with missing host and port" - uri: "mongodb://::" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Double colon in host identifier with missing port" - uri: "mongodb://localhost,localhost::" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Double colon in host identifier and second host" - uri: "mongodb://localhost::27017,abc" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Invalid port (negative number) with hostname" - uri: "mongodb://localhost:-1" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Invalid port (zero) with hostname" - uri: "mongodb://localhost:0/" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Invalid port (positive number) with hostname" - uri: "mongodb://localhost:65536" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Invalid port (positive number) with hostname and trailing slash" - uri: "mongodb://localhost:65536/" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Invalid port (non-numeric string) with hostname" - uri: "mongodb://localhost:foo" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Invalid port (negative number) with IP literal" - uri: "mongodb://[::1]:-1" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Invalid port (zero) with IP literal" - uri: "mongodb://[::1]:0/" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Invalid port (positive number) with IP literal" - uri: "mongodb://[::1]:65536" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Invalid port (positive number) with IP literal and trailing slash" - uri: "mongodb://[::1]:65536/" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Invalid port (non-numeric string) with IP literal" - uri: "mongodb://[::1]:foo" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Missing delimiting slash between hosts and options" - uri: "mongodb://example.com?w=1" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Incomplete key value pair for option" - uri: "mongodb://example.com/?w" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Username with password containing an unescaped colon" - uri: "mongodb://alice:foo:bar@127.0.0.1" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Username containing an unescaped at-sign" - uri: "mongodb://alice@@127.0.0.1" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Username with password containing an unescaped at-sign" - uri: "mongodb://alice@foo:bar@127.0.0.1" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Username containing an unescaped slash" - uri: "mongodb://alice/@localhost/db" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Username containing unescaped slash with password" - uri: "mongodb://alice/bob:foo@localhost/db" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Username with password containing an unescaped slash" - uri: "mongodb://alice:foo/bar@localhost/db" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Host with unescaped slash" - uri: "mongodb:///tmp/mongodb-27017.sock/" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "mongodb+srv with multiple service names" - uri: "mongodb+srv://test5.test.mongodb.com,test6.test.mongodb.com" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "mongodb+srv with port number" - uri: "mongodb+srv://test7.test.mongodb.com:27018" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ - - - description: "Username with password containing an unescaped percent sign" - uri: "mongodb://alice%foo:bar@127.0.0.1" - valid: false - warning: ~ - hosts: ~ - auth: ~ - options: ~ diff --git a/testdata/connection-string/valid-auth.json b/testdata/connection-string/valid-auth.json deleted file mode 100644 index 4f684ff185..0000000000 --- a/testdata/connection-string/valid-auth.json +++ /dev/null @@ -1,332 +0,0 @@ -{ - "tests": [ - { - "description": "User info for single IPv4 host without database", - "uri": "mongodb://alice:foo@127.0.0.1", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "ipv4", - "host": "127.0.0.1", - "port": null - } - ], - "auth": { - "username": "alice", - "password": "foo", - "db": null - }, - "options": null - }, - { - "description": "User info for single IPv4 host with database", - "uri": "mongodb://alice:foo@127.0.0.1/test", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "ipv4", - "host": "127.0.0.1", - "port": null - } - ], - "auth": { - "username": "alice", - "password": "foo", - "db": "test" - }, - "options": null - }, - { - "description": "User info for single IP literal host without database", - "uri": "mongodb://bob:bar@[::1]:27018", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "ip_literal", - "host": "::1", - "port": 27018 - } - ], - "auth": { - "username": "bob", - "password": "bar", - "db": null - }, - "options": null - }, - { - "description": "User info for single IP literal host with database", - "uri": "mongodb://bob:bar@[::1]:27018/admin", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "ip_literal", - "host": "::1", - "port": 27018 - } - ], - "auth": { - "username": "bob", - "password": "bar", - "db": "admin" - }, - "options": null - }, - { - "description": "User info for single hostname without database", - "uri": "mongodb://eve:baz@example.com", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "hostname", - "host": "example.com", - "port": null - } - ], - "auth": { - "username": "eve", - "password": "baz", - "db": null - }, - "options": null - }, - { - "description": "User info for single hostname with database", - "uri": "mongodb://eve:baz@example.com/db2", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "hostname", - "host": "example.com", - "port": null - } - ], - "auth": { - "username": "eve", - "password": "baz", - "db": "db2" - }, - "options": null - }, - { - "description": "User info for multiple hosts without database", - "uri": "mongodb://alice:secret@127.0.0.1,example.com:27018", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "ipv4", - "host": "127.0.0.1", - "port": null - }, - { - "type": "hostname", - "host": "example.com", - "port": 27018 - } - ], - "auth": { - "username": "alice", - "password": "secret", - "db": null - }, - "options": null - }, - { - "description": "User info for multiple hosts with database", - "uri": "mongodb://alice:secret@example.com,[::1]:27019/admin", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "hostname", - "host": "example.com", - "port": null - }, - { - "type": "ip_literal", - "host": "::1", - "port": 27019 - } - ], - "auth": { - "username": "alice", - "password": "secret", - "db": "admin" - }, - "options": null - }, - { - "description": "Username without password", - "uri": "mongodb://alice@127.0.0.1", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "ipv4", - "host": "127.0.0.1", - "port": null - } - ], - "auth": { - "username": "alice", - "password": null, - "db": null - }, - "options": null - }, - { - "description": "Username with empty password", - "uri": "mongodb://alice:@127.0.0.1", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "ipv4", - "host": "127.0.0.1", - "port": null - } - ], - "auth": { - "username": "alice", - "password": "", - "db": null - }, - "options": null - }, - { - "description": "Escaped username and database without password", - "uri": "mongodb://%40l%3Ace%2F%3D@example.com/my%3Ddb", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "hostname", - "host": "example.com", - "port": null - } - ], - "auth": { - "username": "@l:ce/=", - "password": null, - "db": "my=db" - }, - "options": null - }, - { - "description": "Escaped user info and database (MONGODB-CR)", - "uri": "mongodb://%24am:f%3Azzb%40z%2Fz%3D@127.0.0.1/admin%3F?authMechanism=MONGODB-CR", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "ipv4", - "host": "127.0.0.1", - "port": null - } - ], - "auth": { - "username": "$am", - "password": "f:zzb@z/z=", - "db": "admin?" - }, - "options": { - "authmechanism": "MONGODB-CR" - } - }, - { - "description": "Subdelimiters in user/pass don't need escaping (MONGODB-CR)", - "uri": "mongodb://!$&'()*+,;=:!$&'()*+,;=@127.0.0.1/admin?authMechanism=MONGODB-CR", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "ipv4", - "host": "127.0.0.1", - "port": null - } - ], - "auth": { - "username": "!$&'()*+,;=", - "password": "!$&'()*+,;=", - "db": "admin" - }, - "options": { - "authmechanism": "MONGODB-CR" - } - }, - { - "description": "Escaped username (MONGODB-X509)", - "uri": "mongodb://CN%3DmyName%2COU%3DmyOrgUnit%2CO%3DmyOrg%2CL%3DmyLocality%2CST%3DmyState%2CC%3DmyCountry@localhost/?authMechanism=MONGODB-X509", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "hostname", - "host": "localhost", - "port": null - } - ], - "auth": { - "username": "CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry", - "password": null, - "db": null - }, - "options": { - "authmechanism": "MONGODB-X509" - } - }, - { - "description": "Escaped username (GSSAPI)", - "uri": "mongodb://user%40EXAMPLE.COM:secret@localhost/?authMechanismProperties=SERVICE_NAME:other,CANONICALIZE_HOST_NAME:true&authMechanism=GSSAPI", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "hostname", - "host": "localhost", - "port": null - } - ], - "auth": { - "username": "user@EXAMPLE.COM", - "password": "secret", - "db": null - }, - "options": { - "authmechanism": "GSSAPI", - "authmechanismproperties": { - "SERVICE_NAME": "other", - "CANONICALIZE_HOST_NAME": true - } - } - }, - { - "description": "At-signs in options aren't part of the userinfo", - "uri": "mongodb://alice:secret@example.com/admin?replicaset=my@replicaset", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "hostname", - "host": "example.com", - "port": null - } - ], - "auth": { - "username": "alice", - "password": "secret", - "db": "admin" - }, - "options": { - "replicaset": "my@replicaset" - } - } - ] -} diff --git a/testdata/connection-string/valid-auth.yml b/testdata/connection-string/valid-auth.yml deleted file mode 100644 index 01c866ee9e..0000000000 --- a/testdata/connection-string/valid-auth.yml +++ /dev/null @@ -1,257 +0,0 @@ -tests: - - - description: "User info for single IPv4 host without database" - uri: "mongodb://alice:foo@127.0.0.1" - valid: true - warning: false - hosts: - - - type: "ipv4" - host: "127.0.0.1" - port: ~ - auth: - username: "alice" - password: "foo" - db: ~ - options: ~ - - - description: "User info for single IPv4 host with database" - uri: "mongodb://alice:foo@127.0.0.1/test" - valid: true - warning: false - hosts: - - - type: "ipv4" - host: "127.0.0.1" - port: ~ - auth: - username: "alice" - password: "foo" - db: "test" - options: ~ - - - description: "User info for single IP literal host without database" - uri: "mongodb://bob:bar@[::1]:27018" - valid: true - warning: false - hosts: - - - type: "ip_literal" - host: "::1" - port: 27018 - auth: - username: "bob" - password: "bar" - db: ~ - options: ~ - - - description: "User info for single IP literal host with database" - uri: "mongodb://bob:bar@[::1]:27018/admin" - valid: true - warning: false - hosts: - - - type: "ip_literal" - host: "::1" - port: 27018 - auth: - username: "bob" - password: "bar" - db: "admin" - options: ~ - - - description: "User info for single hostname without database" - uri: "mongodb://eve:baz@example.com" - valid: true - warning: false - hosts: - - - type: "hostname" - host: "example.com" - port: ~ - auth: - username: "eve" - password: "baz" - db: ~ - options: ~ - - - description: "User info for single hostname with database" - uri: "mongodb://eve:baz@example.com/db2" - valid: true - warning: false - hosts: - - - type: "hostname" - host: "example.com" - port: ~ - auth: - username: "eve" - password: "baz" - db: "db2" - options: ~ - - - description: "User info for multiple hosts without database" - uri: "mongodb://alice:secret@127.0.0.1,example.com:27018" - valid: true - warning: false - hosts: - - - type: "ipv4" - host: "127.0.0.1" - port: ~ - - - type: "hostname" - host: "example.com" - port: 27018 - auth: - username: "alice" - password: "secret" - db: ~ - options: ~ - - - description: "User info for multiple hosts with database" - uri: "mongodb://alice:secret@example.com,[::1]:27019/admin" - valid: true - warning: false - hosts: - - - type: "hostname" - host: "example.com" - port: ~ - - - type: "ip_literal" - host: "::1" - port: 27019 - auth: - username: "alice" - password: "secret" - db: "admin" - options: ~ - - - description: "Username without password" - uri: "mongodb://alice@127.0.0.1" - valid: true - warning: false - hosts: - - - type: "ipv4" - host: "127.0.0.1" - port: ~ - auth: - username: "alice" - password: ~ - db: ~ - options: ~ - - - description: "Username with empty password" - uri: "mongodb://alice:@127.0.0.1" - valid: true - warning: false - hosts: - - - type: "ipv4" - host: "127.0.0.1" - port: ~ - auth: - username: "alice" - password: "" - db: ~ - options: ~ - - - description: "Escaped username and database without password" - uri: "mongodb://%40l%3Ace%2F%3D@example.com/my%3Ddb" - valid: true - warning: false - hosts: - - - type: "hostname" - host: "example.com" - port: ~ - auth: - username: "@l:ce/=" - password: ~ - db: "my=db" - options: ~ - - - description: "Escaped user info and database (MONGODB-CR)" - uri: "mongodb://%24am:f%3Azzb%40z%2Fz%3D@127.0.0.1/admin%3F?authMechanism=MONGODB-CR" - valid: true - warning: false - hosts: - - - type: "ipv4" - host: "127.0.0.1" - port: ~ - auth: - username: "$am" - password: "f:zzb@z/z=" - db: "admin?" - options: - authmechanism: "MONGODB-CR" - - - description: "Subdelimiters in user/pass don't need escaping (MONGODB-CR)" - uri: "mongodb://!$&'()*+,;=:!$&'()*+,;=@127.0.0.1/admin?authMechanism=MONGODB-CR" - valid: true - warning: false - hosts: - - - type: "ipv4" - host: "127.0.0.1" - port: ~ - auth: - username: "!$&'()*+,;=" - password: "!$&'()*+,;=" - db: "admin" - options: - authmechanism: "MONGODB-CR" - - - description: "Escaped username (MONGODB-X509)" - uri: "mongodb://CN%3DmyName%2COU%3DmyOrgUnit%2CO%3DmyOrg%2CL%3DmyLocality%2CST%3DmyState%2CC%3DmyCountry@localhost/?authMechanism=MONGODB-X509" - valid: true - warning: false - hosts: - - - type: "hostname" - host: "localhost" - port: ~ - auth: - username: "CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry" - password: ~ - db: ~ - options: - authmechanism: "MONGODB-X509" - - - description: "Escaped username (GSSAPI)" - uri: "mongodb://user%40EXAMPLE.COM:secret@localhost/?authMechanismProperties=SERVICE_NAME:other,CANONICALIZE_HOST_NAME:true&authMechanism=GSSAPI" - valid: true - warning: false - hosts: - - - type: "hostname" - host: "localhost" - port: ~ - auth: - username: "user@EXAMPLE.COM" - password: "secret" - db: ~ - options: - authmechanism: "GSSAPI" - authmechanismproperties: - SERVICE_NAME: "other" - CANONICALIZE_HOST_NAME: true - - - description: "At-signs in options aren't part of the userinfo" - uri: "mongodb://alice:secret@example.com/admin?replicaset=my@replicaset" - valid: true - warning: false - hosts: - - - type: "hostname" - host: "example.com" - port: ~ - auth: - username: "alice" - password: "secret" - db: "admin" - options: - replicaset: "my@replicaset" diff --git a/testdata/connection-string/valid-db-with-dotted-name.json b/testdata/connection-string/valid-db-with-dotted-name.json deleted file mode 100644 index 5b5aaa5ee3..0000000000 --- a/testdata/connection-string/valid-db-with-dotted-name.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "tests": [ - { - "description": "Multiple Unix domain sockets and auth DB resembling a socket (relative path)", - "uri": "mongodb://rel%2Fmongodb-27017.sock,rel%2Fmongodb-27018.sock/admin.sock", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "rel/mongodb-27017.sock", - "port": null - }, - { - "type": "unix", - "host": "rel/mongodb-27018.sock", - "port": null - } - ], - "auth": { - "username": null, - "password": null, - "db": "admin.sock" - }, - "options": null - }, - { - "description": "Multiple Unix domain sockets with auth DB resembling a path (relative path)", - "uri": "mongodb://rel%2Fmongodb-27017.sock,rel%2Fmongodb-27018.sock/admin.shoe", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "rel/mongodb-27017.sock", - "port": null - }, - { - "type": "unix", - "host": "rel/mongodb-27018.sock", - "port": null - } - ], - "auth": { - "username": null, - "password": null, - "db": "admin.shoe" - }, - "options": null - }, - { - "description": "Multiple Unix domain sockets and auth DB resembling a socket (absolute path)", - "uri": "mongodb://%2Ftmp%2Fmongodb-27017.sock,%2Ftmp%2Fmongodb-27018.sock/admin.sock", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "/tmp/mongodb-27017.sock", - "port": null - }, - { - "type": "unix", - "host": "/tmp/mongodb-27018.sock", - "port": null - } - ], - "auth": { - "username": null, - "password": null, - "db": "admin.sock" - }, - "options": null - }, - { - "description": "Multiple Unix domain sockets with auth DB resembling a path (absolute path)", - "uri": "mongodb://%2Ftmp%2Fmongodb-27017.sock,%2Ftmp%2Fmongodb-27018.sock/admin.shoe", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "/tmp/mongodb-27017.sock", - "port": null - }, - { - "type": "unix", - "host": "/tmp/mongodb-27018.sock", - "port": null - } - ], - "auth": { - "username": null, - "password": null, - "db": "admin.shoe" - }, - "options": null - } - ] -} diff --git a/testdata/connection-string/valid-db-with-dotted-name.yml b/testdata/connection-string/valid-db-with-dotted-name.yml deleted file mode 100644 index 651e62e654..0000000000 --- a/testdata/connection-string/valid-db-with-dotted-name.yml +++ /dev/null @@ -1,77 +0,0 @@ -tests: - - - description: "Multiple Unix domain sockets and auth DB resembling a socket (relative path)" - uri: "mongodb://rel%2Fmongodb-27017.sock,rel%2Fmongodb-27018.sock/admin.sock" - valid: true - warning: false - hosts: - - - type: "unix" - host: "rel/mongodb-27017.sock" - port: ~ - - - type: "unix" - host: "rel/mongodb-27018.sock" - port: ~ - auth: - username: ~ - password: ~ - db: "admin.sock" - options: ~ - - - description: "Multiple Unix domain sockets with auth DB resembling a path (relative path)" - uri: "mongodb://rel%2Fmongodb-27017.sock,rel%2Fmongodb-27018.sock/admin.shoe" - valid: true - warning: false - hosts: - - - type: "unix" - host: "rel/mongodb-27017.sock" - port: ~ - - - type: "unix" - host: "rel/mongodb-27018.sock" - port: ~ - auth: - username: ~ - password: ~ - db: "admin.shoe" - options: ~ - - - description: "Multiple Unix domain sockets and auth DB resembling a socket (absolute path)" - uri: "mongodb://%2Ftmp%2Fmongodb-27017.sock,%2Ftmp%2Fmongodb-27018.sock/admin.sock" - valid: true - warning: false - hosts: - - - type: "unix" - host: "/tmp/mongodb-27017.sock" - port: ~ - - - type: "unix" - host: "/tmp/mongodb-27018.sock" - port: ~ - auth: - username: ~ - password: ~ - db: "admin.sock" - options: ~ - - - description: "Multiple Unix domain sockets with auth DB resembling a path (absolute path)" - uri: "mongodb://%2Ftmp%2Fmongodb-27017.sock,%2Ftmp%2Fmongodb-27018.sock/admin.shoe" - valid: true - warning: false - hosts: - - - type: "unix" - host: "/tmp/mongodb-27017.sock" - port: ~ - - - type: "unix" - host: "/tmp/mongodb-27018.sock" - port: ~ - auth: - username: ~ - password: ~ - db: "admin.shoe" - options: ~ diff --git a/testdata/connection-string/valid-host_identifiers.json b/testdata/connection-string/valid-host_identifiers.json deleted file mode 100644 index e8833b4af2..0000000000 --- a/testdata/connection-string/valid-host_identifiers.json +++ /dev/null @@ -1,154 +0,0 @@ -{ - "tests": [ - { - "description": "Single IPv4 host without port", - "uri": "mongodb://127.0.0.1", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "ipv4", - "host": "127.0.0.1", - "port": null - } - ], - "auth": null, - "options": null - }, - { - "description": "Single IPv4 host with port", - "uri": "mongodb://127.0.0.1:27018", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "ipv4", - "host": "127.0.0.1", - "port": 27018 - } - ], - "auth": null, - "options": null - }, - { - "description": "Single IP literal host without port", - "uri": "mongodb://[::1]", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "ip_literal", - "host": "::1", - "port": null - } - ], - "auth": null, - "options": null - }, - { - "description": "Single IP literal host with port", - "uri": "mongodb://[::1]:27019", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "ip_literal", - "host": "::1", - "port": 27019 - } - ], - "auth": null, - "options": null - }, - { - "description": "Single hostname without port", - "uri": "mongodb://example.com", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "hostname", - "host": "example.com", - "port": null - } - ], - "auth": null, - "options": null - }, - { - "description": "Single hostname with port", - "uri": "mongodb://example.com:27020", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "hostname", - "host": "example.com", - "port": 27020 - } - ], - "auth": null, - "options": null - }, - { - "description": "Single hostname (resembling IPv4) without port", - "uri": "mongodb://256.0.0.1", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "hostname", - "host": "256.0.0.1", - "port": null - } - ], - "auth": null, - "options": null - }, - { - "description": "Multiple hosts (mixed formats)", - "uri": "mongodb://127.0.0.1,[::1]:27018,example.com:27019", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "ipv4", - "host": "127.0.0.1", - "port": null - }, - { - "type": "ip_literal", - "host": "::1", - "port": 27018 - }, - { - "type": "hostname", - "host": "example.com", - "port": 27019 - } - ], - "auth": null, - "options": null - }, - { - "description": "UTF-8 hosts", - "uri": "mongodb://bücher.example.com,umläut.example.com/", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "hostname", - "host": "bücher.example.com", - "port": null - }, - { - "type": "hostname", - "host": "umläut.example.com", - "port": null - } - ], - "auth": null, - "options": null - } - ] -} diff --git a/testdata/connection-string/valid-host_identifiers.yml b/testdata/connection-string/valid-host_identifiers.yml deleted file mode 100644 index 4d185c8764..0000000000 --- a/testdata/connection-string/valid-host_identifiers.yml +++ /dev/null @@ -1,121 +0,0 @@ -tests: - - - description: "Single IPv4 host without port" - uri: "mongodb://127.0.0.1" - valid: true - warning: false - hosts: - - - type: "ipv4" - host: "127.0.0.1" - port: ~ - auth: ~ - options: ~ - - - description: "Single IPv4 host with port" - uri: "mongodb://127.0.0.1:27018" - valid: true - warning: false - hosts: - - - type: "ipv4" - host: "127.0.0.1" - port: 27018 - auth: ~ - options: ~ - - - description: "Single IP literal host without port" - uri: "mongodb://[::1]" - valid: true - warning: false - hosts: - - - type: "ip_literal" - host: "::1" - port: ~ - auth: ~ - options: ~ - - - description: "Single IP literal host with port" - uri: "mongodb://[::1]:27019" - valid: true - warning: false - hosts: - - - type: "ip_literal" - host: "::1" - port: 27019 - auth: ~ - options: ~ - - - description: "Single hostname without port" - uri: "mongodb://example.com" - valid: true - warning: false - hosts: - - - type: "hostname" - host: "example.com" - port: ~ - auth: ~ - options: ~ - - - description: "Single hostname with port" - uri: "mongodb://example.com:27020" - valid: true - warning: false - hosts: - - - type: "hostname" - host: "example.com" - port: 27020 - auth: ~ - options: ~ - - - description: "Single hostname (resembling IPv4) without port" - uri: "mongodb://256.0.0.1" - valid: true - warning: false - hosts: - - - type: "hostname" - host: "256.0.0.1" - port: ~ - auth: ~ - options: ~ - - - description: "Multiple hosts (mixed formats)" - uri: "mongodb://127.0.0.1,[::1]:27018,example.com:27019" - valid: true - warning: false - hosts: - - - type: "ipv4" - host: "127.0.0.1" - port: ~ - - - type: "ip_literal" - host: "::1" - port: 27018 - - - type: "hostname" - host: "example.com" - port: 27019 - auth: ~ - options: ~ - - - description: "UTF-8 hosts" - uri: "mongodb://bücher.example.com,umläut.example.com/" - valid: true - warning: false - hosts: - - - type: "hostname" - host: "bücher.example.com" - port: ~ - - - type: "hostname" - host: "umläut.example.com" - port: ~ - auth: ~ - options: ~ diff --git a/testdata/connection-string/valid-options.json b/testdata/connection-string/valid-options.json deleted file mode 100644 index 4c2bded9e7..0000000000 --- a/testdata/connection-string/valid-options.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "tests": [ - { - "description": "Option names are normalized to lowercase", - "uri": "mongodb://alice:secret@example.com/admin?AUTHMechanism=MONGODB-CR", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "hostname", - "host": "example.com", - "port": null - } - ], - "auth": { - "username": "alice", - "password": "secret", - "db": "admin" - }, - "options": { - "authmechanism": "MONGODB-CR" - } - } - ] -} diff --git a/testdata/connection-string/valid-options.yml b/testdata/connection-string/valid-options.yml deleted file mode 100644 index e1b94039c8..0000000000 --- a/testdata/connection-string/valid-options.yml +++ /dev/null @@ -1,17 +0,0 @@ -tests: - - - description: "Option names are normalized to lowercase" - uri: "mongodb://alice:secret@example.com/admin?AUTHMechanism=MONGODB-CR" - valid: true - warning: false - hosts: - - - type: "hostname" - host: "example.com" - port: ~ - auth: - username: "alice" - password: "secret" - db: "admin" - options: - authmechanism: "MONGODB-CR" diff --git a/testdata/connection-string/valid-unix_socket-absolute.json b/testdata/connection-string/valid-unix_socket-absolute.json deleted file mode 100644 index 66491db13b..0000000000 --- a/testdata/connection-string/valid-unix_socket-absolute.json +++ /dev/null @@ -1,266 +0,0 @@ -{ - "tests": [ - { - "description": "Unix domain socket (absolute path with trailing slash)", - "uri": "mongodb://%2Ftmp%2Fmongodb-27017.sock/", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "/tmp/mongodb-27017.sock", - "port": null - } - ], - "auth": null, - "options": null - }, - { - "description": "Unix domain socket (absolute path without trailing slash)", - "uri": "mongodb://%2Ftmp%2Fmongodb-27017.sock", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "/tmp/mongodb-27017.sock", - "port": null - } - ], - "auth": null, - "options": null - }, - { - "description": "Unix domain socket (mixed case)", - "uri": "mongodb://%2Ftmp%2FMongoDB-27017.sock", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "/tmp/MongoDB-27017.sock", - "port": null - } - ], - "auth": null, - "options": null - }, - { - "description": "Unix domain socket (absolute path with spaces in path)", - "uri": "mongodb://%2Ftmp%2F %2Fmongodb-27017.sock", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "/tmp/ /mongodb-27017.sock", - "port": null - } - ], - "auth": null, - "options": null - }, - { - "description": "Multiple Unix domain sockets (absolute paths)", - "uri": "mongodb://%2Ftmp%2Fmongodb-27017.sock,%2Ftmp%2Fmongodb-27018.sock", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "/tmp/mongodb-27017.sock", - "port": null - }, - { - "type": "unix", - "host": "/tmp/mongodb-27018.sock", - "port": null - } - ], - "auth": null, - "options": null - }, - { - "description": "Multiple hosts (absolute path and ipv4)", - "uri": "mongodb://127.0.0.1:27017,%2Ftmp%2Fmongodb-27017.sock", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "ipv4", - "host": "127.0.0.1", - "port": 27017 - }, - { - "type": "unix", - "host": "/tmp/mongodb-27017.sock", - "port": null - } - ], - "auth": null, - "options": null - }, - { - "description": "Multiple hosts (absolute path and hostname resembling relative path)", - "uri": "mongodb://mongodb-27017.sock,%2Ftmp%2Fmongodb-27018.sock", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "hostname", - "host": "mongodb-27017.sock", - "port": null - }, - { - "type": "unix", - "host": "/tmp/mongodb-27018.sock", - "port": null - } - ], - "auth": null, - "options": null - }, - { - "description": "Unix domain socket with auth database (absolute path)", - "uri": "mongodb://alice:foo@%2Ftmp%2Fmongodb-27017.sock/admin", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "/tmp/mongodb-27017.sock", - "port": null - } - ], - "auth": { - "username": "alice", - "password": "foo", - "db": "admin" - }, - "options": null - }, - { - "description": "Unix domain socket with path resembling socket file (absolute path with trailing slash)", - "uri": "mongodb://%2Ftmp%2Fpath.to.sock%2Fmongodb-27017.sock/", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "/tmp/path.to.sock/mongodb-27017.sock", - "port": null - } - ], - "auth": null, - "options": null - }, - { - "description": "Unix domain socket with path resembling socket file (absolute path without trailing slash)", - "uri": "mongodb://%2Ftmp%2Fpath.to.sock%2Fmongodb-27017.sock", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "/tmp/path.to.sock/mongodb-27017.sock", - "port": null - } - ], - "auth": null, - "options": null - }, - { - "description": "Unix domain socket with path resembling socket file and auth (absolute path)", - "uri": "mongodb://bob:bar@%2Ftmp%2Fpath.to.sock%2Fmongodb-27017.sock/admin", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "/tmp/path.to.sock/mongodb-27017.sock", - "port": null - } - ], - "auth": { - "username": "bob", - "password": "bar", - "db": "admin" - }, - "options": null - }, - { - "description": "Multiple Unix domain sockets and auth DB (absolute path)", - "uri": "mongodb://%2Ftmp%2Fmongodb-27017.sock,%2Ftmp%2Fmongodb-27018.sock/admin", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "/tmp/mongodb-27017.sock", - "port": null - }, - { - "type": "unix", - "host": "/tmp/mongodb-27018.sock", - "port": null - } - ], - "auth": { - "username": null, - "password": null, - "db": "admin" - }, - "options": null - }, - { - "description": "Multiple Unix domain sockets with auth DB (absolute path)", - "uri": "mongodb://%2Ftmp%2Fmongodb-27017.sock,%2Ftmp%2Fmongodb-27018.sock/admin", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "/tmp/mongodb-27017.sock", - "port": null - }, - { - "type": "unix", - "host": "/tmp/mongodb-27018.sock", - "port": null - } - ], - "auth": { - "username": null, - "password": null, - "db": "admin" - }, - "options": null - }, - { - "description": "Multiple Unix domain sockets with auth and query string (absolute path)", - "uri": "mongodb://bob:bar@%2Ftmp%2Fmongodb-27017.sock,%2Ftmp%2Fmongodb-27018.sock/admin?w=1", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "/tmp/mongodb-27017.sock", - "port": null - }, - { - "type": "unix", - "host": "/tmp/mongodb-27018.sock", - "port": null - } - ], - "auth": { - "username": "bob", - "password": "bar", - "db": "admin" - }, - "options": { - "w": 1 - } - } - ] -} diff --git a/testdata/connection-string/valid-unix_socket-absolute.yml b/testdata/connection-string/valid-unix_socket-absolute.yml deleted file mode 100644 index cdfd00d332..0000000000 --- a/testdata/connection-string/valid-unix_socket-absolute.yml +++ /dev/null @@ -1,209 +0,0 @@ -tests: - - - description: "Unix domain socket (absolute path with trailing slash)" - uri: "mongodb://%2Ftmp%2Fmongodb-27017.sock/" - valid: true - warning: false - hosts: - - - type: "unix" - host: "/tmp/mongodb-27017.sock" - port: ~ - auth: ~ - options: ~ - - - description: "Unix domain socket (absolute path without trailing slash)" - uri: "mongodb://%2Ftmp%2Fmongodb-27017.sock" - valid: true - warning: false - hosts: - - - type: "unix" - host: "/tmp/mongodb-27017.sock" - port: ~ - auth: ~ - options: ~ - - - description: "Unix domain socket (mixed case)" - uri: "mongodb://%2Ftmp%2FMongoDB-27017.sock" - valid: true - warning: false - hosts: - - - type: "unix" - host: "/tmp/MongoDB-27017.sock" - port: ~ - auth: ~ - options: ~ - - - description: "Unix domain socket (absolute path with spaces in path)" - uri: "mongodb://%2Ftmp%2F %2Fmongodb-27017.sock" - valid: true - warning: false - hosts: - - - type: "unix" - host: "/tmp/ /mongodb-27017.sock" - port: ~ - auth: ~ - options: ~ - - - description: "Multiple Unix domain sockets (absolute paths)" - uri: "mongodb://%2Ftmp%2Fmongodb-27017.sock,%2Ftmp%2Fmongodb-27018.sock" - valid: true - warning: false - hosts: - - - type: "unix" - host: "/tmp/mongodb-27017.sock" - port: ~ - - - type: "unix" - host: "/tmp/mongodb-27018.sock" - port: ~ - auth: ~ - options: ~ - - - description: "Multiple hosts (absolute path and ipv4)" - uri: "mongodb://127.0.0.1:27017,%2Ftmp%2Fmongodb-27017.sock" - valid: true - warning: false - hosts: - - - type: "ipv4" - host: "127.0.0.1" - port: 27017 - - - type: "unix" - host: "/tmp/mongodb-27017.sock" - port: ~ - auth: ~ - options: ~ - - - description: "Multiple hosts (absolute path and hostname resembling relative path)" - uri: "mongodb://mongodb-27017.sock,%2Ftmp%2Fmongodb-27018.sock" - valid: true - warning: false - hosts: - - - type: "hostname" - host: "mongodb-27017.sock" - port: ~ - - - type: "unix" - host: "/tmp/mongodb-27018.sock" - port: ~ - auth: ~ - options: ~ - - - description: "Unix domain socket with auth database (absolute path)" - uri: "mongodb://alice:foo@%2Ftmp%2Fmongodb-27017.sock/admin" - valid: true - warning: false - hosts: - - - type: "unix" - host: "/tmp/mongodb-27017.sock" - port: ~ - auth: - username: "alice" - password: "foo" - db: "admin" - options: ~ - - - description: "Unix domain socket with path resembling socket file (absolute path with trailing slash)" - uri: "mongodb://%2Ftmp%2Fpath.to.sock%2Fmongodb-27017.sock/" - valid: true - warning: false - hosts: - - - type: "unix" - host: "/tmp/path.to.sock/mongodb-27017.sock" - port: ~ - auth: ~ - options: ~ - - - description: "Unix domain socket with path resembling socket file (absolute path without trailing slash)" - uri: "mongodb://%2Ftmp%2Fpath.to.sock%2Fmongodb-27017.sock" - valid: true - warning: false - hosts: - - - type: "unix" - host: "/tmp/path.to.sock/mongodb-27017.sock" - port: ~ - auth: ~ - options: ~ - - - description: "Unix domain socket with path resembling socket file and auth (absolute path)" - uri: "mongodb://bob:bar@%2Ftmp%2Fpath.to.sock%2Fmongodb-27017.sock/admin" - valid: true - warning: false - hosts: - - - type: "unix" - host: "/tmp/path.to.sock/mongodb-27017.sock" - port: ~ - auth: - username: "bob" - password: "bar" - db: "admin" - options: ~ - - - description: "Multiple Unix domain sockets and auth DB (absolute path)" - uri: "mongodb://%2Ftmp%2Fmongodb-27017.sock,%2Ftmp%2Fmongodb-27018.sock/admin" - valid: true - warning: false - hosts: - - - type: "unix" - host: "/tmp/mongodb-27017.sock" - port: ~ - - - type: "unix" - host: "/tmp/mongodb-27018.sock" - port: ~ - auth: - username: ~ - password: ~ - db: "admin" - options: ~ - - - description: "Multiple Unix domain sockets with auth DB (absolute path)" - uri: "mongodb://%2Ftmp%2Fmongodb-27017.sock,%2Ftmp%2Fmongodb-27018.sock/admin" - valid: true - warning: false - hosts: - - - type: "unix" - host: "/tmp/mongodb-27017.sock" - port: ~ - - - type: "unix" - host: "/tmp/mongodb-27018.sock" - port: ~ - auth: - username: ~ - password: ~ - db: "admin" - options: ~ - - - description: "Multiple Unix domain sockets with auth and query string (absolute path)" - uri: "mongodb://bob:bar@%2Ftmp%2Fmongodb-27017.sock,%2Ftmp%2Fmongodb-27018.sock/admin?w=1" - valid: true - warning: false - hosts: - - - type: "unix" - host: "/tmp/mongodb-27017.sock" - port: ~ - - - type: "unix" - host: "/tmp/mongodb-27018.sock" - port: ~ - auth: - username: "bob" - password: "bar" - db: "admin" - options: - w: 1 diff --git a/testdata/connection-string/valid-unix_socket-relative.json b/testdata/connection-string/valid-unix_socket-relative.json deleted file mode 100644 index 788720920b..0000000000 --- a/testdata/connection-string/valid-unix_socket-relative.json +++ /dev/null @@ -1,286 +0,0 @@ -{ - "tests": [ - { - "description": "Unix domain socket (relative path with trailing slash)", - "uri": "mongodb://rel%2Fmongodb-27017.sock/", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "rel/mongodb-27017.sock", - "port": null - } - ], - "auth": null, - "options": null - }, - { - "description": "Unix domain socket (relative path without trailing slash)", - "uri": "mongodb://rel%2Fmongodb-27017.sock", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "rel/mongodb-27017.sock", - "port": null - } - ], - "auth": null, - "options": null - }, - { - "description": "Unix domain socket (mixed case)", - "uri": "mongodb://rel%2FMongoDB-27017.sock", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "rel/MongoDB-27017.sock", - "port": null - } - ], - "auth": null, - "options": null - }, - { - "description": "Unix domain socket (relative path with spaces)", - "uri": "mongodb://rel%2F %2Fmongodb-27017.sock", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "rel/ /mongodb-27017.sock", - "port": null - } - ], - "auth": null, - "options": null - }, - { - "description": "Multiple Unix domain sockets (relative paths)", - "uri": "mongodb://rel%2Fmongodb-27017.sock,rel%2Fmongodb-27018.sock", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "rel/mongodb-27017.sock", - "port": null - }, - { - "type": "unix", - "host": "rel/mongodb-27018.sock", - "port": null - } - ], - "auth": null, - "options": null - }, - { - "description": "Multiple Unix domain sockets (relative and absolute paths)", - "uri": "mongodb://rel%2Fmongodb-27017.sock,%2Ftmp%2Fmongodb-27018.sock", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "rel/mongodb-27017.sock", - "port": null - }, - { - "type": "unix", - "host": "/tmp/mongodb-27018.sock", - "port": null - } - ], - "auth": null, - "options": null - }, - { - "description": "Multiple hosts (relative path and ipv4)", - "uri": "mongodb://127.0.0.1:27017,rel%2Fmongodb-27017.sock", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "ipv4", - "host": "127.0.0.1", - "port": 27017 - }, - { - "type": "unix", - "host": "rel/mongodb-27017.sock", - "port": null - } - ], - "auth": null, - "options": null - }, - { - "description": "Multiple hosts (relative path and hostname resembling relative path)", - "uri": "mongodb://mongodb-27017.sock,rel%2Fmongodb-27018.sock", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "hostname", - "host": "mongodb-27017.sock", - "port": null - }, - { - "type": "unix", - "host": "rel/mongodb-27018.sock", - "port": null - } - ], - "auth": null, - "options": null - }, - { - "description": "Unix domain socket with auth database (relative path)", - "uri": "mongodb://alice:foo@rel%2Fmongodb-27017.sock/admin", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "rel/mongodb-27017.sock", - "port": null - } - ], - "auth": { - "username": "alice", - "password": "foo", - "db": "admin" - }, - "options": null - }, - { - "description": "Unix domain socket with path resembling socket file (relative path with trailing slash)", - "uri": "mongodb://rel%2Fpath.to.sock%2Fmongodb-27017.sock/", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "rel/path.to.sock/mongodb-27017.sock", - "port": null - } - ], - "auth": null, - "options": null - }, - { - "description": "Unix domain socket with path resembling socket file (relative path without trailing slash)", - "uri": "mongodb://rel%2Fpath.to.sock%2Fmongodb-27017.sock", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "rel/path.to.sock/mongodb-27017.sock", - "port": null - } - ], - "auth": null, - "options": null - }, - { - "description": "Unix domain socket with path resembling socket file and auth (relative path)", - "uri": "mongodb://bob:bar@rel%2Fpath.to.sock%2Fmongodb-27017.sock/admin", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "rel/path.to.sock/mongodb-27017.sock", - "port": null - } - ], - "auth": { - "username": "bob", - "password": "bar", - "db": "admin" - }, - "options": null - }, - { - "description": "Multiple Unix domain sockets and auth DB resembling a socket (relative path)", - "uri": "mongodb://rel%2Fmongodb-27017.sock,rel%2Fmongodb-27018.sock/admin", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "rel/mongodb-27017.sock", - "port": null - }, - { - "type": "unix", - "host": "rel/mongodb-27018.sock", - "port": null - } - ], - "auth": { - "username": null, - "password": null, - "db": "admin" - }, - "options": null - }, - { - "description": "Multiple Unix domain sockets with auth DB resembling a path (relative path)", - "uri": "mongodb://rel%2Fmongodb-27017.sock,rel%2Fmongodb-27018.sock/admin", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "rel/mongodb-27017.sock", - "port": null - }, - { - "type": "unix", - "host": "rel/mongodb-27018.sock", - "port": null - } - ], - "auth": { - "username": null, - "password": null, - "db": "admin" - }, - "options": null - }, - { - "description": "Multiple Unix domain sockets with auth and query string (relative path)", - "uri": "mongodb://bob:bar@rel%2Fmongodb-27017.sock,rel%2Fmongodb-27018.sock/admin?w=1", - "valid": true, - "warning": false, - "hosts": [ - { - "type": "unix", - "host": "rel/mongodb-27017.sock", - "port": null - }, - { - "type": "unix", - "host": "rel/mongodb-27018.sock", - "port": null - } - ], - "auth": { - "username": "bob", - "password": "bar", - "db": "admin" - }, - "options": { - "w": 1 - } - } - ] -} diff --git a/testdata/connection-string/valid-unix_socket-relative.yml b/testdata/connection-string/valid-unix_socket-relative.yml deleted file mode 100644 index 6d0d108205..0000000000 --- a/testdata/connection-string/valid-unix_socket-relative.yml +++ /dev/null @@ -1,225 +0,0 @@ -tests: - - - description: "Unix domain socket (relative path with trailing slash)" - uri: "mongodb://rel%2Fmongodb-27017.sock/" - valid: true - warning: false - hosts: - - - type: "unix" - host: "rel/mongodb-27017.sock" - port: ~ - auth: ~ - options: ~ - - - description: "Unix domain socket (relative path without trailing slash)" - uri: "mongodb://rel%2Fmongodb-27017.sock" - valid: true - warning: false - hosts: - - - type: "unix" - host: "rel/mongodb-27017.sock" - port: ~ - auth: ~ - options: ~ - - - description: "Unix domain socket (mixed case)" - uri: "mongodb://rel%2FMongoDB-27017.sock" - valid: true - warning: false - hosts: - - - type: "unix" - host: "rel/MongoDB-27017.sock" - port: ~ - auth: ~ - options: ~ - - - description: "Unix domain socket (relative path with spaces)" - uri: "mongodb://rel%2F %2Fmongodb-27017.sock" - valid: true - warning: false - hosts: - - - type: "unix" - host: "rel/ /mongodb-27017.sock" - port: ~ - auth: ~ - options: ~ - - - description: "Multiple Unix domain sockets (relative paths)" - uri: "mongodb://rel%2Fmongodb-27017.sock,rel%2Fmongodb-27018.sock" - valid: true - warning: false - hosts: - - - type: "unix" - host: "rel/mongodb-27017.sock" - port: ~ - - - type: "unix" - host: "rel/mongodb-27018.sock" - port: ~ - auth: ~ - options: ~ - - - description: "Multiple Unix domain sockets (relative and absolute paths)" - uri: "mongodb://rel%2Fmongodb-27017.sock,%2Ftmp%2Fmongodb-27018.sock" - valid: true - warning: false - hosts: - - - type: "unix" - host: "rel/mongodb-27017.sock" - port: ~ - - - type: "unix" - host: "/tmp/mongodb-27018.sock" - port: ~ - auth: ~ - options: ~ - - - description: "Multiple hosts (relative path and ipv4)" - uri: "mongodb://127.0.0.1:27017,rel%2Fmongodb-27017.sock" - valid: true - warning: false - hosts: - - - type: "ipv4" - host: "127.0.0.1" - port: 27017 - - - type: "unix" - host: "rel/mongodb-27017.sock" - port: ~ - auth: ~ - options: ~ - - - description: "Multiple hosts (relative path and hostname resembling relative path)" - uri: "mongodb://mongodb-27017.sock,rel%2Fmongodb-27018.sock" - valid: true - warning: false - hosts: - - - type: "hostname" - host: "mongodb-27017.sock" - port: ~ - - - type: "unix" - host: "rel/mongodb-27018.sock" - port: ~ - auth: ~ - options: ~ - - - description: "Unix domain socket with auth database (relative path)" - uri: "mongodb://alice:foo@rel%2Fmongodb-27017.sock/admin" - valid: true - warning: false - hosts: - - - type: "unix" - host: "rel/mongodb-27017.sock" - port: ~ - auth: - username: "alice" - password: "foo" - db: "admin" - options: ~ - - - description: "Unix domain socket with path resembling socket file (relative path with trailing slash)" - uri: "mongodb://rel%2Fpath.to.sock%2Fmongodb-27017.sock/" - valid: true - warning: false - hosts: - - - type: "unix" - host: "rel/path.to.sock/mongodb-27017.sock" - port: ~ - auth: ~ - options: ~ - - - description: "Unix domain socket with path resembling socket file (relative path without trailing slash)" - uri: "mongodb://rel%2Fpath.to.sock%2Fmongodb-27017.sock" - valid: true - warning: false - hosts: - - - type: "unix" - host: "rel/path.to.sock/mongodb-27017.sock" - port: ~ - auth: ~ - options: ~ - - - description: "Unix domain socket with path resembling socket file and auth (relative path)" - uri: "mongodb://bob:bar@rel%2Fpath.to.sock%2Fmongodb-27017.sock/admin" - valid: true - warning: false - hosts: - - - type: "unix" - host: "rel/path.to.sock/mongodb-27017.sock" - port: ~ - auth: - username: "bob" - password: "bar" - db: "admin" - options: ~ - - - description: "Multiple Unix domain sockets and auth DB resembling a socket (relative path)" - uri: "mongodb://rel%2Fmongodb-27017.sock,rel%2Fmongodb-27018.sock/admin" - valid: true - warning: false - hosts: - - - type: "unix" - host: "rel/mongodb-27017.sock" - port: ~ - - - type: "unix" - host: "rel/mongodb-27018.sock" - port: ~ - auth: - username: ~ - password: ~ - db: "admin" - options: ~ - - - description: "Multiple Unix domain sockets with auth DB resembling a path (relative path)" - uri: "mongodb://rel%2Fmongodb-27017.sock,rel%2Fmongodb-27018.sock/admin" - valid: true - warning: false - hosts: - - - type: "unix" - host: "rel/mongodb-27017.sock" - port: ~ - - - type: "unix" - host: "rel/mongodb-27018.sock" - port: ~ - auth: - username: ~ - password: ~ - db: "admin" - options: ~ - - - description: "Multiple Unix domain sockets with auth and query string (relative path)" - uri: "mongodb://bob:bar@rel%2Fmongodb-27017.sock,rel%2Fmongodb-27018.sock/admin?w=1" - valid: true - warning: false - hosts: - - - type: "unix" - host: "rel/mongodb-27017.sock" - port: ~ - - - type: "unix" - host: "rel/mongodb-27018.sock" - port: ~ - auth: - username: "bob" - password: "bar" - db: "admin" - options: - w: 1 diff --git a/testdata/connection-string/valid-warnings.json b/testdata/connection-string/valid-warnings.json deleted file mode 100644 index 87f7248f21..0000000000 --- a/testdata/connection-string/valid-warnings.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "tests": [ - { - "description": "Unrecognized option keys are ignored", - "uri": "mongodb://example.com/?foo=bar", - "valid": true, - "warning": true, - "hosts": [ - { - "type": "hostname", - "host": "example.com", - "port": null - } - ], - "auth": null, - "options": null - }, - { - "description": "Unsupported option values are ignored", - "uri": "mongodb://example.com/?fsync=ifPossible", - "valid": true, - "warning": true, - "hosts": [ - { - "type": "hostname", - "host": "example.com", - "port": null - } - ], - "auth": null, - "options": null - }, - { - "description": "Repeated option keys", - "uri": "mongodb://example.com/?replicaSet=test&replicaSet=test", - "valid": true, - "warning": true, - "hosts": [ - { - "type": "hostname", - "host": "example.com", - "port": null - } - ], - "auth": null, - "options": { - "replicaset": "test" - } - }, - { - "description": "Deprecated (or unknown) options are ignored if replacement exists", - "uri": "mongodb://example.com/?wtimeout=5&wtimeoutMS=10", - "valid": true, - "warning": true, - "hosts": [ - { - "type": "hostname", - "host": "example.com", - "port": null - } - ], - "auth": null, - "options": { - "wtimeoutms": 10 - } - } - ] -} diff --git a/testdata/connection-string/valid-warnings.yml b/testdata/connection-string/valid-warnings.yml deleted file mode 100644 index 4515c9a3bf..0000000000 --- a/testdata/connection-string/valid-warnings.yml +++ /dev/null @@ -1,51 +0,0 @@ -tests: - - - description: "Unrecognized option keys are ignored" - uri: "mongodb://example.com/?foo=bar" - valid: true - warning: true - hosts: - - - type: "hostname" - host: "example.com" - port: ~ - auth: ~ - options: ~ - - - description: "Unsupported option values are ignored" - uri: "mongodb://example.com/?fsync=ifPossible" - valid: true - warning: true - hosts: - - - type: "hostname" - host: "example.com" - port: ~ - auth: ~ - options: ~ - - - description: "Repeated option keys" - uri: "mongodb://example.com/?replicaSet=test&replicaSet=test" - valid: true - warning: true - hosts: - - - type: "hostname" - host: "example.com" - port: ~ - auth: ~ - options: - replicaset: "test" - - - description: "Deprecated (or unknown) options are ignored if replacement exists" - uri: "mongodb://example.com/?wtimeout=5&wtimeoutMS=10" - valid: true - warning: true - hosts: - - - type: "hostname" - host: "example.com" - port: ~ - auth: ~ - options: - wtimeoutms: 10 diff --git a/testdata/convenient-transactions/callback-aborts.json b/testdata/convenient-transactions/callback-aborts.json deleted file mode 100644 index 2a3038e8ba..0000000000 --- a/testdata/convenient-transactions/callback-aborts.json +++ /dev/null @@ -1,244 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "replicaset" - ] - }, - { - "minServerVersion": "4.1.8", - "topology": [ - "sharded" - ] - } - ], - "database_name": "withTransaction-tests", - "collection_name": "test", - "data": [], - "tests": [ - { - "description": "withTransaction succeeds if callback aborts", - "useMultipleMongoses": true, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - }, - { - "name": "abortTransaction", - "object": "session0" - } - ] - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "abortTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "abortTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [] - } - } - }, - { - "description": "withTransaction succeeds if callback aborts with no ops", - "useMultipleMongoses": true, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "abortTransaction", - "object": "session0" - } - ] - } - } - } - ], - "expectations": [], - "outcome": { - "collection": { - "data": [] - } - } - }, - { - "description": "withTransaction still succeeds if callback aborts and runs extra op", - "useMultipleMongoses": true, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - }, - { - "name": "abortTransaction", - "object": "session0" - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 2 - } - }, - "result": { - "insertedId": 2 - } - } - ] - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "abortTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "abortTransaction", - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 2 - } - ], - "ordered": true, - "lsid": "session0", - "autocommit": null, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 2 - } - ] - } - } - } - ] -} diff --git a/testdata/convenient-transactions/callback-aborts.yml b/testdata/convenient-transactions/callback-aborts.yml deleted file mode 100644 index fcb4f39163..0000000000 --- a/testdata/convenient-transactions/callback-aborts.yml +++ /dev/null @@ -1,170 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["replicaset"] - - - minServerVersion: "4.1.8" - topology: ["sharded"] - -database_name: &database_name "withTransaction-tests" -collection_name: &collection_name "test" - -data: [] - -tests: - - - # Session state will be ABORTED when callback returns to withTransaction - description: withTransaction succeeds if callback aborts - useMultipleMongoses: true - operations: - - - name: withTransaction - object: session0 - arguments: - callback: - operations: - - - name: insertOne - object: collection - arguments: - session: session0 - document: { _id: 1 } - result: - insertedId: 1 - - - name: abortTransaction - object: session0 - expectations: - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - startTransaction: true - autocommit: false - # omitted fields - readConcern: ~ - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - abortTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: abortTransaction - database_name: admin - outcome: - collection: - data: [] - - - # Session state will be ABORTED when callback returns to withTransaction - description: withTransaction succeeds if callback aborts with no ops - useMultipleMongoses: true - operations: - - - name: withTransaction - object: session0 - arguments: - callback: - operations: - - - name: abortTransaction - object: session0 - expectations: [] - outcome: - collection: - data: [] - - - # Session state will be NO_TXN when callback returns to withTransaction - description: withTransaction still succeeds if callback aborts and runs extra op - useMultipleMongoses: true - operations: - - - name: withTransaction - object: session0 - arguments: - callback: - operations: - - - name: insertOne - object: collection - arguments: - session: session0 - document: { _id: 1 } - result: - insertedId: 1 - - - name: abortTransaction - object: session0 - - - name: insertOne - object: collection - arguments: - session: session0 - document: { _id: 2 } - result: - insertedId: 2 - expectations: - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - startTransaction: true - autocommit: false - # omitted fields - readConcern: ~ - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - abortTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: abortTransaction - database_name: admin - - - command_started_event: - command: - # This test is agnostic about retryWrites, so we do not assert the - # txnNumber. If retryWrites=true, the txnNumber will be incremented - # from the value used in the previous transaction; otherwise, the - # field will not be present at all. - insert: *collection_name - documents: - - { _id: 2 } - ordered: true - lsid: session0 - # omitted fields - autocommit: ~ - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: insert - database_name: *database_name - outcome: - collection: - data: - - { _id: 2 } diff --git a/testdata/convenient-transactions/callback-commits.json b/testdata/convenient-transactions/callback-commits.json deleted file mode 100644 index 4abbbdd0e6..0000000000 --- a/testdata/convenient-transactions/callback-commits.json +++ /dev/null @@ -1,303 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "replicaset" - ] - }, - { - "minServerVersion": "4.1.8", - "topology": [ - "sharded" - ] - } - ], - "database_name": "withTransaction-tests", - "collection_name": "test", - "data": [], - "tests": [ - { - "description": "withTransaction succeeds if callback commits", - "useMultipleMongoses": true, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 2 - } - }, - "result": { - "insertedId": 2 - } - }, - { - "name": "commitTransaction", - "object": "session0" - } - ] - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 2 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - } - }, - { - "description": "withTransaction still succeeds if callback commits and runs extra op", - "useMultipleMongoses": true, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 2 - } - }, - "result": { - "insertedId": 2 - } - }, - { - "name": "commitTransaction", - "object": "session0" - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 3 - } - }, - "result": { - "insertedId": 3 - } - } - ] - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 2 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 3 - } - ], - "ordered": true, - "lsid": "session0", - "autocommit": null, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - }, - { - "_id": 2 - }, - { - "_id": 3 - } - ] - } - } - } - ] -} diff --git a/testdata/convenient-transactions/callback-commits.yml b/testdata/convenient-transactions/callback-commits.yml deleted file mode 100644 index 6eb6bc6fcc..0000000000 --- a/testdata/convenient-transactions/callback-commits.yml +++ /dev/null @@ -1,204 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["replicaset"] - - - minServerVersion: "4.1.8" - topology: ["sharded"] - -database_name: &database_name "withTransaction-tests" -collection_name: &collection_name "test" - -data: [] - -tests: - - - # Session state will be COMMITTED when callback returns to withTransaction - description: withTransaction succeeds if callback commits - useMultipleMongoses: true - operations: - - - name: withTransaction - object: session0 - arguments: - callback: - operations: - - - name: insertOne - object: collection - arguments: - session: session0 - document: { _id: 1 } - result: - insertedId: 1 - - - name: insertOne - object: collection - arguments: - session: session0 - document: { _id: 2 } - result: - insertedId: 2 - - - name: commitTransaction - object: session0 - expectations: - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - startTransaction: true - autocommit: false - # omitted fields - readConcern: ~ - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 2 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: commitTransaction - database_name: admin - outcome: - collection: - data: - - { _id: 1 } - - { _id: 2 } - - - # Session state will be NO_TXN when callback returns to withTransaction - description: withTransaction still succeeds if callback commits and runs extra op - useMultipleMongoses: true - operations: - - - name: withTransaction - object: session0 - arguments: - callback: - operations: - - - name: insertOne - object: collection - arguments: - session: session0 - document: { _id: 1 } - result: - insertedId: 1 - - - name: insertOne - object: collection - arguments: - session: session0 - document: { _id: 2 } - result: - insertedId: 2 - - - name: commitTransaction - object: session0 - - - name: insertOne - object: collection - arguments: - session: session0 - document: { _id: 3 } - result: - insertedId: 3 - expectations: - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - startTransaction: true - autocommit: false - # omitted fields - readConcern: ~ - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 2 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: commitTransaction - database_name: admin - - - command_started_event: - command: - # This test is agnostic about retryWrites, so we do not assert the - # txnNumber. If retryWrites=true, the txnNumber will be incremented - # from the value used in the previous transaction; otherwise, the - # field will not be present at all. - insert: *collection_name - documents: - - { _id: 3 } - ordered: true - lsid: session0 - # omitted fields - autocommit: ~ - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: insert - database_name: *database_name - outcome: - collection: - data: - - { _id: 1 } - - { _id: 2 } - - { _id: 3 } diff --git a/testdata/convenient-transactions/callback-retry.json b/testdata/convenient-transactions/callback-retry.json deleted file mode 100644 index a0391c1b5d..0000000000 --- a/testdata/convenient-transactions/callback-retry.json +++ /dev/null @@ -1,315 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "replicaset" - ] - }, - { - "minServerVersion": "4.1.8", - "topology": [ - "sharded" - ] - } - ], - "database_name": "withTransaction-tests", - "collection_name": "test", - "data": [], - "tests": [ - { - "description": "callback succeeds after multiple connection errors", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "insert" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - } - } - ] - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "abortTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "abortTransaction", - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "readConcern": { - "afterClusterTime": 42 - }, - "txnNumber": { - "$numberLong": "2" - }, - "startTransaction": true, - "autocommit": false, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "abortTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "2" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "abortTransaction", - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "readConcern": { - "afterClusterTime": 42 - }, - "txnNumber": { - "$numberLong": "3" - }, - "startTransaction": true, - "autocommit": false, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "3" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - } - ] - } - } - }, - { - "description": "callback is not retried after non-transient error (DuplicateKeyError)", - "useMultipleMongoses": true, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "errorLabelsOmit": [ - "TransientTransactionError", - "UnknownTransactionCommitResult" - ] - } - } - ] - } - }, - "result": { - "errorLabelsOmit": [ - "TransientTransactionError", - "UnknownTransactionCommitResult" - ], - "errorContains": "E11000" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "abortTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "abortTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [] - } - } - } - ] -} diff --git a/testdata/convenient-transactions/callback-retry.yml b/testdata/convenient-transactions/callback-retry.yml deleted file mode 100644 index edff016bdb..0000000000 --- a/testdata/convenient-transactions/callback-retry.yml +++ /dev/null @@ -1,215 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["replicaset"] - - - minServerVersion: "4.1.8" - topology: ["sharded"] - -database_name: &database_name "withTransaction-tests" -collection_name: &collection_name "test" - -data: [] - -tests: - - - description: callback succeeds after multiple connection errors - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["insert"] - closeConnection: true - operations: - - - name: withTransaction - object: session0 - arguments: - callback: - operations: - - - # We do not assert the result here, as insertOne will fail for - # the first two executions of the callback before ultimately - # succeeding and returning a result. Asserting the state of the - # output collection after the test is sufficient. - name: insertOne - object: collection - arguments: - session: session0 - document: { _id: 1 } - expectations: - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - startTransaction: true - autocommit: false - # omitted fields - readConcern: ~ - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - abortTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: abortTransaction - database_name: admin - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - # second transaction will be causally consistent with the first - readConcern: { afterClusterTime: 42 } - # txnNumber is incremented when retrying the transaction - txnNumber: { $numberLong: "2" } - startTransaction: true - autocommit: false - # omitted fields - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - abortTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "2" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: abortTransaction - database_name: admin - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - # third transaction will be causally consistent with the second - readConcern: { afterClusterTime: 42 } - # txnNumber is incremented when retrying the transaction - txnNumber: { $numberLong: "3" } - startTransaction: true - autocommit: false - # omitted fields - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "3" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: commitTransaction - database_name: admin - outcome: - collection: - data: - - { _id: 1 } - - - description: callback is not retried after non-transient error (DuplicateKeyError) - useMultipleMongoses: true - operations: - - - name: withTransaction - object: session0 - arguments: - callback: - operations: - - - name: insertOne - object: collection - arguments: - session: session0 - document: { _id: 1 } - result: - insertedId: 1 - - - name: insertOne - object: collection - arguments: - session: session0 - document: { _id: 1 } - result: - errorLabelsOmit: ["TransientTransactionError", "UnknownTransactionCommitResult"] - result: - errorLabelsOmit: ["TransientTransactionError", "UnknownTransactionCommitResult"] - # DuplicateKey error code included in the bulk write error message - # returned by the server - errorContains: E11000 - expectations: - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - startTransaction: true - autocommit: false - # omitted fields - readConcern: ~ - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - abortTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: abortTransaction - database_name: admin - outcome: - collection: - data: [] diff --git a/testdata/convenient-transactions/commit-retry.json b/testdata/convenient-transactions/commit-retry.json deleted file mode 100644 index 6257e99345..0000000000 --- a/testdata/convenient-transactions/commit-retry.json +++ /dev/null @@ -1,533 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "replicaset" - ] - }, - { - "minServerVersion": "4.1.8", - "topology": [ - "sharded" - ] - } - ], - "database_name": "withTransaction-tests", - "collection_name": "test", - "data": [], - "tests": [ - { - "description": "commitTransaction succeeds after multiple connection errors", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "commitTransaction" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - } - ] - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "writeConcern": { - "w": "majority", - "wtimeout": 10000 - }, - "readConcern": null, - "startTransaction": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "writeConcern": { - "w": "majority", - "wtimeout": 10000 - }, - "readConcern": null, - "startTransaction": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - } - ] - } - } - }, - { - "description": "commitTransaction retry only overwrites write concern w option", - "skipReason": "GODRIVER-2348: wtimeout is deprecated", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "commitTransaction" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - } - ] - }, - "options": { - "writeConcern": { - "w": 2, - "j": true, - "wtimeout": 5000 - } - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "writeConcern": { - "w": 2, - "j": true, - "wtimeout": 5000 - }, - "readConcern": null, - "startTransaction": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "writeConcern": { - "w": "majority", - "j": true, - "wtimeout": 5000 - }, - "readConcern": null, - "startTransaction": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "writeConcern": { - "w": "majority", - "j": true, - "wtimeout": 5000 - }, - "readConcern": null, - "startTransaction": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - } - ] - } - } - }, - { - "description": "commit is retried after commitTransaction UnknownTransactionCommitResult (NotWritablePrimary)", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "commitTransaction" - ], - "errorCode": 10107, - "errorLabels": [ - "RetryableWriteError" - ], - "closeConnection": false - } - }, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - } - ] - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "writeConcern": { - "w": "majority", - "wtimeout": 10000 - }, - "readConcern": null, - "startTransaction": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "writeConcern": { - "w": "majority", - "wtimeout": 10000 - }, - "readConcern": null, - "startTransaction": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - } - ] - } - } - }, - { - "description": "commit is not retried after MaxTimeMSExpired error", - "skipReason": "GODRIVER-2348: maxTimeMS is deprecated", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "commitTransaction" - ], - "errorCode": 50 - } - }, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - } - ] - }, - "options": { - "maxCommitTimeMS": 60000 - } - }, - "result": { - "errorCodeName": "MaxTimeMSExpired", - "errorLabelsContain": [ - "UnknownTransactionCommitResult" - ], - "errorLabelsOmit": [ - "TransientTransactionError" - ] - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "maxTimeMS": 60000, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [] - } - } - } - ] -} diff --git a/testdata/convenient-transactions/commit-retry.yml b/testdata/convenient-transactions/commit-retry.yml deleted file mode 100644 index 3ff6497ae4..0000000000 --- a/testdata/convenient-transactions/commit-retry.yml +++ /dev/null @@ -1,327 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["replicaset"] - - - minServerVersion: "4.1.8" - topology: ["sharded"] - -database_name: &database_name "withTransaction-tests" -collection_name: &collection_name "test" - -data: [] - -tests: - - - description: commitTransaction succeeds after multiple connection errors - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["commitTransaction"] - closeConnection: true - operations: - - &withTransaction - name: withTransaction - object: session0 - arguments: - callback: - operations: - - - name: insertOne - object: collection - arguments: - session: session0 - document: { _id: 1 } - result: - insertedId: 1 - expectations: - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - startTransaction: true - autocommit: false - # omitted fields - readConcern: ~ - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: commitTransaction - database_name: admin - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # commitTransaction applies w:majority on retries (SPEC-1185) - writeConcern: { w: majority, wtimeout: 10000 } - # omitted fields - readConcern: ~ - startTransaction: ~ - command_name: commitTransaction - database_name: admin - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # commitTransaction applies w:majority on retries (SPEC-1185) - writeConcern: { w: majority, wtimeout: 10000 } - # omitted fields - readConcern: ~ - startTransaction: ~ - command_name: commitTransaction - database_name: admin - outcome: - collection: - data: - - { _id: 1 } - - - description: commitTransaction retry only overwrites write concern w option - skipReason: "GODRIVER-2348: wtimeout is deprecated" - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["commitTransaction"] - closeConnection: true - operations: - - - name: withTransaction - object: session0 - arguments: - callback: - operations: - - - name: insertOne - object: collection - arguments: - session: session0 - document: { _id: 1 } - result: - insertedId: 1 - options: - writeConcern: { w: 2, j: true, wtimeout: 5000 } - expectations: - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - startTransaction: true - autocommit: false - # omitted fields - readConcern: ~ - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - writeConcern: { w: 2, j: true, wtimeout: 5000 } - # omitted fields - readConcern: ~ - startTransaction: ~ - command_name: commitTransaction - database_name: admin - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # commitTransaction applies w:majority on retries (SPEC-1185) - writeConcern: { w: majority, j: true, wtimeout: 5000 } - # omitted fields - readConcern: ~ - startTransaction: ~ - command_name: commitTransaction - database_name: admin - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # commitTransaction applies w:majority on retries (SPEC-1185) - writeConcern: { w: majority, j: true, wtimeout: 5000 } - # omitted fields - readConcern: ~ - startTransaction: ~ - command_name: commitTransaction - database_name: admin - outcome: - collection: - data: - - { _id: 1 } - - - description: commit is retried after commitTransaction UnknownTransactionCommitResult (NotWritablePrimary) - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["commitTransaction"] - errorCode: 10107 # NotWritablePrimary - errorLabels: ["RetryableWriteError"] # SPEC-1565 - closeConnection: false - operations: - - *withTransaction - expectations: - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - startTransaction: true - autocommit: false - # omitted fields - readConcern: ~ - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: commitTransaction - database_name: admin - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # commitTransaction applies w:majority on retries (SPEC-1185) - writeConcern: { w: majority, wtimeout: 10000 } - # omitted fields - readConcern: ~ - startTransaction: ~ - command_name: commitTransaction - database_name: admin - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # commitTransaction applies w:majority on retries (SPEC-1185) - writeConcern: { w: majority, wtimeout: 10000 } - # omitted fields - readConcern: ~ - startTransaction: ~ - command_name: commitTransaction - database_name: admin - outcome: - collection: - data: - - { _id: 1 } - - - description: commit is not retried after MaxTimeMSExpired error - skipReason: "GODRIVER-2348: maxTimeMS is deprecated" - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["commitTransaction"] - errorCode: 50 # MaxTimeMSExpired - operations: - - name: withTransaction - object: session0 - arguments: - callback: - operations: - - - name: insertOne - object: collection - arguments: - session: session0 - document: { _id: 1 } - result: - insertedId: 1 - options: - maxCommitTimeMS: 60000 - result: - errorCodeName: MaxTimeMSExpired - errorLabelsContain: ["UnknownTransactionCommitResult"] - errorLabelsOmit: ["TransientTransactionError"] - expectations: - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - startTransaction: true - autocommit: false - # omitted fields - readConcern: ~ - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - maxTimeMS: 60000 - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: commitTransaction - database_name: admin - outcome: - collection: - # In reality, the outcome of the commit is unknown but we fabricate - # the error with failCommand.errorCode which does not apply the commit - # operation. - data: [] diff --git a/testdata/convenient-transactions/commit-transienttransactionerror-4.2.json b/testdata/convenient-transactions/commit-transienttransactionerror-4.2.json deleted file mode 100644 index 7663bb54e1..0000000000 --- a/testdata/convenient-transactions/commit-transienttransactionerror-4.2.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.6", - "topology": [ - "replicaset" - ] - }, - { - "minServerVersion": "4.1.8", - "topology": [ - "sharded" - ] - } - ], - "database_name": "withTransaction-tests", - "collection_name": "test", - "data": [], - "tests": [ - { - "description": "transaction is retried after commitTransaction TransientTransactionError (PreparedTransactionInProgress)", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "commitTransaction" - ], - "errorCode": 267, - "closeConnection": false - } - }, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - } - ] - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "readConcern": { - "afterClusterTime": 42 - }, - "txnNumber": { - "$numberLong": "2" - }, - "startTransaction": true, - "autocommit": false, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "2" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "readConcern": { - "afterClusterTime": 42 - }, - "txnNumber": { - "$numberLong": "3" - }, - "startTransaction": true, - "autocommit": false, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "3" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - } - ] - } - } - } - ] -} diff --git a/testdata/convenient-transactions/commit-transienttransactionerror-4.2.yml b/testdata/convenient-transactions/commit-transienttransactionerror-4.2.yml deleted file mode 100644 index 10f51d079b..0000000000 --- a/testdata/convenient-transactions/commit-transienttransactionerror-4.2.yml +++ /dev/null @@ -1,139 +0,0 @@ -runOn: - - - minServerVersion: "4.1.6" - topology: ["replicaset"] - - - minServerVersion: "4.1.8" - topology: ["sharded"] - -database_name: &database_name "withTransaction-tests" -collection_name: &collection_name "test" - -data: [] - -# These tests use error codes where the TransientTransactionError label will be -# applied to the error response for commitTransaction. This will cause the -# entire transaction to be retried instead of commitTransaction. -# -# See: https://github.com/mongodb/mongo/blob/r4.1.6/src/mongo/db/handle_request_response.cpp -tests: - - - description: transaction is retried after commitTransaction TransientTransactionError (PreparedTransactionInProgress) - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["commitTransaction"] - errorCode: 267 # PreparedTransactionInProgress - closeConnection: false - operations: - - - name: withTransaction - object: session0 - arguments: - callback: - operations: - - - name: insertOne - object: collection - arguments: - session: session0 - document: { _id: 1 } - result: - insertedId: 1 - expectations: - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - startTransaction: true - autocommit: false - # omitted fields - readConcern: ~ - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: commitTransaction - database_name: admin - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - # second transaction will be causally consistent with the first - readConcern: { afterClusterTime: 42 } - # txnNumber is incremented when retrying the transaction - txnNumber: { $numberLong: "2" } - startTransaction: true - autocommit: false - # omitted fields - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "2" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: commitTransaction - database_name: admin - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - # third transaction will be causally consistent with the second - readConcern: { afterClusterTime: 42 } - # txnNumber is incremented when retrying the transaction - txnNumber: { $numberLong: "3" } - startTransaction: true - autocommit: false - # omitted fields - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "3" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: commitTransaction - database_name: admin - outcome: - collection: - data: - - { _id: 1 } diff --git a/testdata/convenient-transactions/commit-transienttransactionerror.json b/testdata/convenient-transactions/commit-transienttransactionerror.json deleted file mode 100644 index 18becbe09c..0000000000 --- a/testdata/convenient-transactions/commit-transienttransactionerror.json +++ /dev/null @@ -1,725 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "replicaset" - ] - }, - { - "minServerVersion": "4.1.8", - "topology": [ - "sharded" - ] - } - ], - "database_name": "withTransaction-tests", - "collection_name": "test", - "data": [], - "tests": [ - { - "description": "transaction is retried after commitTransaction TransientTransactionError (LockTimeout)", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "commitTransaction" - ], - "errorCode": 24, - "closeConnection": false - } - }, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - } - ] - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "readConcern": { - "afterClusterTime": 42 - }, - "txnNumber": { - "$numberLong": "2" - }, - "startTransaction": true, - "autocommit": false, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "2" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "readConcern": { - "afterClusterTime": 42 - }, - "txnNumber": { - "$numberLong": "3" - }, - "startTransaction": true, - "autocommit": false, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "3" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - } - ] - } - } - }, - { - "description": "transaction is retried after commitTransaction TransientTransactionError (WriteConflict)", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "commitTransaction" - ], - "errorCode": 112, - "closeConnection": false - } - }, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - } - ] - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "readConcern": { - "afterClusterTime": 42 - }, - "txnNumber": { - "$numberLong": "2" - }, - "startTransaction": true, - "autocommit": false, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "2" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "readConcern": { - "afterClusterTime": 42 - }, - "txnNumber": { - "$numberLong": "3" - }, - "startTransaction": true, - "autocommit": false, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "3" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - } - ] - } - } - }, - { - "description": "transaction is retried after commitTransaction TransientTransactionError (SnapshotUnavailable)", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "commitTransaction" - ], - "errorCode": 246, - "closeConnection": false - } - }, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - } - ] - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "readConcern": { - "afterClusterTime": 42 - }, - "txnNumber": { - "$numberLong": "2" - }, - "startTransaction": true, - "autocommit": false, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "2" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "readConcern": { - "afterClusterTime": 42 - }, - "txnNumber": { - "$numberLong": "3" - }, - "startTransaction": true, - "autocommit": false, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "3" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - } - ] - } - } - }, - { - "description": "transaction is retried after commitTransaction TransientTransactionError (NoSuchTransaction)", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "commitTransaction" - ], - "errorCode": 251, - "closeConnection": false - } - }, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - } - ] - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "readConcern": { - "afterClusterTime": 42 - }, - "txnNumber": { - "$numberLong": "2" - }, - "startTransaction": true, - "autocommit": false, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "2" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "readConcern": { - "afterClusterTime": 42 - }, - "txnNumber": { - "$numberLong": "3" - }, - "startTransaction": true, - "autocommit": false, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "3" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - } - ] - } - } - } - ] -} diff --git a/testdata/convenient-transactions/commit-transienttransactionerror.yml b/testdata/convenient-transactions/commit-transienttransactionerror.yml deleted file mode 100644 index db1f64ae54..0000000000 --- a/testdata/convenient-transactions/commit-transienttransactionerror.yml +++ /dev/null @@ -1,175 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["replicaset"] - - - minServerVersion: "4.1.8" - topology: ["sharded"] - -database_name: &database_name "withTransaction-tests" -collection_name: &collection_name "test" - -data: [] - -# These tests use error codes where the TransientTransactionError label will be -# applied to the error response for commitTransaction. This will cause the -# entire transaction to be retried instead of commitTransaction. -# -# See: https://github.com/mongodb/mongo/blob/r4.1.6/src/mongo/db/handle_request_response.cpp -tests: - - - description: transaction is retried after commitTransaction TransientTransactionError (LockTimeout) - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["commitTransaction"] - errorCode: 24 # LockTimeout - closeConnection: false - operations: &operations - - - name: withTransaction - object: session0 - arguments: - callback: - operations: - - - name: insertOne - object: collection - arguments: - session: session0 - document: { _id: 1 } - result: - insertedId: 1 - expectations: &expectations - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - startTransaction: true - autocommit: false - # omitted fields - readConcern: ~ - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: commitTransaction - database_name: admin - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - # second transaction will be causally consistent with the first - readConcern: { afterClusterTime: 42 } - # txnNumber is incremented when retrying the transaction - txnNumber: { $numberLong: "2" } - startTransaction: true - autocommit: false - # omitted fields - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "2" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: commitTransaction - database_name: admin - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - # third transaction will be causally consistent with the second - readConcern: { afterClusterTime: 42 } - # txnNumber is incremented when retrying the transaction - txnNumber: { $numberLong: "3" } - startTransaction: true - autocommit: false - # omitted fields - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "3" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: commitTransaction - database_name: admin - outcome: &outcome - collection: - data: - - { _id: 1 } - - - description: transaction is retried after commitTransaction TransientTransactionError (WriteConflict) - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["commitTransaction"] - errorCode: 112 # WriteConflict - closeConnection: false - operations: *operations - expectations: *expectations - outcome: *outcome - - - description: transaction is retried after commitTransaction TransientTransactionError (SnapshotUnavailable) - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["commitTransaction"] - errorCode: 246 # SnapshotUnavailable - closeConnection: false - operations: *operations - expectations: *expectations - outcome: *outcome - - - description: transaction is retried after commitTransaction TransientTransactionError (NoSuchTransaction) - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["commitTransaction"] - errorCode: 251 # NoSuchTransaction - closeConnection: false - operations: *operations - expectations: *expectations - outcome: *outcome diff --git a/testdata/convenient-transactions/commit-writeconcernerror.json b/testdata/convenient-transactions/commit-writeconcernerror.json deleted file mode 100644 index fbad645546..0000000000 --- a/testdata/convenient-transactions/commit-writeconcernerror.json +++ /dev/null @@ -1,602 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "replicaset" - ] - }, - { - "minServerVersion": "4.1.8", - "topology": [ - "sharded" - ] - } - ], - "database_name": "withTransaction-tests", - "collection_name": "test", - "data": [], - "tests": [ - { - "description": "commitTransaction is retried after WriteConcernFailed timeout error", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "commitTransaction" - ], - "writeConcernError": { - "code": 64, - "codeName": "WriteConcernFailed", - "errmsg": "waiting for replication timed out", - "errInfo": { - "wtimeout": true - } - } - } - }, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - } - ] - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "writeConcern": { - "w": "majority", - "wtimeout": 10000 - }, - "readConcern": null, - "startTransaction": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "writeConcern": { - "w": "majority", - "wtimeout": 10000 - }, - "readConcern": null, - "startTransaction": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - } - ] - } - } - }, - { - "description": "commitTransaction is retried after WriteConcernFailed non-timeout error", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "commitTransaction" - ], - "writeConcernError": { - "code": 64, - "codeName": "WriteConcernFailed", - "errmsg": "multiple errors reported" - } - } - }, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - } - ] - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "writeConcern": { - "w": "majority", - "wtimeout": 10000 - }, - "readConcern": null, - "startTransaction": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "writeConcern": { - "w": "majority", - "wtimeout": 10000 - }, - "readConcern": null, - "startTransaction": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - } - ] - } - } - }, - { - "description": "commitTransaction is not retried after UnknownReplWriteConcern error", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "commitTransaction" - ], - "writeConcernError": { - "code": 79, - "codeName": "UnknownReplWriteConcern", - "errmsg": "No write concern mode named 'foo' found in replica set configuration" - } - } - }, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - } - ] - } - }, - "result": { - "errorCodeName": "UnknownReplWriteConcern", - "errorLabelsOmit": [ - "TransientTransactionError", - "UnknownTransactionCommitResult" - ] - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - } - ] - } - } - }, - { - "description": "commitTransaction is not retried after UnsatisfiableWriteConcern error", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "commitTransaction" - ], - "writeConcernError": { - "code": 100, - "codeName": "UnsatisfiableWriteConcern", - "errmsg": "Not enough data-bearing nodes" - } - } - }, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - } - ] - } - }, - "result": { - "errorCodeName": "UnsatisfiableWriteConcern", - "errorLabelsOmit": [ - "TransientTransactionError", - "UnknownTransactionCommitResult" - ] - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - } - ] - } - } - }, - { - "description": "commitTransaction is not retried after MaxTimeMSExpired error", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "commitTransaction" - ], - "writeConcernError": { - "code": 50, - "codeName": "MaxTimeMSExpired", - "errmsg": "operation exceeded time limit" - } - } - }, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - } - ] - } - }, - "result": { - "errorCodeName": "MaxTimeMSExpired", - "errorLabelsContain": [ - "UnknownTransactionCommitResult" - ], - "errorLabelsOmit": [ - "TransientTransactionError" - ] - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - } - ] - } - } - } - ] -} diff --git a/testdata/convenient-transactions/commit-writeconcernerror.yml b/testdata/convenient-transactions/commit-writeconcernerror.yml deleted file mode 100644 index 5c5f364d58..0000000000 --- a/testdata/convenient-transactions/commit-writeconcernerror.yml +++ /dev/null @@ -1,216 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["replicaset"] - - - minServerVersion: "4.1.8" - topology: ["sharded"] - -database_name: &database_name "withTransaction-tests" -collection_name: &collection_name "test" - -data: [] - -tests: - - - description: commitTransaction is retried after WriteConcernFailed timeout error - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["commitTransaction"] - # Do not specify closeConnection: false, since that would conflict - # with writeConcernError (see: SERVER-39292) - writeConcernError: - code: 64 - codeName: WriteConcernFailed - errmsg: "waiting for replication timed out" - errInfo: { wtimeout: true } - operations: - - &operation - name: withTransaction - object: session0 - arguments: - callback: - operations: - - - name: insertOne - object: collection - arguments: - session: session0 - document: { _id: 1 } - result: - insertedId: 1 - expectations: &expectations_with_retries - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - startTransaction: true - autocommit: false - # omitted fields - readConcern: ~ - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: commitTransaction - database_name: admin - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # commitTransaction applies w:majority on retries (SPEC-1185) - writeConcern: { w: majority, wtimeout: 10000 } - # omitted fields - readConcern: ~ - startTransaction: ~ - command_name: commitTransaction - database_name: admin - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # commitTransaction applies w:majority on retries (SPEC-1185) - writeConcern: { w: majority, wtimeout: 10000 } - # omitted fields - readConcern: ~ - startTransaction: ~ - command_name: commitTransaction - database_name: admin - # The write operation is still applied despite the write concern error - outcome: &outcome - collection: - data: - - { _id: 1 } - - - # This test configures the fail point to return an error with the - # WriteConcernFailed code but without errInfo that would identify it as a - # wtimeout error. This tests that drivers do not assume that all - # WriteConcernFailed errors are due to a replication timeout. - description: commitTransaction is retried after WriteConcernFailed non-timeout error - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: ["commitTransaction"] - # Do not specify closeConnection: false, since that would conflict - # with writeConcernError (see: SERVER-39292) - writeConcernError: - code: 64 - codeName: WriteConcernFailed - errmsg: "multiple errors reported" - operations: - - *operation - expectations: *expectations_with_retries - outcome: *outcome - - - description: commitTransaction is not retried after UnknownReplWriteConcern error - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["commitTransaction"] - writeConcernError: - code: 79 - codeName: UnknownReplWriteConcern - errmsg: "No write concern mode named 'foo' found in replica set configuration" - operations: - - <<: *operation - result: - errorCodeName: UnknownReplWriteConcern - errorLabelsOmit: ["TransientTransactionError", "UnknownTransactionCommitResult"] - expectations: &expectations_without_retries - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - startTransaction: true - autocommit: false - # omitted fields - readConcern: ~ - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: commitTransaction - database_name: admin - # failCommand with writeConcernError still applies the write operation(s) - outcome: *outcome - - - - description: commitTransaction is not retried after UnsatisfiableWriteConcern error - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["commitTransaction"] - writeConcernError: - code: 100 - codeName: UnsatisfiableWriteConcern - errmsg: "Not enough data-bearing nodes" - operations: - - <<: *operation - result: - errorCodeName: UnsatisfiableWriteConcern - errorLabelsOmit: ["TransientTransactionError", "UnknownTransactionCommitResult"] - expectations: *expectations_without_retries - # failCommand with writeConcernError still applies the write operation(s) - outcome: *outcome - - - - description: commitTransaction is not retried after MaxTimeMSExpired error - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: ["commitTransaction"] - writeConcernError: - code: 50 - codeName: MaxTimeMSExpired - errmsg: "operation exceeded time limit" - operations: - - <<: *operation - result: - errorCodeName: MaxTimeMSExpired - errorLabelsContain: ["UnknownTransactionCommitResult"] - errorLabelsOmit: ["TransientTransactionError"] - expectations: *expectations_without_retries - # failCommand with writeConcernError still applies the write operation(s) - outcome: *outcome diff --git a/testdata/convenient-transactions/commit.json b/testdata/convenient-transactions/commit.json deleted file mode 100644 index 0a7451db95..0000000000 --- a/testdata/convenient-transactions/commit.json +++ /dev/null @@ -1,286 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "replicaset" - ] - }, - { - "minServerVersion": "4.1.8", - "topology": [ - "sharded" - ] - } - ], - "database_name": "withTransaction-tests", - "collection_name": "test", - "data": [], - "tests": [ - { - "description": "withTransaction commits after callback returns", - "useMultipleMongoses": true, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 2 - } - }, - "result": { - "insertedId": 2 - } - } - ] - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 2 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - } - }, - { - "description": "withTransaction commits after callback returns (second transaction)", - "useMultipleMongoses": true, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - }, - { - "name": "commitTransaction", - "object": "session0" - }, - { - "name": "startTransaction", - "object": "session0" - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 2 - } - }, - "result": { - "insertedId": 2 - } - } - ] - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 2 - } - ], - "ordered": true, - "lsid": "session0", - "readConcern": { - "afterClusterTime": 42 - }, - "txnNumber": { - "$numberLong": "2" - }, - "startTransaction": true, - "autocommit": false, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "2" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - } - } - ] -} diff --git a/testdata/convenient-transactions/commit.yml b/testdata/convenient-transactions/commit.yml deleted file mode 100644 index b84a3e8bd0..0000000000 --- a/testdata/convenient-transactions/commit.yml +++ /dev/null @@ -1,193 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["replicaset"] - - - minServerVersion: "4.1.8" - topology: ["sharded"] - -database_name: &database_name "withTransaction-tests" -collection_name: &collection_name "test" - -data: [] - -tests: - - - description: withTransaction commits after callback returns - useMultipleMongoses: true - operations: - - - name: withTransaction - object: session0 - arguments: - callback: - operations: - - - name: insertOne - object: collection - arguments: - session: session0 - document: { _id: 1 } - result: - insertedId: 1 - - - name: insertOne - object: collection - arguments: - session: session0 - document: { _id: 2 } - result: - insertedId: 2 - expectations: - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - startTransaction: true - autocommit: false - # omitted fields - readConcern: ~ - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 2 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: commitTransaction - database_name: admin - outcome: - collection: - data: - - { _id: 1 } - - { _id: 2 } - - - # In this scenario, the callback commits the transaction originally started - # by withTransaction and starts a second transaction before returning. Since - # withTransaction only examines the session's state, it should commit that - # second transaction after the callback returns. - description: withTransaction commits after callback returns (second transaction) - useMultipleMongoses: true - operations: - - - name: withTransaction - object: session0 - arguments: - callback: - operations: - - - name: insertOne - object: collection - arguments: - session: session0 - document: { _id: 1 } - result: - insertedId: 1 - - - name: commitTransaction - object: session0 - - - name: startTransaction - object: session0 - - - name: insertOne - object: collection - arguments: - session: session0 - document: { _id: 2 } - result: - insertedId: 2 - expectations: - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - startTransaction: true - autocommit: false - # omitted fields - readConcern: ~ - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: commitTransaction - database_name: admin - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 2 } - ordered: true - lsid: session0 - # second transaction will be causally consistent with the first - readConcern: { afterClusterTime: 42 } - # txnNumber is incremented for the second transaction - txnNumber: { $numberLong: "2" } - startTransaction: true - autocommit: false - # omitted fields - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "2" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: commitTransaction - database_name: admin - outcome: - collection: - data: - - { _id: 1 } - - { _id: 2 } diff --git a/testdata/convenient-transactions/transaction-options.json b/testdata/convenient-transactions/transaction-options.json deleted file mode 100644 index 6deff43cf4..0000000000 --- a/testdata/convenient-transactions/transaction-options.json +++ /dev/null @@ -1,577 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "replicaset" - ] - }, - { - "minServerVersion": "4.1.8", - "topology": [ - "sharded" - ] - } - ], - "database_name": "withTransaction-tests", - "collection_name": "test", - "data": [], - "tests": [ - { - "description": "withTransaction and no transaction options set", - "useMultipleMongoses": true, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - } - ] - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": null, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "readConcern": null, - "startTransaction": null, - "writeConcern": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - } - ] - } - } - }, - { - "description": "withTransaction inherits transaction options from client", - "useMultipleMongoses": true, - "clientOptions": { - "readConcernLevel": "local", - "w": 1 - }, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - } - ] - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": { - "level": "local" - }, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "writeConcern": { - "w": 1 - }, - "readConcern": null, - "startTransaction": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - } - ] - } - } - }, - { - "description": "withTransaction inherits transaction options from defaultTransactionOptions", - "useMultipleMongoses": true, - "sessionOptions": { - "session0": { - "defaultTransactionOptions": { - "readConcern": { - "level": "majority" - }, - "writeConcern": { - "w": 1 - } - } - } - }, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - } - ] - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": { - "level": "majority" - }, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "writeConcern": { - "w": 1 - }, - "readConcern": null, - "startTransaction": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - } - ] - } - } - }, - { - "description": "withTransaction explicit transaction options", - "useMultipleMongoses": true, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - } - ] - }, - "options": { - "readConcern": { - "level": "majority" - }, - "writeConcern": { - "w": 1 - } - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": { - "level": "majority" - }, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "writeConcern": { - "w": 1 - }, - "readConcern": null, - "startTransaction": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - } - ] - } - } - }, - { - "description": "withTransaction explicit transaction options override defaultTransactionOptions", - "useMultipleMongoses": true, - "sessionOptions": { - "session0": { - "defaultTransactionOptions": { - "readConcern": { - "level": "snapshot" - }, - "writeConcern": { - "w": "majority" - } - } - } - }, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - } - ] - }, - "options": { - "readConcern": { - "level": "majority" - }, - "writeConcern": { - "w": 1 - } - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": { - "level": "majority" - }, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "writeConcern": { - "w": 1 - }, - "readConcern": null, - "startTransaction": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - } - ] - } - } - }, - { - "description": "withTransaction explicit transaction options override client options", - "useMultipleMongoses": true, - "clientOptions": { - "readConcernLevel": "local", - "w": "majority" - }, - "operations": [ - { - "name": "withTransaction", - "object": "session0", - "arguments": { - "callback": { - "operations": [ - { - "name": "insertOne", - "object": "collection", - "arguments": { - "session": "session0", - "document": { - "_id": 1 - } - }, - "result": { - "insertedId": 1 - } - } - ] - }, - "options": { - "readConcern": { - "level": "majority" - }, - "writeConcern": { - "w": 1 - } - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 1 - } - ], - "ordered": true, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "startTransaction": true, - "autocommit": false, - "readConcern": { - "level": "majority" - }, - "writeConcern": null - }, - "command_name": "insert", - "database_name": "withTransaction-tests" - } - }, - { - "command_started_event": { - "command": { - "commitTransaction": 1, - "lsid": "session0", - "txnNumber": { - "$numberLong": "1" - }, - "autocommit": false, - "writeConcern": { - "w": 1 - }, - "readConcern": null, - "startTransaction": null - }, - "command_name": "commitTransaction", - "database_name": "admin" - } - } - ], - "outcome": { - "collection": { - "data": [ - { - "_id": 1 - } - ] - } - } - } - ] -} diff --git a/testdata/convenient-transactions/transaction-options.yml b/testdata/convenient-transactions/transaction-options.yml deleted file mode 100644 index 15bdc65bfa..0000000000 --- a/testdata/convenient-transactions/transaction-options.yml +++ /dev/null @@ -1,274 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["replicaset"] - - - minServerVersion: "4.1.8" - topology: ["sharded"] - -database_name: &database_name "withTransaction-tests" -collection_name: &collection_name "test" - -data: [] - -tests: - - - description: withTransaction and no transaction options set - useMultipleMongoses: true - operations: &operations - - - name: withTransaction - object: session0 - arguments: - callback: - operations: - - - name: insertOne - object: collection - arguments: - session: session0 - document: { _id: 1 } - result: - insertedId: 1 - expectations: - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - startTransaction: true - autocommit: false - # omitted fields - readConcern: ~ - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - # omitted fields - readConcern: ~ - startTransaction: ~ - writeConcern: ~ - command_name: commitTransaction - database_name: admin - outcome: &outcome - collection: - data: - - { _id: 1 } - - - description: withTransaction inherits transaction options from client - useMultipleMongoses: true - clientOptions: - readConcernLevel: local - w: 1 - operations: *operations - expectations: - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - startTransaction: true - autocommit: false - readConcern: { level: local } - # omitted fields - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - writeConcern: { w: 1 } - # omitted fields - readConcern: ~ - startTransaction: ~ - command_name: commitTransaction - database_name: admin - outcome: *outcome - - - description: withTransaction inherits transaction options from defaultTransactionOptions - useMultipleMongoses: true - sessionOptions: - session0: - defaultTransactionOptions: - readConcern: { level: majority } - writeConcern: { w: 1 } - operations: *operations - expectations: - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - startTransaction: true - autocommit: false - readConcern: { level: majority } - # omitted fields - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - writeConcern: { w: 1 } - # omitted fields - readConcern: ~ - startTransaction: ~ - command_name: commitTransaction - database_name: admin - outcome: *outcome - - - description: withTransaction explicit transaction options - useMultipleMongoses: true - operations: &operations_explicit_transactionOptions - - - name: withTransaction - object: session0 - arguments: - callback: - operations: - - - name: insertOne - object: collection - arguments: - session: session0 - document: { _id: 1 } - result: - insertedId: 1 - options: - readConcern: { level: majority } - writeConcern: { w: 1 } - expectations: - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - startTransaction: true - autocommit: false - readConcern: { level: majority } - # omitted fields - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - writeConcern: { w: 1 } - # omitted fields - readConcern: ~ - startTransaction: ~ - command_name: commitTransaction - database_name: admin - outcome: *outcome - - - description: withTransaction explicit transaction options override defaultTransactionOptions - useMultipleMongoses: true - sessionOptions: - session0: - defaultTransactionOptions: - readConcern: { level: snapshot } - writeConcern: { w: majority } - operations: *operations_explicit_transactionOptions - expectations: - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - startTransaction: true - autocommit: false - readConcern: { level: majority } - # omitted fields - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - writeConcern: { w: 1 } - # omitted fields - readConcern: ~ - startTransaction: ~ - command_name: commitTransaction - database_name: admin - outcome: *outcome - - - description: withTransaction explicit transaction options override client options - useMultipleMongoses: true - clientOptions: - readConcernLevel: local - w: majority - operations: *operations_explicit_transactionOptions - expectations: - - - command_started_event: - command: - insert: *collection_name - documents: - - { _id: 1 } - ordered: true - lsid: session0 - txnNumber: { $numberLong: "1" } - startTransaction: true - autocommit: false - readConcern: { level: majority } - # omitted fields - writeConcern: ~ - command_name: insert - database_name: *database_name - - - command_started_event: - command: - commitTransaction: 1 - lsid: session0 - txnNumber: { $numberLong: "1" } - autocommit: false - writeConcern: { w: 1 } - # omitted fields - readConcern: ~ - startTransaction: ~ - command_name: commitTransaction - database_name: admin - outcome: *outcome diff --git a/testdata/crud/unified/aggregate-allowdiskuse.json b/testdata/crud/unified/aggregate-allowdiskuse.json deleted file mode 100644 index 2e54175b8a..0000000000 --- a/testdata/crud/unified/aggregate-allowdiskuse.json +++ /dev/null @@ -1,155 +0,0 @@ -{ - "description": "aggregate-allowdiskuse", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [] - } - ], - "tests": [ - { - "description": "Aggregate does not send allowDiskUse when value is not specified", - "operations": [ - { - "object": "collection0", - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": {} - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "coll0", - "pipeline": [ - { - "$match": {} - } - ], - "allowDiskUse": { - "$$exists": false - } - }, - "commandName": "aggregate", - "databaseName": "crud-tests" - } - } - ] - } - ] - }, - { - "description": "Aggregate sends allowDiskUse false when false is specified", - "operations": [ - { - "object": "collection0", - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": {} - } - ], - "allowDiskUse": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "coll0", - "pipeline": [ - { - "$match": {} - } - ], - "allowDiskUse": false - }, - "commandName": "aggregate", - "databaseName": "crud-tests" - } - } - ] - } - ] - }, - { - "description": "Aggregate sends allowDiskUse true when true is specified", - "operations": [ - { - "object": "collection0", - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": {} - } - ], - "allowDiskUse": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "coll0", - "pipeline": [ - { - "$match": {} - } - ], - "allowDiskUse": true - }, - "commandName": "aggregate", - "databaseName": "crud-tests" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/aggregate-allowdiskuse.yml b/testdata/crud/unified/aggregate-allowdiskuse.yml deleted file mode 100644 index d9d2556205..0000000000 --- a/testdata/crud/unified/aggregate-allowdiskuse.yml +++ /dev/null @@ -1,75 +0,0 @@ -description: aggregate-allowdiskuse - -schemaVersion: '1.0' - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: [] - -tests: - - description: 'Aggregate does not send allowDiskUse when value is not specified' - operations: - - object: *collection0 - name: aggregate - arguments: - pipeline: &pipeline [ { $match: {} } ] - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: *pipeline - allowDiskUse: { $$exists: false } - commandName: aggregate - databaseName: *database0Name - - - description: 'Aggregate sends allowDiskUse false when false is specified' - operations: - - object: *collection0 - name: aggregate - arguments: - pipeline: *pipeline - allowDiskUse: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: *pipeline - allowDiskUse: false - commandName: aggregate - databaseName: *database0Name - - - description: 'Aggregate sends allowDiskUse true when true is specified' - operations: - - object: *collection0 - name: aggregate - arguments: - pipeline: *pipeline - allowDiskUse: true - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: *pipeline - allowDiskUse: true - commandName: aggregate - databaseName: *database0Name diff --git a/testdata/crud/unified/aggregate-let.json b/testdata/crud/unified/aggregate-let.json deleted file mode 100644 index 039900920f..0000000000 --- a/testdata/crud/unified/aggregate-let.json +++ /dev/null @@ -1,376 +0,0 @@ -{ - "description": "aggregate-let", - "schemaVersion": "1.4", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - }, - { - "collection": { - "id": "collection1", - "database": "database0", - "collectionName": "coll1" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - } - ] - }, - { - "collectionName": "coll1", - "databaseName": "crud-tests", - "documents": [] - } - ], - "tests": [ - { - "description": "Aggregate with let option", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "aggregate", - "object": "collection0", - "arguments": { - "pipeline": [ - { - "$match": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - } - }, - { - "$project": { - "_id": 0, - "x": "$$x", - "y": "$$y", - "rand": "$$rand" - } - } - ], - "let": { - "id": 1, - "x": "foo", - "y": { - "$literal": "$bar" - }, - "rand": { - "$rand": {} - } - } - }, - "expectResult": [ - { - "x": "foo", - "y": "$bar", - "rand": { - "$$type": "double" - } - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "coll0", - "pipeline": [ - { - "$match": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - } - }, - { - "$project": { - "_id": 0, - "x": "$$x", - "y": "$$y", - "rand": "$$rand" - } - } - ], - "let": { - "id": 1, - "x": "foo", - "y": { - "$literal": "$bar" - }, - "rand": { - "$rand": {} - } - } - } - } - } - ] - } - ] - }, - { - "description": "Aggregate with let option unsupported (server-side error)", - "runOnRequirements": [ - { - "minServerVersion": "2.6.0", - "maxServerVersion": "4.4.99" - } - ], - "operations": [ - { - "name": "aggregate", - "object": "collection0", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": 1 - } - } - ], - "let": { - "x": "foo" - } - }, - "expectError": { - "errorContains": "unrecognized field 'let'", - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "coll0", - "pipeline": [ - { - "$match": { - "_id": 1 - } - } - ], - "let": { - "x": "foo" - } - } - } - } - ] - } - ] - }, - { - "description": "Aggregate to collection with let option", - "runOnRequirements": [ - { - "minServerVersion": "5.0", - "serverless": "forbid" - } - ], - "operations": [ - { - "name": "aggregate", - "object": "collection0", - "arguments": { - "pipeline": [ - { - "$match": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - } - }, - { - "$project": { - "_id": 1 - } - }, - { - "$out": "coll1" - } - ], - "let": { - "id": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "coll0", - "pipeline": [ - { - "$match": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - } - }, - { - "$project": { - "_id": 1 - } - }, - { - "$out": "coll1" - } - ], - "let": { - "id": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll1", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - } - ] - } - ] - }, - { - "description": "Aggregate to collection with let option unsupported (server-side error)", - "runOnRequirements": [ - { - "minServerVersion": "2.6.0", - "maxServerVersion": "4.4.99" - } - ], - "operations": [ - { - "name": "aggregate", - "object": "collection0", - "arguments": { - "pipeline": [ - { - "$match": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - } - }, - { - "$project": { - "_id": 1 - } - }, - { - "$out": "coll1" - } - ], - "let": { - "id": 1 - } - }, - "expectError": { - "errorContains": "unrecognized field 'let'", - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "coll0", - "pipeline": [ - { - "$match": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - } - }, - { - "$project": { - "_id": 1 - } - }, - { - "$out": "coll1" - } - ], - "let": { - "id": 1 - } - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/aggregate-let.yml b/testdata/crud/unified/aggregate-let.yml deleted file mode 100644 index 7fa1f9b798..0000000000 --- a/testdata/crud/unified/aggregate-let.yml +++ /dev/null @@ -1,138 +0,0 @@ -description: "aggregate-let" - -schemaVersion: "1.4" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - - collection: - id: &collection1 collection1 - database: *database0 - collectionName: &collection1Name coll1 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - collectionName: *collection1Name - databaseName: *database0Name - documents: [ ] - -tests: - - description: "Aggregate with let option" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: aggregate - object: *collection0 - arguments: - pipeline: &pipeline0 - # $match takes a query expression, so $expr is necessary to utilize - # an aggregate expression context and access "let" variables. - - $match: { $expr: { $eq: ["$_id", "$$id"] } } - - $project: { _id: 0, x: "$$x", y: "$$y", rand: "$$rand" } - # Values in "let" must be constant or closed expressions that do not - # depend on document values. This test demonstrates a basic constant - # value, a value wrapped with $literal (to avoid expression parsing), - # and a closed expression (e.g. $rand). - let: &let0 - id: 1 - x: foo - y: { $literal: "$bar" } - rand: { $rand: {} } - expectResult: - - { x: "foo", y: "$bar", rand: { $$type: "double" } } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: *pipeline0 - let: *let0 - - - description: "Aggregate with let option unsupported (server-side error)" - runOnRequirements: - - minServerVersion: "2.6.0" - maxServerVersion: "4.4.99" - operations: - - name: aggregate - object: *collection0 - arguments: - pipeline: &pipeline1 - - $match: { _id: 1 } - let: &let1 - x: foo - expectError: - # Older server versions may not report an error code, but the error - # message is consistent between 2.6.x and 4.4.x server versions. - errorContains: "unrecognized field 'let'" - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: *pipeline1 - let: *let1 - - - description: "Aggregate to collection with let option" - runOnRequirements: - - minServerVersion: "5.0" - serverless: "forbid" - operations: - - name: aggregate - object: *collection0 - arguments: - pipeline: &pipeline2 - - $match: { $expr: { $eq: ["$_id", "$$id"] } } - - $project: { _id: 1 } - - $out: *collection1Name - let: &let2 - id: 1 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: *pipeline2 - let: *let2 - outcome: - - collectionName: *collection1Name - databaseName: *database0Name - documents: - - { _id: 1 } - - - description: "Aggregate to collection with let option unsupported (server-side error)" - runOnRequirements: - - minServerVersion: "2.6.0" - maxServerVersion: "4.4.99" - operations: - - name: aggregate - object: *collection0 - arguments: - pipeline: *pipeline2 - let: *let2 - expectError: - errorContains: "unrecognized field 'let'" - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: *pipeline2 - let: *let2 diff --git a/testdata/crud/unified/aggregate-merge-errorResponse.json b/testdata/crud/unified/aggregate-merge-errorResponse.json deleted file mode 100644 index 6c7305fd91..0000000000 --- a/testdata/crud/unified/aggregate-merge-errorResponse.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "description": "aggregate-merge-errorResponse", - "schemaVersion": "1.12", - "createEntities": [ - { - "client": { - "id": "client0" - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test" - } - } - ], - "initialData": [ - { - "collectionName": "test", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 1 - }, - { - "_id": 2, - "x": 1 - } - ] - } - ], - "tests": [ - { - "description": "aggregate $merge DuplicateKey error is accessible", - "runOnRequirements": [ - { - "minServerVersion": "5.1", - "topologies": [ - "single", - "replicaset" - ] - } - ], - "operations": [ - { - "name": "aggregate", - "object": "database0", - "arguments": { - "pipeline": [ - { - "$documents": [ - { - "_id": 2, - "x": 1 - } - ] - }, - { - "$merge": { - "into": "test", - "whenMatched": "fail" - } - } - ] - }, - "expectError": { - "errorCode": 11000, - "errorResponse": { - "keyPattern": { - "_id": 1 - }, - "keyValue": { - "_id": 2 - } - } - } - } - ] - } - ] -} diff --git a/testdata/crud/unified/aggregate-merge-errorResponse.yml b/testdata/crud/unified/aggregate-merge-errorResponse.yml deleted file mode 100644 index 5fd679bffb..0000000000 --- a/testdata/crud/unified/aggregate-merge-errorResponse.yml +++ /dev/null @@ -1,42 +0,0 @@ -description: "aggregate-merge-errorResponse" - -schemaVersion: "1.12" - -createEntities: - - client: - id: &client0 client0 - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name test - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 1 } - - { _id: 2, x: 1 } - -tests: - - description: "aggregate $merge DuplicateKey error is accessible" - runOnRequirements: - - minServerVersion: "5.1" # SERVER-59097 - # Exclude sharded topologies since the aggregate command fails with - # IllegalOperation(20) instead of DuplicateKey(11000) - topologies: [ single, replicaset ] - operations: - - name: aggregate - object: *database0 - arguments: - pipeline: - - { $documents: [ { _id: 2, x: 1 } ] } - - { $merge: { into: *collection0Name, whenMatched: "fail" } } - expectError: - errorCode: 11000 # DuplicateKey - errorResponse: - keyPattern: { _id: 1 } - keyValue: { _id: 2 } diff --git a/testdata/crud/unified/aggregate-merge.json b/testdata/crud/unified/aggregate-merge.json deleted file mode 100644 index ac61ceb8a6..0000000000 --- a/testdata/crud/unified/aggregate-merge.json +++ /dev/null @@ -1,497 +0,0 @@ -{ - "description": "aggregate-merge", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "4.1.11" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test_aggregate_merge" - } - }, - { - "collection": { - "id": "collection_readConcern_majority", - "database": "database0", - "collectionName": "test_aggregate_merge", - "collectionOptions": { - "readConcern": { - "level": "majority" - } - } - } - }, - { - "collection": { - "id": "collection_readConcern_local", - "database": "database0", - "collectionName": "test_aggregate_merge", - "collectionOptions": { - "readConcern": { - "level": "local" - } - } - } - }, - { - "collection": { - "id": "collection_readConcern_available", - "database": "database0", - "collectionName": "test_aggregate_merge", - "collectionOptions": { - "readConcern": { - "level": "available" - } - } - } - } - ], - "initialData": [ - { - "collectionName": "test_aggregate_merge", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "Aggregate with $merge", - "operations": [ - { - "object": "collection0", - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$sort": { - "x": 1 - } - }, - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$merge": { - "into": "other_test_collection" - } - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "test_aggregate_merge", - "pipeline": [ - { - "$sort": { - "x": 1 - } - }, - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$merge": { - "into": "other_test_collection" - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "other_test_collection", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "Aggregate with $merge and batch size of 0", - "operations": [ - { - "object": "collection0", - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$sort": { - "x": 1 - } - }, - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$merge": { - "into": "other_test_collection" - } - } - ], - "batchSize": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "test_aggregate_merge", - "pipeline": [ - { - "$sort": { - "x": 1 - } - }, - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$merge": { - "into": "other_test_collection" - } - } - ], - "cursor": {} - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "other_test_collection", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "Aggregate with $merge and majority readConcern", - "operations": [ - { - "object": "collection_readConcern_majority", - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$sort": { - "x": 1 - } - }, - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$merge": { - "into": "other_test_collection" - } - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "test_aggregate_merge", - "pipeline": [ - { - "$sort": { - "x": 1 - } - }, - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$merge": { - "into": "other_test_collection" - } - } - ], - "readConcern": { - "level": "majority" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "other_test_collection", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "Aggregate with $merge and local readConcern", - "operations": [ - { - "object": "collection_readConcern_local", - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$sort": { - "x": 1 - } - }, - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$merge": { - "into": "other_test_collection" - } - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "test_aggregate_merge", - "pipeline": [ - { - "$sort": { - "x": 1 - } - }, - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$merge": { - "into": "other_test_collection" - } - } - ], - "readConcern": { - "level": "local" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "other_test_collection", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "Aggregate with $merge and available readConcern", - "operations": [ - { - "object": "collection_readConcern_available", - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$sort": { - "x": 1 - } - }, - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$merge": { - "into": "other_test_collection" - } - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "test_aggregate_merge", - "pipeline": [ - { - "$sort": { - "x": 1 - } - }, - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$merge": { - "into": "other_test_collection" - } - } - ], - "readConcern": { - "level": "available" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "other_test_collection", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/aggregate-merge.yml b/testdata/crud/unified/aggregate-merge.yml deleted file mode 100644 index 821f03e1c6..0000000000 --- a/testdata/crud/unified/aggregate-merge.yml +++ /dev/null @@ -1,185 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: aggregate-merge -schemaVersion: '1.0' -runOnRequirements: - - - minServerVersion: 4.1.11 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name test_aggregate_merge - - - collection: - id: &collection_readConcern_majority collection_readConcern_majority - database: database0 - collectionName: *collection_name - collectionOptions: - readConcern: { level: "majority" } - - - collection: - id: &collection_readConcern_local collection_readConcern_local - database: database0 - collectionName: *collection_name - collectionOptions: - readConcern: { level: "local" } - - - collection: - id: &collection_readConcern_available collection_readConcern_available - database: database0 - collectionName: *collection_name - collectionOptions: - readConcern: { level: "available" } -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 -tests: - - - description: 'Aggregate with $merge' - operations: - - - object: *collection0 - name: aggregate - arguments: &arguments - pipeline: &pipeline - - - $sort: - x: 1 - - - $match: - _id: - $gt: 1 - - - $merge: - into: &output_collection other_test_collection - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - aggregate: *collection_name - pipeline: *pipeline - outcome: &outcome - - - collectionName: *output_collection - databaseName: *database_name - documents: - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 - - - description: 'Aggregate with $merge and batch size of 0' - operations: - - - object: *collection0 - name: aggregate - arguments: - pipeline: &pipeline - - - $sort: - x: 1 - - - $match: - _id: - $gt: 1 - - - $merge: - into: &output_collection other_test_collection - batchSize: 0 - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - aggregate: *collection_name - pipeline: *pipeline - cursor: { } - outcome: *outcome - - - description: 'Aggregate with $merge and majority readConcern' - operations: - - - object: *collection_readConcern_majority - name: aggregate - arguments: *arguments - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - aggregate: *collection_name - pipeline: *pipeline - readConcern: - level: majority - outcome: *outcome - - - description: 'Aggregate with $merge and local readConcern' - operations: - - - object: *collection_readConcern_local - name: aggregate - arguments: *arguments - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - aggregate: *collection_name - pipeline: *pipeline - readConcern: - level: local - outcome: *outcome - - - description: 'Aggregate with $merge and available readConcern' - operations: - - - object: *collection_readConcern_available - name: aggregate - arguments: *arguments - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - aggregate: *collection_name - pipeline: *pipeline - readConcern: - level: available - outcome: *outcome diff --git a/testdata/crud/unified/aggregate-out-readConcern.json b/testdata/crud/unified/aggregate-out-readConcern.json deleted file mode 100644 index e293457c1c..0000000000 --- a/testdata/crud/unified/aggregate-out-readConcern.json +++ /dev/null @@ -1,407 +0,0 @@ -{ - "description": "aggregate-out-readConcern", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "4.1.0", - "topologies": [ - "replicaset", - "sharded" - ], - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test_aggregate_out_readconcern" - } - }, - { - "collection": { - "id": "collection_readConcern_majority", - "database": "database0", - "collectionName": "test_aggregate_out_readconcern", - "collectionOptions": { - "readConcern": { - "level": "majority" - } - } - } - }, - { - "collection": { - "id": "collection_readConcern_local", - "database": "database0", - "collectionName": "test_aggregate_out_readconcern", - "collectionOptions": { - "readConcern": { - "level": "local" - } - } - } - }, - { - "collection": { - "id": "collection_readConcern_available", - "database": "database0", - "collectionName": "test_aggregate_out_readconcern", - "collectionOptions": { - "readConcern": { - "level": "available" - } - } - } - }, - { - "collection": { - "id": "collection_readConcern_linearizable", - "database": "database0", - "collectionName": "test_aggregate_out_readconcern", - "collectionOptions": { - "readConcern": { - "level": "linearizable" - } - } - } - } - ], - "initialData": [ - { - "collectionName": "test_aggregate_out_readconcern", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "readConcern majority with out stage", - "operations": [ - { - "object": "collection_readConcern_majority", - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$sort": { - "x": 1 - } - }, - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$out": "other_test_collection" - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "test_aggregate_out_readconcern", - "pipeline": [ - { - "$sort": { - "x": 1 - } - }, - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$out": "other_test_collection" - } - ], - "readConcern": { - "level": "majority" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "other_test_collection", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "readConcern local with out stage", - "operations": [ - { - "object": "collection_readConcern_local", - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$sort": { - "x": 1 - } - }, - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$out": "other_test_collection" - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "test_aggregate_out_readconcern", - "pipeline": [ - { - "$sort": { - "x": 1 - } - }, - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$out": "other_test_collection" - } - ], - "readConcern": { - "level": "local" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "other_test_collection", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "readConcern available with out stage", - "operations": [ - { - "object": "collection_readConcern_available", - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$sort": { - "x": 1 - } - }, - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$out": "other_test_collection" - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "test_aggregate_out_readconcern", - "pipeline": [ - { - "$sort": { - "x": 1 - } - }, - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$out": "other_test_collection" - } - ], - "readConcern": { - "level": "available" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "other_test_collection", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "readConcern linearizable with out stage", - "operations": [ - { - "object": "collection_readConcern_linearizable", - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$sort": { - "x": 1 - } - }, - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$out": "other_test_collection" - } - ] - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "test_aggregate_out_readconcern", - "pipeline": [ - { - "$sort": { - "x": 1 - } - }, - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$out": "other_test_collection" - } - ], - "readConcern": { - "level": "linearizable" - } - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/aggregate-out-readConcern.yml b/testdata/crud/unified/aggregate-out-readConcern.yml deleted file mode 100644 index c210c46929..0000000000 --- a/testdata/crud/unified/aggregate-out-readConcern.yml +++ /dev/null @@ -1,171 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: aggregate-out-readConcern -schemaVersion: '1.4' -runOnRequirements: - - - minServerVersion: 4.1.0 - topologies: - - replicaset - - sharded - serverless: "forbid" -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name test_aggregate_out_readconcern - - - collection: - id: &collection_readConcern_majority collection_readConcern_majority - database: database0 - collectionName: *collection_name - collectionOptions: - readConcern: { level: "majority" } - - - collection: - id: &collection_readConcern_local collection_readConcern_local - database: database0 - collectionName: *collection_name - collectionOptions: - readConcern: { level: "local" } - - - collection: - id: &collection_readConcern_available collection_readConcern_available - database: database0 - collectionName: *collection_name - collectionOptions: - readConcern: { level: "available" } - - - collection: - id: &collection_readConcern_linearizable collection_readConcern_linearizable - database: database0 - collectionName: *collection_name - collectionOptions: - readConcern: { level: "linearizable" } -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 -tests: - - - description: 'readConcern majority with out stage' - operations: - - - object: *collection_readConcern_majority - name: aggregate - arguments: &arguments - pipeline: - - - $sort: - x: 1 - - - $match: - _id: - $gt: 1 - - - $out: &output_collection other_test_collection - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - aggregate: *collection_name - pipeline: &pipeline - - { $sort: { x: 1 } } - - { $match: { _id: { $gt: 1 } } } - - { $out: other_test_collection } - readConcern: - level: majority - outcome: &outcome - - - collectionName: *output_collection - databaseName: *database_name - documents: - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 - - - description: 'readConcern local with out stage' - operations: - - - object: *collection_readConcern_local - name: aggregate - arguments: *arguments - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - aggregate: *collection_name - pipeline: *pipeline - readConcern: - level: local - outcome: *outcome - - - description: 'readConcern available with out stage' - operations: - - - object: *collection_readConcern_available - name: aggregate - arguments: *arguments - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - aggregate: *collection_name - pipeline: *pipeline - readConcern: - level: available - outcome: *outcome - - - description: 'readConcern linearizable with out stage' - operations: - - - object: *collection_readConcern_linearizable - name: aggregate - arguments: *arguments - expectError: - isError: true - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - aggregate: *collection_name - pipeline: *pipeline - readConcern: - level: linearizable diff --git a/testdata/crud/unified/aggregate-write-readPreference.json b/testdata/crud/unified/aggregate-write-readPreference.json deleted file mode 100644 index b50592a98f..0000000000 --- a/testdata/crud/unified/aggregate-write-readPreference.json +++ /dev/null @@ -1,461 +0,0 @@ -{ - "description": "aggregate-write-readPreference", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "3.6", - "topologies": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "_yamlAnchors": { - "readConcern": { - "level": "local" - }, - "writeConcern": { - "w": 1 - } - }, - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ], - "uriOptions": { - "readConcernLevel": "local", - "w": 1 - } - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "db0" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0", - "collectionOptions": { - "readPreference": { - "mode": "secondaryPreferred", - "maxStalenessSeconds": 600 - } - } - } - }, - { - "collection": { - "id": "collection1", - "database": "database0", - "collectionName": "coll1" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "db0", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - }, - { - "collectionName": "coll1", - "databaseName": "db0", - "documents": [] - } - ], - "tests": [ - { - "description": "Aggregate with $out includes read preference for 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0", - "serverless": "forbid", - "maxServerVersion": "7.99" - } - ], - "operations": [ - { - "object": "collection0", - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - }, - { - "$out": "coll1" - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "coll0", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - }, - { - "$out": "coll1" - } - ], - "$readPreference": { - "mode": "secondaryPreferred", - "maxStalenessSeconds": 600 - }, - "readConcern": { - "level": "local" - }, - "writeConcern": { - "w": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll1", - "databaseName": "db0", - "documents": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "Aggregate with $out omits read preference for pre-5.0 server", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "maxServerVersion": "4.4.99", - "serverless": "forbid" - } - ], - "operations": [ - { - "object": "collection0", - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - }, - { - "$out": "coll1" - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "coll0", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - }, - { - "$out": "coll1" - } - ], - "$readPreference": { - "$$exists": false - }, - "readConcern": { - "level": "local" - }, - "writeConcern": { - "w": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll1", - "databaseName": "db0", - "documents": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "Aggregate with $merge includes read preference for 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "object": "collection0", - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - }, - { - "$merge": { - "into": "coll1" - } - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "coll0", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - }, - { - "$merge": { - "into": "coll1" - } - } - ], - "$readPreference": { - "mode": "secondaryPreferred", - "maxStalenessSeconds": 600 - }, - "readConcern": { - "level": "local" - }, - "writeConcern": { - "w": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll1", - "databaseName": "db0", - "documents": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "Aggregate with $merge omits read preference for pre-5.0 server", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "maxServerVersion": "4.4.99" - } - ], - "operations": [ - { - "object": "collection0", - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - }, - { - "$merge": { - "into": "coll1" - } - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "coll0", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - }, - { - "$merge": { - "into": "coll1" - } - } - ], - "$readPreference": { - "$$exists": false - }, - "readConcern": { - "level": "local" - }, - "writeConcern": { - "w": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll1", - "databaseName": "db0", - "documents": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/aggregate-write-readPreference.yml b/testdata/crud/unified/aggregate-write-readPreference.yml deleted file mode 100644 index 4959588095..0000000000 --- a/testdata/crud/unified/aggregate-write-readPreference.yml +++ /dev/null @@ -1,157 +0,0 @@ -description: aggregate-write-readPreference - -schemaVersion: '1.4' - -runOnRequirements: - # 3.6+ non-standalone is needed to utilize $readPreference in OP_MSG - - minServerVersion: "3.6" - topologies: [ replicaset, sharded, load-balanced ] - -_yamlAnchors: - readConcern: &readConcern - level: &readConcernLevel "local" - writeConcern: &writeConcern - w: &writeConcernW 1 - -createEntities: - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - # Used to test that read and write concerns are still inherited - uriOptions: - readConcernLevel: *readConcernLevel - w: *writeConcernW - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name db0 - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - collectionOptions: - readPreference: &readPreference - # secondaryPreferred is specified for compatibility with clusters that - # may not have a secondary (e.g. each shard is only a primary). - mode: secondaryPreferred - # maxStalenessSeconds is specified to ensure that drivers forward the - # read preference to mongos or a load balancer. That would not be the - # case with only secondaryPreferred. - maxStalenessSeconds: 600 - - collection: - id: &collection1 collection1 - database: *database0 - collectionName: &collection1Name coll1 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - - collectionName: *collection1Name - databaseName: *database0Name - documents: [] - -tests: - - description: "Aggregate with $out includes read preference for 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - serverless: "forbid" - # GODRIVER-3218 - maxServerVersion: "7.99" - operations: - - object: *collection0 - name: aggregate - arguments: - pipeline: &outPipeline - - { $match: { _id: { $gt: 1 } } } - - { $sort: { x: 1 } } - - { $out: *collection1Name } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: *outPipeline - $readPreference: *readPreference - readConcern: *readConcern - writeConcern: *writeConcern - outcome: &outcome - - collectionName: *collection1Name - databaseName: *database0Name - documents: - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - - - description: "Aggregate with $out omits read preference for pre-5.0 server" - runOnRequirements: - # MongoDB 4.2 introduced support for read concerns and write stages. - # Pre-4.2 servers may allow a "local" read concern anyway, but some - # drivers may avoid inheriting a client-level read concern for pre-4.2. - - minServerVersion: "4.2" - maxServerVersion: "4.4.99" - serverless: "forbid" - operations: - - object: *collection0 - name: aggregate - arguments: - pipeline: *outPipeline - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: *outPipeline - $readPreference: { $$exists: false } - readConcern: *readConcern - writeConcern: *writeConcern - outcome: *outcome - - - description: "Aggregate with $merge includes read preference for 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - object: *collection0 - name: aggregate - arguments: - pipeline: &mergePipeline - - { $match: { _id: { $gt: 1 } } } - - { $sort: { x: 1 } } - - { $merge: { into: *collection1Name } } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: *mergePipeline - $readPreference: *readPreference - readConcern: *readConcern - writeConcern: *writeConcern - outcome: *outcome - - - description: "Aggregate with $merge omits read preference for pre-5.0 server" - runOnRequirements: - - minServerVersion: "4.2" - maxServerVersion: "4.4.99" - operations: - - object: *collection0 - name: aggregate - arguments: - pipeline: *mergePipeline - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: *mergePipeline - $readPreference: { $$exists: false } - readConcern: *readConcern - writeConcern: *writeConcern - outcome: *outcome diff --git a/testdata/crud/unified/aggregate.json b/testdata/crud/unified/aggregate.json deleted file mode 100644 index 2e46e74ef7..0000000000 --- a/testdata/crud/unified/aggregate.json +++ /dev/null @@ -1,568 +0,0 @@ -{ - "description": "aggregate", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "useMultipleMongoses": true, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "aggregate-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "aggregate-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 5, - "x": 55 - }, - { - "_id": 6, - "x": 66 - } - ] - } - ], - "tests": [ - { - "description": "aggregate with multiple batches works", - "operations": [ - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - } - ], - "batchSize": 2 - }, - "object": "collection0", - "expectResult": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 5, - "x": 55 - }, - { - "_id": 6, - "x": 66 - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "coll0", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - } - ], - "cursor": { - "batchSize": 2 - } - }, - "commandName": "aggregate", - "databaseName": "aggregate-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "coll0", - "batchSize": 2 - }, - "commandName": "getMore", - "databaseName": "aggregate-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "coll0", - "batchSize": 2 - }, - "commandName": "getMore", - "databaseName": "aggregate-tests" - } - } - ] - } - ] - }, - { - "description": "aggregate with a string comment", - "runOnRequirements": [ - { - "minServerVersion": "3.6.0" - } - ], - "operations": [ - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - } - ], - "comment": "comment" - }, - "object": "collection0" - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "coll0", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - } - ], - "comment": "comment" - } - } - } - ] - } - ] - }, - { - "description": "aggregate with a document comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - } - ], - "comment": { - "content": "test" - } - }, - "object": "collection0" - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "coll0", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - } - ], - "comment": { - "content": "test" - } - } - } - } - ] - } - ] - }, - { - "description": "aggregate with a document comment - pre 4.4", - "runOnRequirements": [ - { - "minServerVersion": "3.6.0", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "aggregate", - "object": "collection0", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - } - ], - "comment": { - "content": "test" - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "coll0", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - } - ], - "comment": { - "content": "test" - } - }, - "commandName": "aggregate", - "databaseName": "aggregate-tests" - } - } - ] - } - ] - }, - { - "description": "aggregate with comment sets comment on getMore", - "skipReason": "aggregate comments are string-only", - "runOnRequirements": [ - { - "minServerVersion": "4.4.0" - } - ], - "operations": [ - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - } - ], - "batchSize": 2, - "comment": { - "content": "test" - } - }, - "object": "collection0", - "expectResult": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 5, - "x": 55 - }, - { - "_id": 6, - "x": 66 - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "coll0", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - } - ], - "cursor": { - "batchSize": 2 - }, - "comment": { - "content": "test" - } - }, - "commandName": "aggregate", - "databaseName": "aggregate-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "coll0", - "batchSize": 2, - "comment": { - "content": "test" - } - }, - "commandName": "getMore", - "databaseName": "aggregate-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "coll0", - "batchSize": 2, - "comment": { - "content": "test" - } - }, - "commandName": "getMore", - "databaseName": "aggregate-tests" - } - } - ] - } - ] - }, - { - "description": "aggregate with comment does not set comment on getMore - pre 4.4", - "runOnRequirements": [ - { - "minServerVersion": "3.6.0", - "maxServerVersion": "4.3.99" - } - ], - "operations": [ - { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - } - ], - "batchSize": 2, - "comment": "comment" - }, - "object": "collection0", - "expectResult": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 5, - "x": 55 - }, - { - "_id": 6, - "x": 66 - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "coll0", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - } - ], - "cursor": { - "batchSize": 2 - }, - "comment": "comment" - }, - "commandName": "aggregate", - "databaseName": "aggregate-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "coll0", - "batchSize": 2, - "comment": { - "$$exists": false - } - }, - "commandName": "getMore", - "databaseName": "aggregate-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "coll0", - "batchSize": 2, - "comment": { - "$$exists": false - } - }, - "commandName": "getMore", - "databaseName": "aggregate-tests" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/aggregate.yml b/testdata/crud/unified/aggregate.yml deleted file mode 100644 index e0f47f5a43..0000000000 --- a/testdata/crud/unified/aggregate.yml +++ /dev/null @@ -1,216 +0,0 @@ -description: "aggregate" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - useMultipleMongoses: true # ensure cursors pin to a single server - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name aggregate-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - - { _id: 4, x: 44 } - - { _id: 5, x: 55 } - - { _id: 6, x: 66 } - -tests: - - description: "aggregate with multiple batches works" - operations: - - name: aggregate - arguments: - pipeline: [ { $match: { _id: { $gt: 1 } }} ] - batchSize: 2 - object: *collection0 - expectResult: - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - - { _id: 4, x: 44 } - - { _id: 5, x: 55 } - - { _id: 6, x: 66 } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: [ { $match: { _id: { $gt: 1 } }} ] - cursor: { batchSize: 2 } - commandName: aggregate - databaseName: *database0Name - - commandStartedEvent: - command: - getMore: { $$type: [ int, long ] } - collection: *collection0Name - batchSize: 2 - commandName: getMore - databaseName: *database0Name - - commandStartedEvent: - command: - getMore: { $$type: [ int, long ] } - collection: *collection0Name - batchSize: 2 - commandName: getMore - databaseName: *database0Name - - - description: "aggregate with a string comment" - runOnRequirements: - - minServerVersion: "3.6.0" - operations: - - name: aggregate - arguments: - pipeline: [ { $match: { _id: { $gt: 1 } }} ] - comment: "comment" - object: *collection0 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: [ { $match: { _id: { $gt: 1 } } } ] - comment: "comment" - - - description: "aggregate with a document comment" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: aggregate - arguments: - pipeline: [ { $match: { _id: { $gt: 1 } }} ] - comment: &comment0 { content: "test" } - object: *collection0 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: [ { $match: { _id: { $gt: 1 } } } ] - comment: *comment0 - - - description: "aggregate with a document comment - pre 4.4" - runOnRequirements: - - minServerVersion: "3.6.0" - maxServerVersion: "4.2.99" - operations: - - name: aggregate - object: *collection0 - arguments: - pipeline: [ { $match: { _id: { $gt: 1 } }} ] - comment: *comment0 - expectError: - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: [ { $match: { _id: { $gt: 1 } }} ] - comment: *comment0 - commandName: aggregate - databaseName: *database0Name - - - description: "aggregate with comment sets comment on getMore" - runOnRequirements: - - minServerVersion: "4.4.0" - topologies: [ single, replicaset ] - operations: - - name: aggregate - arguments: - pipeline: [ { $match: { _id: { $gt: 1 } }} ] - batchSize: 2 - comment: *comment0 - object: *collection0 - expectResult: - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - - { _id: 4, x: 44 } - - { _id: 5, x: 55 } - - { _id: 6, x: 66 } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: [ { $match: { _id: { $gt: 1 } }} ] - cursor: { batchSize: 2 } - comment: *comment0 - commandName: aggregate - databaseName: *database0Name - - commandStartedEvent: - command: - getMore: { $$type: [ int, long ] } - collection: *collection0Name - batchSize: 2 - comment: *comment0 - commandName: getMore - databaseName: *database0Name - - commandStartedEvent: - command: - getMore: { $$type: [ int, long ] } - collection: *collection0Name - batchSize: 2 - comment: *comment0 - commandName: getMore - databaseName: *database0Name - - - description: "aggregate with comment does not set comment on getMore - pre 4.4" - runOnRequirements: - - minServerVersion: "3.6.0" - maxServerVersion: "4.3.99" - operations: - - name: aggregate - arguments: - pipeline: [ { $match: { _id: { $gt: 1 } }} ] - batchSize: 2 - comment: "comment" - object: *collection0 - expectResult: - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - - { _id: 4, x: 44 } - - { _id: 5, x: 55 } - - { _id: 6, x: 66 } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: [ { $match: { _id: { $gt: 1 } }} ] - cursor: { batchSize: 2 } - comment: "comment" - commandName: aggregate - databaseName: *database0Name - - commandStartedEvent: - command: - getMore: { $$type: [ int, long ] } - collection: *collection0Name - batchSize: 2 - comment: { $$exists: false } - commandName: getMore - databaseName: *database0Name - - commandStartedEvent: - command: - getMore: { $$type: [ int, long ] } - collection: *collection0Name - batchSize: 2 - comment: { $$exists: false } - commandName: getMore - databaseName: *database0Name diff --git a/testdata/crud/unified/bulkWrite-arrayFilters-clientError.json b/testdata/crud/unified/bulkWrite-arrayFilters-clientError.json deleted file mode 100644 index 63815e3233..0000000000 --- a/testdata/crud/unified/bulkWrite-arrayFilters-clientError.json +++ /dev/null @@ -1,151 +0,0 @@ -{ - "description": "bulkWrite-arrayFilters-clientError", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "maxServerVersion": "3.5.5" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "crud-v2" - } - } - ], - "initialData": [ - { - "collectionName": "crud-v2", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "y": [ - { - "b": 3 - }, - { - "b": 1 - } - ] - }, - { - "_id": 2, - "y": [ - { - "b": 0 - }, - { - "b": 1 - } - ] - } - ] - } - ], - "tests": [ - { - "description": "BulkWrite on server that doesn't support arrayFilters", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "updateOne": { - "filter": {}, - "update": { - "$set": { - "y.0.b": 2 - } - }, - "arrayFilters": [ - { - "i.b": 1 - } - ] - } - } - ], - "ordered": true - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ] - }, - { - "description": "BulkWrite on server that doesn't support arrayFilters with arrayFilters on second op", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "updateOne": { - "filter": {}, - "update": { - "$set": { - "y.0.b": 2 - } - } - } - }, - { - "updateMany": { - "filter": {}, - "update": { - "$set": { - "y.$[i].b": 2 - } - }, - "arrayFilters": [ - { - "i.b": 1 - } - ] - } - } - ], - "ordered": true - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ] - } - ] -} diff --git a/testdata/crud/unified/bulkWrite-arrayFilters-clientError.yml b/testdata/crud/unified/bulkWrite-arrayFilters-clientError.yml deleted file mode 100644 index 8b4c7a1c9e..0000000000 --- a/testdata/crud/unified/bulkWrite-arrayFilters-clientError.yml +++ /dev/null @@ -1,98 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: bulkWrite-arrayFilters-clientError -schemaVersion: '1.0' -runOnRequirements: - - - maxServerVersion: 3.5.5 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name crud-v2 -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - 'y': - - - b: 3 - - - b: 1 - - - _id: 2 - 'y': - - - b: 0 - - - b: 1 -tests: - - - description: 'BulkWrite on server that doesn''t support arrayFilters' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - updateOne: - filter: { } - update: - $set: - y.0.b: 2 - arrayFilters: - - - i.b: 1 - ordered: true - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - - - description: 'BulkWrite on server that doesn''t support arrayFilters with arrayFilters on second op' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - updateOne: - filter: { } - update: - $set: - y.0.b: 2 - - - updateMany: - filter: { } - update: - $set: - 'y.$[i].b': 2 - arrayFilters: - - - i.b: 1 - ordered: true - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] diff --git a/testdata/crud/unified/bulkWrite-arrayFilters.json b/testdata/crud/unified/bulkWrite-arrayFilters.json deleted file mode 100644 index 70ee014f7a..0000000000 --- a/testdata/crud/unified/bulkWrite-arrayFilters.json +++ /dev/null @@ -1,279 +0,0 @@ -{ - "description": "bulkWrite-arrayFilters", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "3.5.6" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test" - } - } - ], - "initialData": [ - { - "collectionName": "test", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "y": [ - { - "b": 3 - }, - { - "b": 1 - } - ] - }, - { - "_id": 2, - "y": [ - { - "b": 0 - }, - { - "b": 1 - } - ] - } - ] - } - ], - "tests": [ - { - "description": "BulkWrite updateOne with arrayFilters", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "updateOne": { - "filter": {}, - "update": { - "$set": { - "y.$[i].b": 2 - } - }, - "arrayFilters": [ - { - "i.b": 3 - } - ] - } - } - ], - "ordered": true - }, - "expectResult": { - "deletedCount": 0, - "insertedCount": 0, - "insertedIds": { - "$$unsetOrMatches": {} - }, - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0, - "upsertedIds": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test", - "updates": [ - { - "q": {}, - "u": { - "$set": { - "y.$[i].b": 2 - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - }, - "arrayFilters": [ - { - "i.b": 3 - } - ] - } - ], - "ordered": true - }, - "commandName": "update", - "databaseName": "crud-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "y": [ - { - "b": 2 - }, - { - "b": 1 - } - ] - }, - { - "_id": 2, - "y": [ - { - "b": 0 - }, - { - "b": 1 - } - ] - } - ] - } - ] - }, - { - "description": "BulkWrite updateMany with arrayFilters", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "updateMany": { - "filter": {}, - "update": { - "$set": { - "y.$[i].b": 2 - } - }, - "arrayFilters": [ - { - "i.b": 1 - } - ] - } - } - ], - "ordered": true - }, - "expectResult": { - "deletedCount": 0, - "insertedCount": 0, - "insertedIds": { - "$$unsetOrMatches": {} - }, - "matchedCount": 2, - "modifiedCount": 2, - "upsertedCount": 0, - "upsertedIds": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test", - "updates": [ - { - "q": {}, - "u": { - "$set": { - "y.$[i].b": 2 - } - }, - "multi": true, - "upsert": { - "$$unsetOrMatches": false - }, - "arrayFilters": [ - { - "i.b": 1 - } - ] - } - ], - "ordered": true - }, - "commandName": "update", - "databaseName": "crud-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "y": [ - { - "b": 3 - }, - { - "b": 2 - } - ] - }, - { - "_id": 2, - "y": [ - { - "b": 0 - }, - { - "b": 2 - } - ] - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/bulkWrite-arrayFilters.yml b/testdata/crud/unified/bulkWrite-arrayFilters.yml deleted file mode 100644 index a236acb12d..0000000000 --- a/testdata/crud/unified/bulkWrite-arrayFilters.yml +++ /dev/null @@ -1,174 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: bulkWrite-arrayFilters -schemaVersion: '1.0' -runOnRequirements: - - - minServerVersion: 3.5.6 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-tests - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name test -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - 'y': - - - b: 3 - - - b: 1 - - - _id: 2 - 'y': - - - b: 0 - - - b: 1 -tests: - - - description: 'BulkWrite updateOne with arrayFilters' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - updateOne: - filter: { } - update: - $set: - 'y.$[i].b': 2 - arrayFilters: - - - i.b: 3 - ordered: true - expectResult: - deletedCount: 0 - insertedCount: 0 - insertedIds: { $$unsetOrMatches: {} } - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - upsertedIds: { } - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - update: *collection_name - updates: - - - q: { } - u: - $set: { 'y.$[i].b': 2 } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - arrayFilters: - - { i.b: 3 } - ordered: true - commandName: update - databaseName: *database_name - outcome: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - 'y': - - - b: 2 - - - b: 1 - - - _id: 2 - 'y': - - - b: 0 - - - b: 1 - - - description: 'BulkWrite updateMany with arrayFilters' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - updateMany: - filter: { } - update: - $set: - 'y.$[i].b': 2 - arrayFilters: - - - i.b: 1 - ordered: true - expectResult: - deletedCount: 0 - insertedCount: 0 - insertedIds: { $$unsetOrMatches: {} } - matchedCount: 2 - modifiedCount: 2 - upsertedCount: 0 - upsertedIds: { } - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - update: *collection_name - updates: - - - q: { } - u: - $set: { 'y.$[i].b': 2 } - multi: true - upsert: { $$unsetOrMatches: false } - arrayFilters: - - { i.b: 1 } - ordered: true - commandName: update - databaseName: *database_name - outcome: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - 'y': - - - b: 3 - - - b: 2 - - - _id: 2 - 'y': - - - b: 0 - - - b: 2 diff --git a/testdata/crud/unified/bulkWrite-comment.json b/testdata/crud/unified/bulkWrite-comment.json deleted file mode 100644 index 0b2addc850..0000000000 --- a/testdata/crud/unified/bulkWrite-comment.json +++ /dev/null @@ -1,519 +0,0 @@ -{ - "description": "bulkWrite-comment", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "BulkWrite_comment" - } - } - ], - "initialData": [ - { - "collectionName": "BulkWrite_comment", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "tests": [ - { - "description": "BulkWrite with string comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "insertOne": { - "document": { - "_id": 5, - "x": "inserted" - } - } - }, - { - "replaceOne": { - "filter": { - "_id": 1 - }, - "replacement": { - "_id": 1, - "x": "replaced" - } - } - }, - { - "updateOne": { - "filter": { - "_id": 2 - }, - "update": { - "$set": { - "x": "updated" - } - } - } - }, - { - "deleteOne": { - "filter": { - "_id": 3 - } - } - } - ], - "comment": "comment" - }, - "expectResult": { - "deletedCount": 1, - "insertedCount": 1, - "insertedIds": { - "$$unsetOrMatches": { - "0": 5 - } - }, - "matchedCount": 2, - "modifiedCount": 2, - "upsertedCount": 0, - "upsertedIds": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "BulkWrite_comment", - "documents": [ - { - "_id": 5, - "x": "inserted" - } - ], - "ordered": true, - "comment": "comment" - } - } - }, - { - "commandStartedEvent": { - "command": { - "update": "BulkWrite_comment", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "_id": 1, - "x": "replaced" - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - }, - { - "q": { - "_id": 2 - }, - "u": { - "$set": { - "x": "updated" - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "ordered": true, - "comment": "comment" - } - } - }, - { - "commandStartedEvent": { - "command": { - "delete": "BulkWrite_comment", - "deletes": [ - { - "q": { - "_id": 3 - }, - "limit": 1 - } - ], - "ordered": true, - "comment": "comment" - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "BulkWrite_comment", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": "replaced" - }, - { - "_id": 2, - "x": "updated" - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 5, - "x": "inserted" - } - ] - } - ] - }, - { - "description": "BulkWrite with document comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "insertOne": { - "document": { - "_id": 5, - "x": "inserted" - } - } - }, - { - "replaceOne": { - "filter": { - "_id": 1 - }, - "replacement": { - "_id": 1, - "x": "replaced" - } - } - }, - { - "updateOne": { - "filter": { - "_id": 2 - }, - "update": { - "$set": { - "x": "updated" - } - } - } - }, - { - "deleteOne": { - "filter": { - "_id": 3 - } - } - } - ], - "comment": { - "key": "value" - } - }, - "expectResult": { - "deletedCount": 1, - "insertedCount": 1, - "insertedIds": { - "$$unsetOrMatches": { - "0": 5 - } - }, - "matchedCount": 2, - "modifiedCount": 2, - "upsertedCount": 0, - "upsertedIds": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "BulkWrite_comment", - "documents": [ - { - "_id": 5, - "x": "inserted" - } - ], - "ordered": true, - "comment": { - "key": "value" - } - } - } - }, - { - "commandStartedEvent": { - "command": { - "update": "BulkWrite_comment", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "_id": 1, - "x": "replaced" - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - }, - { - "q": { - "_id": 2 - }, - "u": { - "$set": { - "x": "updated" - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "ordered": true, - "comment": { - "key": "value" - } - } - } - }, - { - "commandStartedEvent": { - "command": { - "delete": "BulkWrite_comment", - "deletes": [ - { - "q": { - "_id": 3 - }, - "limit": 1 - } - ], - "ordered": true, - "comment": { - "key": "value" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "BulkWrite_comment", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": "replaced" - }, - { - "_id": 2, - "x": "updated" - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 5, - "x": "inserted" - } - ] - } - ] - }, - { - "description": "BulkWrite with comment - pre 4.4", - "runOnRequirements": [ - { - "minServerVersion": "3.4.0", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "insertOne": { - "document": { - "_id": 5, - "x": "inserted" - } - } - }, - { - "replaceOne": { - "filter": { - "_id": 1 - }, - "replacement": { - "_id": 1, - "x": "replaced" - } - } - }, - { - "updateOne": { - "filter": { - "_id": 2 - }, - "update": { - "$set": { - "x": "updated" - } - } - } - }, - { - "deleteOne": { - "filter": { - "_id": 3 - } - } - } - ], - "comment": "comment" - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "BulkWrite_comment", - "documents": [ - { - "_id": 5, - "x": "inserted" - } - ], - "ordered": true, - "comment": "comment" - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "BulkWrite_comment", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/bulkWrite-comment.yml b/testdata/crud/unified/bulkWrite-comment.yml deleted file mode 100644 index 812935577c..0000000000 --- a/testdata/crud/unified/bulkWrite-comment.yml +++ /dev/null @@ -1,177 +0,0 @@ - - -description: bulkWrite-comment -schemaVersion: '1.0' - -createEntities: - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name BulkWrite_comment - -initialData: &initial_data - - collectionName: *collection_name - databaseName: *database_name - documents: - - _id: 1 - x: 11 - - _id: 2 - x: 22 - - _id: 3 - x: 33 - - _id: 4 - x: 44 - -tests: - - description: 'BulkWrite with string comment' - runOnRequirements: - - minServerVersion: "4.4" - operations: - - object: *collection0 - name: bulkWrite - arguments: - requests: &requests - - insertOne: - document: &inserted_document - _id: 5 - x: "inserted" - - replaceOne: - filter: &replaceOne_filter - _id: 1 - replacement: &replacement { _id: 1, x: "replaced" } - - updateOne: - filter: &updateOne_filter - _id: 2 - update: &update { $set: {x: "updated"} } - - deleteOne: - filter: &deleteOne_filter - _id: 3 - comment: &string_comment "comment" - expectResult: &expect_results - deletedCount: 1 - insertedCount: 1 - insertedIds: { $$unsetOrMatches: { 0: 5} } - matchedCount: 2 - modifiedCount: 2 - upsertedCount: 0 - upsertedIds: { } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection_name - documents: - - *inserted_document - ordered: true - comment: *string_comment - - commandStartedEvent: - command: - update: *collection_name - updates: - - q: *replaceOne_filter - u: *replacement - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - q: *updateOne_filter - u: *update - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - ordered: true - comment: *string_comment - - commandStartedEvent: - command: - delete: *collection_name - deletes: - - q: *deleteOne_filter - limit: 1 - ordered: true - comment: *string_comment - outcome: &outcome - - collectionName: *collection_name - databaseName: *database_name - documents: - - _id: 1 - x: "replaced" - - _id: 2 - x: "updated" - - _id: 4 - x: 44 - - _id: 5 - x: "inserted" - - - description: 'BulkWrite with document comment' - runOnRequirements: - - minServerVersion: "4.4" - operations: - - object: *collection0 - name: bulkWrite - arguments: - requests: *requests - comment: &document_comment { key: "value" } - expectResult: *expect_results - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection_name - documents: - - *inserted_document - ordered: true - comment: *document_comment - - commandStartedEvent: - command: - update: *collection_name - updates: - - q: *replaceOne_filter - u: *replacement - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - q: *updateOne_filter - u: *update - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - ordered: true - comment: *document_comment - - commandStartedEvent: - command: - delete: *collection_name - deletes: - - q: *deleteOne_filter - limit: 1 - ordered: true - comment: *document_comment - outcome: *outcome - - - description: 'BulkWrite with comment - pre 4.4' - runOnRequirements: - - minServerVersion: "3.4.0" - maxServerVersion: "4.2.99" - operations: - - object: *collection0 - name: bulkWrite - arguments: - requests: *requests - comment: "comment" - expectError: - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection_name - documents: - - *inserted_document - ordered: true - comment: "comment" - outcome: *initial_data diff --git a/testdata/crud/unified/bulkWrite-delete-hint-clientError.json b/testdata/crud/unified/bulkWrite-delete-hint-clientError.json deleted file mode 100644 index 2961b55dc0..0000000000 --- a/testdata/crud/unified/bulkWrite-delete-hint-clientError.json +++ /dev/null @@ -1,193 +0,0 @@ -{ - "description": "bulkWrite-delete-hint-clientError", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "maxServerVersion": "3.3.99" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "BulkWrite_delete_hint" - } - } - ], - "initialData": [ - { - "collectionName": "BulkWrite_delete_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "tests": [ - { - "description": "BulkWrite deleteOne with hints unsupported (client-side error)", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "deleteOne": { - "filter": { - "_id": 1 - }, - "hint": "_id_" - } - }, - { - "deleteOne": { - "filter": { - "_id": 2 - }, - "hint": { - "_id": 1 - } - } - } - ], - "ordered": true - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "BulkWrite_delete_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ] - }, - { - "description": "BulkWrite deleteMany with hints unsupported (client-side error)", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "deleteMany": { - "filter": { - "_id": { - "$lt": 3 - } - }, - "hint": "_id_" - } - }, - { - "deleteMany": { - "filter": { - "_id": { - "$gte": 4 - } - }, - "hint": { - "_id": 1 - } - } - } - ], - "ordered": true - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "BulkWrite_delete_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/bulkWrite-delete-hint-clientError.yml b/testdata/crud/unified/bulkWrite-delete-hint-clientError.yml deleted file mode 100644 index 2b0bdb1c21..0000000000 --- a/testdata/crud/unified/bulkWrite-delete-hint-clientError.yml +++ /dev/null @@ -1,113 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: bulkWrite-delete-hint-clientError -schemaVersion: '1.0' -runOnRequirements: - - - maxServerVersion: 3.3.99 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name BulkWrite_delete_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 - - - _id: 4 - x: 44 -tests: - - - description: 'BulkWrite deleteOne with hints unsupported (client-side error)' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - deleteOne: - filter: &deleteOne_filter1 - _id: 1 - hint: &hint_string _id_ - - - deleteOne: - filter: &deleteOne_filter2 - _id: 2 - hint: &hint_doc - _id: 1 - ordered: true - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 - - - _id: 4 - x: 44 - - - description: 'BulkWrite deleteMany with hints unsupported (client-side error)' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - deleteMany: - filter: &deleteMany_filter1 - _id: - $lt: 3 - hint: *hint_string - - - deleteMany: - filter: &deleteMany_filter2 - _id: - $gte: 4 - hint: *hint_doc - ordered: true - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: *outcome diff --git a/testdata/crud/unified/bulkWrite-delete-hint-serverError.json b/testdata/crud/unified/bulkWrite-delete-hint-serverError.json deleted file mode 100644 index fa99522093..0000000000 --- a/testdata/crud/unified/bulkWrite-delete-hint-serverError.json +++ /dev/null @@ -1,252 +0,0 @@ -{ - "description": "bulkWrite-delete-hint-serverError", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "3.4.0", - "maxServerVersion": "4.3.3" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "BulkWrite_delete_hint" - } - } - ], - "initialData": [ - { - "collectionName": "BulkWrite_delete_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "tests": [ - { - "description": "BulkWrite deleteOne with hints unsupported (server-side error)", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "deleteOne": { - "filter": { - "_id": 1 - }, - "hint": "_id_" - } - }, - { - "deleteOne": { - "filter": { - "_id": 2 - }, - "hint": { - "_id": 1 - } - } - } - ], - "ordered": true - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "BulkWrite_delete_hint", - "deletes": [ - { - "q": { - "_id": 1 - }, - "hint": "_id_", - "limit": 1 - }, - { - "q": { - "_id": 2 - }, - "hint": { - "_id": 1 - }, - "limit": 1 - } - ], - "ordered": true - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "BulkWrite_delete_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ] - }, - { - "description": "BulkWrite deleteMany with hints unsupported (server-side error)", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "deleteMany": { - "filter": { - "_id": { - "$lt": 3 - } - }, - "hint": "_id_" - } - }, - { - "deleteMany": { - "filter": { - "_id": { - "$gte": 4 - } - }, - "hint": { - "_id": 1 - } - } - } - ], - "ordered": true - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "BulkWrite_delete_hint", - "deletes": [ - { - "q": { - "_id": { - "$lt": 3 - } - }, - "hint": "_id_", - "limit": 0 - }, - { - "q": { - "_id": { - "$gte": 4 - } - }, - "hint": { - "_id": 1 - }, - "limit": 0 - } - ], - "ordered": true - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "BulkWrite_delete_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/bulkWrite-delete-hint-serverError.yml b/testdata/crud/unified/bulkWrite-delete-hint-serverError.yml deleted file mode 100644 index e757bade0c..0000000000 --- a/testdata/crud/unified/bulkWrite-delete-hint-serverError.yml +++ /dev/null @@ -1,142 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: bulkWrite-delete-hint-serverError -schemaVersion: '1.0' -runOnRequirements: - - - minServerVersion: 3.4.0 - maxServerVersion: 4.3.3 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name BulkWrite_delete_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 - - - _id: 4 - x: 44 -tests: - - - description: 'BulkWrite deleteOne with hints unsupported (server-side error)' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - deleteOne: - filter: &deleteOne_filter1 - _id: 1 - hint: &hint_string _id_ - - - deleteOne: - filter: &deleteOne_filter2 - _id: 2 - hint: &hint_doc - _id: 1 - ordered: true - expectError: - isError: true - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - delete: *collection_name - deletes: - - - q: *deleteOne_filter1 - hint: *hint_string - limit: 1 - - - q: *deleteOne_filter2 - hint: *hint_doc - limit: 1 - ordered: true - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 - - - _id: 4 - x: 44 - - - description: 'BulkWrite deleteMany with hints unsupported (server-side error)' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - deleteMany: - filter: &deleteMany_filter1 - _id: - $lt: 3 - hint: *hint_string - - - deleteMany: - filter: &deleteMany_filter2 - _id: - $gte: 4 - hint: *hint_doc - ordered: true - expectError: - isError: true - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - delete: *collection_name - deletes: - - - q: *deleteMany_filter1 - hint: *hint_string - limit: 0 - - - q: *deleteMany_filter2 - hint: *hint_doc - limit: 0 - ordered: true - outcome: *outcome diff --git a/testdata/crud/unified/bulkWrite-delete-hint.json b/testdata/crud/unified/bulkWrite-delete-hint.json deleted file mode 100644 index 9fcdecefd7..0000000000 --- a/testdata/crud/unified/bulkWrite-delete-hint.json +++ /dev/null @@ -1,247 +0,0 @@ -{ - "description": "bulkWrite-delete-hint", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "4.3.4" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "BulkWrite_delete_hint" - } - } - ], - "initialData": [ - { - "collectionName": "BulkWrite_delete_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "tests": [ - { - "description": "BulkWrite deleteOne with hints", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "deleteOne": { - "filter": { - "_id": 1 - }, - "hint": "_id_" - } - }, - { - "deleteOne": { - "filter": { - "_id": 2 - }, - "hint": { - "_id": 1 - } - } - } - ], - "ordered": true - }, - "expectResult": { - "deletedCount": 2, - "insertedCount": 0, - "insertedIds": { - "$$unsetOrMatches": {} - }, - "matchedCount": 0, - "modifiedCount": 0, - "upsertedCount": 0, - "upsertedIds": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "BulkWrite_delete_hint", - "deletes": [ - { - "q": { - "_id": 1 - }, - "hint": "_id_", - "limit": 1 - }, - { - "q": { - "_id": 2 - }, - "hint": { - "_id": 1 - }, - "limit": 1 - } - ], - "ordered": true - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "BulkWrite_delete_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ] - }, - { - "description": "BulkWrite deleteMany with hints", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "deleteMany": { - "filter": { - "_id": { - "$lt": 3 - } - }, - "hint": "_id_" - } - }, - { - "deleteMany": { - "filter": { - "_id": { - "$gte": 4 - } - }, - "hint": { - "_id": 1 - } - } - } - ], - "ordered": true - }, - "expectResult": { - "deletedCount": 3, - "insertedCount": 0, - "insertedIds": { - "$$unsetOrMatches": {} - }, - "matchedCount": 0, - "modifiedCount": 0, - "upsertedCount": 0, - "upsertedIds": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "BulkWrite_delete_hint", - "deletes": [ - { - "q": { - "_id": { - "$lt": 3 - } - }, - "hint": "_id_", - "limit": 0 - }, - { - "q": { - "_id": { - "$gte": 4 - } - }, - "hint": { - "_id": 1 - }, - "limit": 0 - } - ], - "ordered": true - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "BulkWrite_delete_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 3, - "x": 33 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/bulkWrite-delete-hint.yml b/testdata/crud/unified/bulkWrite-delete-hint.yml deleted file mode 100644 index 8b7f84aa94..0000000000 --- a/testdata/crud/unified/bulkWrite-delete-hint.yml +++ /dev/null @@ -1,154 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: bulkWrite-delete-hint -schemaVersion: '1.0' -runOnRequirements: - - - minServerVersion: 4.3.4 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name BulkWrite_delete_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 - - - _id: 4 - x: 44 -tests: - - - description: 'BulkWrite deleteOne with hints' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - deleteOne: - filter: &deleteOne_filter1 - _id: 1 - hint: &hint_string _id_ - - - deleteOne: - filter: &deleteOne_filter2 - _id: 2 - hint: &hint_doc - _id: 1 - ordered: true - expectResult: - deletedCount: 2 - insertedCount: 0 - insertedIds: { $$unsetOrMatches: {} } - matchedCount: 0 - modifiedCount: 0 - upsertedCount: 0 - upsertedIds: { } - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - delete: *collection_name - deletes: - - - q: *deleteOne_filter1 - hint: *hint_string - limit: 1 - - - q: *deleteOne_filter2 - hint: *hint_doc - limit: 1 - ordered: true - outcome: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 3 - x: 33 - - - _id: 4 - x: 44 - - - description: 'BulkWrite deleteMany with hints' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - deleteMany: - filter: &deleteMany_filter1 - _id: - $lt: 3 - hint: *hint_string - - - deleteMany: - filter: &deleteMany_filter2 - _id: - $gte: 4 - hint: *hint_doc - ordered: true - expectResult: - deletedCount: 3 - insertedCount: 0 - insertedIds: { $$unsetOrMatches: {} } - matchedCount: 0 - modifiedCount: 0 - upsertedCount: 0 - upsertedIds: { } - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - delete: *collection_name - deletes: - - - q: *deleteMany_filter1 - hint: *hint_string - limit: 0 - - - q: *deleteMany_filter2 - hint: *hint_doc - limit: 0 - ordered: true - outcome: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 3 - x: 33 diff --git a/testdata/crud/unified/bulkWrite-deleteMany-let.json b/testdata/crud/unified/bulkWrite-deleteMany-let.json deleted file mode 100644 index 45c20ea49a..0000000000 --- a/testdata/crud/unified/bulkWrite-deleteMany-let.json +++ /dev/null @@ -1,200 +0,0 @@ -{ - "description": "BulkWrite deleteMany-let", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ], - "tests": [ - { - "description": "BulkWrite deleteMany with let option", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "deleteMany": { - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - } - } - } - ], - "let": { - "id": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "coll0", - "deletes": [ - { - "q": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "limit": 0 - } - ], - "let": { - "id": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 2 - } - ] - } - ] - }, - { - "description": "BulkWrite deleteMany with let option unsupported (server-side error)", - "runOnRequirements": [ - { - "minServerVersion": "3.6.0", - "maxServerVersion": "4.4.99" - } - ], - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "deleteOne": { - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - } - } - } - ], - "let": { - "id": 1 - } - }, - "expectError": { - "errorContains": "'delete.let' is an unknown field", - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "coll0", - "deletes": [ - { - "q": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "limit": 1 - } - ], - "let": { - "id": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/bulkWrite-deleteMany-let.yml b/testdata/crud/unified/bulkWrite-deleteMany-let.yml deleted file mode 100644 index 48b3a06d2e..0000000000 --- a/testdata/crud/unified/bulkWrite-deleteMany-let.yml +++ /dev/null @@ -1,86 +0,0 @@ -description: "BulkWrite deleteMany-let" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } - -tests: - - description: "BulkWrite deleteMany with let option" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - object: *collection0 - name: bulkWrite - arguments: - requests: - - deleteMany: - filter: &filter - $expr: - $eq: [ "$_id", "$$id" ] - let: &let - id: 1 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - delete: *collection0Name - deletes: - - q: *filter - limit: 0 - let: *let - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 2 } - - - description: "BulkWrite deleteMany with let option unsupported (server-side error)" - runOnRequirements: - - minServerVersion: "3.6.0" - maxServerVersion: "4.4.99" - operations: - - object: *collection0 - name: bulkWrite - arguments: - requests: - - deleteOne: - filter: *filter - let: *let - expectError: - errorContains: "'delete.let' is an unknown field" - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - delete: *collection0Name - deletes: - - q: *filter - limit: 1 - let: *let - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } diff --git a/testdata/crud/unified/bulkWrite-deleteOne-let.json b/testdata/crud/unified/bulkWrite-deleteOne-let.json deleted file mode 100644 index f3268163cb..0000000000 --- a/testdata/crud/unified/bulkWrite-deleteOne-let.json +++ /dev/null @@ -1,200 +0,0 @@ -{ - "description": "BulkWrite deleteOne-let", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ], - "tests": [ - { - "description": "BulkWrite deleteOne with let option", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "deleteOne": { - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - } - } - } - ], - "let": { - "id": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "coll0", - "deletes": [ - { - "q": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "limit": 1 - } - ], - "let": { - "id": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 2 - } - ] - } - ] - }, - { - "description": "BulkWrite deleteOne with let option unsupported (server-side error)", - "runOnRequirements": [ - { - "minServerVersion": "3.6.0", - "maxServerVersion": "4.9" - } - ], - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "deleteOne": { - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - } - } - } - ], - "let": { - "id": 1 - } - }, - "expectError": { - "errorContains": "'delete.let' is an unknown field", - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "coll0", - "deletes": [ - { - "q": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "limit": 1 - } - ], - "let": { - "id": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/bulkWrite-deleteOne-let.yml b/testdata/crud/unified/bulkWrite-deleteOne-let.yml deleted file mode 100644 index 128d74a441..0000000000 --- a/testdata/crud/unified/bulkWrite-deleteOne-let.yml +++ /dev/null @@ -1,86 +0,0 @@ -description: "BulkWrite deleteOne-let" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } - -tests: - - description: "BulkWrite deleteOne with let option" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - object: *collection0 - name: bulkWrite - arguments: - requests: - - deleteOne: - filter: &filter - $expr: - $eq: [ "$_id", "$$id" ] - let: &let - id: 1 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - delete: *collection0Name - deletes: - - q: *filter - limit: 1 - let: *let - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 2 } - - - description: "BulkWrite deleteOne with let option unsupported (server-side error)" - runOnRequirements: - - minServerVersion: "3.6.0" - maxServerVersion: "4.9" - operations: - - object: *collection0 - name: bulkWrite - arguments: - requests: - - deleteOne: - filter: *filter - let: *let - expectError: - errorContains: "'delete.let' is an unknown field" - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - delete: *collection0Name - deletes: - - q: *filter - limit: 1 - let: *let - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } diff --git a/testdata/crud/unified/bulkWrite-errorResponse.json b/testdata/crud/unified/bulkWrite-errorResponse.json deleted file mode 100644 index 157637c713..0000000000 --- a/testdata/crud/unified/bulkWrite-errorResponse.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "description": "bulkWrite-errorResponse", - "schemaVersion": "1.12", - "createEntities": [ - { - "client": { - "id": "client0", - "useMultipleMongoses": false - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test" - } - } - ], - "tests": [ - { - "description": "bulkWrite operations support errorResponse assertions", - "runOnRequirements": [ - { - "minServerVersion": "4.0.0", - "topologies": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.2.0", - "topologies": [ - "sharded" - ] - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "errorCode": 8 - } - } - } - }, - { - "name": "bulkWrite", - "object": "collection0", - "arguments": { - "requests": [ - { - "insertOne": { - "document": { - "_id": 1 - } - } - } - ] - }, - "expectError": { - "errorCode": 8, - "errorResponse": { - "code": 8 - } - } - } - ] - } - ] -} diff --git a/testdata/crud/unified/bulkWrite-errorResponse.yml b/testdata/crud/unified/bulkWrite-errorResponse.yml deleted file mode 100644 index d4f335dfd3..0000000000 --- a/testdata/crud/unified/bulkWrite-errorResponse.yml +++ /dev/null @@ -1,50 +0,0 @@ -description: "bulkWrite-errorResponse" - -schemaVersion: "1.12" - -createEntities: - - client: - id: &client0 client0 - useMultipleMongoses: false - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name test - -tests: - # This test intentionally executes only a single insert operation in the bulk - # write to make the error code and response assertions less ambiguous. That - # said, some drivers may still need to skip this test because the CRUD spec - # does not prescribe how drivers should formulate a BulkWriteException beyond - # collecting write and write concern errors. - - description: "bulkWrite operations support errorResponse assertions" - runOnRequirements: - - minServerVersion: "4.0.0" - topologies: [ single, replicaset ] - - minServerVersion: "4.2.0" - topologies: [ sharded ] - operations: - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ insert ] - errorCode: &errorCode 8 # UnknownError - - name: bulkWrite - object: *collection0 - arguments: - requests: - - insertOne: - document: { _id: 1 } - expectError: - errorCode: *errorCode - errorResponse: - code: *errorCode diff --git a/testdata/crud/unified/bulkWrite-insertOne-dots_and_dollars.json b/testdata/crud/unified/bulkWrite-insertOne-dots_and_dollars.json deleted file mode 100644 index 92bbb1aaf2..0000000000 --- a/testdata/crud/unified/bulkWrite-insertOne-dots_and_dollars.json +++ /dev/null @@ -1,374 +0,0 @@ -{ - "description": "bulkWrite-insertOne-dots_and_dollars", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [] - } - ], - "tests": [ - { - "description": "Inserting document with top-level dollar-prefixed key on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "bulkWrite", - "object": "collection0", - "arguments": { - "requests": [ - { - "insertOne": { - "document": { - "_id": 1, - "$a": 1 - } - } - } - ] - }, - "expectResult": { - "deletedCount": 0, - "insertedCount": 1, - "insertedIds": { - "$$unsetOrMatches": { - "0": 1 - } - }, - "matchedCount": 0, - "modifiedCount": 0, - "upsertedCount": 0, - "upsertedIds": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll0", - "documents": [ - { - "_id": 1, - "$a": 1 - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "$a": 1 - } - ] - } - ] - }, - { - "description": "Inserting document with top-level dollar-prefixed key on pre-5.0 server yields server-side error", - "runOnRequirements": [ - { - "maxServerVersion": "4.99" - } - ], - "operations": [ - { - "name": "bulkWrite", - "object": "collection0", - "arguments": { - "requests": [ - { - "insertOne": { - "document": { - "_id": 1, - "$a": 1 - } - } - } - ] - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll0", - "documents": [ - { - "_id": 1, - "$a": 1 - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [] - } - ] - }, - { - "description": "Inserting document with top-level dotted key", - "operations": [ - { - "name": "bulkWrite", - "object": "collection0", - "arguments": { - "requests": [ - { - "insertOne": { - "document": { - "_id": 1, - "a.b": 1 - } - } - } - ] - }, - "expectResult": { - "deletedCount": 0, - "insertedCount": 1, - "insertedIds": { - "$$unsetOrMatches": { - "0": 1 - } - }, - "matchedCount": 0, - "modifiedCount": 0, - "upsertedCount": 0, - "upsertedIds": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll0", - "documents": [ - { - "_id": 1, - "a.b": 1 - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "a.b": 1 - } - ] - } - ] - }, - { - "description": "Inserting document with dollar-prefixed key in embedded doc", - "operations": [ - { - "name": "bulkWrite", - "object": "collection0", - "arguments": { - "requests": [ - { - "insertOne": { - "document": { - "_id": 1, - "a": { - "$b": 1 - } - } - } - } - ] - }, - "expectResult": { - "deletedCount": 0, - "insertedCount": 1, - "insertedIds": { - "$$unsetOrMatches": { - "0": 1 - } - }, - "matchedCount": 0, - "modifiedCount": 0, - "upsertedCount": 0, - "upsertedIds": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll0", - "documents": [ - { - "_id": 1, - "a": { - "$b": 1 - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "a": { - "$b": 1 - } - } - ] - } - ] - }, - { - "description": "Inserting document with dotted key in embedded doc", - "operations": [ - { - "name": "bulkWrite", - "object": "collection0", - "arguments": { - "requests": [ - { - "insertOne": { - "document": { - "_id": 1, - "a": { - "b.c": 1 - } - } - } - } - ] - }, - "expectResult": { - "deletedCount": 0, - "insertedCount": 1, - "insertedIds": { - "$$unsetOrMatches": { - "0": 1 - } - }, - "matchedCount": 0, - "modifiedCount": 0, - "upsertedCount": 0, - "upsertedIds": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll0", - "documents": [ - { - "_id": 1, - "a": { - "b.c": 1 - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "a": { - "b.c": 1 - } - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/bulkWrite-insertOne-dots_and_dollars.yml b/testdata/crud/unified/bulkWrite-insertOne-dots_and_dollars.yml deleted file mode 100644 index de3885ac8c..0000000000 --- a/testdata/crud/unified/bulkWrite-insertOne-dots_and_dollars.yml +++ /dev/null @@ -1,138 +0,0 @@ -description: "bulkWrite-insertOne-dots_and_dollars" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: [] - -tests: - - description: "Inserting document with top-level dollar-prefixed key on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: bulkWrite - object: *collection0 - arguments: - requests: - - insertOne: - document: &dollarPrefixedKey { _id: 1, $a: 1 } - expectResult: &bulkWriteResult - deletedCount: 0 - insertedCount: 1 - insertedIds: { $$unsetOrMatches: { 0: 1 } } - matchedCount: 0 - modifiedCount: 0 - upsertedCount: 0 - upsertedIds: { } - expectEvents: &expectEventsDollarPrefixedKey - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection0Name - documents: - - *dollarPrefixedKey - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *dollarPrefixedKey - - - description: "Inserting document with top-level dollar-prefixed key on pre-5.0 server yields server-side error" - runOnRequirements: - - maxServerVersion: "4.99" - operations: - - name: bulkWrite - object: *collection0 - arguments: - requests: - - insertOne: - document: *dollarPrefixedKey - expectError: - isClientError: false - expectEvents: *expectEventsDollarPrefixedKey - outcome: *initialData - - - description: "Inserting document with top-level dotted key" - operations: - - name: bulkWrite - object: *collection0 - arguments: - requests: - - insertOne: - document: &dottedKey { _id: 1, a.b: 1 } - expectResult: *bulkWriteResult - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection0Name - documents: - - *dottedKey - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *dottedKey - - - description: "Inserting document with dollar-prefixed key in embedded doc" - operations: - - name: bulkWrite - object: *collection0 - arguments: - requests: - - insertOne: - document: &dollarPrefixedKeyInEmbedded { _id: 1, a: { $b: 1 } } - expectResult: *bulkWriteResult - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection0Name - documents: - - *dollarPrefixedKeyInEmbedded - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *dollarPrefixedKeyInEmbedded - - - description: "Inserting document with dotted key in embedded doc" - operations: - - name: bulkWrite - object: *collection0 - arguments: - requests: - - insertOne: - document: &dottedKeyInEmbedded { _id: 1, a: { b.c: 1 } } - expectResult: *bulkWriteResult - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection0Name - documents: - - *dottedKeyInEmbedded - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *dottedKeyInEmbedded diff --git a/testdata/crud/unified/bulkWrite-replaceOne-dots_and_dollars.json b/testdata/crud/unified/bulkWrite-replaceOne-dots_and_dollars.json deleted file mode 100644 index fce647d8f4..0000000000 --- a/testdata/crud/unified/bulkWrite-replaceOne-dots_and_dollars.json +++ /dev/null @@ -1,532 +0,0 @@ -{ - "description": "bulkWrite-replaceOne-dots_and_dollars", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - } - ] - } - ], - "tests": [ - { - "description": "Replacing document with top-level dotted key on 3.6+ server", - "runOnRequirements": [ - { - "minServerVersion": "3.6" - } - ], - "operations": [ - { - "name": "bulkWrite", - "object": "collection0", - "arguments": { - "requests": [ - { - "replaceOne": { - "filter": { - "_id": 1 - }, - "replacement": { - "_id": 1, - "a.b": 1 - } - } - } - ] - }, - "expectResult": { - "deletedCount": 0, - "insertedCount": 0, - "insertedIds": { - "$$unsetOrMatches": {} - }, - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0, - "upsertedIds": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "_id": 1, - "a.b": 1 - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "a.b": 1 - } - ] - } - ] - }, - { - "description": "Replacing document with top-level dotted key on pre-3.6 server yields server-side error", - "runOnRequirements": [ - { - "maxServerVersion": "3.4.99" - } - ], - "operations": [ - { - "name": "bulkWrite", - "object": "collection0", - "arguments": { - "requests": [ - { - "replaceOne": { - "filter": { - "_id": 1 - }, - "replacement": { - "_id": 1, - "a.b": 1 - } - } - } - ] - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "_id": 1, - "a.b": 1 - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - } - ] - } - ] - }, - { - "description": "Replacing document with dollar-prefixed key in embedded doc on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "bulkWrite", - "object": "collection0", - "arguments": { - "requests": [ - { - "replaceOne": { - "filter": { - "_id": 1 - }, - "replacement": { - "_id": 1, - "a": { - "$b": 1 - } - } - } - } - ] - }, - "expectResult": { - "deletedCount": 0, - "insertedCount": 0, - "insertedIds": { - "$$unsetOrMatches": {} - }, - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0, - "upsertedIds": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "_id": 1, - "a": { - "$b": 1 - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "a": { - "$b": 1 - } - } - ] - } - ] - }, - { - "description": "Replacing document with dollar-prefixed key in embedded doc on pre-5.0 server yields server-side error", - "runOnRequirements": [ - { - "maxServerVersion": "4.99" - } - ], - "operations": [ - { - "name": "bulkWrite", - "object": "collection0", - "arguments": { - "requests": [ - { - "replaceOne": { - "filter": { - "_id": 1 - }, - "replacement": { - "_id": 1, - "a": { - "$b": 1 - } - } - } - } - ] - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "_id": 1, - "a": { - "$b": 1 - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - } - ] - } - ] - }, - { - "description": "Replacing document with dotted key in embedded doc on 3.6+ server", - "runOnRequirements": [ - { - "minServerVersion": "3.6" - } - ], - "operations": [ - { - "name": "bulkWrite", - "object": "collection0", - "arguments": { - "requests": [ - { - "replaceOne": { - "filter": { - "_id": 1 - }, - "replacement": { - "_id": 1, - "a": { - "b.c": 1 - } - } - } - } - ] - }, - "expectResult": { - "deletedCount": 0, - "insertedCount": 0, - "insertedIds": { - "$$unsetOrMatches": {} - }, - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0, - "upsertedIds": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "_id": 1, - "a": { - "b.c": 1 - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "a": { - "b.c": 1 - } - } - ] - } - ] - }, - { - "description": "Replacing document with dotted key in embedded doc on pre-3.6 server yields server-side error", - "runOnRequirements": [ - { - "maxServerVersion": "3.4.99" - } - ], - "operations": [ - { - "name": "bulkWrite", - "object": "collection0", - "arguments": { - "requests": [ - { - "replaceOne": { - "filter": { - "_id": 1 - }, - "replacement": { - "_id": 1, - "a": { - "b.c": 1 - } - } - } - } - ] - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "_id": 1, - "a": { - "b.c": 1 - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/bulkWrite-replaceOne-dots_and_dollars.yml b/testdata/crud/unified/bulkWrite-replaceOne-dots_and_dollars.yml deleted file mode 100644 index 65c414c1d6..0000000000 --- a/testdata/crud/unified/bulkWrite-replaceOne-dots_and_dollars.yml +++ /dev/null @@ -1,165 +0,0 @@ -description: "bulkWrite-replaceOne-dots_and_dollars" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - -tests: - - description: "Replacing document with top-level dotted key on 3.6+ server" - runOnRequirements: - - minServerVersion: "3.6" - operations: - - name: bulkWrite - object: *collection0 - arguments: - requests: - - replaceOne: - filter: { _id: 1 } - replacement: &dottedKey { _id: 1, a.b: 1 } - expectResult: &bulkWriteResult - deletedCount: 0 - insertedCount: 0 - insertedIds: { $$unsetOrMatches: { } } - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - upsertedIds: { } - expectEvents: &expectEventsDottedKey - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: { _id: 1 } - u: *dottedKey - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *dottedKey - - - description: "Replacing document with top-level dotted key on pre-3.6 server yields server-side error" - runOnRequirements: - - maxServerVersion: "3.4.99" - operations: - - name: bulkWrite - object: *collection0 - arguments: - requests: - - replaceOne: - filter: { _id: 1 } - replacement: *dottedKey - expectError: - isClientError: false - expectEvents: *expectEventsDottedKey - outcome: *initialData - - - description: "Replacing document with dollar-prefixed key in embedded doc on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: bulkWrite - object: *collection0 - arguments: - requests: - - replaceOne: - filter: { _id: 1 } - replacement: &dollarPrefixedKeyInEmbedded { _id: 1, a: { $b: 1 } } - expectResult: *bulkWriteResult - expectEvents: &expectEventsDollarPrefixedKeyInEmbedded - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: { _id: 1 } - u: *dollarPrefixedKeyInEmbedded - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *dollarPrefixedKeyInEmbedded - - - description: "Replacing document with dollar-prefixed key in embedded doc on pre-5.0 server yields server-side error" - runOnRequirements: - - maxServerVersion: "4.99" - operations: - - name: bulkWrite - object: *collection0 - arguments: - requests: - - replaceOne: - filter: { _id: 1 } - replacement: *dollarPrefixedKeyInEmbedded - expectError: - isClientError: false - expectEvents: *expectEventsDollarPrefixedKeyInEmbedded - outcome: *initialData - - - description: "Replacing document with dotted key in embedded doc on 3.6+ server" - runOnRequirements: - - minServerVersion: "3.6" - operations: - - name: bulkWrite - object: *collection0 - arguments: - requests: - - replaceOne: - filter: { _id: 1 } - replacement: &dottedKeyInEmbedded { _id: 1, a: { b.c: 1 } } - expectResult: *bulkWriteResult - expectEvents: &expectEventsDottedKeyInEmbedded - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: { _id: 1 } - u: *dottedKeyInEmbedded - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *dottedKeyInEmbedded - - - description: "Replacing document with dotted key in embedded doc on pre-3.6 server yields server-side error" - runOnRequirements: - - maxServerVersion: "3.4.99" - operations: - - name: bulkWrite - object: *collection0 - arguments: - requests: - - replaceOne: - filter: { _id: 1 } - replacement: *dottedKeyInEmbedded - expectError: - isClientError: false - expectEvents: *expectEventsDottedKeyInEmbedded - outcome: *initialData diff --git a/testdata/crud/unified/bulkWrite-replaceOne-let.json b/testdata/crud/unified/bulkWrite-replaceOne-let.json deleted file mode 100644 index 70f63837a8..0000000000 --- a/testdata/crud/unified/bulkWrite-replaceOne-let.json +++ /dev/null @@ -1,226 +0,0 @@ -{ - "description": "BulkWrite replaceOne-let", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ], - "tests": [ - { - "description": "BulkWrite replaceOne with let option", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "replaceOne": { - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "replacement": { - "x": 3 - } - } - } - ], - "let": { - "id": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "u": { - "x": 3 - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "let": { - "id": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 3 - }, - { - "_id": 2 - } - ] - } - ] - }, - { - "description": "BulkWrite replaceOne with let option unsupported (server-side error)", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "maxServerVersion": "4.9" - } - ], - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "replaceOne": { - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "replacement": { - "x": 3 - } - } - } - ], - "let": { - "id": 1 - } - }, - "expectError": { - "errorContains": "'update.let' is an unknown field", - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "u": { - "x": 3 - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "let": { - "id": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/bulkWrite-replaceOne-let.yml b/testdata/crud/unified/bulkWrite-replaceOne-let.yml deleted file mode 100644 index 5453868ba4..0000000000 --- a/testdata/crud/unified/bulkWrite-replaceOne-let.yml +++ /dev/null @@ -1,93 +0,0 @@ -description: "BulkWrite replaceOne-let" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } - -tests: - - description: "BulkWrite replaceOne with let option" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - object: *collection0 - name: bulkWrite - arguments: - requests: - - replaceOne: - filter: &filter - $expr: - $eq: [ "$_id", "$$id" ] - replacement: &replacement {"x": 3} - let: &let - id: 1 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: *filter - u: *replacement - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - let: *let - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 3 } - - { _id: 2 } - - - description: "BulkWrite replaceOne with let option unsupported (server-side error)" - runOnRequirements: - - minServerVersion: "4.2" - maxServerVersion: "4.9" - operations: - - object: *collection0 - name: bulkWrite - arguments: - requests: - - replaceOne: - filter: *filter - replacement: *replacement - let: *let - expectError: - errorContains: "'update.let' is an unknown field" - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: *filter - u: *replacement - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - let: *let - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } diff --git a/testdata/crud/unified/bulkWrite-replaceOne-sort.json b/testdata/crud/unified/bulkWrite-replaceOne-sort.json deleted file mode 100644 index c0bd383514..0000000000 --- a/testdata/crud/unified/bulkWrite-replaceOne-sort.json +++ /dev/null @@ -1,239 +0,0 @@ -{ - "description": "BulkWrite replaceOne-sort", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent", - "commandSucceededEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "BulkWrite replaceOne with sort option", - "runOnRequirements": [ - { - "minServerVersion": "8.0" - } - ], - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "replaceOne": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "sort": { - "_id": -1 - }, - "replacement": { - "x": 1 - } - } - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "u": { - "x": 1 - }, - "sort": { - "_id": -1 - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "n": 1 - }, - "commandName": "update" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 1 - } - ] - } - ] - }, - { - "description": "BulkWrite replaceOne with sort option unsupported (server-side error)", - "runOnRequirements": [ - { - "maxServerVersion": "7.99" - } - ], - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "replaceOne": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "sort": { - "_id": -1 - }, - "replacement": { - "x": 1 - } - } - } - ] - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "u": { - "x": 1 - }, - "sort": { - "_id": -1 - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/bulkWrite-replaceOne-sort.yml b/testdata/crud/unified/bulkWrite-replaceOne-sort.yml deleted file mode 100644 index 9594166f5b..0000000000 --- a/testdata/crud/unified/bulkWrite-replaceOne-sort.yml +++ /dev/null @@ -1,94 +0,0 @@ -description: BulkWrite replaceOne-sort - -schemaVersion: "1.0" - -createEntities: - - client: - id: client0 - observeEvents: [ commandStartedEvent, commandSucceededEvent ] - - database: - id: database0 - client: client0 - databaseName: crud-tests - - collection: - id: collection0 - database: database0 - collectionName: coll0 - -initialData: - - collectionName: coll0 - databaseName: crud-tests - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -tests: - - description: BulkWrite replaceOne with sort option - runOnRequirements: - - minServerVersion: "8.0" - operations: - - object: collection0 - name: bulkWrite - arguments: - requests: - - replaceOne: - filter: { _id: {$gt: 1 } } - sort: { _id: -1 } - replacement: { x: 1 } - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - update: coll0 - updates: - - q: { _id: { $gt: 1 } } - u: { x: 1 } - sort: { _id: -1 } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - commandSucceededEvent: - reply: { ok: 1, n: 1 } - commandName: update - outcome: - - collectionName: coll0 - databaseName: crud-tests - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 1 } - - - description: BulkWrite replaceOne with sort option unsupported (server-side error) - runOnRequirements: - - maxServerVersion: "7.99" - operations: - - object: collection0 - name: bulkWrite - arguments: - requests: - - replaceOne: - filter: { _id: { $gt: 1 } } - sort: { _id: -1 } - replacement: { x: 1 } - expectError: - isClientError: false - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - update: coll0 - updates: - - q: { _id: { $gt: 1 } } - u: { x: 1 } - sort: { _id: -1 } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: coll0 - databaseName: crud-tests - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } diff --git a/testdata/crud/unified/bulkWrite-update-hint-clientError.json b/testdata/crud/unified/bulkWrite-update-hint-clientError.json deleted file mode 100644 index d5eb71c29e..0000000000 --- a/testdata/crud/unified/bulkWrite-update-hint-clientError.json +++ /dev/null @@ -1,284 +0,0 @@ -{ - "description": "bulkWrite-update-hint-clientError", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "maxServerVersion": "3.3.99" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test_bulkwrite_update_hint" - } - } - ], - "initialData": [ - { - "collectionName": "test_bulkwrite_update_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "tests": [ - { - "description": "BulkWrite updateOne with update hints unsupported (client-side error)", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "updateOne": { - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": "_id_" - } - }, - { - "updateOne": { - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": { - "_id": 1 - } - } - } - ], - "ordered": true - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "test_bulkwrite_update_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ] - }, - { - "description": "BulkWrite updateMany with update hints unsupported (client-side error)", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "updateMany": { - "filter": { - "_id": { - "$lt": 3 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": "_id_" - } - }, - { - "updateMany": { - "filter": { - "_id": { - "$lt": 3 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": { - "_id": 1 - } - } - } - ], - "ordered": true - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "test_bulkwrite_update_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ] - }, - { - "description": "BulkWrite replaceOne with update hints unsupported (client-side error)", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "replaceOne": { - "filter": { - "_id": 3 - }, - "replacement": { - "x": 333 - }, - "hint": "_id_" - } - }, - { - "replaceOne": { - "filter": { - "_id": 4 - }, - "replacement": { - "x": 444 - }, - "hint": { - "_id": 1 - } - } - } - ], - "ordered": true - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "test_bulkwrite_update_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/bulkWrite-update-hint-clientError.yml b/testdata/crud/unified/bulkWrite-update-hint-clientError.yml deleted file mode 100644 index df1eae485e..0000000000 --- a/testdata/crud/unified/bulkWrite-update-hint-clientError.yml +++ /dev/null @@ -1,148 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: bulkWrite-update-hint-clientError -schemaVersion: '1.0' -runOnRequirements: - - - maxServerVersion: 3.3.99 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name test_bulkwrite_update_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 - - - _id: 4 - x: 44 -tests: - - - description: 'BulkWrite updateOne with update hints unsupported (client-side error)' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - updateOne: - filter: &updateOne_filter - _id: 1 - update: &updateOne_update - $inc: - x: 1 - hint: &hint_string _id_ - - - updateOne: - filter: *updateOne_filter - update: *updateOne_update - hint: &hint_doc - _id: 1 - ordered: true - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 - - - _id: 4 - x: 44 - - - description: 'BulkWrite updateMany with update hints unsupported (client-side error)' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - updateMany: - filter: &updateMany_filter - _id: - $lt: 3 - update: &updateMany_update - $inc: - x: 1 - hint: *hint_string - - - updateMany: - filter: *updateMany_filter - update: *updateMany_update - hint: *hint_doc - ordered: true - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: *outcome - - - description: 'BulkWrite replaceOne with update hints unsupported (client-side error)' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - replaceOne: - filter: - _id: 3 - replacement: - x: 333 - hint: *hint_string - - - replaceOne: - filter: - _id: 4 - replacement: - x: 444 - hint: *hint_doc - ordered: true - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: *outcome diff --git a/testdata/crud/unified/bulkWrite-update-hint-serverError.json b/testdata/crud/unified/bulkWrite-update-hint-serverError.json deleted file mode 100644 index b0f7e1b381..0000000000 --- a/testdata/crud/unified/bulkWrite-update-hint-serverError.json +++ /dev/null @@ -1,422 +0,0 @@ -{ - "description": "bulkWrite-update-hint-serverError", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "3.4.0", - "maxServerVersion": "4.1.9" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test_bulkwrite_update_hint" - } - } - ], - "initialData": [ - { - "collectionName": "test_bulkwrite_update_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "tests": [ - { - "description": "BulkWrite updateOne with update hints unsupported (server-side error)", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "updateOne": { - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": "_id_" - } - }, - { - "updateOne": { - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": { - "_id": 1 - } - } - } - ], - "ordered": true - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test_bulkwrite_update_hint", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "$inc": { - "x": 1 - } - }, - "hint": "_id_", - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - }, - { - "q": { - "_id": 1 - }, - "u": { - "$inc": { - "x": 1 - } - }, - "hint": { - "_id": 1 - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "ordered": true - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test_bulkwrite_update_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ] - }, - { - "description": "BulkWrite updateMany with update hints unsupported (server-side error)", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "updateMany": { - "filter": { - "_id": { - "$lt": 3 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": "_id_" - } - }, - { - "updateMany": { - "filter": { - "_id": { - "$lt": 3 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": { - "_id": 1 - } - } - } - ], - "ordered": true - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test_bulkwrite_update_hint", - "updates": [ - { - "q": { - "_id": { - "$lt": 3 - } - }, - "u": { - "$inc": { - "x": 1 - } - }, - "multi": true, - "hint": "_id_", - "upsert": { - "$$unsetOrMatches": false - } - }, - { - "q": { - "_id": { - "$lt": 3 - } - }, - "u": { - "$inc": { - "x": 1 - } - }, - "multi": true, - "hint": { - "_id": 1 - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "ordered": true - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test_bulkwrite_update_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ] - }, - { - "description": "BulkWrite replaceOne with update hints unsupported (server-side error)", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "replaceOne": { - "filter": { - "_id": 3 - }, - "replacement": { - "x": 333 - }, - "hint": "_id_" - } - }, - { - "replaceOne": { - "filter": { - "_id": 4 - }, - "replacement": { - "x": 444 - }, - "hint": { - "_id": 1 - } - } - } - ], - "ordered": true - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test_bulkwrite_update_hint", - "updates": [ - { - "q": { - "_id": 3 - }, - "u": { - "x": 333 - }, - "hint": "_id_", - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - }, - { - "q": { - "_id": 4 - }, - "u": { - "x": 444 - }, - "hint": { - "_id": 1 - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "ordered": true - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test_bulkwrite_update_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/bulkWrite-update-hint-serverError.yml b/testdata/crud/unified/bulkWrite-update-hint-serverError.yml deleted file mode 100644 index 0b4ed166e0..0000000000 --- a/testdata/crud/unified/bulkWrite-update-hint-serverError.yml +++ /dev/null @@ -1,239 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: bulkWrite-update-hint-serverError -schemaVersion: '1.0' -runOnRequirements: - - - minServerVersion: 3.4.0 - maxServerVersion: 4.1.9 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name test_bulkwrite_update_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 - - - _id: 4 - x: 44 -tests: - - - description: 'BulkWrite updateOne with update hints unsupported (server-side error)' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - updateOne: - filter: &updateOne_filter - _id: 1 - update: &updateOne_update - $inc: - x: 1 - hint: &hint_string _id_ - - - updateOne: - filter: *updateOne_filter - update: *updateOne_update - hint: &hint_doc - _id: 1 - ordered: true - expectError: - isError: true - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - update: *collection_name - updates: - - - q: *updateOne_filter - u: *updateOne_update - hint: *hint_string - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - - q: *updateOne_filter - u: *updateOne_update - hint: *hint_doc - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - ordered: true - outcome: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 - - - _id: 4 - x: 44 - - - description: 'BulkWrite updateMany with update hints unsupported (server-side error)' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - updateMany: - filter: &updateMany_filter - _id: - $lt: 3 - update: &updateMany_update - $inc: - x: 1 - hint: *hint_string - - - updateMany: - filter: *updateMany_filter - update: *updateMany_update - hint: *hint_doc - ordered: true - expectError: - isError: true - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - update: *collection_name - updates: - - - q: *updateMany_filter - u: *updateMany_update - multi: true - hint: *hint_string - upsert: { $$unsetOrMatches: false } - - - q: *updateMany_filter - u: *updateMany_update - multi: true - hint: *hint_doc - upsert: { $$unsetOrMatches: false } - ordered: true - outcome: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 - - - _id: 4 - x: 44 - - - description: 'BulkWrite replaceOne with update hints unsupported (server-side error)' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - replaceOne: - filter: - _id: 3 - replacement: - x: 333 - hint: *hint_string - - - replaceOne: - filter: - _id: 4 - replacement: - x: 444 - hint: *hint_doc - ordered: true - expectError: - isError: true - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - update: *collection_name - updates: - - - q: - _id: 3 - u: - x: 333 - hint: *hint_string - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - - q: - _id: 4 - u: - x: 444 - hint: *hint_doc - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - ordered: true - outcome: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 - - - _id: 4 - x: 44 diff --git a/testdata/crud/unified/bulkWrite-update-hint.json b/testdata/crud/unified/bulkWrite-update-hint.json deleted file mode 100644 index 4206359891..0000000000 --- a/testdata/crud/unified/bulkWrite-update-hint.json +++ /dev/null @@ -1,445 +0,0 @@ -{ - "description": "bulkWrite-update-hint", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "4.2.0" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test_bulkwrite_update_hint" - } - } - ], - "initialData": [ - { - "collectionName": "test_bulkwrite_update_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "tests": [ - { - "description": "BulkWrite updateOne with update hints", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "updateOne": { - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": "_id_" - } - }, - { - "updateOne": { - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": { - "_id": 1 - } - } - } - ], - "ordered": true - }, - "expectResult": { - "deletedCount": 0, - "insertedCount": 0, - "insertedIds": { - "$$unsetOrMatches": {} - }, - "matchedCount": 2, - "modifiedCount": 2, - "upsertedCount": 0, - "upsertedIds": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test_bulkwrite_update_hint", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "$inc": { - "x": 1 - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - }, - "hint": "_id_" - }, - { - "q": { - "_id": 1 - }, - "u": { - "$inc": { - "x": 1 - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - }, - "hint": { - "_id": 1 - } - } - ], - "ordered": true - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test_bulkwrite_update_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 13 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ] - }, - { - "description": "BulkWrite updateMany with update hints", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "updateMany": { - "filter": { - "_id": { - "$lt": 3 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": "_id_" - } - }, - { - "updateMany": { - "filter": { - "_id": { - "$lt": 3 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": { - "_id": 1 - } - } - } - ], - "ordered": true - }, - "expectResult": { - "deletedCount": 0, - "insertedCount": 0, - "insertedIds": { - "$$unsetOrMatches": {} - }, - "matchedCount": 4, - "modifiedCount": 4, - "upsertedCount": 0, - "upsertedIds": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test_bulkwrite_update_hint", - "updates": [ - { - "q": { - "_id": { - "$lt": 3 - } - }, - "u": { - "$inc": { - "x": 1 - } - }, - "multi": true, - "upsert": { - "$$unsetOrMatches": false - }, - "hint": "_id_" - }, - { - "q": { - "_id": { - "$lt": 3 - } - }, - "u": { - "$inc": { - "x": 1 - } - }, - "multi": true, - "upsert": { - "$$unsetOrMatches": false - }, - "hint": { - "_id": 1 - } - } - ], - "ordered": true - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test_bulkwrite_update_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 13 - }, - { - "_id": 2, - "x": 24 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ] - }, - { - "description": "BulkWrite replaceOne with update hints", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "replaceOne": { - "filter": { - "_id": 3 - }, - "replacement": { - "x": 333 - }, - "hint": "_id_" - } - }, - { - "replaceOne": { - "filter": { - "_id": 4 - }, - "replacement": { - "x": 444 - }, - "hint": { - "_id": 1 - } - } - } - ], - "ordered": true - }, - "expectResult": { - "deletedCount": 0, - "insertedCount": 0, - "insertedIds": { - "$$unsetOrMatches": {} - }, - "matchedCount": 2, - "modifiedCount": 2, - "upsertedCount": 0, - "upsertedIds": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test_bulkwrite_update_hint", - "updates": [ - { - "q": { - "_id": 3 - }, - "u": { - "x": 333 - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - }, - "hint": "_id_" - }, - { - "q": { - "_id": 4 - }, - "u": { - "x": 444 - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - }, - "hint": { - "_id": 1 - } - } - ], - "ordered": true - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test_bulkwrite_update_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 333 - }, - { - "_id": 4, - "x": 444 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/bulkWrite-update-hint.yml b/testdata/crud/unified/bulkWrite-update-hint.yml deleted file mode 100644 index 9f5a0e080e..0000000000 --- a/testdata/crud/unified/bulkWrite-update-hint.yml +++ /dev/null @@ -1,256 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: bulkWrite-update-hint -schemaVersion: '1.0' -runOnRequirements: - - - minServerVersion: 4.2.0 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name test_bulkwrite_update_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 - - - _id: 4 - x: 44 -tests: - - - description: 'BulkWrite updateOne with update hints' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - updateOne: - filter: &updateOne_filter - _id: 1 - update: &updateOne_update - $inc: - x: 1 - hint: &hint_string _id_ - - - updateOne: - filter: *updateOne_filter - update: *updateOne_update - hint: &hint_doc - _id: 1 - ordered: true - expectResult: - deletedCount: 0 - insertedCount: 0 - insertedIds: { $$unsetOrMatches: {} } - matchedCount: 2 - modifiedCount: 2 - upsertedCount: 0 - upsertedIds: { } - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - update: *collection_name - updates: - - - q: *updateOne_filter - u: *updateOne_update - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - hint: *hint_string - - - q: *updateOne_filter - u: *updateOne_update - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - hint: *hint_doc - ordered: true - outcome: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 13 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 - - - _id: 4 - x: 44 - - - description: 'BulkWrite updateMany with update hints' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - updateMany: - filter: &updateMany_filter - _id: - $lt: 3 - update: &updateMany_update - $inc: - x: 1 - hint: *hint_string - - - updateMany: - filter: *updateMany_filter - update: *updateMany_update - hint: *hint_doc - ordered: true - expectResult: - deletedCount: 0 - insertedCount: 0 - insertedIds: { $$unsetOrMatches: {} } - matchedCount: 4 - modifiedCount: 4 - upsertedCount: 0 - upsertedIds: { } - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - update: *collection_name - updates: - - - q: *updateMany_filter - u: *updateMany_update - multi: true - upsert: { $$unsetOrMatches: false } - hint: *hint_string - - - q: *updateMany_filter - u: *updateMany_update - multi: true - upsert: { $$unsetOrMatches: false } - hint: *hint_doc - ordered: true - outcome: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 13 - - - _id: 2 - x: 24 - - - _id: 3 - x: 33 - - - _id: 4 - x: 44 - - - description: 'BulkWrite replaceOne with update hints' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - replaceOne: - filter: - _id: 3 - replacement: - x: 333 - hint: *hint_string - - - replaceOne: - filter: - _id: 4 - replacement: - x: 444 - hint: *hint_doc - ordered: true - expectResult: - deletedCount: 0 - insertedCount: 0 - insertedIds: { $$unsetOrMatches: {} } - matchedCount: 2 - modifiedCount: 2 - upsertedCount: 0 - upsertedIds: { } - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - update: *collection_name - updates: - - - q: - _id: 3 - u: - x: 333 - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - hint: *hint_string - - - q: - _id: 4 - u: - x: 444 - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - hint: *hint_doc - ordered: true - outcome: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 333 - - - _id: 4 - x: 444 diff --git a/testdata/crud/unified/bulkWrite-update-validation.json b/testdata/crud/unified/bulkWrite-update-validation.json deleted file mode 100644 index f9bfda0edd..0000000000 --- a/testdata/crud/unified/bulkWrite-update-validation.json +++ /dev/null @@ -1,210 +0,0 @@ -{ - "description": "bulkWrite-update-validation", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "BulkWrite replaceOne prohibits atomic modifiers", - "operations": [ - { - "name": "bulkWrite", - "object": "collection0", - "arguments": { - "requests": [ - { - "replaceOne": { - "filter": { - "_id": 1 - }, - "replacement": { - "$set": { - "x": 22 - } - } - } - } - ] - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "BulkWrite updateOne requires atomic modifiers", - "operations": [ - { - "name": "bulkWrite", - "object": "collection0", - "arguments": { - "requests": [ - { - "updateOne": { - "filter": { - "_id": 1 - }, - "update": { - "x": 22 - } - } - } - ] - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "BulkWrite updateMany requires atomic modifiers", - "operations": [ - { - "name": "bulkWrite", - "object": "collection0", - "arguments": { - "requests": [ - { - "updateMany": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "x": 44 - } - } - } - ] - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/bulkWrite-update-validation.yml b/testdata/crud/unified/bulkWrite-update-validation.yml deleted file mode 100644 index 57defd56a4..0000000000 --- a/testdata/crud/unified/bulkWrite-update-validation.yml +++ /dev/null @@ -1,73 +0,0 @@ -description: "bulkWrite-update-validation" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -tests: - - description: "BulkWrite replaceOne prohibits atomic modifiers" - operations: - - name: bulkWrite - object: *collection0 - arguments: - requests: - - replaceOne: - filter: { _id: 1 } - replacement: { $set: { x: 22 } } - expectError: - isClientError: true - expectEvents: - - client: *client0 - events: [] - outcome: *initialData - - - description: "BulkWrite updateOne requires atomic modifiers" - operations: - - name: bulkWrite - object: *collection0 - arguments: - requests: - - updateOne: - filter: { _id: 1 } - update: { x: 22 } - expectError: - isClientError: true - expectEvents: - - client: *client0 - events: [] - outcome: *initialData - - - description: "BulkWrite updateMany requires atomic modifiers" - operations: - - name: bulkWrite - object: *collection0 - arguments: - requests: - - updateMany: - filter: { _id: { $gt: 1 } } - update: { x: 44 } - expectError: - isClientError: true - expectEvents: - - client: *client0 - events: [] - outcome: *initialData diff --git a/testdata/crud/unified/bulkWrite-updateMany-dots_and_dollars.json b/testdata/crud/unified/bulkWrite-updateMany-dots_and_dollars.json deleted file mode 100644 index 35a5cdd52a..0000000000 --- a/testdata/crud/unified/bulkWrite-updateMany-dots_and_dollars.json +++ /dev/null @@ -1,452 +0,0 @@ -{ - "description": "bulkWrite-updateMany-dots_and_dollars", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "foo": {} - } - ] - } - ], - "tests": [ - { - "description": "Updating document to set top-level dollar-prefixed key on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "bulkWrite", - "object": "collection0", - "arguments": { - "requests": [ - { - "updateMany": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$replaceWith": { - "$setField": { - "field": { - "$literal": "$a" - }, - "value": 1, - "input": "$$ROOT" - } - } - } - ] - } - } - ] - }, - "expectResult": { - "deletedCount": 0, - "insertedCount": 0, - "insertedIds": { - "$$unsetOrMatches": {} - }, - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0, - "upsertedIds": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": [ - { - "$replaceWith": { - "$setField": { - "field": { - "$literal": "$a" - }, - "value": 1, - "input": "$$ROOT" - } - } - } - ], - "multi": true, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "foo": {}, - "$a": 1 - } - ] - } - ] - }, - { - "description": "Updating document to set top-level dotted key on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "bulkWrite", - "object": "collection0", - "arguments": { - "requests": [ - { - "updateMany": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$replaceWith": { - "$setField": { - "field": { - "$literal": "a.b" - }, - "value": 1, - "input": "$$ROOT" - } - } - } - ] - } - } - ] - }, - "expectResult": { - "deletedCount": 0, - "insertedCount": 0, - "insertedIds": { - "$$unsetOrMatches": {} - }, - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0, - "upsertedIds": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": [ - { - "$replaceWith": { - "$setField": { - "field": { - "$literal": "a.b" - }, - "value": 1, - "input": "$$ROOT" - } - } - } - ], - "multi": true, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "foo": {}, - "a.b": 1 - } - ] - } - ] - }, - { - "description": "Updating document to set dollar-prefixed key in embedded doc on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "bulkWrite", - "object": "collection0", - "arguments": { - "requests": [ - { - "updateMany": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$set": { - "foo": { - "$setField": { - "field": { - "$literal": "$a" - }, - "value": 1, - "input": "$foo" - } - } - } - } - ] - } - } - ] - }, - "expectResult": { - "deletedCount": 0, - "insertedCount": 0, - "insertedIds": { - "$$unsetOrMatches": {} - }, - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0, - "upsertedIds": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": [ - { - "$set": { - "foo": { - "$setField": { - "field": { - "$literal": "$a" - }, - "value": 1, - "input": "$foo" - } - } - } - } - ], - "multi": true, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "foo": { - "$a": 1 - } - } - ] - } - ] - }, - { - "description": "Updating document to set dotted key in embedded doc on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "bulkWrite", - "object": "collection0", - "arguments": { - "requests": [ - { - "updateMany": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$set": { - "foo": { - "$setField": { - "field": { - "$literal": "a.b" - }, - "value": 1, - "input": "$foo" - } - } - } - } - ] - } - } - ] - }, - "expectResult": { - "deletedCount": 0, - "insertedCount": 0, - "insertedIds": { - "$$unsetOrMatches": {} - }, - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0, - "upsertedIds": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": [ - { - "$set": { - "foo": { - "$setField": { - "field": { - "$literal": "a.b" - }, - "value": 1, - "input": "$foo" - } - } - } - } - ], - "multi": true, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "foo": { - "a.b": 1 - } - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/bulkWrite-updateMany-dots_and_dollars.yml b/testdata/crud/unified/bulkWrite-updateMany-dots_and_dollars.yml deleted file mode 100644 index 68cebd09cf..0000000000 --- a/testdata/crud/unified/bulkWrite-updateMany-dots_and_dollars.yml +++ /dev/null @@ -1,150 +0,0 @@ -description: "bulkWrite-updateMany-dots_and_dollars" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, foo: {} } - -tests: - - description: "Updating document to set top-level dollar-prefixed key on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: bulkWrite - object: *collection0 - arguments: - requests: - - updateMany: - filter: { _id: 1 } - update: &dollarPrefixedKey - - { $replaceWith: { $setField: { field: { $literal: $a }, value: 1, input: $$ROOT } } } - expectResult: &bulkWriteResult - deletedCount: 0 - insertedCount: 0 - insertedIds: { $$unsetOrMatches: { } } - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - upsertedIds: { } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: { _id: 1 } - u: *dollarPrefixedKey - multi: true - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, foo: {}, $a: 1 } - - - description: "Updating document to set top-level dotted key on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: bulkWrite - object: *collection0 - arguments: - requests: - - updateMany: - filter: { _id: 1 } - update: &dottedKey - - { $replaceWith: { $setField: { field: { $literal: a.b }, value: 1, input: $$ROOT } } } - expectResult: *bulkWriteResult - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: { _id: 1 } - u: *dottedKey - multi: true - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, foo: {}, a.b: 1 } - - - description: "Updating document to set dollar-prefixed key in embedded doc on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: bulkWrite - object: *collection0 - arguments: - requests: - - updateMany: - filter: { _id: 1 } - update: &dollarPrefixedKeyInEmbedded - - { $set: { foo: { $setField: { field: { $literal: $a }, value: 1, input: $foo } } } } - expectResult: *bulkWriteResult - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: { _id: 1 } - u: *dollarPrefixedKeyInEmbedded - multi: true - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, foo: { $a: 1 } } - - - description: "Updating document to set dotted key in embedded doc on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: bulkWrite - object: *collection0 - arguments: - requests: - - updateMany: - filter: { _id: 1 } - update: &dottedKeyInEmbedded - - { $set: { foo: { $setField: { field: { $literal: a.b }, value: 1, input: $foo } } } } - expectResult: *bulkWriteResult - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: { _id: 1 } - u: *dottedKeyInEmbedded - multi: true - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, foo: { a.b: 1 } } diff --git a/testdata/crud/unified/bulkWrite-updateMany-let.json b/testdata/crud/unified/bulkWrite-updateMany-let.json deleted file mode 100644 index fbeba1a607..0000000000 --- a/testdata/crud/unified/bulkWrite-updateMany-let.json +++ /dev/null @@ -1,243 +0,0 @@ -{ - "description": "BulkWrite updateMany-let", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 20 - }, - { - "_id": 2, - "x": 21 - } - ] - } - ], - "tests": [ - { - "description": "BulkWrite updateMany with let option", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "updateMany": { - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "update": [ - { - "$set": { - "x": 21 - } - } - ] - } - } - ], - "let": { - "id": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "u": [ - { - "$set": { - "x": 21 - } - } - ], - "multi": true, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "let": { - "id": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 21 - }, - { - "_id": 2, - "x": 21 - } - ] - } - ] - }, - { - "description": "BulkWrite updateMany with let option unsupported (server-side error)", - "runOnRequirements": [ - { - "minServerVersion": "4.2.0", - "maxServerVersion": "4.9" - } - ], - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "updateMany": { - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "update": [ - { - "$set": { - "x": 21 - } - } - ] - } - } - ], - "let": { - "id": 1 - } - }, - "expectError": { - "errorContains": "'update.let' is an unknown field", - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "u": [ - { - "$set": { - "x": 21 - } - } - ], - "multi": true, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "let": { - "id": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 20 - }, - { - "_id": 2, - "x": 21 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/bulkWrite-updateMany-let.yml b/testdata/crud/unified/bulkWrite-updateMany-let.yml deleted file mode 100644 index f67d000334..0000000000 --- a/testdata/crud/unified/bulkWrite-updateMany-let.yml +++ /dev/null @@ -1,96 +0,0 @@ -description: "BulkWrite updateMany-let" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 20 } - - { _id: 2, x: 21 } - -tests: - - description: "BulkWrite updateMany with let option" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - object: *collection0 - name: bulkWrite - arguments: - requests: - - updateMany: - filter: &filter - $expr: - $eq: [ "$_id", "$$id" ] - update: &update - - $set: - x: 21 - let: &let - id: 1 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: *filter - u: *update - multi: true - upsert: { $$unsetOrMatches: false } - let: *let - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 21 } - - { _id: 2, x: 21 } - - - description: "BulkWrite updateMany with let option unsupported (server-side error)" - runOnRequirements: - - minServerVersion: "4.2.0" - maxServerVersion: "4.9" - operations: - - object: *collection0 - name: bulkWrite - arguments: - requests: - - updateMany: - filter: *filter - update: *update - let: *let - expectError: - errorContains: "'update.let' is an unknown field" - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: *filter - u: *update - multi: true - upsert: { $$unsetOrMatches: false } - let: *let - - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 20 } - - { _id: 2, x: 21 } diff --git a/testdata/crud/unified/bulkWrite-updateOne-dots_and_dollars.json b/testdata/crud/unified/bulkWrite-updateOne-dots_and_dollars.json deleted file mode 100644 index cbbe113ce8..0000000000 --- a/testdata/crud/unified/bulkWrite-updateOne-dots_and_dollars.json +++ /dev/null @@ -1,460 +0,0 @@ -{ - "description": "bulkWrite-updateOne-dots_and_dollars", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "foo": {} - } - ] - } - ], - "tests": [ - { - "description": "Updating document to set top-level dollar-prefixed key on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "bulkWrite", - "object": "collection0", - "arguments": { - "requests": [ - { - "updateOne": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$replaceWith": { - "$setField": { - "field": { - "$literal": "$a" - }, - "value": 1, - "input": "$$ROOT" - } - } - } - ] - } - } - ] - }, - "expectResult": { - "deletedCount": 0, - "insertedCount": 0, - "insertedIds": { - "$$unsetOrMatches": {} - }, - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0, - "upsertedIds": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": [ - { - "$replaceWith": { - "$setField": { - "field": { - "$literal": "$a" - }, - "value": 1, - "input": "$$ROOT" - } - } - } - ], - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "foo": {}, - "$a": 1 - } - ] - } - ] - }, - { - "description": "Updating document to set top-level dotted key on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "bulkWrite", - "object": "collection0", - "arguments": { - "requests": [ - { - "updateOne": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$replaceWith": { - "$setField": { - "field": { - "$literal": "a.b" - }, - "value": 1, - "input": "$$ROOT" - } - } - } - ] - } - } - ] - }, - "expectResult": { - "deletedCount": 0, - "insertedCount": 0, - "insertedIds": { - "$$unsetOrMatches": {} - }, - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0, - "upsertedIds": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": [ - { - "$replaceWith": { - "$setField": { - "field": { - "$literal": "a.b" - }, - "value": 1, - "input": "$$ROOT" - } - } - } - ], - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "foo": {}, - "a.b": 1 - } - ] - } - ] - }, - { - "description": "Updating document to set dollar-prefixed key in embedded doc on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "bulkWrite", - "object": "collection0", - "arguments": { - "requests": [ - { - "updateOne": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$set": { - "foo": { - "$setField": { - "field": { - "$literal": "$a" - }, - "value": 1, - "input": "$foo" - } - } - } - } - ] - } - } - ] - }, - "expectResult": { - "deletedCount": 0, - "insertedCount": 0, - "insertedIds": { - "$$unsetOrMatches": {} - }, - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0, - "upsertedIds": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": [ - { - "$set": { - "foo": { - "$setField": { - "field": { - "$literal": "$a" - }, - "value": 1, - "input": "$foo" - } - } - } - } - ], - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "foo": { - "$a": 1 - } - } - ] - } - ] - }, - { - "description": "Updating document to set dotted key in embedded doc on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "bulkWrite", - "object": "collection0", - "arguments": { - "requests": [ - { - "updateOne": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$set": { - "foo": { - "$setField": { - "field": { - "$literal": "a.b" - }, - "value": 1, - "input": "$foo" - } - } - } - } - ] - } - } - ] - }, - "expectResult": { - "deletedCount": 0, - "insertedCount": 0, - "insertedIds": { - "$$unsetOrMatches": {} - }, - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0, - "upsertedIds": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": [ - { - "$set": { - "foo": { - "$setField": { - "field": { - "$literal": "a.b" - }, - "value": 1, - "input": "$foo" - } - } - } - } - ], - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "foo": { - "a.b": 1 - } - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/bulkWrite-updateOne-dots_and_dollars.yml b/testdata/crud/unified/bulkWrite-updateOne-dots_and_dollars.yml deleted file mode 100644 index c5a1662db1..0000000000 --- a/testdata/crud/unified/bulkWrite-updateOne-dots_and_dollars.yml +++ /dev/null @@ -1,150 +0,0 @@ -description: "bulkWrite-updateOne-dots_and_dollars" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, foo: {} } - -tests: - - description: "Updating document to set top-level dollar-prefixed key on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: bulkWrite - object: *collection0 - arguments: - requests: - - updateOne: - filter: { _id: 1 } - update: &dollarPrefixedKey - - { $replaceWith: { $setField: { field: { $literal: $a }, value: 1, input: $$ROOT } } } - expectResult: &bulkWriteResult - deletedCount: 0 - insertedCount: 0 - insertedIds: { $$unsetOrMatches: { } } - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - upsertedIds: { } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: { _id: 1 } - u: *dollarPrefixedKey - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, foo: {}, $a: 1 } - - - description: "Updating document to set top-level dotted key on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: bulkWrite - object: *collection0 - arguments: - requests: - - updateOne: - filter: { _id: 1 } - update: &dottedKey - - { $replaceWith: { $setField: { field: { $literal: a.b }, value: 1, input: $$ROOT } } } - expectResult: *bulkWriteResult - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: { _id: 1 } - u: *dottedKey - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, foo: {}, a.b: 1 } - - - description: "Updating document to set dollar-prefixed key in embedded doc on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: bulkWrite - object: *collection0 - arguments: - requests: - - updateOne: - filter: { _id: 1 } - update: &dollarPrefixedKeyInEmbedded - - { $set: { foo: { $setField: { field: { $literal: $a }, value: 1, input: $foo } } } } - expectResult: *bulkWriteResult - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: { _id: 1 } - u: *dollarPrefixedKeyInEmbedded - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, foo: { $a: 1 } } - - - description: "Updating document to set dotted key in embedded doc on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: bulkWrite - object: *collection0 - arguments: - requests: - - updateOne: - filter: { _id: 1 } - update: &dottedKeyInEmbedded - - { $set: { foo: { $setField: { field: { $literal: a.b }, value: 1, input: $foo } } } } - expectResult: *bulkWriteResult - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: { _id: 1 } - u: *dottedKeyInEmbedded - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, foo: { a.b: 1 } } diff --git a/testdata/crud/unified/bulkWrite-updateOne-let.json b/testdata/crud/unified/bulkWrite-updateOne-let.json deleted file mode 100644 index 96783c782f..0000000000 --- a/testdata/crud/unified/bulkWrite-updateOne-let.json +++ /dev/null @@ -1,247 +0,0 @@ -{ - "description": "BulkWrite updateOne-let", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 20 - }, - { - "_id": 2, - "x": 21 - } - ] - } - ], - "tests": [ - { - "description": "BulkWrite updateOne with let option", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "updateOne": { - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "update": [ - { - "$set": { - "x": 22 - } - } - ] - } - } - ], - "let": { - "id": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "u": [ - { - "$set": { - "x": 22 - } - } - ], - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "let": { - "id": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 22 - }, - { - "_id": 2, - "x": 21 - } - ] - } - ] - }, - { - "description": "BulkWrite updateOne with let option unsupported (server-side error)", - "runOnRequirements": [ - { - "minServerVersion": "4.2.0", - "maxServerVersion": "4.9" - } - ], - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "updateOne": { - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "update": [ - { - "$set": { - "x": 22 - } - } - ] - } - } - ], - "let": { - "id": 1 - } - }, - "expectError": { - "errorContains": "'update.let' is an unknown field", - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "u": [ - { - "$set": { - "x": 22 - } - } - ], - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "let": { - "id": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 20 - }, - { - "_id": 2, - "x": 21 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/bulkWrite-updateOne-let.yml b/testdata/crud/unified/bulkWrite-updateOne-let.yml deleted file mode 100644 index dc3cd2b599..0000000000 --- a/testdata/crud/unified/bulkWrite-updateOne-let.yml +++ /dev/null @@ -1,95 +0,0 @@ -description: "BulkWrite updateOne-let" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 20 } - - { _id: 2, x: 21 } - -tests: - - description: "BulkWrite updateOne with let option" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - object: *collection0 - name: bulkWrite - arguments: - requests: - - updateOne: - filter: &filter - $expr: - $eq: [ "$_id", "$$id" ] - update: &update - - $set: - x: 22 - let: &let - id: 1 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: *filter - u: *update - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - let: *let - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 22 } - - { _id: 2, x: 21 } - - - description: "BulkWrite updateOne with let option unsupported (server-side error)" - runOnRequirements: - - minServerVersion: "4.2.0" - maxServerVersion: "4.9" - operations: - - object: *collection0 - name: bulkWrite - arguments: - requests: - - updateOne: - filter: *filter - update: *update - let: *let - expectError: - errorContains: "'update.let' is an unknown field" - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: *filter - u: *update - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - let: *let - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 20 } - - { _id: 2, x: 21 } diff --git a/testdata/crud/unified/bulkWrite-updateOne-sort.json b/testdata/crud/unified/bulkWrite-updateOne-sort.json deleted file mode 100644 index f78bd3bf3e..0000000000 --- a/testdata/crud/unified/bulkWrite-updateOne-sort.json +++ /dev/null @@ -1,255 +0,0 @@ -{ - "description": "BulkWrite updateOne-sort", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent", - "commandSucceededEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "BulkWrite updateOne with sort option", - "runOnRequirements": [ - { - "minServerVersion": "8.0" - } - ], - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "updateOne": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "sort": { - "_id": -1 - }, - "update": [ - { - "$set": { - "x": 1 - } - } - ] - } - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "u": [ - { - "$set": { - "x": 1 - } - } - ], - "sort": { - "_id": -1 - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "n": 1 - }, - "commandName": "update" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 1 - } - ] - } - ] - }, - { - "description": "BulkWrite updateOne with sort option unsupported (server-side error)", - "runOnRequirements": [ - { - "maxServerVersion": "7.99" - } - ], - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "updateOne": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "sort": { - "_id": -1 - }, - "update": [ - { - "$set": { - "x": 1 - } - } - ] - } - } - ] - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "u": [ - { - "$set": { - "x": 1 - } - } - ], - "sort": { - "_id": -1 - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/bulkWrite-updateOne-sort.yml b/testdata/crud/unified/bulkWrite-updateOne-sort.yml deleted file mode 100644 index 9446986fab..0000000000 --- a/testdata/crud/unified/bulkWrite-updateOne-sort.yml +++ /dev/null @@ -1,94 +0,0 @@ -description: BulkWrite updateOne-sort - -schemaVersion: "1.0" - -createEntities: - - client: - id: client0 - observeEvents: [ commandStartedEvent, commandSucceededEvent ] - - database: - id: database0 - client: client0 - databaseName: crud-tests - - collection: - id: collection0 - database: database0 - collectionName: coll0 - -initialData: - - collectionName: coll0 - databaseName: crud-tests - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -tests: - - description: BulkWrite updateOne with sort option - runOnRequirements: - - minServerVersion: "8.0" - operations: - - object: collection0 - name: bulkWrite - arguments: - requests: - - updateOne: - filter: { _id: { $gt: 1 } } - sort: { _id: -1 } - update: [ $set: { x: 1 } ] - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - update: coll0 - updates: - - q: { _id: { $gt: 1 } } - u: [ $set: { x: 1 } ] - sort: { _id: -1 } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - commandSucceededEvent: - reply: { ok: 1, n: 1 } - commandName: update - outcome: - - collectionName: coll0 - databaseName: crud-tests - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 1 } - - - description: BulkWrite updateOne with sort option unsupported (server-side error) - runOnRequirements: - - maxServerVersion: "7.99" - operations: - - object: collection0 - name: bulkWrite - arguments: - requests: - - updateOne: - filter: { _id: { $gt: 1 } } - sort: { _id: -1 } - update: [ $set: { x: 1 } ] - expectError: - isClientError: false - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - update: coll0 - updates: - - q: { _id: { $gt: 1 } } - u: [ $set: { x: 1 } ] - sort: { _id: -1 } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: coll0 - databaseName: crud-tests - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } diff --git a/testdata/crud/unified/client-bulkWrite-delete-options.json b/testdata/crud/unified/client-bulkWrite-delete-options.json deleted file mode 100644 index d9987897dc..0000000000 --- a/testdata/crud/unified/client-bulkWrite-delete-options.json +++ /dev/null @@ -1,268 +0,0 @@ -{ - "description": "client bulkWrite delete options", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "8.0", - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "_yamlAnchors": { - "namespace": "crud-tests.coll0", - "collation": { - "locale": "simple" - }, - "hint": "_id_" - }, - "tests": [ - { - "description": "client bulk write delete with collation", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "deleteOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 1 - }, - "collation": { - "locale": "simple" - } - } - }, - { - "deleteMany": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": { - "$gt": 1 - } - }, - "collation": { - "locale": "simple" - } - } - } - ], - "verboseResults": true - }, - "expectResult": { - "insertedCount": 0, - "upsertedCount": 0, - "matchedCount": 0, - "modifiedCount": 0, - "deletedCount": 3, - "insertResults": {}, - "updateResults": {}, - "deleteResults": { - "0": { - "deletedCount": 1 - }, - "1": { - "deletedCount": 2 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "ops": [ - { - "delete": 0, - "filter": { - "_id": 1 - }, - "collation": { - "locale": "simple" - }, - "multi": false - }, - { - "delete": 0, - "filter": { - "_id": { - "$gt": 1 - } - }, - "collation": { - "locale": "simple" - }, - "multi": true - } - ], - "nsInfo": [ - { - "ns": "crud-tests.coll0" - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "databaseName": "crud-tests", - "collectionName": "coll0", - "documents": [] - } - ] - }, - { - "description": "client bulk write delete with hint", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "deleteOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 1 - }, - "hint": "_id_" - } - }, - { - "deleteMany": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": { - "$gt": 1 - } - }, - "hint": "_id_" - } - } - ], - "verboseResults": true - }, - "expectResult": { - "insertedCount": 0, - "upsertedCount": 0, - "matchedCount": 0, - "modifiedCount": 0, - "deletedCount": 3, - "insertResults": {}, - "updateResults": {}, - "deleteResults": { - "0": { - "deletedCount": 1 - }, - "1": { - "deletedCount": 2 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "ops": [ - { - "delete": 0, - "filter": { - "_id": 1 - }, - "hint": "_id_", - "multi": false - }, - { - "delete": 0, - "filter": { - "_id": { - "$gt": 1 - } - }, - "hint": "_id_", - "multi": true - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "databaseName": "crud-tests", - "collectionName": "coll0", - "documents": [] - } - ] - } - ] -} diff --git a/testdata/crud/unified/client-bulkWrite-delete-options.yml b/testdata/crud/unified/client-bulkWrite-delete-options.yml deleted file mode 100644 index 9297838535..0000000000 --- a/testdata/crud/unified/client-bulkWrite-delete-options.yml +++ /dev/null @@ -1,137 +0,0 @@ -description: "client bulkWrite delete options" -schemaVersion: "1.4" # To support `serverless: forbid` -runOnRequirements: - - minServerVersion: "8.0" - serverless: forbid - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -_yamlAnchors: - namespace: &namespace "crud-tests.coll0" - collation: &collation { "locale": "simple" } - hint: &hint _id_ - -tests: - - description: "client bulk write delete with collation" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - deleteOne: - namespace: *namespace - filter: { _id: 1 } - collation: *collation - - deleteMany: - namespace: *namespace - filter: { _id: { $gt: 1 } } - collation: *collation - verboseResults: true - expectResult: - insertedCount: 0 - upsertedCount: 0 - matchedCount: 0 - modifiedCount: 0 - deletedCount: 3 - insertResults: {} - updateResults: {} - deleteResults: - 0: - deletedCount: 1 - 1: - deletedCount: 2 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - ops: - - delete: 0 - filter: { _id: 1 } - collation: *collation - multi: false - - delete: 0 - filter: { _id: { $gt: 1 } } - collation: *collation - multi: true - nsInfo: - - ns: *namespace - outcome: - - databaseName: *database0Name - collectionName: *collection0Name - documents: [] - - description: "client bulk write delete with hint" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - deleteOne: - namespace: *namespace - filter: { _id: 1 } - hint: *hint - - deleteMany: - namespace: *namespace - filter: { _id: { $gt: 1 } } - hint: *hint - verboseResults: true - expectResult: - insertedCount: 0 - upsertedCount: 0 - matchedCount: 0 - modifiedCount: 0 - deletedCount: 3 - insertResults: {} - updateResults: {} - deleteResults: - 0: - deletedCount: 1 - 1: - deletedCount: 2 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - ops: - - delete: 0 - filter: { _id: 1 } - hint: *hint - multi: false - - delete: 0 - filter: { _id: { $gt: 1 } } - hint: *hint - multi: true - outcome: - - databaseName: *database0Name - collectionName: *collection0Name - documents: [] diff --git a/testdata/crud/unified/client-bulkWrite-errorResponse.json b/testdata/crud/unified/client-bulkWrite-errorResponse.json deleted file mode 100644 index b828aad3b9..0000000000 --- a/testdata/crud/unified/client-bulkWrite-errorResponse.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "description": "client bulkWrite errorResponse", - "schemaVersion": "1.12", - "runOnRequirements": [ - { - "minServerVersion": "8.0", - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "useMultipleMongoses": false - } - } - ], - "_yamlAnchors": { - "namespace": "crud-tests.coll0" - }, - "tests": [ - { - "description": "client bulkWrite operations support errorResponse assertions", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "bulkWrite" - ], - "errorCode": 8 - } - } - } - }, - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 1 - } - } - } - ] - }, - "expectError": { - "errorCode": 8, - "errorResponse": { - "code": 8 - } - } - } - ] - } - ] -} diff --git a/testdata/crud/unified/client-bulkWrite-errorResponse.yml b/testdata/crud/unified/client-bulkWrite-errorResponse.yml deleted file mode 100644 index d63010afc7..0000000000 --- a/testdata/crud/unified/client-bulkWrite-errorResponse.yml +++ /dev/null @@ -1,38 +0,0 @@ -description: "client bulkWrite errorResponse" -schemaVersion: "1.12" -runOnRequirements: - - minServerVersion: "8.0" - serverless: forbid - -createEntities: - - client: - id: &client0 client0 - useMultipleMongoses: false # Avoid setting fail points with multiple mongoses - -_yamlAnchors: - namespace: &namespace "crud-tests.coll0" - -tests: - - description: "client bulkWrite operations support errorResponse assertions" - operations: - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ bulkWrite ] - errorCode: &errorCode 8 # UnknownError - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: { _id: 1 } - expectError: - errorCode: *errorCode - errorResponse: - code: *errorCode diff --git a/testdata/crud/unified/client-bulkWrite-errors.json b/testdata/crud/unified/client-bulkWrite-errors.json deleted file mode 100644 index 015bd95c99..0000000000 --- a/testdata/crud/unified/client-bulkWrite-errors.json +++ /dev/null @@ -1,513 +0,0 @@ -{ - "description": "client bulkWrite errors", - "schemaVersion": "1.21", - "runOnRequirements": [ - { - "minServerVersion": "8.0", - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ], - "uriOptions": { - "retryWrites": false - }, - "useMultipleMongoses": false - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "_yamlAnchors": { - "namespace": "crud-tests.coll0", - "writeConcernErrorCode": 91, - "writeConcernErrorMessage": "Replication is being shut down", - "undefinedVarCode": 17276 - }, - "tests": [ - { - "description": "an individual operation fails during an ordered bulkWrite", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "deleteOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 1 - } - } - }, - { - "deleteOne": { - "namespace": "crud-tests.coll0", - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id2" - ] - } - } - } - }, - { - "deleteOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 3 - } - } - } - ], - "verboseResults": true - }, - "expectError": { - "expectResult": { - "insertedCount": 0, - "upsertedCount": 0, - "matchedCount": 0, - "modifiedCount": 0, - "deletedCount": 1, - "insertResults": {}, - "updateResults": {}, - "deleteResults": { - "0": { - "deletedCount": 1 - } - } - }, - "writeErrors": { - "1": { - "code": 17276 - } - } - } - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "an individual operation fails during an unordered bulkWrite", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "deleteOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 1 - } - } - }, - { - "deleteOne": { - "namespace": "crud-tests.coll0", - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id2" - ] - } - } - } - }, - { - "deleteOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 3 - } - } - } - ], - "verboseResults": true, - "ordered": false - }, - "expectError": { - "expectResult": { - "insertedCount": 0, - "upsertedCount": 0, - "matchedCount": 0, - "modifiedCount": 0, - "deletedCount": 2, - "insertResults": {}, - "updateResults": {}, - "deleteResults": { - "0": { - "deletedCount": 1 - }, - "2": { - "deletedCount": 1 - } - } - }, - "writeErrors": { - "1": { - "code": 17276 - } - } - } - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "detailed results are omitted from error when verboseResults is false", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "deleteOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 1 - } - } - }, - { - "deleteOne": { - "namespace": "crud-tests.coll0", - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id2" - ] - } - } - } - }, - { - "deleteOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 3 - } - } - } - ], - "verboseResults": false - }, - "expectError": { - "expectResult": { - "insertedCount": 0, - "upsertedCount": 0, - "matchedCount": 0, - "modifiedCount": 0, - "deletedCount": 1, - "insertResults": { - "$$unsetOrMatches": {} - }, - "updateResults": { - "$$unsetOrMatches": {} - }, - "deleteResults": { - "$$unsetOrMatches": {} - } - }, - "writeErrors": { - "1": { - "code": 17276 - } - } - } - } - ] - }, - { - "description": "a top-level failure occurs during a bulkWrite", - "operations": [ - { - "object": "testRunner", - "name": "failPoint", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "bulkWrite" - ], - "errorCode": 8 - } - } - } - }, - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "x": 1 - } - } - } - ], - "verboseResults": true - }, - "expectError": { - "errorCode": 8 - } - } - ] - }, - { - "description": "a bulk write with only errors does not report a partial result", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "deleteOne": { - "namespace": "crud-tests.coll0", - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id2" - ] - } - } - } - } - ], - "verboseResults": true - }, - "expectError": { - "expectResult": { - "$$unsetOrMatches": {} - }, - "writeErrors": { - "0": { - "code": 17276 - } - } - } - } - ] - }, - { - "description": "a write concern error occurs during a bulkWrite", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "bulkWrite" - ], - "writeConcernError": { - "code": 91, - "errmsg": "Replication is being shut down" - } - } - } - } - }, - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 10 - } - } - } - ], - "verboseResults": true - }, - "expectError": { - "expectResult": { - "insertedCount": 1, - "upsertedCount": 0, - "matchedCount": 0, - "modifiedCount": 0, - "deletedCount": 0, - "insertResults": { - "0": { - "insertedId": 10 - } - }, - "updateResults": {}, - "deleteResults": {} - }, - "writeConcernErrors": [ - { - "code": 91, - "message": "Replication is being shut down" - } - ] - } - } - ] - }, - { - "description": "an empty list of write models is a client-side error", - "operations": [ - { - "name": "clientBulkWrite", - "object": "client0", - "arguments": { - "models": [], - "verboseResults": true - }, - "expectError": { - "isClientError": true - } - } - ] - }, - { - "description": "Requesting unacknowledged write with verboseResults is a client-side error", - "operations": [ - { - "name": "clientBulkWrite", - "object": "client0", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 10 - } - } - } - ], - "verboseResults": true, - "ordered": false, - "writeConcern": { - "w": 0 - } - }, - "expectError": { - "isClientError": true, - "errorContains": "Cannot request unacknowledged write concern and verbose results" - } - } - ] - }, - { - "description": "Requesting unacknowledged write with ordered is a client-side error", - "operations": [ - { - "name": "clientBulkWrite", - "object": "client0", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 10 - } - } - } - ], - "writeConcern": { - "w": 0 - } - }, - "expectError": { - "isClientError": true, - "errorContains": "Cannot request unacknowledged write concern and ordered writes" - } - } - ] - } - ] -} diff --git a/testdata/crud/unified/client-bulkWrite-errors.yml b/testdata/crud/unified/client-bulkWrite-errors.yml deleted file mode 100644 index 79c0496161..0000000000 --- a/testdata/crud/unified/client-bulkWrite-errors.yml +++ /dev/null @@ -1,270 +0,0 @@ -description: "client bulkWrite errors" -schemaVersion: "1.21" -runOnRequirements: - - minServerVersion: "8.0" - serverless: forbid - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - uriOptions: - retryWrites: false - useMultipleMongoses: false # Target a single mongos with failpoint - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -_yamlAnchors: - namespace: &namespace "crud-tests.coll0" - writeConcernErrorCode: &writeConcernErrorCode 91 - writeConcernErrorMessage: &writeConcernErrorMessage "Replication is being shut down" - undefinedVarCode: &undefinedVarCode 17276 # Use of an undefined variable - -tests: - - description: "an individual operation fails during an ordered bulkWrite" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - deleteOne: - namespace: *namespace - filter: { _id: 1 } - - deleteOne: - namespace: *namespace - filter: - $expr: - $eq: [ "$_id", "$$id2" ] # Attempt to access a nonexistent let var - - deleteOne: - namespace: *namespace - filter: { _id: 3 } - verboseResults: true - expectError: - expectResult: - insertedCount: 0 - upsertedCount: 0 - matchedCount: 0 - modifiedCount: 0 - deletedCount: 1 - insertResults: {} - updateResults: {} - deleteResults: - 0: - deletedCount: 1 - writeErrors: - 1: - code: *undefinedVarCode - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - - description: "an individual operation fails during an unordered bulkWrite" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - deleteOne: - namespace: *namespace - filter: { _id: 1 } - - deleteOne: - namespace: *namespace - filter: - $expr: - $eq: [ "$_id", "$$id2" ] # Attempt to access a nonexistent let var - - deleteOne: - namespace: *namespace - filter: { _id: 3 } - verboseResults: true - ordered: false - expectError: - expectResult: - insertedCount: 0 - upsertedCount: 0 - matchedCount: 0 - modifiedCount: 0 - deletedCount: 2 - insertResults: {} - updateResults: {} - deleteResults: - 0: - deletedCount: 1 - 2: - deletedCount: 1 - writeErrors: - 1: - code: *undefinedVarCode - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 2, x: 22 } - - description: "detailed results are omitted from error when verboseResults is false" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - deleteOne: - namespace: *namespace - filter: { _id: 1 } - - deleteOne: - namespace: *namespace - filter: - $expr: - $eq: [ "$_id", "$$id2" ] # Attempt to access a nonexistent let var - - deleteOne: - namespace: *namespace - filter: { _id: 3 } - verboseResults: false - expectError: - expectResult: - insertedCount: 0 - upsertedCount: 0 - matchedCount: 0 - modifiedCount: 0 - deletedCount: 1 - insertResults: - $$unsetOrMatches: {} - updateResults: - $$unsetOrMatches: {} - deleteResults: - $$unsetOrMatches: {} - writeErrors: - 1: - code: *undefinedVarCode - - description: "a top-level failure occurs during a bulkWrite" - operations: - - object: testRunner - name: failPoint - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: - times: 1 - data: - failCommands: - - bulkWrite - errorCode: 8 # UnknownError - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: { x: 1 } - verboseResults: true - expectError: - errorCode: 8 - - description: "a bulk write with only errors does not report a partial result" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - deleteOne: - namespace: *namespace - filter: - $expr: - $eq: [ "$_id", "$$id2" ] # Attempt to access a nonexistent let var - verboseResults: true - expectError: - expectResult: - $$unsetOrMatches: {} # Empty or nonexistent result when no successful writes occurred - writeErrors: - 0: - code: *undefinedVarCode - - description: "a write concern error occurs during a bulkWrite" - operations: - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: - times: 1 - data: - failCommands: - - bulkWrite - writeConcernError: - code: *writeConcernErrorCode - errmsg: *writeConcernErrorMessage - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: { _id: 10 } - verboseResults: true - expectError: - expectResult: - insertedCount: 1 - upsertedCount: 0 - matchedCount: 0 - modifiedCount: 0 - deletedCount: 0 - insertResults: - 0: - insertedId: 10 - updateResults: {} - deleteResults: {} - writeConcernErrors: - - code: *writeConcernErrorCode - message: *writeConcernErrorMessage - - description: "an empty list of write models is a client-side error" - operations: - - name: clientBulkWrite - object: *client0 - arguments: - models: [] - verboseResults: true - expectError: - isClientError: true - - description: "Requesting unacknowledged write with verboseResults is a client-side error" - operations: - - name: clientBulkWrite - object: *client0 - arguments: - models: - - insertOne: - namespace: *namespace - document: { _id: 10 } - verboseResults: true - ordered: false - writeConcern: { w: 0 } - expectError: - isClientError: true - errorContains: "Cannot request unacknowledged write concern and verbose results" - - description: "Requesting unacknowledged write with ordered is a client-side error" - operations: - - name: clientBulkWrite - object: *client0 - arguments: - models: - - insertOne: - namespace: *namespace - document: { _id: 10 } - # Omit `ordered` option. Defaults to true. - writeConcern: { w: 0 } - expectError: - isClientError: true - errorContains: "Cannot request unacknowledged write concern and ordered writes" diff --git a/testdata/crud/unified/client-bulkWrite-mixed-namespaces.json b/testdata/crud/unified/client-bulkWrite-mixed-namespaces.json deleted file mode 100644 index 55f0618923..0000000000 --- a/testdata/crud/unified/client-bulkWrite-mixed-namespaces.json +++ /dev/null @@ -1,315 +0,0 @@ -{ - "description": "client bulkWrite with mixed namespaces", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "8.0", - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "db0" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - }, - { - "collection": { - "id": "collection1", - "database": "database0", - "collectionName": "coll1" - } - }, - { - "database": { - "id": "database1", - "client": "client0", - "databaseName": "db1" - } - }, - { - "collection": { - "id": "collection2", - "database": "database1", - "collectionName": "coll2" - } - } - ], - "initialData": [ - { - "databaseName": "db0", - "collectionName": "coll0", - "documents": [] - }, - { - "databaseName": "db0", - "collectionName": "coll1", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - }, - { - "databaseName": "db1", - "collectionName": "coll2", - "documents": [ - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "_yamlAnchors": { - "db0Coll0Namespace": "db0.coll0", - "db0Coll1Namespace": "db0.coll1", - "db1Coll2Namespace": "db1.coll2" - }, - "tests": [ - { - "description": "client bulkWrite with mixed namespaces", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "db0.coll0", - "document": { - "_id": 1 - } - } - }, - { - "insertOne": { - "namespace": "db0.coll0", - "document": { - "_id": 2 - } - } - }, - { - "updateOne": { - "namespace": "db0.coll1", - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - } - } - }, - { - "deleteOne": { - "namespace": "db1.coll2", - "filter": { - "_id": 3 - } - } - }, - { - "deleteOne": { - "namespace": "db0.coll1", - "filter": { - "_id": 2 - } - } - }, - { - "replaceOne": { - "namespace": "db1.coll2", - "filter": { - "_id": 4 - }, - "replacement": { - "x": 45 - } - } - } - ], - "verboseResults": true - }, - "expectResult": { - "insertedCount": 2, - "upsertedCount": 0, - "matchedCount": 2, - "modifiedCount": 2, - "deletedCount": 2, - "insertResults": { - "0": { - "insertedId": 1 - }, - "1": { - "insertedId": 2 - } - }, - "updateResults": { - "2": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedId": { - "$$exists": false - } - }, - "5": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedId": { - "$$exists": false - } - } - }, - "deleteResults": { - "3": { - "deletedCount": 1 - }, - "4": { - "deletedCount": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "bulkWrite": 1, - "ops": [ - { - "insert": 0, - "document": { - "_id": 1 - } - }, - { - "insert": 0, - "document": { - "_id": 2 - } - }, - { - "update": 1, - "filter": { - "_id": 1 - }, - "updateMods": { - "$inc": { - "x": 1 - } - }, - "multi": false - }, - { - "delete": 2, - "filter": { - "_id": 3 - }, - "multi": false - }, - { - "delete": 1, - "filter": { - "_id": 2 - }, - "multi": false - }, - { - "update": 2, - "filter": { - "_id": 4 - }, - "updateMods": { - "x": 45 - }, - "multi": false - } - ], - "nsInfo": [ - { - "ns": "db0.coll0" - }, - { - "ns": "db0.coll1" - }, - { - "ns": "db1.coll2" - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "databaseName": "db0", - "collectionName": "coll0", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - }, - { - "databaseName": "db0", - "collectionName": "coll1", - "documents": [ - { - "_id": 1, - "x": 12 - } - ] - }, - { - "databaseName": "db1", - "collectionName": "coll2", - "documents": [ - { - "_id": 4, - "x": 45 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/client-bulkWrite-mixed-namespaces.yml b/testdata/crud/unified/client-bulkWrite-mixed-namespaces.yml deleted file mode 100644 index 9788bce8c5..0000000000 --- a/testdata/crud/unified/client-bulkWrite-mixed-namespaces.yml +++ /dev/null @@ -1,147 +0,0 @@ -description: "client bulkWrite with mixed namespaces" -schemaVersion: "1.4" # To support `serverless: forbid` -runOnRequirements: - - minServerVersion: "8.0" - serverless: forbid - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name db0 - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - - collection: - id: &collection1 collection1 - database: *database0 - collectionName: &collection1Name coll1 - - database: - id: &database1 database1 - client: *client0 - databaseName: &database1Name db1 - - collection: - id: &collection2 collection2 - database: *database1 - collectionName: &collection2Name coll2 - -initialData: - - databaseName: *database0Name - collectionName: *collection0Name - documents: [] - - databaseName: *database0Name - collectionName: *collection1Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - databaseName: *database1Name - collectionName: *collection2Name - documents: - - { _id: 3, x: 33 } - - { _id: 4, x: 44 } - -_yamlAnchors: - db0Coll0Namespace: &db0Coll0Namespace "db0.coll0" - db0Coll1Namespace: &db0Coll1Namespace "db0.coll1" - db1Coll2Namespace: &db1Coll2Namespace "db1.coll2" - -tests: - - description: "client bulkWrite with mixed namespaces" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *db0Coll0Namespace - document: { _id: 1 } - - insertOne: - namespace: *db0Coll0Namespace - document: { _id: 2 } - - updateOne: - namespace: *db0Coll1Namespace - filter: { _id: 1 } - update: { $inc: { x: 1 } } - - deleteOne: - namespace: *db1Coll2Namespace - filter: { _id: 3 } - - deleteOne: - namespace: *db0Coll1Namespace - filter: { _id: 2 } - - replaceOne: - namespace: *db1Coll2Namespace - filter: { _id: 4 } - replacement: { x: 45 } - verboseResults: true - expectResult: - insertedCount: 2 - upsertedCount: 0 - matchedCount: 2 - modifiedCount: 2 - deletedCount: 2 - insertResults: - 0: - insertedId: 1 - 1: - insertedId: 2 - updateResults: - 2: - matchedCount: 1 - modifiedCount: 1 - upsertedId: { $$exists: false } - 5: - matchedCount: 1 - modifiedCount: 1 - upsertedId: { $$exists: false } - deleteResults: - 3: - deletedCount: 1 - 4: - deletedCount: 1 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - bulkWrite: 1 - ops: - - insert: 0 - document: { _id: 1 } - - insert: 0 - document: { _id: 2 } - - update: 1 - filter: { _id: 1 } - updateMods: { $inc: { x: 1 } } - multi: false - - delete: 2 - filter: { _id: 3 } - multi: false - - delete: 1 - filter: { _id: 2 } - multi: false - - update: 2 - filter: { _id: 4 } - updateMods: { x: 45 } - multi: false - nsInfo: - - ns: *db0Coll0Namespace - - ns: *db0Coll1Namespace - - ns: *db1Coll2Namespace - outcome: - - databaseName: *database0Name - collectionName: *collection0Name - documents: - - { _id: 1 } - - { _id: 2 } - - databaseName: *database0Name - collectionName: *collection1Name - documents: - - { _id: 1, x: 12 } - - databaseName: *database1Name - collectionName: *collection2Name - documents: - - { _id: 4, x: 45 } diff --git a/testdata/crud/unified/client-bulkWrite-options.json b/testdata/crud/unified/client-bulkWrite-options.json deleted file mode 100644 index 708fe4e85b..0000000000 --- a/testdata/crud/unified/client-bulkWrite-options.json +++ /dev/null @@ -1,716 +0,0 @@ -{ - "description": "client bulkWrite top-level options", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "8.0", - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "client": { - "id": "writeConcernClient", - "uriOptions": { - "w": 1 - }, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ], - "_yamlAnchors": { - "namespace": "crud-tests.coll0", - "comment": { - "bulk": "write" - }, - "let": { - "id1": 1, - "id2": 2 - }, - "writeConcern": { - "w": "majority" - } - }, - "tests": [ - { - "description": "client bulkWrite comment", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 3, - "x": 33 - } - } - } - ], - "comment": { - "bulk": "write" - }, - "verboseResults": true - }, - "expectResult": { - "insertedCount": 1, - "upsertedCount": 0, - "matchedCount": 0, - "modifiedCount": 0, - "deletedCount": 0, - "insertResults": { - "0": { - "insertedId": 3 - } - }, - "updateResults": {}, - "deleteResults": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "comment": { - "bulk": "write" - }, - "ops": [ - { - "insert": 0, - "document": { - "_id": 3, - "x": 33 - } - } - ], - "nsInfo": [ - { - "ns": "crud-tests.coll0" - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "client bulkWrite bypassDocumentValidation", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 3, - "x": 33 - } - } - } - ], - "bypassDocumentValidation": true, - "verboseResults": true - }, - "expectResult": { - "insertedCount": 1, - "upsertedCount": 0, - "matchedCount": 0, - "modifiedCount": 0, - "deletedCount": 0, - "insertResults": { - "0": { - "insertedId": 3 - } - }, - "updateResults": {}, - "deleteResults": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "bypassDocumentValidation": true, - "ops": [ - { - "insert": 0, - "document": { - "_id": 3, - "x": 33 - } - } - ], - "nsInfo": [ - { - "ns": "crud-tests.coll0" - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "client bulkWrite let", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "updateOne": { - "namespace": "crud-tests.coll0", - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id1" - ] - } - }, - "update": { - "$inc": { - "x": 1 - } - } - } - }, - { - "deleteOne": { - "namespace": "crud-tests.coll0", - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id2" - ] - } - } - } - } - ], - "let": { - "id1": 1, - "id2": 2 - }, - "verboseResults": true - }, - "expectResult": { - "insertedCount": 0, - "upsertedCount": 0, - "matchedCount": 1, - "modifiedCount": 1, - "deletedCount": 1, - "insertResults": {}, - "updateResults": { - "0": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedId": { - "$$exists": false - } - } - }, - "deleteResults": { - "1": { - "deletedCount": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "let": { - "id1": 1, - "id2": 2 - }, - "ops": [ - { - "update": 0, - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id1" - ] - } - }, - "updateMods": { - "$inc": { - "x": 1 - } - }, - "multi": false - }, - { - "delete": 0, - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id2" - ] - } - }, - "multi": false - } - ], - "nsInfo": [ - { - "ns": "crud-tests.coll0" - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "databaseName": "crud-tests", - "collectionName": "coll0", - "documents": [ - { - "_id": 1, - "x": 12 - } - ] - } - ] - }, - { - "description": "client bulkWrite bypassDocumentValidation: false is sent", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 3, - "x": 33 - } - } - } - ], - "bypassDocumentValidation": false, - "verboseResults": true - }, - "expectResult": { - "insertedCount": 1, - "upsertedCount": 0, - "matchedCount": 0, - "modifiedCount": 0, - "deletedCount": 0, - "insertResults": { - "0": { - "insertedId": 3 - } - }, - "updateResults": {}, - "deleteResults": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "bypassDocumentValidation": false, - "ops": [ - { - "insert": 0, - "document": { - "_id": 3, - "x": 33 - } - } - ], - "nsInfo": [ - { - "ns": "crud-tests.coll0" - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "client bulkWrite writeConcern", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 3, - "x": 33 - } - } - } - ], - "writeConcern": { - "w": "majority" - }, - "verboseResults": true - }, - "expectResult": { - "insertedCount": 1, - "upsertedCount": 0, - "matchedCount": 0, - "modifiedCount": 0, - "deletedCount": 0, - "insertResults": { - "0": { - "insertedId": 3 - } - }, - "updateResults": {}, - "deleteResults": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "writeConcern": { - "w": "majority" - }, - "ops": [ - { - "insert": 0, - "document": { - "_id": 3, - "x": 33 - } - } - ], - "nsInfo": [ - { - "ns": "crud-tests.coll0" - } - ] - } - } - } - ] - } - ] - }, - { - "description": "client bulkWrite inherits writeConcern from client", - "operations": [ - { - "object": "writeConcernClient", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 3, - "x": 33 - } - } - } - ], - "verboseResults": true - }, - "expectResult": { - "insertedCount": 1, - "upsertedCount": 0, - "matchedCount": 0, - "modifiedCount": 0, - "deletedCount": 0, - "insertResults": { - "0": { - "insertedId": 3 - } - }, - "updateResults": {}, - "deleteResults": {} - } - } - ], - "expectEvents": [ - { - "client": "writeConcernClient", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "writeConcern": { - "w": 1 - }, - "ops": [ - { - "insert": 0, - "document": { - "_id": 3, - "x": 33 - } - } - ], - "nsInfo": [ - { - "ns": "crud-tests.coll0" - } - ] - } - } - } - ] - } - ] - }, - { - "description": "client bulkWrite writeConcern option overrides client writeConcern", - "operations": [ - { - "object": "writeConcernClient", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 3, - "x": 33 - } - } - } - ], - "writeConcern": { - "w": "majority" - }, - "verboseResults": true - }, - "expectResult": { - "insertedCount": 1, - "upsertedCount": 0, - "matchedCount": 0, - "modifiedCount": 0, - "deletedCount": 0, - "insertResults": { - "0": { - "insertedId": 3 - } - }, - "updateResults": {}, - "deleteResults": {} - } - } - ], - "expectEvents": [ - { - "client": "writeConcernClient", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "writeConcern": { - "w": "majority" - }, - "ops": [ - { - "insert": 0, - "document": { - "_id": 3, - "x": 33 - } - } - ], - "nsInfo": [ - { - "ns": "crud-tests.coll0" - } - ] - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/client-bulkWrite-options.yml b/testdata/crud/unified/client-bulkWrite-options.yml deleted file mode 100644 index e0cbe747b3..0000000000 --- a/testdata/crud/unified/client-bulkWrite-options.yml +++ /dev/null @@ -1,351 +0,0 @@ -description: "client bulkWrite top-level options" -schemaVersion: "1.4" # To support `serverless: forbid` -runOnRequirements: - - minServerVersion: "8.0" - serverless: forbid - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - client: - id: &writeConcernClient writeConcernClient - uriOptions: - &clientWriteConcern { w: 1 } - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - -_yamlAnchors: - namespace: &namespace "crud-tests.coll0" - comment: &comment { bulk: "write" } - let: &let { id1: 1, id2: 2 } - writeConcern: &majorityWriteConcern { w: "majority" } - -tests: - - description: "client bulkWrite comment" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: { _id: 3, x: 33 } - comment: *comment - verboseResults: true - expectResult: - insertedCount: 1 - upsertedCount: 0 - matchedCount: 0 - modifiedCount: 0 - deletedCount: 0 - insertResults: - 0: - insertedId: 3 - updateResults: {} - deleteResults: {} - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - comment: *comment - ops: - - insert: 0 - document: { _id: 3, x: 33 } - nsInfo: - - ns: *namespace - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - - description: "client bulkWrite bypassDocumentValidation" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: { _id: 3, x: 33 } - bypassDocumentValidation: true - verboseResults: true - expectResult: - insertedCount: 1 - upsertedCount: 0 - matchedCount: 0 - modifiedCount: 0 - deletedCount: 0 - insertResults: - 0: - insertedId: 3 - updateResults: {} - deleteResults: {} - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - bypassDocumentValidation: true - ops: - - insert: 0 - document: { _id: 3, x: 33 } - nsInfo: - - ns: *namespace - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - - description: "client bulkWrite let" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - updateOne: - namespace: *namespace - filter: - $expr: - $eq: [ "$_id", "$$id1" ] - update: - $inc: { x: 1 } - - deleteOne: - namespace: *namespace - filter: - $expr: - $eq: [ "$_id", "$$id2" ] - let: *let - verboseResults: true - expectResult: - insertedCount: 0 - upsertedCount: 0 - matchedCount: 1 - modifiedCount: 1 - deletedCount: 1 - insertResults: {} - updateResults: - 0: - matchedCount: 1 - modifiedCount: 1 - upsertedId: { $$exists: false } - deleteResults: - 1: - deletedCount: 1 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - let: *let - ops: - - update: 0 - filter: - $expr: - $eq: [ "$_id", "$$id1" ] - updateMods: { $inc: { x: 1 } } - multi: false - - delete: 0 - filter: - $expr: - $eq: [ "$_id", "$$id2" ] - multi: false - nsInfo: - - ns: *namespace - outcome: - - databaseName: *database0Name - collectionName: *collection0Name - documents: - - { _id: 1, x: 12 } - - description: "client bulkWrite bypassDocumentValidation: false is sent" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: { _id: 3, x: 33 } - bypassDocumentValidation: false - verboseResults: true - expectResult: - insertedCount: 1 - upsertedCount: 0 - matchedCount: 0 - modifiedCount: 0 - deletedCount: 0 - insertResults: - 0: - insertedId: 3 - updateResults: {} - deleteResults: {} - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - bypassDocumentValidation: false - ops: - - insert: 0 - document: { _id: 3, x: 33 } - nsInfo: - - ns: *namespace - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - - description: "client bulkWrite writeConcern" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: { _id: 3, x: 33 } - writeConcern: *majorityWriteConcern - verboseResults: true - expectResult: - insertedCount: 1 - upsertedCount: 0 - matchedCount: 0 - modifiedCount: 0 - deletedCount: 0 - insertResults: - 0: - insertedId: 3 - updateResults: {} - deleteResults: {} - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - writeConcern: *majorityWriteConcern - ops: - - insert: 0 - document: { _id: 3, x: 33 } - nsInfo: - - ns: *namespace - - description: "client bulkWrite inherits writeConcern from client" - operations: - - object: *writeConcernClient - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: { _id: 3, x: 33 } - verboseResults: true - expectResult: - insertedCount: 1 - upsertedCount: 0 - matchedCount: 0 - modifiedCount: 0 - deletedCount: 0 - insertResults: - 0: - insertedId: 3 - updateResults: {} - deleteResults: {} - expectEvents: - - client: *writeConcernClient - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - writeConcern: { w: 1 } - ops: - - insert: 0 - document: { _id: 3, x: 33 } - nsInfo: - - ns: *namespace - - description: "client bulkWrite writeConcern option overrides client writeConcern" - operations: - - object: *writeConcernClient - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: { _id: 3, x: 33 } - writeConcern: *majorityWriteConcern - verboseResults: true - expectResult: - insertedCount: 1 - upsertedCount: 0 - matchedCount: 0 - modifiedCount: 0 - deletedCount: 0 - insertResults: - 0: - insertedId: 3 - updateResults: {} - deleteResults: {} - expectEvents: - - client: *writeConcernClient - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - writeConcern: *majorityWriteConcern - ops: - - insert: 0 - document: { _id: 3, x: 33 } - nsInfo: - - ns: *namespace diff --git a/testdata/crud/unified/client-bulkWrite-ordered.json b/testdata/crud/unified/client-bulkWrite-ordered.json deleted file mode 100644 index 6fb10d992f..0000000000 --- a/testdata/crud/unified/client-bulkWrite-ordered.json +++ /dev/null @@ -1,291 +0,0 @@ -{ - "description": "client bulkWrite with ordered option", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "8.0", - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [] - } - ], - "_yamlAnchors": { - "namespace": "crud-tests.coll0" - }, - "tests": [ - { - "description": "client bulkWrite with ordered: false", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 1, - "x": 11 - } - } - } - ], - "verboseResults": true, - "ordered": false - }, - "expectResult": { - "insertedCount": 1, - "upsertedCount": 0, - "matchedCount": 0, - "modifiedCount": 0, - "deletedCount": 0, - "insertResults": { - "0": { - "insertedId": 1 - } - }, - "updateResults": {}, - "deleteResults": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": false, - "ops": [ - { - "insert": 0, - "document": { - "_id": 1, - "x": 11 - } - } - ], - "nsInfo": [ - { - "ns": "crud-tests.coll0" - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ] - }, - { - "description": "client bulkWrite with ordered: true", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 1, - "x": 11 - } - } - } - ], - "verboseResults": true, - "ordered": true - }, - "expectResult": { - "insertedCount": 1, - "upsertedCount": 0, - "matchedCount": 0, - "modifiedCount": 0, - "deletedCount": 0, - "insertResults": { - "0": { - "insertedId": 1 - } - }, - "updateResults": {}, - "deleteResults": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "ops": [ - { - "insert": 0, - "document": { - "_id": 1, - "x": 11 - } - } - ], - "nsInfo": [ - { - "ns": "crud-tests.coll0" - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ] - }, - { - "description": "client bulkWrite defaults to ordered: true", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 1, - "x": 11 - } - } - } - ], - "verboseResults": true - }, - "expectResult": { - "insertedCount": 1, - "upsertedCount": 0, - "matchedCount": 0, - "modifiedCount": 0, - "deletedCount": 0, - "insertResults": { - "0": { - "insertedId": 1 - } - }, - "updateResults": {}, - "deleteResults": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "ops": [ - { - "insert": 0, - "document": { - "_id": 1, - "x": 11 - } - } - ], - "nsInfo": [ - { - "ns": "crud-tests.coll0" - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/client-bulkWrite-ordered.yml b/testdata/crud/unified/client-bulkWrite-ordered.yml deleted file mode 100644 index 48aa8ad40a..0000000000 --- a/testdata/crud/unified/client-bulkWrite-ordered.yml +++ /dev/null @@ -1,153 +0,0 @@ -description: "client bulkWrite with ordered option" -schemaVersion: "1.4" # To support `serverless: forbid` -runOnRequirements: - - minServerVersion: "8.0" - serverless: forbid - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: [] - -_yamlAnchors: - namespace: &namespace "crud-tests.coll0" - -tests: - - description: "client bulkWrite with ordered: false" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: { _id: 1, x: 11 } - verboseResults: true - ordered: false - expectResult: - insertedCount: 1 - upsertedCount: 0 - matchedCount: 0 - modifiedCount: 0 - deletedCount: 0 - insertResults: - 0: - insertedId: 1 - updateResults: {} - deleteResults: {} - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: false - ops: - - insert: 0 - document: { _id: 1, x: 11 } - nsInfo: - - ns: *namespace - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - description: "client bulkWrite with ordered: true" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: { _id: 1, x: 11 } - verboseResults: true - ordered: true - expectResult: - insertedCount: 1 - upsertedCount: 0 - matchedCount: 0 - modifiedCount: 0 - deletedCount: 0 - insertResults: - 0: - insertedId: 1 - updateResults: {} - deleteResults: {} - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - ops: - - insert: 0 - document: { _id: 1, x: 11 } - nsInfo: - - ns: *namespace - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - description: "client bulkWrite defaults to ordered: true" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: { _id: 1, x: 11 } - verboseResults: true - expectResult: - insertedCount: 1 - upsertedCount: 0 - matchedCount: 0 - modifiedCount: 0 - deletedCount: 0 - insertResults: - 0: - insertedId: 1 - updateResults: {} - deleteResults: {} - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - ops: - - insert: 0 - document: { _id: 1, x: 11 } - nsInfo: - - ns: *namespace - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } diff --git a/testdata/crud/unified/client-bulkWrite-partialResults.json b/testdata/crud/unified/client-bulkWrite-partialResults.json deleted file mode 100644 index 1b75e37834..0000000000 --- a/testdata/crud/unified/client-bulkWrite-partialResults.json +++ /dev/null @@ -1,540 +0,0 @@ -{ - "description": "client bulkWrite partial results", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "8.0", - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client0" - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ], - "_yamlAnchors": { - "namespace": "crud-tests.coll0", - "newDocument": { - "_id": 2, - "x": 22 - } - }, - "tests": [ - { - "description": "partialResult is unset when first operation fails during an ordered bulk write (verbose)", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 1, - "x": 11 - } - } - }, - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 2, - "x": 22 - } - } - } - ], - "ordered": true, - "verboseResults": true - }, - "expectError": { - "expectResult": { - "$$unsetOrMatches": { - "insertedCount": { - "$$exists": false - }, - "upsertedCount": { - "$$exists": false - }, - "matchedCount": { - "$$exists": false - }, - "modifiedCount": { - "$$exists": false - }, - "deletedCount": { - "$$exists": false - }, - "insertResults": { - "$$exists": false - }, - "updateResults": { - "$$exists": false - }, - "deleteResults": { - "$$exists": false - } - } - } - } - } - ] - }, - { - "description": "partialResult is unset when first operation fails during an ordered bulk write (summary)", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 1, - "x": 11 - } - } - }, - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 2, - "x": 22 - } - } - } - ], - "ordered": true, - "verboseResults": false - }, - "expectError": { - "expectResult": { - "$$unsetOrMatches": { - "insertedCount": { - "$$exists": false - }, - "upsertedCount": { - "$$exists": false - }, - "matchedCount": { - "$$exists": false - }, - "modifiedCount": { - "$$exists": false - }, - "deletedCount": { - "$$exists": false - }, - "insertResults": { - "$$exists": false - }, - "updateResults": { - "$$exists": false - }, - "deleteResults": { - "$$exists": false - } - } - } - } - } - ] - }, - { - "description": "partialResult is set when second operation fails during an ordered bulk write (verbose)", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 2, - "x": 22 - } - } - }, - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 1, - "x": 11 - } - } - } - ], - "ordered": true, - "verboseResults": true - }, - "expectError": { - "expectResult": { - "insertedCount": 1, - "upsertedCount": 0, - "matchedCount": 0, - "modifiedCount": 0, - "deletedCount": 0, - "insertResults": { - "0": { - "insertedId": 2 - } - }, - "updateResults": {}, - "deleteResults": {} - } - } - } - ] - }, - { - "description": "partialResult is set when second operation fails during an ordered bulk write (summary)", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 2, - "x": 22 - } - } - }, - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 1, - "x": 11 - } - } - } - ], - "ordered": true, - "verboseResults": false - }, - "expectError": { - "expectResult": { - "insertedCount": 1, - "upsertedCount": 0, - "matchedCount": 0, - "modifiedCount": 0, - "deletedCount": 0, - "insertResults": { - "$$unsetOrMatches": {} - }, - "updateResults": { - "$$unsetOrMatches": {} - }, - "deleteResults": { - "$$unsetOrMatches": {} - } - } - } - } - ] - }, - { - "description": "partialResult is unset when all operations fail during an unordered bulk write", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 1, - "x": 11 - } - } - }, - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 1, - "x": 11 - } - } - } - ], - "ordered": false - }, - "expectError": { - "expectResult": { - "$$unsetOrMatches": { - "insertedCount": { - "$$exists": false - }, - "upsertedCount": { - "$$exists": false - }, - "matchedCount": { - "$$exists": false - }, - "modifiedCount": { - "$$exists": false - }, - "deletedCount": { - "$$exists": false - }, - "insertResults": { - "$$exists": false - }, - "updateResults": { - "$$exists": false - }, - "deleteResults": { - "$$exists": false - } - } - } - } - } - ] - }, - { - "description": "partialResult is set when first operation fails during an unordered bulk write (verbose)", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 1, - "x": 11 - } - } - }, - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 2, - "x": 22 - } - } - } - ], - "ordered": false, - "verboseResults": true - }, - "expectError": { - "expectResult": { - "insertedCount": 1, - "upsertedCount": 0, - "matchedCount": 0, - "modifiedCount": 0, - "deletedCount": 0, - "insertResults": { - "1": { - "insertedId": 2 - } - }, - "updateResults": {}, - "deleteResults": {} - } - } - } - ] - }, - { - "description": "partialResult is set when first operation fails during an unordered bulk write (summary)", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 1, - "x": 11 - } - } - }, - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 2, - "x": 22 - } - } - } - ], - "ordered": false, - "verboseResults": false - }, - "expectError": { - "expectResult": { - "insertedCount": 1, - "upsertedCount": 0, - "matchedCount": 0, - "modifiedCount": 0, - "deletedCount": 0, - "insertResults": { - "$$unsetOrMatches": {} - }, - "updateResults": { - "$$unsetOrMatches": {} - }, - "deleteResults": { - "$$unsetOrMatches": {} - } - } - } - } - ] - }, - { - "description": "partialResult is set when second operation fails during an unordered bulk write (verbose)", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 2, - "x": 22 - } - } - }, - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 1, - "x": 11 - } - } - } - ], - "ordered": false, - "verboseResults": true - }, - "expectError": { - "expectResult": { - "insertedCount": 1, - "upsertedCount": 0, - "matchedCount": 0, - "modifiedCount": 0, - "deletedCount": 0, - "insertResults": { - "0": { - "insertedId": 2 - } - }, - "updateResults": {}, - "deleteResults": {} - } - } - } - ] - }, - { - "description": "partialResult is set when second operation fails during an unordered bulk write (summary)", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 2, - "x": 22 - } - } - }, - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 1, - "x": 11 - } - } - } - ], - "ordered": false, - "verboseResults": false - }, - "expectError": { - "expectResult": { - "insertedCount": 1, - "upsertedCount": 0, - "matchedCount": 0, - "modifiedCount": 0, - "deletedCount": 0, - "insertResults": { - "$$unsetOrMatches": {} - }, - "updateResults": { - "$$unsetOrMatches": {} - }, - "deleteResults": { - "$$unsetOrMatches": {} - } - } - } - } - ] - } - ] -} diff --git a/testdata/crud/unified/client-bulkWrite-partialResults.yml b/testdata/crud/unified/client-bulkWrite-partialResults.yml deleted file mode 100644 index 1cda7318f8..0000000000 --- a/testdata/crud/unified/client-bulkWrite-partialResults.yml +++ /dev/null @@ -1,262 +0,0 @@ -description: "client bulkWrite partial results" -schemaVersion: "1.4" # To support `serverless: forbid` -runOnRequirements: - - minServerVersion: "8.0" - serverless: forbid - -createEntities: - - client: - id: &client0 client0 - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - &existingDocument { _id: 1, x: 11 } - -_yamlAnchors: - namespace: &namespace "crud-tests.coll0" - newDocument: &newDocument { _id: 2, x: 22 } - -tests: - - description: "partialResult is unset when first operation fails during an ordered bulk write (verbose)" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: *existingDocument - - insertOne: - namespace: *namespace - document: *newDocument - ordered: true - verboseResults: true - expectError: - expectResult: - $$unsetOrMatches: - insertedCount: { $$exists: false } - upsertedCount: { $$exists: false } - matchedCount: { $$exists: false } - modifiedCount: { $$exists: false } - deletedCount: { $$exists: false } - insertResults: { $$exists: false } - updateResults: { $$exists: false } - deleteResults: { $$exists: false } - - description: "partialResult is unset when first operation fails during an ordered bulk write (summary)" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: *existingDocument - - insertOne: - namespace: *namespace - document: *newDocument - ordered: true - verboseResults: false - expectError: - expectResult: - $$unsetOrMatches: - insertedCount: { $$exists: false } - upsertedCount: { $$exists: false } - matchedCount: { $$exists: false } - modifiedCount: { $$exists: false } - deletedCount: { $$exists: false } - insertResults: { $$exists: false } - updateResults: { $$exists: false } - deleteResults: { $$exists: false } - - description: "partialResult is set when second operation fails during an ordered bulk write (verbose)" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: *newDocument - - insertOne: - namespace: *namespace - document: *existingDocument - ordered: true - verboseResults: true - expectError: - expectResult: - insertedCount: 1 - upsertedCount: 0 - matchedCount: 0 - modifiedCount: 0 - deletedCount: 0 - insertResults: - 0: - insertedId: 2 - updateResults: {} - deleteResults: {} - - description: "partialResult is set when second operation fails during an ordered bulk write (summary)" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: *newDocument - - insertOne: - namespace: *namespace - document: *existingDocument - ordered: true - verboseResults: false - expectError: - expectResult: - insertedCount: 1 - upsertedCount: 0 - matchedCount: 0 - modifiedCount: 0 - deletedCount: 0 - insertResults: - $$unsetOrMatches: {} - updateResults: - $$unsetOrMatches: {} - deleteResults: - $$unsetOrMatches: {} - - description: "partialResult is unset when all operations fail during an unordered bulk write" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: *existingDocument - - insertOne: - namespace: *namespace - document: *existingDocument - ordered: false - expectError: - expectResult: - $$unsetOrMatches: - insertedCount: { $$exists: false } - upsertedCount: { $$exists: false } - matchedCount: { $$exists: false } - modifiedCount: { $$exists: false } - deletedCount: { $$exists: false } - insertResults: { $$exists: false } - updateResults: { $$exists: false } - deleteResults: { $$exists: false } - - description: "partialResult is set when first operation fails during an unordered bulk write (verbose)" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: *existingDocument - - insertOne: - namespace: *namespace - document: *newDocument - ordered: false - verboseResults: true - expectError: - expectResult: - insertedCount: 1 - upsertedCount: 0 - matchedCount: 0 - modifiedCount: 0 - deletedCount: 0 - insertResults: - 1: - insertedId: 2 - updateResults: {} - deleteResults: {} - - description: "partialResult is set when first operation fails during an unordered bulk write (summary)" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: *existingDocument - - insertOne: - namespace: *namespace - document: *newDocument - ordered: false - verboseResults: false - expectError: - expectResult: - insertedCount: 1 - upsertedCount: 0 - matchedCount: 0 - modifiedCount: 0 - deletedCount: 0 - insertResults: - $$unsetOrMatches: {} - updateResults: - $$unsetOrMatches: {} - deleteResults: - $$unsetOrMatches: {} - - description: "partialResult is set when second operation fails during an unordered bulk write (verbose)" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: *newDocument - - insertOne: - namespace: *namespace - document: *existingDocument - ordered: false - verboseResults: true - expectError: - expectResult: - insertedCount: 1 - upsertedCount: 0 - matchedCount: 0 - modifiedCount: 0 - deletedCount: 0 - insertResults: - 0: - insertedId: 2 - updateResults: {} - deleteResults: {} - - description: "partialResult is set when second operation fails during an unordered bulk write (summary)" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: *newDocument - - insertOne: - namespace: *namespace - document: *existingDocument - ordered: false - verboseResults: false - expectError: - expectResult: - insertedCount: 1 - upsertedCount: 0 - matchedCount: 0 - modifiedCount: 0 - deletedCount: 0 - insertResults: - $$unsetOrMatches: {} - updateResults: - $$unsetOrMatches: {} - deleteResults: - $$unsetOrMatches: {} diff --git a/testdata/crud/unified/client-bulkWrite-replaceOne-sort.json b/testdata/crud/unified/client-bulkWrite-replaceOne-sort.json deleted file mode 100644 index b86bc5f942..0000000000 --- a/testdata/crud/unified/client-bulkWrite-replaceOne-sort.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "description": "client bulkWrite updateOne-sort", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "8.0", - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent", - "commandSucceededEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "_yamlAnchors": { - "namespace": "crud-tests.coll0" - }, - "tests": [ - { - "description": "client bulkWrite replaceOne with sort option", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "replaceOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": { - "$gt": 1 - } - }, - "sort": { - "_id": -1 - }, - "replacement": { - "x": 1 - } - } - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "ops": [ - { - "update": 0, - "filter": { - "_id": { - "$gt": 1 - } - }, - "updateMods": { - "x": 1 - }, - "sort": { - "_id": -1 - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "nsInfo": [ - { - "ns": "crud-tests.coll0" - } - ] - } - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "nErrors": 0, - "nMatched": 1, - "nModified": 1 - }, - "commandName": "bulkWrite" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 1 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/client-bulkWrite-replaceOne-sort.yml b/testdata/crud/unified/client-bulkWrite-replaceOne-sort.yml deleted file mode 100644 index a159ba5955..0000000000 --- a/testdata/crud/unified/client-bulkWrite-replaceOne-sort.yml +++ /dev/null @@ -1,77 +0,0 @@ -description: client bulkWrite updateOne-sort - -schemaVersion: "1.4" - -runOnRequirements: - - minServerVersion: "8.0" - serverless: forbid # Serverless does not support bulkWrite: CLOUDP-256344. - -createEntities: - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - commandSucceededEvent - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -_yamlAnchors: - namespace: &namespace "crud-tests.coll0" - -tests: - - description: client bulkWrite replaceOne with sort option - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - replaceOne: - namespace: *namespace - filter: { _id: { $gt: 1 } } - sort: { _id: -1 } - replacement: { x: 1 } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - ops: - - update: 0 - filter: { _id: { $gt: 1 } } - updateMods: { x: 1 } - sort: { _id: -1 } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - nsInfo: - - ns: *namespace - - commandSucceededEvent: - reply: - ok: 1 - nErrors: 0 - nMatched: 1 - nModified: 1 - commandName: bulkWrite - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 1 } diff --git a/testdata/crud/unified/client-bulkWrite-results.json b/testdata/crud/unified/client-bulkWrite-results.json deleted file mode 100644 index accf5a9cbf..0000000000 --- a/testdata/crud/unified/client-bulkWrite-results.json +++ /dev/null @@ -1,833 +0,0 @@ -{ - "description": "client bulkWrite results", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "8.0", - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 5, - "x": 55 - }, - { - "_id": 6, - "x": 66 - }, - { - "_id": 7, - "x": 77 - } - ] - } - ], - "_yamlAnchors": { - "namespace": "crud-tests.coll0" - }, - "tests": [ - { - "description": "client bulkWrite with verboseResults: true returns detailed results", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 8, - "x": 88 - } - } - }, - { - "updateOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - } - } - }, - { - "updateMany": { - "namespace": "crud-tests.coll0", - "filter": { - "$and": [ - { - "_id": { - "$gt": 1 - } - }, - { - "_id": { - "$lte": 3 - } - } - ] - }, - "update": { - "$inc": { - "x": 2 - } - } - } - }, - { - "replaceOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 4 - }, - "replacement": { - "x": 44 - }, - "upsert": true - } - }, - { - "deleteOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 5 - } - } - }, - { - "deleteMany": { - "namespace": "crud-tests.coll0", - "filter": { - "$and": [ - { - "_id": { - "$gt": 5 - } - }, - { - "_id": { - "$lte": 7 - } - } - ] - } - } - } - ], - "verboseResults": true - }, - "expectResult": { - "insertedCount": 1, - "upsertedCount": 1, - "matchedCount": 3, - "modifiedCount": 3, - "deletedCount": 3, - "insertResults": { - "0": { - "insertedId": 8 - } - }, - "updateResults": { - "1": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedId": { - "$$exists": false - } - }, - "2": { - "matchedCount": 2, - "modifiedCount": 2, - "upsertedId": { - "$$exists": false - } - }, - "3": { - "matchedCount": 1, - "modifiedCount": 0, - "upsertedId": 4 - } - }, - "deleteResults": { - "4": { - "deletedCount": 1 - }, - "5": { - "deletedCount": 2 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "ops": [ - { - "insert": 0, - "document": { - "_id": 8, - "x": 88 - } - }, - { - "update": 0, - "filter": { - "_id": 1 - }, - "updateMods": { - "$inc": { - "x": 1 - } - }, - "multi": false - }, - { - "update": 0, - "filter": { - "$and": [ - { - "_id": { - "$gt": 1 - } - }, - { - "_id": { - "$lte": 3 - } - } - ] - }, - "updateMods": { - "$inc": { - "x": 2 - } - }, - "multi": true - }, - { - "update": 0, - "filter": { - "_id": 4 - }, - "updateMods": { - "x": 44 - }, - "upsert": true, - "multi": false - }, - { - "delete": 0, - "filter": { - "_id": 5 - }, - "multi": false - }, - { - "delete": 0, - "filter": { - "$and": [ - { - "_id": { - "$gt": 5 - } - }, - { - "_id": { - "$lte": 7 - } - } - ] - }, - "multi": true - } - ], - "nsInfo": [ - { - "ns": "crud-tests.coll0" - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 12 - }, - { - "_id": 2, - "x": 24 - }, - { - "_id": 3, - "x": 35 - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 8, - "x": 88 - } - ] - } - ] - }, - { - "description": "client bulkWrite with verboseResults: false omits detailed results", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 8, - "x": 88 - } - } - }, - { - "updateOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - } - } - }, - { - "updateMany": { - "namespace": "crud-tests.coll0", - "filter": { - "$and": [ - { - "_id": { - "$gt": 1 - } - }, - { - "_id": { - "$lte": 3 - } - } - ] - }, - "update": { - "$inc": { - "x": 2 - } - } - } - }, - { - "replaceOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 4 - }, - "replacement": { - "x": 44 - }, - "upsert": true - } - }, - { - "deleteOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 5 - } - } - }, - { - "deleteMany": { - "namespace": "crud-tests.coll0", - "filter": { - "$and": [ - { - "_id": { - "$gt": 5 - } - }, - { - "_id": { - "$lte": 7 - } - } - ] - } - } - } - ], - "verboseResults": false - }, - "expectResult": { - "insertedCount": 1, - "upsertedCount": 1, - "matchedCount": 3, - "modifiedCount": 3, - "deletedCount": 3, - "insertResults": { - "$$unsetOrMatches": {} - }, - "updateResults": { - "$$unsetOrMatches": {} - }, - "deleteResults": { - "$$unsetOrMatches": {} - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": true, - "ordered": true, - "ops": [ - { - "insert": 0, - "document": { - "_id": 8, - "x": 88 - } - }, - { - "update": 0, - "filter": { - "_id": 1 - }, - "updateMods": { - "$inc": { - "x": 1 - } - }, - "multi": false - }, - { - "update": 0, - "filter": { - "$and": [ - { - "_id": { - "$gt": 1 - } - }, - { - "_id": { - "$lte": 3 - } - } - ] - }, - "updateMods": { - "$inc": { - "x": 2 - } - }, - "multi": true - }, - { - "update": 0, - "filter": { - "_id": 4 - }, - "updateMods": { - "x": 44 - }, - "upsert": true, - "multi": false - }, - { - "delete": 0, - "filter": { - "_id": 5 - }, - "multi": false - }, - { - "delete": 0, - "filter": { - "$and": [ - { - "_id": { - "$gt": 5 - } - }, - { - "_id": { - "$lte": 7 - } - } - ] - }, - "multi": true - } - ], - "nsInfo": [ - { - "ns": "crud-tests.coll0" - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 12 - }, - { - "_id": 2, - "x": 24 - }, - { - "_id": 3, - "x": 35 - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 8, - "x": 88 - } - ] - } - ] - }, - { - "description": "client bulkWrite defaults to verboseResults: false", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "crud-tests.coll0", - "document": { - "_id": 8, - "x": 88 - } - } - }, - { - "updateOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - } - } - }, - { - "updateMany": { - "namespace": "crud-tests.coll0", - "filter": { - "$and": [ - { - "_id": { - "$gt": 1 - } - }, - { - "_id": { - "$lte": 3 - } - } - ] - }, - "update": { - "$inc": { - "x": 2 - } - } - } - }, - { - "replaceOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 4 - }, - "replacement": { - "x": 44 - }, - "upsert": true - } - }, - { - "deleteOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 5 - } - } - }, - { - "deleteMany": { - "namespace": "crud-tests.coll0", - "filter": { - "$and": [ - { - "_id": { - "$gt": 5 - } - }, - { - "_id": { - "$lte": 7 - } - } - ] - } - } - } - ] - }, - "expectResult": { - "insertedCount": 1, - "upsertedCount": 1, - "matchedCount": 3, - "modifiedCount": 3, - "deletedCount": 3, - "insertResults": { - "$$unsetOrMatches": {} - }, - "updateResults": { - "$$unsetOrMatches": {} - }, - "deleteResults": { - "$$unsetOrMatches": {} - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": true, - "ordered": true, - "ops": [ - { - "insert": 0, - "document": { - "_id": 8, - "x": 88 - } - }, - { - "update": 0, - "filter": { - "_id": 1 - }, - "updateMods": { - "$inc": { - "x": 1 - } - }, - "multi": false - }, - { - "update": 0, - "filter": { - "$and": [ - { - "_id": { - "$gt": 1 - } - }, - { - "_id": { - "$lte": 3 - } - } - ] - }, - "updateMods": { - "$inc": { - "x": 2 - } - }, - "multi": true - }, - { - "update": 0, - "filter": { - "_id": 4 - }, - "updateMods": { - "x": 44 - }, - "upsert": true, - "multi": false - }, - { - "delete": 0, - "filter": { - "_id": 5 - }, - "multi": false - }, - { - "delete": 0, - "filter": { - "$and": [ - { - "_id": { - "$gt": 5 - } - }, - { - "_id": { - "$lte": 7 - } - } - ] - }, - "multi": true - } - ], - "nsInfo": [ - { - "ns": "crud-tests.coll0" - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 12 - }, - { - "_id": 2, - "x": 24 - }, - { - "_id": 3, - "x": 35 - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 8, - "x": 88 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/client-bulkWrite-results.yml b/testdata/crud/unified/client-bulkWrite-results.yml deleted file mode 100644 index 86cb5346ae..0000000000 --- a/testdata/crud/unified/client-bulkWrite-results.yml +++ /dev/null @@ -1,312 +0,0 @@ -description: "client bulkWrite results" -schemaVersion: "1.4" # To support `serverless: forbid` -runOnRequirements: - - minServerVersion: "8.0" - serverless: forbid - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - - { _id: 5, x: 55 } - - { _id: 6, x: 66 } - - { _id: 7, x: 77 } - -_yamlAnchors: - namespace: &namespace "crud-tests.coll0" - -tests: - - description: "client bulkWrite with verboseResults: true returns detailed results" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: { _id: 8, x: 88 } - - updateOne: - namespace: *namespace - filter: { _id: 1 } - update: { $inc: { x: 1 } } - - updateMany: - namespace: *namespace - filter: - $and: [ { _id: { $gt: 1 } }, { _id: { $lte: 3 } } ] - update: { $inc: { x: 2 } } - - replaceOne: - namespace: *namespace - filter: { _id: 4 } - replacement: { x: 44 } - upsert: true - - deleteOne: - namespace: *namespace - filter: { _id: 5 } - - deleteMany: - namespace: *namespace - filter: - $and: [ { _id: { $gt: 5 } }, { _id: { $lte: 7 } } ] - verboseResults: true - expectResult: - insertedCount: 1 - upsertedCount: 1 - matchedCount: 3 - modifiedCount: 3 - deletedCount: 3 - insertResults: - 0: - insertedId: 8 - updateResults: - 1: - matchedCount: 1 - modifiedCount: 1 - upsertedId: { $$exists: false } - 2: - matchedCount: 2 - modifiedCount: 2 - upsertedId: { $$exists: false } - 3: - matchedCount: 1 - modifiedCount: 0 - upsertedId: 4 - deleteResults: - 4: - deletedCount: 1 - 5: - deletedCount: 2 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - ops: - - insert: 0 - document: { _id: 8, x: 88 } - - update: 0 - filter: { _id: 1 } - updateMods: { $inc: { x: 1 } } - multi: false - - update: 0 - filter: - $and: [ { _id: { $gt: 1 } }, { _id: { $lte: 3 } } ] - updateMods: { $inc: { x: 2 } } - multi: true - - update: 0 - filter: { _id: 4 } - updateMods: { x: 44 } - upsert: true - multi: false - - delete: 0 - filter: { _id: 5 } - multi: false - - delete: 0 - filter: - $and: [ { _id: { $gt: 5 } }, { _id: { $lte: 7 } } ] - multi: true - nsInfo: - - ns: *namespace - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 12 } - - { _id: 2, x: 24 } - - { _id: 3, x: 35 } - - { _id: 4, x: 44 } - - { _id: 8, x: 88 } - - description: "client bulkWrite with verboseResults: false omits detailed results" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: { _id: 8, x: 88 } - - updateOne: - namespace: *namespace - filter: { _id: 1 } - update: { $inc: { x: 1 } } - - updateMany: - namespace: *namespace - filter: - $and: [ { _id: { $gt: 1 } }, { _id: { $lte: 3 } } ] - update: { $inc: { x: 2 } } - - replaceOne: - namespace: *namespace - filter: { _id: 4 } - replacement: { x: 44 } - upsert: true - - deleteOne: - namespace: *namespace - filter: { _id: 5 } - - deleteMany: - namespace: *namespace - filter: - $and: [ { _id: { $gt: 5 } }, { _id: { $lte: 7 } } ] - verboseResults: false - expectResult: - insertedCount: 1 - upsertedCount: 1 - matchedCount: 3 - modifiedCount: 3 - deletedCount: 3 - insertResults: - $$unsetOrMatches: {} - updateResults: - $$unsetOrMatches: {} - deleteResults: - $$unsetOrMatches: {} - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: true - ordered: true - ops: - - insert: 0 - document: { _id: 8, x: 88 } - - update: 0 - filter: { _id: 1 } - updateMods: { $inc: { x: 1 } } - multi: false - - update: 0 - filter: - $and: [ { _id: { $gt: 1 } }, { _id: { $lte: 3 } } ] - updateMods: { $inc: { x: 2 } } - multi: true - - update: 0 - filter: { _id: 4 } - updateMods: { x: 44 } - upsert: true - multi: false - - delete: 0 - filter: { _id: 5 } - multi: false - - delete: 0 - filter: - $and: [ { _id: { $gt: 5 } }, { _id: { $lte: 7 } } ] - multi: true - nsInfo: - - ns: *namespace - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 12 } - - { _id: 2, x: 24 } - - { _id: 3, x: 35 } - - { _id: 4, x: 44 } - - { _id: 8, x: 88 } - - description: "client bulkWrite defaults to verboseResults: false" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: { _id: 8, x: 88 } - - updateOne: - namespace: *namespace - filter: { _id: 1 } - update: { $inc: { x: 1 } } - - updateMany: - namespace: *namespace - filter: - $and: [ { _id: { $gt: 1 } }, { _id: { $lte: 3 } } ] - update: { $inc: { x: 2 } } - - replaceOne: - namespace: *namespace - filter: { _id: 4 } - replacement: { x: 44 } - upsert: true - - deleteOne: - namespace: *namespace - filter: { _id: 5 } - - deleteMany: - namespace: *namespace - filter: - $and: [ { _id: { $gt: 5 } }, { _id: { $lte: 7 } } ] - expectResult: - insertedCount: 1 - upsertedCount: 1 - matchedCount: 3 - modifiedCount: 3 - deletedCount: 3 - insertResults: - $$unsetOrMatches: {} - updateResults: - $$unsetOrMatches: {} - deleteResults: - $$unsetOrMatches: {} - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: true - ordered: true - ops: - - insert: 0 - document: { _id: 8, x: 88 } - - update: 0 - filter: { _id: 1 } - updateMods: { $inc: { x: 1 } } - multi: false - - update: 0 - filter: - $and: [ { _id: { $gt: 1 } }, { _id: { $lte: 3 } } ] - updateMods: { $inc: { x: 2 } } - multi: true - - update: 0 - filter: { _id: 4 } - updateMods: { x: 44 } - upsert: true - multi: false - - delete: 0 - filter: { _id: 5 } - multi: false - - delete: 0 - filter: - $and: [ { _id: { $gt: 5 } }, { _id: { $lte: 7 } } ] - multi: true - nsInfo: - - ns: *namespace - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 12 } - - { _id: 2, x: 24 } - - { _id: 3, x: 35 } - - { _id: 4, x: 44 } - - { _id: 8, x: 88 } diff --git a/testdata/crud/unified/client-bulkWrite-update-options.json b/testdata/crud/unified/client-bulkWrite-update-options.json deleted file mode 100644 index ce6241c681..0000000000 --- a/testdata/crud/unified/client-bulkWrite-update-options.json +++ /dev/null @@ -1,949 +0,0 @@ -{ - "description": "client bulkWrite update options", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "8.0", - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "array": [ - 1, - 2, - 3 - ] - }, - { - "_id": 2, - "array": [ - 1, - 2, - 3 - ] - }, - { - "_id": 3, - "array": [ - 1, - 2, - 3 - ] - }, - { - "_id": 4, - "array": [ - 1, - 2, - 3 - ] - } - ] - } - ], - "_yamlAnchors": { - "namespace": "crud-tests.coll0", - "collation": { - "locale": "simple" - }, - "hint": "_id_" - }, - "tests": [ - { - "description": "client bulkWrite update with arrayFilters", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "updateOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 1 - }, - "update": { - "$set": { - "array.$[i]": 4 - } - }, - "arrayFilters": [ - { - "i": { - "$gte": 2 - } - } - ] - } - }, - { - "updateMany": { - "namespace": "crud-tests.coll0", - "filter": { - "$and": [ - { - "_id": { - "$gt": 1 - } - }, - { - "_id": { - "$lte": 3 - } - } - ] - }, - "update": { - "$set": { - "array.$[i]": 5 - } - }, - "arrayFilters": [ - { - "i": { - "$gte": 2 - } - } - ] - } - } - ], - "verboseResults": true - }, - "expectResult": { - "insertedCount": 0, - "upsertedCount": 0, - "matchedCount": 3, - "modifiedCount": 3, - "deletedCount": 0, - "insertResults": {}, - "updateResults": { - "0": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedId": { - "$$exists": false - } - }, - "1": { - "matchedCount": 2, - "modifiedCount": 2, - "upsertedId": { - "$$exists": false - } - } - }, - "deleteResults": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "ops": [ - { - "update": 0, - "filter": { - "_id": 1 - }, - "updateMods": { - "$set": { - "array.$[i]": 4 - } - }, - "arrayFilters": [ - { - "i": { - "$gte": 2 - } - } - ], - "multi": false - }, - { - "update": 0, - "filter": { - "$and": [ - { - "_id": { - "$gt": 1 - } - }, - { - "_id": { - "$lte": 3 - } - } - ] - }, - "updateMods": { - "$set": { - "array.$[i]": 5 - } - }, - "arrayFilters": [ - { - "i": { - "$gte": 2 - } - } - ], - "multi": true - } - ], - "nsInfo": [ - { - "ns": "crud-tests.coll0" - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "databaseName": "crud-tests", - "collectionName": "coll0", - "documents": [ - { - "_id": 1, - "array": [ - 1, - 4, - 4 - ] - }, - { - "_id": 2, - "array": [ - 1, - 5, - 5 - ] - }, - { - "_id": 3, - "array": [ - 1, - 5, - 5 - ] - }, - { - "_id": 4, - "array": [ - 1, - 2, - 3 - ] - } - ] - } - ] - }, - { - "description": "client bulkWrite update with collation", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "updateOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 1 - }, - "update": { - "$set": { - "array": [ - 1, - 2, - 4 - ] - } - }, - "collation": { - "locale": "simple" - } - } - }, - { - "updateMany": { - "namespace": "crud-tests.coll0", - "filter": { - "$and": [ - { - "_id": { - "$gt": 1 - } - }, - { - "_id": { - "$lte": 3 - } - } - ] - }, - "update": { - "$set": { - "array": [ - 1, - 2, - 5 - ] - } - }, - "collation": { - "locale": "simple" - } - } - }, - { - "replaceOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 4 - }, - "replacement": { - "array": [ - 1, - 2, - 6 - ] - }, - "collation": { - "locale": "simple" - } - } - } - ], - "verboseResults": true - }, - "expectResult": { - "insertedCount": 0, - "upsertedCount": 0, - "matchedCount": 4, - "modifiedCount": 4, - "deletedCount": 0, - "insertResults": {}, - "updateResults": { - "0": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedId": { - "$$exists": false - } - }, - "1": { - "matchedCount": 2, - "modifiedCount": 2, - "upsertedId": { - "$$exists": false - } - }, - "2": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedId": { - "$$exists": false - } - } - }, - "deleteResults": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "ops": [ - { - "update": 0, - "filter": { - "_id": 1 - }, - "updateMods": { - "$set": { - "array": [ - 1, - 2, - 4 - ] - } - }, - "collation": { - "locale": "simple" - }, - "multi": false - }, - { - "update": 0, - "filter": { - "$and": [ - { - "_id": { - "$gt": 1 - } - }, - { - "_id": { - "$lte": 3 - } - } - ] - }, - "updateMods": { - "$set": { - "array": [ - 1, - 2, - 5 - ] - } - }, - "collation": { - "locale": "simple" - }, - "multi": true - }, - { - "update": 0, - "filter": { - "_id": 4 - }, - "updateMods": { - "array": [ - 1, - 2, - 6 - ] - }, - "collation": { - "locale": "simple" - }, - "multi": false - } - ], - "nsInfo": [ - { - "ns": "crud-tests.coll0" - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "databaseName": "crud-tests", - "collectionName": "coll0", - "documents": [ - { - "_id": 1, - "array": [ - 1, - 2, - 4 - ] - }, - { - "_id": 2, - "array": [ - 1, - 2, - 5 - ] - }, - { - "_id": 3, - "array": [ - 1, - 2, - 5 - ] - }, - { - "_id": 4, - "array": [ - 1, - 2, - 6 - ] - } - ] - } - ] - }, - { - "description": "client bulkWrite update with hint", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "updateOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 1 - }, - "update": { - "$set": { - "array": [ - 1, - 2, - 4 - ] - } - }, - "hint": "_id_" - } - }, - { - "updateMany": { - "namespace": "crud-tests.coll0", - "filter": { - "$and": [ - { - "_id": { - "$gt": 1 - } - }, - { - "_id": { - "$lte": 3 - } - } - ] - }, - "update": { - "$set": { - "array": [ - 1, - 2, - 5 - ] - } - }, - "hint": "_id_" - } - }, - { - "replaceOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 4 - }, - "replacement": { - "array": [ - 1, - 2, - 6 - ] - }, - "hint": "_id_" - } - } - ], - "verboseResults": true - }, - "expectResult": { - "insertedCount": 0, - "upsertedCount": 0, - "matchedCount": 4, - "modifiedCount": 4, - "deletedCount": 0, - "insertResults": {}, - "updateResults": { - "0": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedId": { - "$$exists": false - } - }, - "1": { - "matchedCount": 2, - "modifiedCount": 2, - "upsertedId": { - "$$exists": false - } - }, - "2": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedId": { - "$$exists": false - } - } - }, - "deleteResults": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "ops": [ - { - "update": 0, - "filter": { - "_id": 1 - }, - "updateMods": { - "$set": { - "array": [ - 1, - 2, - 4 - ] - } - }, - "hint": "_id_", - "multi": false - }, - { - "update": 0, - "filter": { - "$and": [ - { - "_id": { - "$gt": 1 - } - }, - { - "_id": { - "$lte": 3 - } - } - ] - }, - "updateMods": { - "$set": { - "array": [ - 1, - 2, - 5 - ] - } - }, - "hint": "_id_", - "multi": true - }, - { - "update": 0, - "filter": { - "_id": 4 - }, - "updateMods": { - "array": [ - 1, - 2, - 6 - ] - }, - "hint": "_id_", - "multi": false - } - ], - "nsInfo": [ - { - "ns": "crud-tests.coll0" - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "databaseName": "crud-tests", - "collectionName": "coll0", - "documents": [ - { - "_id": 1, - "array": [ - 1, - 2, - 4 - ] - }, - { - "_id": 2, - "array": [ - 1, - 2, - 5 - ] - }, - { - "_id": 3, - "array": [ - 1, - 2, - 5 - ] - }, - { - "_id": 4, - "array": [ - 1, - 2, - 6 - ] - } - ] - } - ] - }, - { - "description": "client bulkWrite update with upsert", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "updateOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 5 - }, - "update": { - "$set": { - "array": [ - 1, - 2, - 4 - ] - } - }, - "upsert": true - } - }, - { - "replaceOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 6 - }, - "replacement": { - "array": [ - 1, - 2, - 6 - ] - }, - "upsert": true - } - } - ], - "verboseResults": true - }, - "expectResult": { - "insertedCount": 0, - "upsertedCount": 2, - "matchedCount": 0, - "modifiedCount": 0, - "deletedCount": 0, - "insertResults": {}, - "updateResults": { - "0": { - "matchedCount": 1, - "modifiedCount": 0, - "upsertedId": 5 - }, - "1": { - "matchedCount": 1, - "modifiedCount": 0, - "upsertedId": 6 - } - }, - "deleteResults": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "ops": [ - { - "update": 0, - "filter": { - "_id": 5 - }, - "updateMods": { - "$set": { - "array": [ - 1, - 2, - 4 - ] - } - }, - "upsert": true, - "multi": false - }, - { - "update": 0, - "filter": { - "_id": 6 - }, - "updateMods": { - "array": [ - 1, - 2, - 6 - ] - }, - "upsert": true, - "multi": false - } - ], - "nsInfo": [ - { - "ns": "crud-tests.coll0" - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "databaseName": "crud-tests", - "collectionName": "coll0", - "documents": [ - { - "_id": 1, - "array": [ - 1, - 2, - 3 - ] - }, - { - "_id": 2, - "array": [ - 1, - 2, - 3 - ] - }, - { - "_id": 3, - "array": [ - 1, - 2, - 3 - ] - }, - { - "_id": 4, - "array": [ - 1, - 2, - 3 - ] - }, - { - "_id": 5, - "array": [ - 1, - 2, - 4 - ] - }, - { - "_id": 6, - "array": [ - 1, - 2, - 6 - ] - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/client-bulkWrite-update-options.yml b/testdata/crud/unified/client-bulkWrite-update-options.yml deleted file mode 100644 index c5cc20d480..0000000000 --- a/testdata/crud/unified/client-bulkWrite-update-options.yml +++ /dev/null @@ -1,338 +0,0 @@ -description: "client bulkWrite update options" -schemaVersion: "1.4" # To support `serverless: forbid` -runOnRequirements: - - minServerVersion: "8.0" - serverless: forbid - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, array: [ 1, 2, 3 ] } - - { _id: 2, array: [ 1, 2, 3 ] } - - { _id: 3, array: [ 1, 2, 3 ] } - - { _id: 4, array: [ 1, 2, 3 ] } - -_yamlAnchors: - namespace: &namespace "crud-tests.coll0" - collation: &collation { "locale": "simple" } - hint: &hint _id_ - -tests: - - description: "client bulkWrite update with arrayFilters" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - updateOne: - namespace: *namespace - filter: { _id: 1 } - update: - $set: - array.$[i]: 4 - arrayFilters: [ i: { $gte: 2 } ] - - updateMany: - namespace: *namespace - filter: - $and: [ { _id: { $gt: 1 } }, { _id: { $lte: 3 } } ] - update: - $set: - array.$[i]: 5 - arrayFilters: [ i: { $gte: 2 } ] - verboseResults: true - expectResult: - insertedCount: 0 - upsertedCount: 0 - matchedCount: 3 - modifiedCount: 3 - deletedCount: 0 - insertResults: {} - updateResults: - 0: - matchedCount: 1 - modifiedCount: 1 - upsertedId: { $$exists: false } - 1: - matchedCount: 2 - modifiedCount: 2 - upsertedId: { $$exists: false } - deleteResults: {} - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - ops: - - update: 0 - filter: { _id: 1 } - updateMods: - $set: - array.$[i]: 4 - arrayFilters: [ i: { $gte: 2 } ] - multi: false - - update: 0 - filter: - $and: [ { _id: { $gt: 1 } }, { _id: { $lte: 3 } } ] - updateMods: - $set: - array.$[i]: 5 - arrayFilters: [ i: { $gte: 2 } ] - multi: true - nsInfo: - - ns: *namespace - outcome: - - databaseName: *database0Name - collectionName: *collection0Name - documents: - - { _id: 1, array: [ 1, 4, 4 ] } - - { _id: 2, array: [ 1, 5, 5 ] } - - { _id: 3, array: [ 1, 5, 5 ] } - - { _id: 4, array: [ 1, 2, 3 ] } - - description: "client bulkWrite update with collation" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - updateOne: - namespace: *namespace - filter: { _id: 1 } - update: { $set: { array: [ 1, 2, 4 ] } } - collation: *collation - - updateMany: - namespace: *namespace - filter: - $and: [ { _id: { $gt: 1 } }, { _id: { $lte: 3 } } ] - update: { $set: { array: [ 1, 2, 5 ] } } - collation: *collation - - replaceOne: - namespace: *namespace - filter: { _id: 4 } - replacement: { array: [ 1, 2, 6 ] } - collation: *collation - verboseResults: true - expectResult: - insertedCount: 0 - upsertedCount: 0 - matchedCount: 4 - modifiedCount: 4 - deletedCount: 0 - insertResults: {} - updateResults: - 0: - matchedCount: 1 - modifiedCount: 1 - upsertedId: { $$exists: false } - 1: - matchedCount: 2 - modifiedCount: 2 - upsertedId: { $$exists: false } - 2: - matchedCount: 1 - modifiedCount: 1 - upsertedId: { $$exists: false } - deleteResults: {} - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - ops: - - update: 0 - filter: { _id: 1 } - updateMods: { $set: { array: [ 1, 2, 4 ] } } - collation: *collation - multi: false - - update: 0 - filter: - $and: [ { _id: { $gt: 1 } }, { _id: { $lte: 3 } } ] - updateMods: { $set: { array: [ 1, 2, 5 ] } } - collation: *collation - multi: true - - update: 0 - filter: { _id: 4 } - updateMods: { array: [ 1, 2, 6 ] } - collation: *collation - multi: false - nsInfo: - - ns: *namespace - outcome: - - databaseName: *database0Name - collectionName: *collection0Name - documents: - - { _id: 1, array: [ 1, 2, 4 ] } - - { _id: 2, array: [ 1, 2, 5 ] } - - { _id: 3, array: [ 1, 2, 5 ] } - - { _id: 4, array: [ 1, 2, 6 ] } - - description: "client bulkWrite update with hint" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - updateOne: - namespace: *namespace - filter: { _id: 1 } - update: { $set: { array: [ 1, 2, 4 ] } } - hint: *hint - - updateMany: - namespace: *namespace - filter: - $and: [ { _id: { $gt: 1 } }, { _id: { $lte: 3 } } ] - update: { $set: { array: [ 1, 2, 5 ] } } - hint: *hint - - replaceOne: - namespace: *namespace - filter: { _id: 4 } - replacement: { array: [ 1, 2, 6 ] } - hint: *hint - verboseResults: true - expectResult: - insertedCount: 0 - upsertedCount: 0 - matchedCount: 4 - modifiedCount: 4 - deletedCount: 0 - insertResults: {} - updateResults: - 0: - matchedCount: 1 - modifiedCount: 1 - upsertedId: { $$exists: false } - 1: - matchedCount: 2 - modifiedCount: 2 - upsertedId: { $$exists: false } - 2: - matchedCount: 1 - modifiedCount: 1 - upsertedId: { $$exists: false } - deleteResults: {} - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - ops: - - update: 0 - filter: { _id: 1 } - updateMods: { $set: { array: [ 1, 2, 4 ] } } - hint: *hint - multi: false - - update: 0 - filter: - $and: [ { _id: { $gt: 1 } }, { _id: { $lte: 3 } } ] - updateMods: { $set: { array: [ 1, 2, 5 ] } } - hint: *hint - multi: true - - update: 0 - filter: { _id: 4 } - updateMods: { array: [ 1, 2, 6 ] } - hint: *hint - multi: false - nsInfo: - - ns: *namespace - outcome: - - databaseName: *database0Name - collectionName: *collection0Name - documents: - - { _id: 1, array: [ 1, 2, 4 ] } - - { _id: 2, array: [ 1, 2, 5 ] } - - { _id: 3, array: [ 1, 2, 5 ] } - - { _id: 4, array: [ 1, 2, 6 ] } - - description: "client bulkWrite update with upsert" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - updateOne: - namespace: *namespace - filter: { _id: 5 } - update: { $set: { array: [ 1, 2, 4 ] } } - upsert: true - - replaceOne: - namespace: *namespace - filter: { _id: 6 } - replacement: { array: [ 1, 2, 6 ] } - upsert: true - verboseResults: true - expectResult: - insertedCount: 0 - upsertedCount: 2 - matchedCount: 0 - modifiedCount: 0 - deletedCount: 0 - insertResults: {} - updateResults: - 0: - matchedCount: 1 - modifiedCount: 0 - upsertedId: 5 - 1: - matchedCount: 1 - modifiedCount: 0 - upsertedId: 6 - deleteResults: {} - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - ops: - - update: 0 - filter: { _id: 5 } - updateMods: { $set: { array: [ 1, 2, 4 ] } } - upsert: true - multi: false - - update: 0 - filter: { _id: 6 } - updateMods: { array: [ 1, 2, 6 ] } - upsert: true - multi: false - nsInfo: - - ns: *namespace - outcome: - - databaseName: *database0Name - collectionName: *collection0Name - documents: - - { _id: 1, array: [ 1, 2, 3 ] } - - { _id: 2, array: [ 1, 2, 3 ] } - - { _id: 3, array: [ 1, 2, 3 ] } - - { _id: 4, array: [ 1, 2, 3 ] } - - { _id: 5, array: [ 1, 2, 4 ] } - - { _id: 6, array: [ 1, 2, 6 ] } diff --git a/testdata/crud/unified/client-bulkWrite-update-pipeline.json b/testdata/crud/unified/client-bulkWrite-update-pipeline.json deleted file mode 100644 index 9dba5ee6c5..0000000000 --- a/testdata/crud/unified/client-bulkWrite-update-pipeline.json +++ /dev/null @@ -1,258 +0,0 @@ -{ - "description": "client bulkWrite update pipeline", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "8.0", - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 1 - }, - { - "_id": 2, - "x": 2 - } - ] - } - ], - "_yamlAnchors": { - "namespace": "crud-tests.coll0" - }, - "tests": [ - { - "description": "client bulkWrite updateOne with pipeline", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "updateOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 1 - }, - "update": [ - { - "$addFields": { - "foo": 1 - } - } - ] - } - } - ], - "verboseResults": true - }, - "expectResult": { - "insertedCount": 0, - "upsertedCount": 0, - "matchedCount": 1, - "modifiedCount": 1, - "deletedCount": 0, - "insertResults": {}, - "updateResults": { - "0": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedId": { - "$$exists": false - } - } - }, - "deleteResults": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "ops": [ - { - "update": 0, - "filter": { - "_id": 1 - }, - "updateMods": [ - { - "$addFields": { - "foo": 1 - } - } - ], - "multi": false - } - ], - "nsInfo": [ - { - "ns": "crud-tests.coll0" - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "databaseName": "crud-tests", - "collectionName": "coll0", - "documents": [ - { - "_id": 1, - "x": 1, - "foo": 1 - }, - { - "_id": 2, - "x": 2 - } - ] - } - ] - }, - { - "description": "client bulkWrite updateMany with pipeline", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "updateMany": { - "namespace": "crud-tests.coll0", - "filter": {}, - "update": [ - { - "$addFields": { - "foo": 1 - } - } - ] - } - } - ], - "verboseResults": true - }, - "expectResult": { - "insertedCount": 0, - "upsertedCount": 0, - "matchedCount": 2, - "modifiedCount": 2, - "deletedCount": 0, - "insertResults": {}, - "updateResults": { - "0": { - "matchedCount": 2, - "modifiedCount": 2, - "upsertedId": { - "$$exists": false - } - } - }, - "deleteResults": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "ops": [ - { - "update": 0, - "filter": {}, - "updateMods": [ - { - "$addFields": { - "foo": 1 - } - } - ], - "multi": true - } - ], - "nsInfo": [ - { - "ns": "crud-tests.coll0" - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "databaseName": "crud-tests", - "collectionName": "coll0", - "documents": [ - { - "_id": 1, - "x": 1, - "foo": 1 - }, - { - "_id": 2, - "x": 2, - "foo": 1 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/client-bulkWrite-update-pipeline.yml b/testdata/crud/unified/client-bulkWrite-update-pipeline.yml deleted file mode 100644 index c90e93b47c..0000000000 --- a/testdata/crud/unified/client-bulkWrite-update-pipeline.yml +++ /dev/null @@ -1,133 +0,0 @@ -description: "client bulkWrite update pipeline" -schemaVersion: "1.4" # To support `serverless: forbid` -runOnRequirements: - - minServerVersion: "8.0" - serverless: forbid - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - {_id: 1, x: 1} - - {_id: 2, x: 2} - -_yamlAnchors: - namespace: &namespace "crud-tests.coll0" - -tests: - - description: "client bulkWrite updateOne with pipeline" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - updateOne: - namespace: *namespace - filter: { _id: 1 } - update: - - $addFields: - foo: 1 - verboseResults: true - expectResult: - insertedCount: 0 - upsertedCount: 0 - matchedCount: 1 - modifiedCount: 1 - deletedCount: 0 - insertResults: {} - updateResults: - 0: - matchedCount: 1 - modifiedCount: 1 - upsertedId: { "$$exists": false } - deleteResults: {} - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - ops: - - update: 0 - filter: { _id: 1 } - updateMods: - - $addFields: - foo: 1 - multi: false - nsInfo: - - ns: *namespace - outcome: - - databaseName: *database0Name - collectionName: *collection0Name - documents: - - {_id: 1, x: 1, foo: 1} - - {_id: 2, x: 2 } - - - description: "client bulkWrite updateMany with pipeline" - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - updateMany: - namespace: *namespace - filter: {} - update: - - $addFields: - foo: 1 - verboseResults: true - expectResult: - insertedCount: 0 - upsertedCount: 0 - matchedCount: 2 - modifiedCount: 2 - deletedCount: 0 - insertResults: {} - updateResults: - 0: - matchedCount: 2 - modifiedCount: 2 - upsertedId: { "$$exists": false } - deleteResults: {} - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - ops: - - update: 0 - filter: { } - updateMods: - - $addFields: - foo: 1 - multi: true - nsInfo: - - ns: *namespace - outcome: - - databaseName: *database0Name - collectionName: *collection0Name - documents: - - {_id: 1, x: 1, foo: 1} - - {_id: 2, x: 2, foo: 1} diff --git a/testdata/crud/unified/client-bulkWrite-update-validation.json b/testdata/crud/unified/client-bulkWrite-update-validation.json deleted file mode 100644 index 617e711338..0000000000 --- a/testdata/crud/unified/client-bulkWrite-update-validation.json +++ /dev/null @@ -1,216 +0,0 @@ -{ - "description": "client-bulkWrite-update-validation", - "schemaVersion": "1.1", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "_yamlAnchors": { - "namespace": "crud-tests.coll0" - }, - "tests": [ - { - "description": "client bulkWrite replaceOne prohibits atomic modifiers", - "operations": [ - { - "name": "clientBulkWrite", - "object": "client0", - "arguments": { - "models": [ - { - "replaceOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 1 - }, - "replacement": { - "$set": { - "x": 22 - } - } - } - } - ] - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "client bulkWrite updateOne requires atomic modifiers", - "operations": [ - { - "name": "clientBulkWrite", - "object": "client0", - "arguments": { - "models": [ - { - "updateOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": 1 - }, - "update": { - "x": 22 - } - } - } - ] - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "client bulkWrite updateMany requires atomic modifiers", - "operations": [ - { - "name": "clientBulkWrite", - "object": "client0", - "arguments": { - "models": [ - { - "updateMany": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "x": 44 - } - } - } - ] - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/client-bulkWrite-update-validation.yml b/testdata/crud/unified/client-bulkWrite-update-validation.yml deleted file mode 100644 index 478554c322..0000000000 --- a/testdata/crud/unified/client-bulkWrite-update-validation.yml +++ /dev/null @@ -1,79 +0,0 @@ -description: "client-bulkWrite-update-validation" - -schemaVersion: "1.1" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -_yamlAnchors: - namespace: &namespace "crud-tests.coll0" - -tests: - - description: "client bulkWrite replaceOne prohibits atomic modifiers" - operations: - - name: clientBulkWrite - object: *client0 - arguments: - models: - - replaceOne: - namespace: *namespace - filter: { _id: 1 } - replacement: { $set: { x: 22 } } - expectError: - isClientError: true - expectEvents: - - client: *client0 - events: [] - outcome: *initialData - - - description: "client bulkWrite updateOne requires atomic modifiers" - operations: - - name: clientBulkWrite - object: *client0 - arguments: - models: - - updateOne: - namespace: *namespace - filter: { _id: 1 } - update: { x: 22 } - expectError: - isClientError: true - expectEvents: - - client: *client0 - events: [] - outcome: *initialData - - - description: "client bulkWrite updateMany requires atomic modifiers" - operations: - - name: clientBulkWrite - object: *client0 - arguments: - models: - - updateMany: - namespace: *namespace - filter: { _id: { $gt: 1 } } - update: { x: 44 } - expectError: - isClientError: true - expectEvents: - - client: *client0 - events: [] - outcome: *initialData diff --git a/testdata/crud/unified/client-bulkWrite-updateOne-sort.json b/testdata/crud/unified/client-bulkWrite-updateOne-sort.json deleted file mode 100644 index ef75dcb374..0000000000 --- a/testdata/crud/unified/client-bulkWrite-updateOne-sort.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "description": "client bulkWrite updateOne-sort", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "8.0", - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent", - "commandSucceededEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "_yamlAnchors": { - "namespace": "crud-tests.coll0" - }, - "tests": [ - { - "description": "client bulkWrite updateOne with sort option", - "operations": [ - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "updateOne": { - "namespace": "crud-tests.coll0", - "filter": { - "_id": { - "$gt": 1 - } - }, - "sort": { - "_id": -1 - }, - "update": { - "$inc": { - "x": 1 - } - } - } - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "ops": [ - { - "update": 0, - "filter": { - "_id": { - "$gt": 1 - } - }, - "updateMods": { - "$inc": { - "x": 1 - } - }, - "sort": { - "_id": -1 - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "nsInfo": [ - { - "ns": "crud-tests.coll0" - } - ] - } - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "nErrors": 0, - "nMatched": 1, - "nModified": 1 - }, - "commandName": "bulkWrite" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 34 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/client-bulkWrite-updateOne-sort.yml b/testdata/crud/unified/client-bulkWrite-updateOne-sort.yml deleted file mode 100644 index 73a265d6b8..0000000000 --- a/testdata/crud/unified/client-bulkWrite-updateOne-sort.yml +++ /dev/null @@ -1,77 +0,0 @@ -description: client bulkWrite updateOne-sort - -schemaVersion: "1.4" - -runOnRequirements: - - minServerVersion: "8.0" - serverless: forbid # Serverless does not support bulkWrite: CLOUDP-256344. - -createEntities: - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - commandSucceededEvent - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -_yamlAnchors: - namespace: &namespace "crud-tests.coll0" - -tests: - - description: client bulkWrite updateOne with sort option - operations: - - object: *client0 - name: clientBulkWrite - arguments: - models: - - updateOne: - namespace: *namespace - filter: { _id: { $gt: 1 } } - sort: { _id: -1 } - update: { $inc: { x: 1 } } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - ops: - - update: 0 - filter: { _id: { $gt: 1 } } - updateMods: { $inc: { x: 1 } } - sort: { _id: -1 } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - nsInfo: - - ns: *namespace - - commandSucceededEvent: - reply: - ok: 1 - nErrors: 0 - nMatched: 1 - nModified: 1 - commandName: bulkWrite - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 34 } diff --git a/testdata/crud/unified/countDocuments-comment.json b/testdata/crud/unified/countDocuments-comment.json deleted file mode 100644 index e6c7ae8170..0000000000 --- a/testdata/crud/unified/countDocuments-comment.json +++ /dev/null @@ -1,208 +0,0 @@ -{ - "description": "countDocuments-comment", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "countDocuments-comments-test" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "countDocuments-comments-test", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "countDocuments with document comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4.0" - } - ], - "operations": [ - { - "name": "countDocuments", - "object": "collection0", - "arguments": { - "filter": {}, - "comment": { - "key": "value" - } - }, - "expectResult": 3 - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "coll0", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ], - "comment": { - "key": "value" - } - }, - "commandName": "aggregate", - "databaseName": "countDocuments-comments-test" - } - } - ] - } - ] - }, - { - "description": "countDocuments with string comment", - "runOnRequirements": [ - { - "minServerVersion": "3.6.0" - } - ], - "operations": [ - { - "name": "countDocuments", - "object": "collection0", - "arguments": { - "filter": {}, - "comment": "comment" - }, - "expectResult": 3 - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "coll0", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ], - "comment": "comment" - }, - "commandName": "aggregate", - "databaseName": "countDocuments-comments-test" - } - } - ] - } - ] - }, - { - "description": "countDocuments with document comment on less than 4.4.0 - server error", - "runOnRequirements": [ - { - "minServerVersion": "3.6.0", - "maxServerVersion": "4.3.99" - } - ], - "operations": [ - { - "name": "countDocuments", - "object": "collection0", - "arguments": { - "filter": {}, - "comment": { - "key": "value" - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "coll0", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ], - "comment": { - "key": "value" - } - }, - "commandName": "aggregate", - "databaseName": "countDocuments-comments-test" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/countDocuments-comment.yml b/testdata/crud/unified/countDocuments-comment.yml deleted file mode 100644 index 8f1f7bc4b4..0000000000 --- a/testdata/crud/unified/countDocuments-comment.yml +++ /dev/null @@ -1,92 +0,0 @@ -description: "countDocuments-comment" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name countDocuments-comments-test - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -tests: - - description: "countDocuments with document comment" - runOnRequirements: - - minServerVersion: 4.4.0 - operations: - - name: countDocuments - object: *collection0 - arguments: - filter: {} - comment: &documentComment { key: "value" } - expectResult: 3 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: &pipeline - - $match: {} - - $group: { _id: 1, n: { $sum: 1 } } - comment: *documentComment - commandName: aggregate - databaseName: *database0Name - - - description: "countDocuments with string comment" - runOnRequirements: - - minServerVersion: 3.6.0 - operations: - - name: countDocuments - object: *collection0 - arguments: - filter: {} - comment: &stringComment "comment" - expectResult: 3 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: *pipeline - comment: *stringComment - commandName: aggregate - databaseName: *database0Name - - - description: "countDocuments with document comment on less than 4.4.0 - server error" - runOnRequirements: - - minServerVersion: 3.6.0 - maxServerVersion: 4.3.99 - operations: - - name: countDocuments - object: *collection0 - arguments: - filter: {} - comment: *documentComment - expectError: - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: *collection0Name - pipeline: *pipeline - comment: *documentComment - commandName: aggregate - databaseName: *database0Name diff --git a/testdata/crud/unified/db-aggregate-write-readPreference.json b/testdata/crud/unified/db-aggregate-write-readPreference.json deleted file mode 100644 index 10f583269c..0000000000 --- a/testdata/crud/unified/db-aggregate-write-readPreference.json +++ /dev/null @@ -1,447 +0,0 @@ -{ - "description": "db-aggregate-write-readPreference", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "3.6", - "topologies": [ - "replicaset" - ], - "serverless": "forbid" - } - ], - "_yamlAnchors": { - "readConcern": { - "level": "local" - }, - "writeConcern": { - "w": 1 - } - }, - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ], - "uriOptions": { - "readConcernLevel": "local", - "w": 1 - } - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "db0", - "databaseOptions": { - "readPreference": { - "mode": "secondaryPreferred", - "maxStalenessSeconds": 600 - } - } - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "db0", - "documents": [] - } - ], - "tests": [ - { - "description": "Database-level aggregate with $out includes read preference for 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0", - "serverless": "forbid", - "maxServerVersion": "7.99" - } - ], - "operations": [ - { - "object": "database0", - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$listLocalSessions": {} - }, - { - "$limit": 1 - }, - { - "$addFields": { - "_id": 1 - } - }, - { - "$project": { - "_id": 1 - } - }, - { - "$out": "coll0" - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": 1, - "pipeline": [ - { - "$listLocalSessions": {} - }, - { - "$limit": 1 - }, - { - "$addFields": { - "_id": 1 - } - }, - { - "$project": { - "_id": 1 - } - }, - { - "$out": "coll0" - } - ], - "$readPreference": { - "mode": "secondaryPreferred", - "maxStalenessSeconds": 600 - }, - "readConcern": { - "level": "local" - }, - "writeConcern": { - "w": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "db0", - "documents": [ - { - "_id": 1 - } - ] - } - ] - }, - { - "description": "Database-level aggregate with $out omits read preference for pre-5.0 server", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "maxServerVersion": "4.4.99", - "serverless": "forbid" - } - ], - "operations": [ - { - "object": "database0", - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$listLocalSessions": {} - }, - { - "$limit": 1 - }, - { - "$addFields": { - "_id": 1 - } - }, - { - "$project": { - "_id": 1 - } - }, - { - "$out": "coll0" - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": 1, - "pipeline": [ - { - "$listLocalSessions": {} - }, - { - "$limit": 1 - }, - { - "$addFields": { - "_id": 1 - } - }, - { - "$project": { - "_id": 1 - } - }, - { - "$out": "coll0" - } - ], - "$readPreference": { - "$$exists": false - }, - "readConcern": { - "level": "local" - }, - "writeConcern": { - "w": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "db0", - "documents": [ - { - "_id": 1 - } - ] - } - ] - }, - { - "description": "Database-level aggregate with $merge includes read preference for 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "object": "database0", - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$listLocalSessions": {} - }, - { - "$limit": 1 - }, - { - "$addFields": { - "_id": 1 - } - }, - { - "$project": { - "_id": 1 - } - }, - { - "$merge": { - "into": "coll0" - } - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": 1, - "pipeline": [ - { - "$listLocalSessions": {} - }, - { - "$limit": 1 - }, - { - "$addFields": { - "_id": 1 - } - }, - { - "$project": { - "_id": 1 - } - }, - { - "$merge": { - "into": "coll0" - } - } - ], - "$readPreference": { - "mode": "secondaryPreferred", - "maxStalenessSeconds": 600 - }, - "readConcern": { - "level": "local" - }, - "writeConcern": { - "w": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "db0", - "documents": [ - { - "_id": 1 - } - ] - } - ] - }, - { - "description": "Database-level aggregate with $merge omits read preference for pre-5.0 server", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "maxServerVersion": "4.4.99" - } - ], - "operations": [ - { - "object": "database0", - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$listLocalSessions": {} - }, - { - "$limit": 1 - }, - { - "$addFields": { - "_id": 1 - } - }, - { - "$project": { - "_id": 1 - } - }, - { - "$merge": { - "into": "coll0" - } - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": 1, - "pipeline": [ - { - "$listLocalSessions": {} - }, - { - "$limit": 1 - }, - { - "$addFields": { - "_id": 1 - } - }, - { - "$project": { - "_id": 1 - } - }, - { - "$merge": { - "into": "coll0" - } - } - ], - "$readPreference": { - "$$exists": false - }, - "readConcern": { - "level": "local" - }, - "writeConcern": { - "w": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "db0", - "documents": [ - { - "_id": 1 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/db-aggregate-write-readPreference.yml b/testdata/crud/unified/db-aggregate-write-readPreference.yml deleted file mode 100644 index eb0fb09bd0..0000000000 --- a/testdata/crud/unified/db-aggregate-write-readPreference.yml +++ /dev/null @@ -1,153 +0,0 @@ -description: db-aggregate-write-readPreference - -schemaVersion: '1.4' - -runOnRequirements: - # 3.6+ non-standalone is needed to utilize $readPreference in OP_MSG. - # Serverless does not support $listLocalSessions and $currentOp stages, and - # mongos does not allow combining them with $out or $merge. - - minServerVersion: "3.6" - topologies: [ replicaset ] - serverless: forbid - -_yamlAnchors: - readConcern: &readConcern - level: &readConcernLevel "local" - writeConcern: &writeConcern - w: &writeConcernW 1 - -createEntities: - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - # Used to test that read and write concerns are still inherited - uriOptions: - readConcernLevel: *readConcernLevel - w: *writeConcernW - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name db0 - databaseOptions: - readPreference: &readPreference - # secondaryPreferred is specified for compatibility with clusters that - # may not have a secondary (e.g. each shard is only a primary). - mode: secondaryPreferred - # maxStalenessSeconds is specified to ensure that drivers forward the - # read preference to mongos or a load balancer. That would not be the - # case with only secondaryPreferred. - maxStalenessSeconds: 600 - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: [] - -tests: - - description: "Database-level aggregate with $out includes read preference for 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - serverless: "forbid" - # GODRIVER-3218 - maxServerVersion: "7.99" - operations: - - object: *database0 - name: aggregate - arguments: - pipeline: &outPipeline - - { $listLocalSessions: {} } - - { $limit: 1 } - - { $addFields: { _id: 1 } } - - { $project: { _id: 1 } } - - { $out: *collection0Name } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: 1 - pipeline: *outPipeline - $readPreference: *readPreference - readConcern: *readConcern - writeConcern: *writeConcern - outcome: &outcome - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - - description: "Database-level aggregate with $out omits read preference for pre-5.0 server" - runOnRequirements: - # MongoDB 4.2 introduced support for read concerns and write stages. - # Pre-4.2 servers may allow a "local" read concern anyway, but some - # drivers may avoid inheriting a client-level read concern for pre-4.2. - - minServerVersion: "4.2" - maxServerVersion: "4.4.99" - serverless: "forbid" - operations: - - object: *database0 - name: aggregate - arguments: - pipeline: *outPipeline - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: 1 - pipeline: *outPipeline - $readPreference: { $$exists: false } - readConcern: *readConcern - writeConcern: *writeConcern - outcome: *outcome - - - description: "Database-level aggregate with $merge includes read preference for 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - object: *database0 - name: aggregate - arguments: - pipeline: &mergePipeline - - { $listLocalSessions: {} } - - { $limit: 1 } - - { $addFields: { _id: 1 } } - - { $project: { _id: 1 } } - - { $merge: { into: *collection0Name } } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: 1 - pipeline: *mergePipeline - $readPreference: *readPreference - readConcern: *readConcern - writeConcern: *writeConcern - outcome: *outcome - - - description: "Database-level aggregate with $merge omits read preference for pre-5.0 server" - runOnRequirements: - - minServerVersion: "4.2" - maxServerVersion: "4.4.99" - operations: - - object: *database0 - name: aggregate - arguments: - pipeline: *mergePipeline - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - aggregate: 1 - pipeline: *mergePipeline - $readPreference: { $$exists: false } - readConcern: *readConcern - writeConcern: *writeConcern - outcome: *outcome diff --git a/testdata/crud/unified/db-aggregate.json b/testdata/crud/unified/db-aggregate.json deleted file mode 100644 index 5015405bfc..0000000000 --- a/testdata/crud/unified/db-aggregate.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "description": "db-aggregate", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "3.6.0", - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "admin" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "crud-v2" - } - } - ], - "tests": [ - { - "description": "Aggregate with $listLocalSessions", - "operations": [ - { - "object": "database0", - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$listLocalSessions": {} - }, - { - "$limit": 1 - }, - { - "$addFields": { - "dummy": "dummy field" - } - }, - { - "$project": { - "_id": 0, - "dummy": 1 - } - } - ] - }, - "expectResult": [ - { - "dummy": "dummy field" - } - ] - } - ] - }, - { - "description": "Aggregate with $listLocalSessions and allowDiskUse", - "operations": [ - { - "object": "database0", - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$listLocalSessions": {} - }, - { - "$limit": 1 - }, - { - "$addFields": { - "dummy": "dummy field" - } - }, - { - "$project": { - "_id": 0, - "dummy": 1 - } - } - ], - "allowDiskUse": true - }, - "expectResult": [ - { - "dummy": "dummy field" - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/db-aggregate.yml b/testdata/crud/unified/db-aggregate.yml deleted file mode 100644 index 032f94c731..0000000000 --- a/testdata/crud/unified/db-aggregate.yml +++ /dev/null @@ -1,73 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: db-aggregate -schemaVersion: '1.4' -runOnRequirements: - - - minServerVersion: 3.6.0 - # serverless does not support either of the current database-level aggregation stages ($listLocalSessions and - # $currentOp) - serverless: forbid -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name admin - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name crud-v2 -tests: - - - description: 'Aggregate with $listLocalSessions' - operations: - - - object: *database0 - name: aggregate - arguments: - pipeline: - - - $listLocalSessions: { } - - - $limit: 1 - - - $addFields: - dummy: 'dummy field' - - - $project: - _id: 0 - dummy: 1 - expectResult: - - - dummy: 'dummy field' - - - description: 'Aggregate with $listLocalSessions and allowDiskUse' - operations: - - - object: *database0 - name: aggregate - arguments: - pipeline: - - - $listLocalSessions: { } - - - $limit: 1 - - - $addFields: - dummy: 'dummy field' - - - $project: - _id: 0 - dummy: 1 - allowDiskUse: true - expectResult: - - - dummy: 'dummy field' diff --git a/testdata/crud/unified/deleteMany-comment.json b/testdata/crud/unified/deleteMany-comment.json deleted file mode 100644 index 6abc5fd58a..0000000000 --- a/testdata/crud/unified/deleteMany-comment.json +++ /dev/null @@ -1,245 +0,0 @@ -{ - "description": "deleteMany-comment", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2, - "name": "name2" - }, - { - "_id": 3, - "name": "name3" - } - ] - } - ], - "tests": [ - { - "description": "deleteMany with string comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "deleteMany", - "object": "collection0", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "comment": "comment" - }, - "expectResult": { - "deletedCount": 2 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "coll0", - "deletes": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "limit": 0 - } - ], - "comment": "comment" - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - } - ] - } - ] - }, - { - "description": "deleteMany with document comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "deleteMany", - "object": "collection0", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "comment": { - "key": "value" - } - }, - "expectResult": { - "deletedCount": 2 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "coll0", - "deletes": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "limit": 0 - } - ], - "comment": { - "key": "value" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - } - ] - } - ] - }, - { - "description": "deleteMany with comment - pre 4.4", - "runOnRequirements": [ - { - "minServerVersion": "3.4.0", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "deleteMany", - "object": "collection0", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "comment": "comment" - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "coll0", - "deletes": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "limit": 0 - } - ], - "comment": "comment" - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2, - "name": "name2" - }, - { - "_id": 3, - "name": "name3" - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/deleteMany-comment.yml b/testdata/crud/unified/deleteMany-comment.yml deleted file mode 100644 index 8f1b3522a7..0000000000 --- a/testdata/crud/unified/deleteMany-comment.yml +++ /dev/null @@ -1,97 +0,0 @@ -description: "deleteMany-comment" -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2, name: "name2" } - - { _id: 3, name: "name3" } - -tests: - - description: "deleteMany with string comment" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: deleteMany - object: *collection0 - arguments: - filter: &filter { _id: { $gt: 1 } } - comment: "comment" - expectResult: &expect_result - deletedCount: 2 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - delete: *collection0Name - deletes: - - q: *filter - limit: 0 - comment: "comment" - outcome: &outcome - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - - description: "deleteMany with document comment" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: deleteMany - object: *collection0 - arguments: - filter: *filter - comment: &comment { key: "value" } - expectResult: *expect_result - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - delete: *collection0Name - deletes: - - q: *filter - limit: 0 - comment: *comment - outcome: *outcome - - - description: "deleteMany with comment - pre 4.4" - runOnRequirements: - - minServerVersion: "3.4.0" - maxServerVersion: "4.2.99" - operations: - - name: deleteMany - object: *collection0 - arguments: - filter: *filter - comment: "comment" - expectError: - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - delete: *collection0Name - deletes: - - q: *filter - limit: 0 - comment: "comment" - outcome: *initialData diff --git a/testdata/crud/unified/deleteMany-hint-clientError.json b/testdata/crud/unified/deleteMany-hint-clientError.json deleted file mode 100644 index 66320122b5..0000000000 --- a/testdata/crud/unified/deleteMany-hint-clientError.json +++ /dev/null @@ -1,149 +0,0 @@ -{ - "description": "deleteMany-hint-clientError", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "maxServerVersion": "3.3.99" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "DeleteMany_hint" - } - } - ], - "initialData": [ - { - "collectionName": "DeleteMany_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "DeleteMany with hint string unsupported (client-side error)", - "operations": [ - { - "object": "collection0", - "name": "deleteMany", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "hint": "_id_" - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "DeleteMany_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "DeleteMany with hint document unsupported (client-side error)", - "operations": [ - { - "object": "collection0", - "name": "deleteMany", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "hint": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "DeleteMany_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/deleteMany-hint-clientError.yml b/testdata/crud/unified/deleteMany-hint-clientError.yml deleted file mode 100644 index 21ff1debbe..0000000000 --- a/testdata/crud/unified/deleteMany-hint-clientError.yml +++ /dev/null @@ -1,87 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: deleteMany-hint-clientError -schemaVersion: '1.0' -runOnRequirements: - - - maxServerVersion: 3.3.99 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name DeleteMany_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 -tests: - - - description: 'DeleteMany with hint string unsupported (client-side error)' - operations: - - - object: *collection0 - name: deleteMany - arguments: - filter: &filter - _id: - $gt: 1 - hint: _id_ - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 - - - description: 'DeleteMany with hint document unsupported (client-side error)' - operations: - - - object: *collection0 - name: deleteMany - arguments: - filter: *filter - hint: - _id: 1 - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: *outcome diff --git a/testdata/crud/unified/deleteMany-hint-serverError.json b/testdata/crud/unified/deleteMany-hint-serverError.json deleted file mode 100644 index 88d4a65576..0000000000 --- a/testdata/crud/unified/deleteMany-hint-serverError.json +++ /dev/null @@ -1,190 +0,0 @@ -{ - "description": "deleteMany-hint-serverError", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "3.4.0", - "maxServerVersion": "4.3.3" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "DeleteMany_hint" - } - } - ], - "initialData": [ - { - "collectionName": "DeleteMany_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "DeleteMany with hint string unsupported (server-side error)", - "operations": [ - { - "object": "collection0", - "name": "deleteMany", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "hint": "_id_" - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "DeleteMany_hint", - "deletes": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "hint": "_id_", - "limit": 0 - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "DeleteMany_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "DeleteMany with hint document unsupported (server-side error)", - "operations": [ - { - "object": "collection0", - "name": "deleteMany", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "hint": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "DeleteMany_hint", - "deletes": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "hint": { - "_id": 1 - }, - "limit": 0 - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "DeleteMany_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/deleteMany-hint-serverError.yml b/testdata/crud/unified/deleteMany-hint-serverError.yml deleted file mode 100644 index 2e20988d0b..0000000000 --- a/testdata/crud/unified/deleteMany-hint-serverError.yml +++ /dev/null @@ -1,107 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: deleteMany-hint-serverError -schemaVersion: '1.0' -runOnRequirements: - - - minServerVersion: 3.4.0 - maxServerVersion: 4.3.3 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name DeleteMany_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 -tests: - - - description: 'DeleteMany with hint string unsupported (server-side error)' - operations: - - - object: *collection0 - name: deleteMany - arguments: - filter: &filter - _id: - $gt: 1 - hint: _id_ - expectError: - isError: true - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - delete: *collection_name - deletes: - - - q: *filter - hint: _id_ - limit: 0 - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 - - - description: 'DeleteMany with hint document unsupported (server-side error)' - operations: - - - object: *collection0 - name: deleteMany - arguments: - filter: *filter - hint: - _id: 1 - expectError: - isError: true - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - delete: *collection_name - deletes: - - - q: *filter - hint: - _id: 1 - limit: 0 - outcome: *outcome diff --git a/testdata/crud/unified/deleteMany-hint.json b/testdata/crud/unified/deleteMany-hint.json deleted file mode 100644 index 59d903d201..0000000000 --- a/testdata/crud/unified/deleteMany-hint.json +++ /dev/null @@ -1,173 +0,0 @@ -{ - "description": "deleteMany-hint", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "4.3.4" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "DeleteMany_hint" - } - } - ], - "initialData": [ - { - "collectionName": "DeleteMany_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "DeleteMany with hint string", - "operations": [ - { - "object": "collection0", - "name": "deleteMany", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "hint": "_id_" - }, - "expectResult": { - "deletedCount": 2 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "DeleteMany_hint", - "deletes": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "hint": "_id_", - "limit": 0 - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "DeleteMany_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ] - }, - { - "description": "DeleteMany with hint document", - "operations": [ - { - "object": "collection0", - "name": "deleteMany", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "hint": { - "_id": 1 - } - }, - "expectResult": { - "deletedCount": 2 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "DeleteMany_hint", - "deletes": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "hint": { - "_id": 1 - }, - "limit": 0 - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "DeleteMany_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/deleteMany-hint.yml b/testdata/crud/unified/deleteMany-hint.yml deleted file mode 100644 index 512b95e76b..0000000000 --- a/testdata/crud/unified/deleteMany-hint.yml +++ /dev/null @@ -1,99 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: deleteMany-hint -schemaVersion: '1.0' -runOnRequirements: - - - minServerVersion: 4.3.4 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name DeleteMany_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 -tests: - - - description: 'DeleteMany with hint string' - operations: - - - object: *collection0 - name: deleteMany - arguments: - filter: &filter - _id: - $gt: 1 - hint: _id_ - expectResult: &result - deletedCount: 2 - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - delete: *collection_name - deletes: - - - q: *filter - hint: _id_ - limit: 0 - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - description: 'DeleteMany with hint document' - operations: - - - object: *collection0 - name: deleteMany - arguments: - filter: *filter - hint: - _id: 1 - expectResult: *result - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - delete: *collection_name - deletes: - - - q: *filter - hint: - _id: 1 - limit: 0 - outcome: *outcome diff --git a/testdata/crud/unified/deleteMany-let.json b/testdata/crud/unified/deleteMany-let.json deleted file mode 100644 index 71bf26a013..0000000000 --- a/testdata/crud/unified/deleteMany-let.json +++ /dev/null @@ -1,201 +0,0 @@ -{ - "description": "deleteMany-let", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2, - "name": "name" - }, - { - "_id": 3, - "name": "name" - } - ] - } - ], - "tests": [ - { - "description": "deleteMany with let option", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "deleteMany", - "object": "collection0", - "arguments": { - "filter": { - "$expr": { - "$eq": [ - "$name", - "$$name" - ] - } - }, - "let": { - "name": "name" - } - }, - "expectResult": { - "deletedCount": 2 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "coll0", - "deletes": [ - { - "q": { - "$expr": { - "$eq": [ - "$name", - "$$name" - ] - } - }, - "limit": 0 - } - ], - "let": { - "name": "name" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - } - ] - } - ] - }, - { - "description": "deleteMany with let option unsupported (server-side error)", - "runOnRequirements": [ - { - "minServerVersion": "3.6.0", - "maxServerVersion": "4.4.99" - } - ], - "operations": [ - { - "name": "deleteMany", - "object": "collection0", - "arguments": { - "filter": { - "$expr": { - "$eq": [ - "$name", - "$$name" - ] - } - }, - "let": { - "name": "name" - } - }, - "expectError": { - "errorContains": "'delete.let' is an unknown field", - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "coll0", - "deletes": [ - { - "q": { - "$expr": { - "$eq": [ - "$name", - "$$name" - ] - } - }, - "limit": 0 - } - ], - "let": { - "name": "name" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2, - "name": "name" - }, - { - "_id": 3, - "name": "name" - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/deleteMany-let.yml b/testdata/crud/unified/deleteMany-let.yml deleted file mode 100644 index 723985aa8c..0000000000 --- a/testdata/crud/unified/deleteMany-let.yml +++ /dev/null @@ -1,93 +0,0 @@ -description: "deleteMany-let" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2, name: "name" } - - { _id: 3, name: "name" } - -tests: - - description: "deleteMany with let option" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: deleteMany - object: *collection0 - arguments: - filter: &filter - $expr: - $eq: [ "$name", "$$name" ] - let: &let0 - name: "name" - expectResult: - deletedCount: 2 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - delete: *collection0Name - deletes: - - - q: *filter - limit: 0 - let: *let0 - outcome: - - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - - description: "deleteMany with let option unsupported (server-side error)" - runOnRequirements: - - minServerVersion: "3.6.0" - maxServerVersion: "4.4.99" - operations: - - name: deleteMany - object: *collection0 - arguments: - filter: &filter1 - $expr: - $eq: [ "$name", "$$name" ] - let: &let1 - name: "name" - expectError: - errorContains: "'delete.let' is an unknown field" - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - delete: *collection0Name - deletes: - - - q: *filter1 - limit: 0 - let: *let1 - outcome: - - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2, name: "name" } - - { _id: 3, name: "name" } diff --git a/testdata/crud/unified/deleteOne-comment.json b/testdata/crud/unified/deleteOne-comment.json deleted file mode 100644 index 0f42b086a3..0000000000 --- a/testdata/crud/unified/deleteOne-comment.json +++ /dev/null @@ -1,243 +0,0 @@ -{ - "description": "deleteOne-comment", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2, - "name": "name" - }, - { - "_id": 3, - "name": "name" - } - ] - } - ], - "tests": [ - { - "description": "deleteOne with string comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "deleteOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "comment": "comment" - }, - "expectResult": { - "deletedCount": 1 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "coll0", - "deletes": [ - { - "q": { - "_id": 1 - }, - "limit": 1 - } - ], - "comment": "comment" - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 2, - "name": "name" - }, - { - "_id": 3, - "name": "name" - } - ] - } - ] - }, - { - "description": "deleteOne with document comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "deleteOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "comment": { - "key": "value" - } - }, - "expectResult": { - "deletedCount": 1 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "coll0", - "deletes": [ - { - "q": { - "_id": 1 - }, - "limit": 1 - } - ], - "comment": { - "key": "value" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 2, - "name": "name" - }, - { - "_id": 3, - "name": "name" - } - ] - } - ] - }, - { - "description": "deleteOne with comment - pre 4.4", - "runOnRequirements": [ - { - "minServerVersion": "3.4.0", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "deleteOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "comment": "comment" - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "coll0", - "deletes": [ - { - "q": { - "_id": 1 - }, - "limit": 1 - } - ], - "comment": "comment" - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2, - "name": "name" - }, - { - "_id": 3, - "name": "name" - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/deleteOne-comment.yml b/testdata/crud/unified/deleteOne-comment.yml deleted file mode 100644 index f5e8884ac4..0000000000 --- a/testdata/crud/unified/deleteOne-comment.yml +++ /dev/null @@ -1,98 +0,0 @@ -escription: "deleteOne-comment" -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2, name: "name" } - - { _id: 3, name: "name" } - -tests: - - description: "deleteOne with string comment" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: deleteOne - object: *collection0 - arguments: - filter: &filter { _id: 1 } - comment: "comment" - expectResult: &expect_result - deletedCount: 1 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - delete: *collection0Name - deletes: - - q: *filter - limit: 1 - comment: "comment" - outcome: &outcome - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 2, name: "name" } - - { _id: 3, name: "name" } - - - description: "deleteOne with document comment" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: deleteOne - object: *collection0 - arguments: - filter: *filter - comment: &comment { key: "value" } - expectResult: *expect_result - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - delete: *collection0Name - deletes: - - q: *filter - limit: 1 - comment: *comment - outcome: *outcome - - - description: "deleteOne with comment - pre 4.4" - runOnRequirements: - - minServerVersion: "3.4.0" - maxServerVersion: "4.2.99" - operations: - - name: deleteOne - object: *collection0 - arguments: - filter: *filter - comment: "comment" - expectError: - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - delete: *collection0Name - deletes: - - q: *filter - limit: 1 - comment: "comment" - outcome: *initialData diff --git a/testdata/crud/unified/deleteOne-errorResponse.json b/testdata/crud/unified/deleteOne-errorResponse.json deleted file mode 100644 index 1f3a266f1e..0000000000 --- a/testdata/crud/unified/deleteOne-errorResponse.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "description": "deleteOne-errorResponse", - "schemaVersion": "1.12", - "createEntities": [ - { - "client": { - "id": "client0", - "useMultipleMongoses": false - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test" - } - } - ], - "tests": [ - { - "description": "delete operations support errorResponse assertions", - "runOnRequirements": [ - { - "minServerVersion": "4.0.0", - "topologies": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.2.0", - "topologies": [ - "sharded" - ] - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "delete" - ], - "errorCode": 8 - } - } - } - }, - { - "name": "deleteOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - } - }, - "expectError": { - "errorCode": 8, - "errorResponse": { - "code": 8 - } - } - } - ] - } - ] -} diff --git a/testdata/crud/unified/deleteOne-errorResponse.yml b/testdata/crud/unified/deleteOne-errorResponse.yml deleted file mode 100644 index dcf013060e..0000000000 --- a/testdata/crud/unified/deleteOne-errorResponse.yml +++ /dev/null @@ -1,46 +0,0 @@ -description: "deleteOne-errorResponse" - -schemaVersion: "1.12" - -createEntities: - - client: - id: &client0 client0 - useMultipleMongoses: false - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name test - -tests: - # Some drivers may still need to skip this test because the CRUD spec does not - # prescribe how drivers should formulate a WriteException beyond collecting a - # write or write concern error. - - description: "delete operations support errorResponse assertions" - runOnRequirements: - - minServerVersion: "4.0.0" - topologies: [ single, replicaset ] - - minServerVersion: "4.2.0" - topologies: [ sharded ] - operations: - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ delete ] - errorCode: &errorCode 8 # UnknownError - - name: deleteOne - object: *collection0 - arguments: - filter: { _id: 1 } - expectError: - errorCode: *errorCode - errorResponse: - code: *errorCode diff --git a/testdata/crud/unified/deleteOne-hint-clientError.json b/testdata/crud/unified/deleteOne-hint-clientError.json deleted file mode 100644 index cf629f59e0..0000000000 --- a/testdata/crud/unified/deleteOne-hint-clientError.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "description": "deleteOne-hint-clientError", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "maxServerVersion": "3.3.99" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "DeleteOne_hint" - } - } - ], - "initialData": [ - { - "collectionName": "DeleteOne_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ], - "tests": [ - { - "description": "DeleteOne with hint string unsupported (client-side error)", - "operations": [ - { - "object": "collection0", - "name": "deleteOne", - "arguments": { - "filter": { - "_id": 1 - }, - "hint": "_id_" - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "DeleteOne_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "DeleteOne with hint document unsupported (client-side error)", - "operations": [ - { - "object": "collection0", - "name": "deleteOne", - "arguments": { - "filter": { - "_id": 1 - }, - "hint": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "DeleteOne_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/deleteOne-hint-clientError.yml b/testdata/crud/unified/deleteOne-hint-clientError.yml deleted file mode 100644 index be218fc9b5..0000000000 --- a/testdata/crud/unified/deleteOne-hint-clientError.yml +++ /dev/null @@ -1,80 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: deleteOne-hint-clientError -schemaVersion: '1.0' -runOnRequirements: - - - maxServerVersion: 3.3.99 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name DeleteOne_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 -tests: - - - description: 'DeleteOne with hint string unsupported (client-side error)' - operations: - - - object: *collection0 - name: deleteOne - arguments: - filter: &filter - _id: 1 - hint: _id_ - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - description: 'DeleteOne with hint document unsupported (client-side error)' - operations: - - - object: *collection0 - name: deleteOne - arguments: - filter: *filter - hint: - _id: 1 - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: *outcome diff --git a/testdata/crud/unified/deleteOne-hint-serverError.json b/testdata/crud/unified/deleteOne-hint-serverError.json deleted file mode 100644 index 15541ed857..0000000000 --- a/testdata/crud/unified/deleteOne-hint-serverError.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "description": "deleteOne-hint-serverError", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "3.4.0", - "maxServerVersion": "4.3.3" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "DeleteOne_hint" - } - } - ], - "initialData": [ - { - "collectionName": "DeleteOne_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ], - "tests": [ - { - "description": "DeleteOne with hint string unsupported (server-side error)", - "operations": [ - { - "object": "collection0", - "name": "deleteOne", - "arguments": { - "filter": { - "_id": 1 - }, - "hint": "_id_" - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "DeleteOne_hint", - "deletes": [ - { - "q": { - "_id": 1 - }, - "hint": "_id_", - "limit": 1 - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "DeleteOne_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "DeleteOne with hint document unsupported (server-side error)", - "operations": [ - { - "object": "collection0", - "name": "deleteOne", - "arguments": { - "filter": { - "_id": 1 - }, - "hint": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "DeleteOne_hint", - "deletes": [ - { - "q": { - "_id": 1 - }, - "hint": { - "_id": 1 - }, - "limit": 1 - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "DeleteOne_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/deleteOne-hint-serverError.yml b/testdata/crud/unified/deleteOne-hint-serverError.yml deleted file mode 100644 index 6c8c0ea817..0000000000 --- a/testdata/crud/unified/deleteOne-hint-serverError.yml +++ /dev/null @@ -1,100 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: deleteOne-hint-serverError -schemaVersion: '1.0' -runOnRequirements: - - - minServerVersion: 3.4.0 - maxServerVersion: 4.3.3 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name DeleteOne_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 -tests: - - - description: 'DeleteOne with hint string unsupported (server-side error)' - operations: - - - object: *collection0 - name: deleteOne - arguments: - filter: &filter - _id: 1 - hint: _id_ - expectError: - isError: true - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - delete: *collection_name - deletes: - - - q: *filter - hint: _id_ - limit: 1 - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - description: 'DeleteOne with hint document unsupported (server-side error)' - operations: - - - object: *collection0 - name: deleteOne - arguments: - filter: *filter - hint: - _id: 1 - expectError: - isError: true - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - delete: *collection_name - deletes: - - - q: *filter - hint: - _id: 1 - limit: 1 - outcome: *outcome diff --git a/testdata/crud/unified/deleteOne-hint.json b/testdata/crud/unified/deleteOne-hint.json deleted file mode 100644 index bcc4bc2347..0000000000 --- a/testdata/crud/unified/deleteOne-hint.json +++ /dev/null @@ -1,161 +0,0 @@ -{ - "description": "deleteOne-hint", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "4.3.4" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "DeleteOne_hint" - } - } - ], - "initialData": [ - { - "collectionName": "DeleteOne_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ], - "tests": [ - { - "description": "DeleteOne with hint string", - "operations": [ - { - "object": "collection0", - "name": "deleteOne", - "arguments": { - "filter": { - "_id": 1 - }, - "hint": "_id_" - }, - "expectResult": { - "deletedCount": 1 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "DeleteOne_hint", - "deletes": [ - { - "q": { - "_id": 1 - }, - "hint": "_id_", - "limit": 1 - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "DeleteOne_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "deleteOne with hint document", - "operations": [ - { - "object": "collection0", - "name": "deleteOne", - "arguments": { - "filter": { - "_id": 1 - }, - "hint": { - "_id": 1 - } - }, - "expectResult": { - "deletedCount": 1 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "DeleteOne_hint", - "deletes": [ - { - "q": { - "_id": 1 - }, - "hint": { - "_id": 1 - }, - "limit": 1 - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "DeleteOne_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 2, - "x": 22 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/deleteOne-hint.yml b/testdata/crud/unified/deleteOne-hint.yml deleted file mode 100644 index f72356c99c..0000000000 --- a/testdata/crud/unified/deleteOne-hint.yml +++ /dev/null @@ -1,95 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: deleteOne-hint -schemaVersion: '1.0' -runOnRequirements: - - - minServerVersion: 4.3.4 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name DeleteOne_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 -tests: - - - description: 'DeleteOne with hint string' - operations: - - - object: *collection0 - name: deleteOne - arguments: - filter: &filter - _id: 1 - hint: _id_ - expectResult: &result - deletedCount: 1 - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - delete: *collection_name - deletes: - - - q: *filter - hint: _id_ - limit: 1 - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 2 - x: 22 - - - description: 'deleteOne with hint document' - operations: - - - object: *collection0 - name: deleteOne - arguments: - filter: *filter - hint: - _id: 1 - expectResult: *result - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - delete: *collection_name - deletes: - - - q: *filter - hint: - _id: 1 - limit: 1 - outcome: *outcome diff --git a/testdata/crud/unified/deleteOne-let.json b/testdata/crud/unified/deleteOne-let.json deleted file mode 100644 index 9718682235..0000000000 --- a/testdata/crud/unified/deleteOne-let.json +++ /dev/null @@ -1,191 +0,0 @@ -{ - "description": "deleteOne-let", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ], - "tests": [ - { - "description": "deleteOne with let option", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "deleteOne", - "object": "collection0", - "arguments": { - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "let": { - "id": 1 - } - }, - "expectResult": { - "deletedCount": 1 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "coll0", - "deletes": [ - { - "q": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "limit": 1 - } - ], - "let": { - "id": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 2 - } - ] - } - ] - }, - { - "description": "deleteOne with let option unsupported (server-side error)", - "runOnRequirements": [ - { - "minServerVersion": "3.6.0", - "maxServerVersion": "4.4.99" - } - ], - "operations": [ - { - "name": "deleteOne", - "object": "collection0", - "arguments": { - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "let": { - "id": 1 - } - }, - "expectError": { - "errorContains": "'delete.let' is an unknown field", - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "coll0", - "deletes": [ - { - "q": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "limit": 1 - } - ], - "let": { - "id": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/deleteOne-let.yml b/testdata/crud/unified/deleteOne-let.yml deleted file mode 100644 index c52d98b99d..0000000000 --- a/testdata/crud/unified/deleteOne-let.yml +++ /dev/null @@ -1,91 +0,0 @@ -description: "deleteOne-let" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } - -tests: - - description: "deleteOne with let option" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: deleteOne - object: *collection0 - arguments: - filter: &filter - $expr: - $eq: [ "$_id", "$$id" ] - let: &let0 - id: 1 - expectResult: - deletedCount: 1 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - delete: *collection0Name - deletes: - - - q: *filter - limit: 1 - let: *let0 - outcome: - - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 2 } - - - description: "deleteOne with let option unsupported (server-side error)" - runOnRequirements: - - minServerVersion: "3.6.0" - maxServerVersion: "4.4.99" - operations: - - name: deleteOne - object: *collection0 - arguments: - filter: &filter1 - $expr: - $eq: [ "$_id", "$$id" ] - let: &let1 - id: 1 - expectError: - errorContains: "'delete.let' is an unknown field" - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - delete: *collection0Name - deletes: - - - q: *filter1 - limit: 1 - let: *let1 - outcome: - - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } diff --git a/testdata/crud/unified/distinct-comment.json b/testdata/crud/unified/distinct-comment.json deleted file mode 100644 index 0519070164..0000000000 --- a/testdata/crud/unified/distinct-comment.json +++ /dev/null @@ -1,178 +0,0 @@ -{ - "description": "distinct-comment", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "distinct-comment-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "distinct-comment-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "distinct with document comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4.14" - } - ], - "operations": [ - { - "name": "distinct", - "object": "collection0", - "arguments": { - "fieldName": "x", - "filter": {}, - "comment": { - "key": "value" - } - }, - "expectResult": [ 11, 22, 33 ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "distinct": "coll0", - "key": "x", - "query": {}, - "comment": { - "key": "value" - } - }, - "commandName": "distinct", - "databaseName": "distinct-comment-tests" - } - } - ] - } - ] - }, - { - "description": "distinct with string comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4.0" - } - ], - "operations": [ - { - "name": "distinct", - "object": "collection0", - "arguments": { - "fieldName": "x", - "filter": {}, - "comment": "comment" - }, - "expectResult": [ 11, 22, 33 ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "distinct": "coll0", - "key": "x", - "query": {}, - "comment": "comment" - }, - "commandName": "distinct", - "databaseName": "distinct-comment-tests" - } - } - ] - } - ] - }, - { - "description": "distinct with document comment - pre 4.4, server error", - "runOnRequirements": [ - { - "minServerVersion": "3.6.0", - "maxServerVersion": "4.4.13" - } - ], - "operations": [ - { - "name": "distinct", - "object": "collection0", - "arguments": { - "fieldName": "x", - "filter": {}, - "comment": { - "key": "value" - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "distinct": "coll0", - "key": "x", - "query": {}, - "comment": { - "key": "value" - } - }, - "commandName": "distinct", - "databaseName": "distinct-comment-tests" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/distinct-comment.yml b/testdata/crud/unified/distinct-comment.yml deleted file mode 100644 index c082009943..0000000000 --- a/testdata/crud/unified/distinct-comment.yml +++ /dev/null @@ -1,98 +0,0 @@ -description: "distinct-comment" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name distinct-comment-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -tests: - - description: "distinct with document comment" - runOnRequirements: - # https://jira.mongodb.org/browse/SERVER-44847 - # Server supports distinct with comment of any type for comment starting from 4.4.14. - - minServerVersion: "4.4.14" - operations: - - name: distinct - object: *collection0 - arguments: - fieldName: &fieldName x - filter: &filter {} - comment: &documentComment { key: "value"} - expectResult: [ 11, 22, 33 ] - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - distinct: *collection0Name - key: *fieldName - query: *filter - comment: *documentComment - commandName: distinct - databaseName: *database0Name - - - description: "distinct with string comment" - runOnRequirements: - - minServerVersion: "4.4.0" - operations: - - name: distinct - object: *collection0 - arguments: - fieldName: *fieldName - filter: *filter - comment: &stringComment "comment" - expectResult: [ 11, 22, 33 ] - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - distinct: *collection0Name - key: *fieldName - query: *filter - comment: *stringComment - commandName: distinct - databaseName: *database0Name - - - description: "distinct with document comment - pre 4.4, server error" - runOnRequirements: - - minServerVersion: "3.6.0" - maxServerVersion: "4.4.13" - operations: - - name: distinct - object: *collection0 - arguments: - fieldName: *fieldName - filter: *filter - comment: *documentComment - expectError: - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - distinct: *collection0Name - key: *fieldName - query: *filter - comment: *documentComment - commandName: distinct - databaseName: *database0Name diff --git a/testdata/crud/unified/distinct-hint.json b/testdata/crud/unified/distinct-hint.json deleted file mode 100644 index 2a6869cbe0..0000000000 --- a/testdata/crud/unified/distinct-hint.json +++ /dev/null @@ -1,139 +0,0 @@ -{ - "description": "distinct-hint", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "7.1.0" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "distinct-hint-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "distinct-hint-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "distinct with hint string", - "operations": [ - { - "name": "distinct", - "object": "collection0", - "arguments": { - "fieldName": "x", - "filter": { - "_id": 1 - }, - "hint": "_id_" - }, - "expectResult": [ - 11 - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "distinct": "coll0", - "key": "x", - "query": { - "_id": 1 - }, - "hint": "_id_" - }, - "commandName": "distinct", - "databaseName": "distinct-hint-tests" - } - } - ] - } - ] - }, - { - "description": "distinct with hint document", - "operations": [ - { - "name": "distinct", - "object": "collection0", - "arguments": { - "fieldName": "x", - "filter": { - "_id": 1 - }, - "hint": { - "_id": 1 - } - }, - "expectResult": [ - 11 - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "distinct": "coll0", - "key": "x", - "query": { - "_id": 1 - }, - "hint": { - "_id": 1 - } - }, - "commandName": "distinct", - "databaseName": "distinct-hint-tests" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/distinct-hint.yml b/testdata/crud/unified/distinct-hint.yml deleted file mode 100644 index 9d277616d3..0000000000 --- a/testdata/crud/unified/distinct-hint.yml +++ /dev/null @@ -1,73 +0,0 @@ -description: "distinct-hint" - -schemaVersion: "1.0" -runOnRequirements: - # https://jira.mongodb.org/browse/SERVER-14227 - # Server supports distinct with hint starting from 7.1.0. - - minServerVersion: "7.1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name distinct-hint-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -tests: - - description: "distinct with hint string" - operations: - - name: distinct - object: *collection0 - arguments: - fieldName: &fieldName x - filter: &filter { _id: 1 } - hint: _id_ - expectResult: [ 11 ] - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - distinct: *collection0Name - key: *fieldName - query: *filter - hint: _id_ - commandName: distinct - databaseName: *database0Name - - - description: "distinct with hint document" - operations: - - name: distinct - object: *collection0 - arguments: - fieldName: *fieldName - filter: *filter - hint: - _id: 1 - expectResult: [ 11 ] - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - distinct: *collection0Name - key: *fieldName - query: *filter - hint: - _id: 1 - commandName: distinct - databaseName: *database0Name diff --git a/testdata/crud/unified/estimatedDocumentCount-comment.json b/testdata/crud/unified/estimatedDocumentCount-comment.json deleted file mode 100644 index 6c0adacc8f..0000000000 --- a/testdata/crud/unified/estimatedDocumentCount-comment.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "description": "estimatedDocumentCount-comment", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "edc-comment-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "edc-comment-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "estimatedDocumentCount with document comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4.14" - } - ], - "operations": [ - { - "name": "estimatedDocumentCount", - "object": "collection0", - "arguments": { - "comment": { - "key": "value" - } - }, - "expectResult": 3 - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "count": "coll0", - "comment": { - "key": "value" - } - }, - "commandName": "count", - "databaseName": "edc-comment-tests" - } - } - ] - } - ] - }, - { - "description": "estimatedDocumentCount with string comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4.0" - } - ], - "operations": [ - { - "name": "estimatedDocumentCount", - "object": "collection0", - "arguments": { - "comment": "comment" - }, - "expectResult": 3 - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "count": "coll0", - "comment": "comment" - }, - "commandName": "count", - "databaseName": "edc-comment-tests" - } - } - ] - } - ] - }, - { - "description": "estimatedDocumentCount with document comment - pre 4.4.14, server error", - "runOnRequirements": [ - { - "minServerVersion": "3.6.0", - "maxServerVersion": "4.4.13", - "topologies": [ - "single", - "replicaset" - ] - } - ], - "operations": [ - { - "name": "estimatedDocumentCount", - "object": "collection0", - "arguments": { - "comment": { - "key": "value" - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "count": "coll0", - "comment": { - "key": "value" - } - }, - "commandName": "count", - "databaseName": "edc-comment-tests" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/estimatedDocumentCount-comment.yml b/testdata/crud/unified/estimatedDocumentCount-comment.yml deleted file mode 100644 index b785315104..0000000000 --- a/testdata/crud/unified/estimatedDocumentCount-comment.yml +++ /dev/null @@ -1,95 +0,0 @@ -description: "estimatedDocumentCount-comment" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name edc-comment-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -tests: - - description: "estimatedDocumentCount with document comment" - runOnRequirements: - # https://jira.mongodb.org/browse/SERVER-63315 - # Server supports count with comment of any type for comment starting from 4.4.14. - - minServerVersion: "4.4.14" - operations: - - name: estimatedDocumentCount - object: *collection0 - arguments: - comment: &documentComment { key: "value"} - expectResult: 3 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - count: *collection0Name - comment: *documentComment - commandName: count - databaseName: *database0Name - - - description: "estimatedDocumentCount with string comment" - runOnRequirements: - - minServerVersion: "4.4.0" - operations: - - name: estimatedDocumentCount - object: *collection0 - arguments: - comment: &stringComment "comment" - expectResult: 3 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - count: *collection0Name - comment: *stringComment - commandName: count - databaseName: *database0Name - - - description: "estimatedDocumentCount with document comment - pre 4.4.14, server error" - runOnRequirements: - - minServerVersion: "3.6.0" - maxServerVersion: "4.4.13" - # Server does not raise an error if topology is sharded. - # https://jira.mongodb.org/browse/SERVER-65954 - topologies: [ single, replicaset ] - operations: - - name: estimatedDocumentCount - object: *collection0 - arguments: - # Even though according to the docs count command does not support any - # comment for server version less than 4.4, no error is raised by such - # servers. Therefore, we have only one test with a document comment - # to test server errors. - # https://jira.mongodb.org/browse/SERVER-63315 - # Server supports count with comment of any type for comment starting from 4.4.14. - comment: *documentComment - expectError: - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - count: *collection0Name - comment: *documentComment - commandName: count - databaseName: *database0Name diff --git a/testdata/crud/unified/estimatedDocumentCount.json b/testdata/crud/unified/estimatedDocumentCount.json deleted file mode 100644 index 1b650c1cb6..0000000000 --- a/testdata/crud/unified/estimatedDocumentCount.json +++ /dev/null @@ -1,357 +0,0 @@ -{ - "description": "estimatedDocumentCount", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "useMultipleMongoses": false, - "uriOptions": { - "retryReads": false - }, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "edc-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - }, - { - "collection": { - "id": "collection1", - "database": "database0", - "collectionName": "coll1" - } - }, - { - "collection": { - "id": "collection0View", - "database": "database0", - "collectionName": "coll0view" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "edc-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "estimatedDocumentCount always uses count", - "operations": [ - { - "name": "estimatedDocumentCount", - "object": "collection0", - "expectResult": 3 - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "count": "coll0" - }, - "commandName": "count", - "databaseName": "edc-tests" - } - } - ] - } - ] - }, - { - "description": "estimatedDocumentCount with maxTimeMS", - "operations": [ - { - "name": "estimatedDocumentCount", - "object": "collection0", - "arguments": { - "maxTimeMS": 6000 - }, - "expectResult": 3 - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "count": "coll0", - "maxTimeMS": 6000 - }, - "commandName": "count", - "databaseName": "edc-tests" - } - } - ] - } - ] - }, - { - "description": "estimatedDocumentCount on non-existent collection", - "operations": [ - { - "name": "estimatedDocumentCount", - "object": "collection1", - "expectResult": 0 - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "count": "coll1" - }, - "commandName": "count", - "databaseName": "edc-tests" - } - } - ] - } - ] - }, - { - "description": "estimatedDocumentCount errors correctly--command error", - "runOnRequirements": [ - { - "minServerVersion": "4.0.0", - "topologies": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.2.0", - "topologies": [ - "sharded" - ] - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 8 - } - } - } - }, - { - "name": "estimatedDocumentCount", - "object": "collection0", - "expectError": { - "errorCode": 8 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "count": "coll0" - }, - "commandName": "count", - "databaseName": "edc-tests" - } - } - ] - } - ] - }, - { - "description": "estimatedDocumentCount errors correctly--socket error", - "runOnRequirements": [ - { - "minServerVersion": "4.0.0", - "topologies": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.2.0", - "topologies": [ - "sharded" - ] - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "closeConnection": true - } - } - } - }, - { - "name": "estimatedDocumentCount", - "object": "collection0", - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "count": "coll0" - }, - "commandName": "count", - "databaseName": "edc-tests" - } - } - ] - } - ] - }, - { - "description": "estimatedDocumentCount works correctly on views", - "runOnRequirements": [ - { - "minServerVersion": "3.4.0" - } - ], - "operations": [ - { - "name": "dropCollection", - "object": "database0", - "arguments": { - "collection": "coll0view" - } - }, - { - "name": "createCollection", - "object": "database0", - "arguments": { - "collection": "coll0view", - "viewOn": "coll0", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - } - ] - } - }, - { - "name": "estimatedDocumentCount", - "object": "collection0View", - "expectResult": 2 - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "drop": "coll0view" - }, - "commandName": "drop", - "databaseName": "edc-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "create": "coll0view", - "viewOn": "coll0", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - } - ] - }, - "commandName": "create", - "databaseName": "edc-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "count": "coll0view" - }, - "commandName": "count", - "databaseName": "edc-tests" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/estimatedDocumentCount.yml b/testdata/crud/unified/estimatedDocumentCount.yml deleted file mode 100644 index 12f33cc7e5..0000000000 --- a/testdata/crud/unified/estimatedDocumentCount.yml +++ /dev/null @@ -1,181 +0,0 @@ -description: "estimatedDocumentCount" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - useMultipleMongoses: false # Avoid setting fail points with multiple mongoses - uriOptions: { retryReads: false } # Avoid retrying fail points with closeConnection - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name edc-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - - collection: - # Nonexistent collection intentionally omitted from initialData - id: &collection1 collection1 - database: *database0 - collectionName: &collection1Name coll1 - - collection: - id: &collection0View collection0View - database: *database0 - collectionName: &collection0ViewName coll0view - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -tests: - - description: "estimatedDocumentCount always uses count" - operations: - - name: estimatedDocumentCount - object: *collection0 - expectResult: 3 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - count: *collection0Name - commandName: count - databaseName: *database0Name - - - description: "estimatedDocumentCount with maxTimeMS" - operations: - - name: estimatedDocumentCount - object: *collection0 - arguments: - maxTimeMS: 6000 - expectResult: 3 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - count: *collection0Name - maxTimeMS: 6000 - commandName: count - databaseName: *database0Name - - - description: "estimatedDocumentCount on non-existent collection" - operations: - - name: estimatedDocumentCount - object: *collection1 - expectResult: 0 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - count: *collection1Name - commandName: count - databaseName: *database0Name - - - description: "estimatedDocumentCount errors correctly--command error" - runOnRequirements: - - minServerVersion: "4.0.0" - topologies: [ single, replicaset ] - - minServerVersion: "4.2.0" - topologies: [ sharded ] - operations: - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ count ] - errorCode: 8 # UnknownError - - name: estimatedDocumentCount - object: *collection0 - expectError: - errorCode: 8 # UnknownError - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - count: *collection0Name - commandName: count - databaseName: *database0Name - - - description: "estimatedDocumentCount errors correctly--socket error" - runOnRequirements: - - minServerVersion: "4.0.0" - topologies: [ single, replicaset ] - - minServerVersion: "4.2.0" - topologies: [ sharded ] - operations: - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ count ] - closeConnection: true - - name: estimatedDocumentCount - object: *collection0 - expectError: - isError: true - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - count: *collection0Name - commandName: count - databaseName: *database0Name - - - description: "estimatedDocumentCount works correctly on views" - # viewOn option was added to the create command in 3.4 - runOnRequirements: - - minServerVersion: "3.4.0" - operations: - - name: dropCollection - object: *database0 - arguments: - collection: *collection0ViewName - - name: createCollection - object: *database0 - arguments: - collection: *collection0ViewName - viewOn: *collection0Name - pipeline: &pipeline - - { $match: { _id: { $gt: 1 } } } - - name: estimatedDocumentCount - object: *collection0View - expectResult: 2 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - drop: *collection0ViewName - commandName: drop - databaseName: *database0Name - - commandStartedEvent: - command: - create: *collection0ViewName - viewOn: *collection0Name - pipeline: *pipeline - commandName: create - databaseName: *database0Name - - commandStartedEvent: - command: - count: *collection0ViewName - commandName: count - databaseName: *database0Name diff --git a/testdata/crud/unified/find-allowdiskuse-clientError.json b/testdata/crud/unified/find-allowdiskuse-clientError.json deleted file mode 100644 index 5bd954e79d..0000000000 --- a/testdata/crud/unified/find-allowdiskuse-clientError.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "description": "find-allowdiskuse-clientError", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "maxServerVersion": "3.0.99" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test_find_allowdiskuse_clienterror" - } - } - ], - "tests": [ - { - "description": "Find fails when allowDiskUse true is specified against pre 3.2 server", - "operations": [ - { - "object": "collection0", - "name": "find", - "arguments": { - "filter": {}, - "allowDiskUse": true - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ] - }, - { - "description": "Find fails when allowDiskUse false is specified against pre 3.2 server", - "operations": [ - { - "object": "collection0", - "name": "find", - "arguments": { - "filter": {}, - "allowDiskUse": false - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ] - } - ] -} diff --git a/testdata/crud/unified/find-allowdiskuse-clientError.yml b/testdata/crud/unified/find-allowdiskuse-clientError.yml deleted file mode 100644 index 2bc26908fe..0000000000 --- a/testdata/crud/unified/find-allowdiskuse-clientError.yml +++ /dev/null @@ -1,55 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: find-allowdiskuse-clientError -schemaVersion: '1.0' -runOnRequirements: - - - maxServerVersion: 3.0.99 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name test_find_allowdiskuse_clienterror -tests: - - - description: 'Find fails when allowDiskUse true is specified against pre 3.2 server' - operations: - - - object: *collection0 - name: find - arguments: - filter: { } - allowDiskUse: true - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - - - description: 'Find fails when allowDiskUse false is specified against pre 3.2 server' - operations: - - - object: *collection0 - name: find - arguments: - filter: { } - allowDiskUse: false - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] diff --git a/testdata/crud/unified/find-allowdiskuse-serverError.json b/testdata/crud/unified/find-allowdiskuse-serverError.json deleted file mode 100644 index dc58f8f0e3..0000000000 --- a/testdata/crud/unified/find-allowdiskuse-serverError.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "description": "find-allowdiskuse-serverError", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "3.2", - "maxServerVersion": "4.3.0" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test_find_allowdiskuse_servererror" - } - } - ], - "tests": [ - { - "description": "Find fails when allowDiskUse true is specified against pre 4.4 server (server-side error)", - "operations": [ - { - "object": "collection0", - "name": "find", - "arguments": { - "filter": {}, - "allowDiskUse": true - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "test_find_allowdiskuse_servererror", - "filter": {}, - "allowDiskUse": true - } - } - } - ] - } - ] - }, - { - "description": "Find fails when allowDiskUse false is specified against pre 4.4 server (server-side error)", - "operations": [ - { - "object": "collection0", - "name": "find", - "arguments": { - "filter": {}, - "allowDiskUse": false - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "test_find_allowdiskuse_servererror", - "filter": {}, - "allowDiskUse": false - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/find-allowdiskuse-serverError.yml b/testdata/crud/unified/find-allowdiskuse-serverError.yml deleted file mode 100644 index de73d8b37d..0000000000 --- a/testdata/crud/unified/find-allowdiskuse-serverError.yml +++ /dev/null @@ -1,68 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: find-allowdiskuse-serverError -schemaVersion: '1.0' -runOnRequirements: - - - minServerVersion: '3.2' - maxServerVersion: 4.3.0 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name test_find_allowdiskuse_servererror -tests: - - - description: 'Find fails when allowDiskUse true is specified against pre 4.4 server (server-side error)' - operations: - - - object: *collection0 - name: find - arguments: - filter: &filter { } - allowDiskUse: true - expectError: - isError: true - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - find: *collection_name - filter: *filter - allowDiskUse: true - - - description: 'Find fails when allowDiskUse false is specified against pre 4.4 server (server-side error)' - operations: - - - object: *collection0 - name: find - arguments: - filter: *filter - allowDiskUse: false - expectError: - isError: true - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - find: *collection_name - filter: *filter - allowDiskUse: false diff --git a/testdata/crud/unified/find-allowdiskuse.json b/testdata/crud/unified/find-allowdiskuse.json deleted file mode 100644 index eb238ab93a..0000000000 --- a/testdata/crud/unified/find-allowdiskuse.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "description": "find-allowdiskuse", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test_find_allowdiskuse" - } - } - ], - "tests": [ - { - "description": "Find does not send allowDiskUse when value is not specified", - "operations": [ - { - "object": "collection0", - "name": "find", - "arguments": { - "filter": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "test_find_allowdiskuse", - "allowDiskUse": { - "$$exists": false - } - } - } - } - ] - } - ] - }, - { - "description": "Find sends allowDiskUse false when false is specified", - "operations": [ - { - "object": "collection0", - "name": "find", - "arguments": { - "filter": {}, - "allowDiskUse": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "test_find_allowdiskuse", - "allowDiskUse": false - } - } - } - ] - } - ] - }, - { - "description": "Find sends allowDiskUse true when true is specified", - "operations": [ - { - "object": "collection0", - "name": "find", - "arguments": { - "filter": {}, - "allowDiskUse": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "test_find_allowdiskuse", - "allowDiskUse": true - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/find-allowdiskuse.yml b/testdata/crud/unified/find-allowdiskuse.yml deleted file mode 100644 index 1bf8eee562..0000000000 --- a/testdata/crud/unified/find-allowdiskuse.yml +++ /dev/null @@ -1,79 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: find-allowdiskuse -schemaVersion: '1.0' -runOnRequirements: - - - minServerVersion: 4.3.1 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name test_find_allowdiskuse -tests: - - - description: 'Find does not send allowDiskUse when value is not specified' - operations: - - - object: *collection0 - name: find - arguments: - filter: { } - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - find: *collection_name - allowDiskUse: - $$exists: false - - - description: 'Find sends allowDiskUse false when false is specified' - operations: - - - object: *collection0 - name: find - arguments: - filter: { } - allowDiskUse: false - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - find: *collection_name - allowDiskUse: false - - - description: 'Find sends allowDiskUse true when true is specified' - operations: - - - object: *collection0 - name: find - arguments: - filter: { } - allowDiskUse: true - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - find: *collection_name - allowDiskUse: true diff --git a/testdata/crud/unified/find-comment.json b/testdata/crud/unified/find-comment.json deleted file mode 100644 index 600a3723f1..0000000000 --- a/testdata/crud/unified/find-comment.json +++ /dev/null @@ -1,403 +0,0 @@ -{ - "description": "find-comment", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 5, - "x": 55 - }, - { - "_id": 6, - "x": 66 - } - ] - } - ], - "tests": [ - { - "description": "find with string comment", - "runOnRequirements": [ - { - "minServerVersion": "3.6" - } - ], - "operations": [ - { - "name": "find", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "comment": "comment" - }, - "expectResult": [ - { - "_id": 1 - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "coll0", - "filter": { - "_id": 1 - }, - "comment": "comment" - } - } - } - ] - } - ] - }, - { - "description": "find with document comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "find", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "comment": { - "key": "value" - } - }, - "expectResult": [ - { - "_id": 1 - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "coll0", - "filter": { - "_id": 1 - }, - "comment": { - "key": "value" - } - } - } - } - ] - } - ] - }, - { - "description": "find with document comment - pre 4.4", - "runOnRequirements": [ - { - "maxServerVersion": "4.2.99", - "minServerVersion": "3.6" - } - ], - "operations": [ - { - "name": "find", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "comment": { - "key": "value" - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "coll0", - "filter": { - "_id": 1 - }, - "comment": { - "key": "value" - } - } - } - } - ] - } - ] - }, - { - "description": "find with comment sets comment on getMore", - "runOnRequirements": [ - { - "minServerVersion": "4.4.0" - } - ], - "operations": [ - { - "name": "find", - "object": "collection0", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "batchSize": 2, - "comment": { - "key": "value" - } - }, - "expectResult": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 5, - "x": 55 - }, - { - "_id": 6, - "x": 66 - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "coll0", - "filter": { - "_id": { - "$gt": 1 - } - }, - "batchSize": 2, - "comment": { - "key": "value" - } - } - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "coll0", - "batchSize": 2, - "comment": { - "key": "value" - } - } - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "coll0", - "batchSize": 2, - "comment": { - "key": "value" - } - } - } - } - ] - } - ] - }, - { - "description": "find with comment does not set comment on getMore - pre 4.4", - "runOnRequirements": [ - { - "minServerVersion": "3.6.0", - "maxServerVersion": "4.3.99" - } - ], - "operations": [ - { - "name": "find", - "object": "collection0", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "batchSize": 2, - "comment": "comment" - }, - "expectResult": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 5, - "x": 55 - }, - { - "_id": 6, - "x": 66 - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "coll0", - "filter": { - "_id": { - "$gt": 1 - } - }, - "batchSize": 2, - "comment": "comment" - } - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "coll0", - "batchSize": 2, - "comment": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "coll0", - "batchSize": 2, - "comment": { - "$$exists": false - } - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/find-comment.yml b/testdata/crud/unified/find-comment.yml deleted file mode 100644 index 905241ad0e..0000000000 --- a/testdata/crud/unified/find-comment.yml +++ /dev/null @@ -1,166 +0,0 @@ -description: "find-comment" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - - { _id: 4, x: 44 } - - { _id: 5, x: 55 } - - { _id: 6, x: 66 } - -tests: - - description: "find with string comment" - runOnRequirements: - - minServerVersion: "3.6" - operations: - - name: find - object: *collection0 - arguments: - filter: &filter - _id: 1 - comment: "comment" - expectResult: &expect_result - - { _id: 1 } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - find: *collection0Name - filter: *filter - comment: "comment" - - - description: "find with document comment" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: find - object: *collection0 - arguments: - filter: *filter - comment: &comment { key: "value"} - expectResult: *expect_result - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - find: *collection0Name - filter: *filter - comment: *comment - - - description: "find with document comment - pre 4.4" - runOnRequirements: - - maxServerVersion: "4.2.99" - minServerVersion: "3.6" - operations: - - name: find - object: *collection0 - arguments: - filter: *filter - comment: *comment - expectError: - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - find: *collection0Name - filter: *filter - comment: *comment - - - description: "find with comment sets comment on getMore" - runOnRequirements: - - minServerVersion: "4.4.0" - operations: - - name: find - object: *collection0 - arguments: - filter: &filter_get_more { _id: { $gt: 1 } } - batchSize: 2 - comment: *comment - expectResult: - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - - { _id: 4, x: 44 } - - { _id: 5, x: 55 } - - { _id: 6, x: 66 } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - find: *collection0Name - filter: { _id: { $gt: 1 } } - batchSize: 2 - comment: *comment - - commandStartedEvent: - command: - getMore: { $$type: [ int, long ] } - collection: *collection0Name - batchSize: 2 - comment: *comment - - commandStartedEvent: - command: - getMore: { $$type: [ int, long ] } - collection: *collection0Name - batchSize: 2 - comment: *comment - - - description: "find with comment does not set comment on getMore - pre 4.4" - runOnRequirements: - - minServerVersion: "3.6.0" - maxServerVersion: "4.3.99" - operations: - - name: find - object: *collection0 - arguments: - filter: &filter_get_more { _id: { $gt: 1 } } - batchSize: 2 - comment: "comment" - expectResult: - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - - { _id: 4, x: 44 } - - { _id: 5, x: 55 } - - { _id: 6, x: 66 } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - find: *collection0Name - filter: { _id: { $gt: 1 } } - batchSize: 2 - comment: "comment" - - commandStartedEvent: - command: - getMore: { $$type: [ int, long ] } - collection: *collection0Name - batchSize: 2 - comment: { $$exists: false } - - commandStartedEvent: - command: - getMore: { $$type: [ int, long ] } - collection: *collection0Name - batchSize: 2 - comment: { $$exists: false } diff --git a/testdata/crud/unified/find-let.json b/testdata/crud/unified/find-let.json deleted file mode 100644 index 4e9c9c99f4..0000000000 --- a/testdata/crud/unified/find-let.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "description": "find-let", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ], - "tests": [ - { - "description": "Find with let option", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "find", - "object": "collection0", - "arguments": { - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "let": { - "id": 1 - } - }, - "expectResult": [ - { - "_id": 1 - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "coll0", - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "let": { - "id": 1 - } - } - } - } - ] - } - ] - }, - { - "description": "Find with let option unsupported (server-side error)", - "runOnRequirements": [ - { - "minServerVersion": "3.6.0", - "maxServerVersion": "4.4.99" - } - ], - "operations": [ - { - "name": "find", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "let": { - "x": 1 - } - }, - "expectError": { - "errorContains": "Unrecognized field 'let'", - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "coll0", - "filter": { - "_id": 1 - }, - "let": { - "x": 1 - } - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/find-let.yml b/testdata/crud/unified/find-let.yml deleted file mode 100644 index 20afe85c87..0000000000 --- a/testdata/crud/unified/find-let.yml +++ /dev/null @@ -1,71 +0,0 @@ -description: "find-let" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } - -tests: - - description: "Find with let option" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: find - object: *collection0 - arguments: - filter: &filter - $expr: - $eq: [ "$_id", "$$id" ] - let: &let0 - id: 1 - expectResult: - - { _id: 1 } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - find: *collection0Name - filter: *filter - let: *let0 - - - description: "Find with let option unsupported (server-side error)" - runOnRequirements: - - minServerVersion: "3.6.0" - maxServerVersion: "4.4.99" - operations: - - name: find - object: *collection0 - arguments: - filter: &filter1 - _id: 1 - let: &let1 - x: 1 - expectError: - errorContains: "Unrecognized field 'let'" - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - find: *collection0Name - filter: *filter1 - let: *let1 diff --git a/testdata/crud/unified/find.json b/testdata/crud/unified/find.json deleted file mode 100644 index 275d5d351a..0000000000 --- a/testdata/crud/unified/find.json +++ /dev/null @@ -1,156 +0,0 @@ -{ - "description": "find", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "useMultipleMongoses": true, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "find-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "find-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 5, - "x": 55 - }, - { - "_id": 6, - "x": 66 - } - ] - } - ], - "tests": [ - { - "description": "find with multiple batches works", - "operations": [ - { - "name": "find", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "batchSize": 2 - }, - "object": "collection0", - "expectResult": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 5, - "x": 55 - }, - { - "_id": 6, - "x": 66 - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "coll0", - "filter": { - "_id": { - "$gt": 1 - } - }, - "batchSize": 2 - }, - "commandName": "find", - "databaseName": "find-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "coll0", - "batchSize": 2 - }, - "commandName": "getMore", - "databaseName": "find-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "coll0", - "batchSize": 2 - }, - "commandName": "getMore", - "databaseName": "find-tests" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/find.yml b/testdata/crud/unified/find.yml deleted file mode 100644 index 5615f07234..0000000000 --- a/testdata/crud/unified/find.yml +++ /dev/null @@ -1,68 +0,0 @@ -description: "find" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - useMultipleMongoses: true # ensure cursors pin to a single server - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name find-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - - { _id: 4, x: 44 } - - { _id: 5, x: 55 } - - { _id: 6, x: 66 } - -tests: - - description: "find with multiple batches works" - operations: - - name: find - arguments: - filter: { _id: { $gt: 1 } } - batchSize: 2 - object: *collection0 - expectResult: - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - - { _id: 4, x: 44 } - - { _id: 5, x: 55 } - - { _id: 6, x: 66 } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - find: *collection0Name - filter: { _id: { $gt: 1 } } - batchSize: 2 - commandName: find - databaseName: *database0Name - - commandStartedEvent: - command: - getMore: { $$type: [ int, long ] } - collection: *collection0Name - batchSize: 2 - commandName: getMore - databaseName: *database0Name - - commandStartedEvent: - command: - getMore: { $$type: [ int, long ] } - collection: *collection0Name - batchSize: 2 - commandName: getMore - databaseName: *database0Name - diff --git a/testdata/crud/unified/findOneAndDelete-comment.json b/testdata/crud/unified/findOneAndDelete-comment.json deleted file mode 100644 index 821c26e20d..0000000000 --- a/testdata/crud/unified/findOneAndDelete-comment.json +++ /dev/null @@ -1,211 +0,0 @@ -{ - "description": "findOneAndDelete-comment", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ], - "tests": [ - { - "description": "findOneAndDelete with string comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "findOneAndDelete", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "comment": "comment" - }, - "expectResult": { - "_id": 1 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "coll0", - "query": { - "_id": 1 - }, - "remove": true, - "comment": "comment" - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 2 - } - ] - } - ] - }, - { - "description": "findOneAndDelete with document comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "findOneAndDelete", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "comment": { - "key": "value" - } - }, - "expectResult": { - "_id": 1 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "coll0", - "query": { - "_id": 1 - }, - "remove": true, - "comment": { - "key": "value" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 2 - } - ] - } - ] - }, - { - "description": "findOneAndDelete with comment - pre 4.4", - "runOnRequirements": [ - { - "minServerVersion": "4.2.0", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "findOneAndDelete", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "comment": "comment" - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "coll0", - "query": { - "_id": 1 - }, - "remove": true, - "comment": "comment" - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/testdata/crud/unified/findOneAndDelete-comment.yml b/testdata/crud/unified/findOneAndDelete-comment.yml deleted file mode 100644 index dfa7ff2ce0..0000000000 --- a/testdata/crud/unified/findOneAndDelete-comment.yml +++ /dev/null @@ -1,96 +0,0 @@ -description: "findOneAndDelete-comment" -schemaVersion: "1.0" - - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } - -tests: - - description: "findOneAndDelete with string comment" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: findOneAndDelete - object: *collection0 - arguments: - filter: &filter - _id: 1 - comment: "comment" - expectResult: - _id: 1 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - findAndModify: *collection0Name - query: *filter - remove: true - comment: "comment" - outcome: &outcome - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 2 } - - - description: "findOneAndDelete with document comment" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: findOneAndDelete - object: *collection0 - arguments: - filter: *filter - comment: &comment { key: "value"} - expectResult: - _id: 1 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - findAndModify: *collection0Name - query: *filter - remove: true - comment: *comment - outcome: *outcome - - - description: "findOneAndDelete with comment - pre 4.4" - runOnRequirements: - - minServerVersion: "4.2.0" # findAndModify option validation was introduced in 4.2 - maxServerVersion: "4.2.99" - operations: - - name: findOneAndDelete - object: *collection0 - arguments: - filter: *filter - comment: "comment" - expectError: - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - findAndModify: *collection0Name - query: *filter - remove: true - comment: "comment" - outcome: *initialData diff --git a/testdata/crud/unified/findOneAndDelete-hint-clientError.json b/testdata/crud/unified/findOneAndDelete-hint-clientError.json deleted file mode 100644 index c6ff467866..0000000000 --- a/testdata/crud/unified/findOneAndDelete-hint-clientError.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "description": "findOneAndDelete-hint-clientError", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "maxServerVersion": "4.0.99" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "findOneAndDelete_hint" - } - } - ], - "initialData": [ - { - "collectionName": "findOneAndDelete_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ], - "tests": [ - { - "description": "FindOneAndDelete with hint string unsupported (client-side error)", - "operations": [ - { - "object": "collection0", - "name": "findOneAndDelete", - "arguments": { - "filter": { - "_id": 1 - }, - "hint": "_id_" - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "findOneAndDelete_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "FindOneAndDelete with hint document", - "operations": [ - { - "object": "collection0", - "name": "findOneAndDelete", - "arguments": { - "filter": { - "_id": 1 - }, - "hint": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "findOneAndDelete_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/findOneAndDelete-hint-clientError.yml b/testdata/crud/unified/findOneAndDelete-hint-clientError.yml deleted file mode 100644 index 220496872a..0000000000 --- a/testdata/crud/unified/findOneAndDelete-hint-clientError.yml +++ /dev/null @@ -1,91 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: findOneAndDelete-hint-clientError -schemaVersion: '1.0' -runOnRequirements: - - - maxServerVersion: 4.0.99 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name findOneAndDelete_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 -tests: - - - description: 'FindOneAndDelete with hint string unsupported (client-side error)' - operations: - - - object: *collection0 - name: findOneAndDelete - arguments: - filter: &filter - _id: 1 - hint: _id_ - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - description: 'FindOneAndDelete with hint document' - operations: - - - object: *collection0 - name: findOneAndDelete - arguments: - filter: &filter - _id: 1 - hint: - _id: 1 - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 diff --git a/testdata/crud/unified/findOneAndDelete-hint-serverError.json b/testdata/crud/unified/findOneAndDelete-hint-serverError.json deleted file mode 100644 index b874102728..0000000000 --- a/testdata/crud/unified/findOneAndDelete-hint-serverError.json +++ /dev/null @@ -1,162 +0,0 @@ -{ - "description": "findOneAndDelete-hint-serverError", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "4.2.0", - "maxServerVersion": "4.3.3" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "findOneAndDelete_hint" - } - } - ], - "initialData": [ - { - "collectionName": "findOneAndDelete_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ], - "tests": [ - { - "description": "FindOneAndDelete with hint string unsupported (server-side error)", - "operations": [ - { - "object": "collection0", - "name": "findOneAndDelete", - "arguments": { - "filter": { - "_id": 1 - }, - "hint": "_id_" - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "findOneAndDelete_hint", - "query": { - "_id": 1 - }, - "hint": "_id_", - "remove": true - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "findOneAndDelete_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "FindOneAndDelete with hint document unsupported (server-side error)", - "operations": [ - { - "object": "collection0", - "name": "findOneAndDelete", - "arguments": { - "filter": { - "_id": 1 - }, - "hint": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "findOneAndDelete_hint", - "query": { - "_id": 1 - }, - "hint": { - "_id": 1 - }, - "remove": true - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "findOneAndDelete_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/findOneAndDelete-hint-serverError.yml b/testdata/crud/unified/findOneAndDelete-hint-serverError.yml deleted file mode 100644 index 5fd21eedc0..0000000000 --- a/testdata/crud/unified/findOneAndDelete-hint-serverError.yml +++ /dev/null @@ -1,107 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: findOneAndDelete-hint-serverError -schemaVersion: '1.0' -runOnRequirements: - - - minServerVersion: 4.2.0 - maxServerVersion: 4.3.3 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name findOneAndDelete_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 -tests: - - - description: 'FindOneAndDelete with hint string unsupported (server-side error)' - operations: - - - object: *collection0 - name: findOneAndDelete - arguments: - filter: &filter - _id: 1 - hint: _id_ - expectError: - isError: true - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - findAndModify: *collection_name - query: *filter - hint: _id_ - remove: true - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - description: 'FindOneAndDelete with hint document unsupported (server-side error)' - operations: - - - object: *collection0 - name: findOneAndDelete - arguments: - filter: &filter - _id: 1 - hint: - _id: 1 - expectError: - isError: true - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - findAndModify: *collection_name - query: *filter - hint: - _id: 1 - remove: true - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 diff --git a/testdata/crud/unified/findOneAndDelete-hint.json b/testdata/crud/unified/findOneAndDelete-hint.json deleted file mode 100644 index 8b53f2bd3f..0000000000 --- a/testdata/crud/unified/findOneAndDelete-hint.json +++ /dev/null @@ -1,155 +0,0 @@ -{ - "description": "findOneAndDelete-hint", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "4.3.4" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "findOneAndDelete_hint" - } - } - ], - "initialData": [ - { - "collectionName": "findOneAndDelete_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ], - "tests": [ - { - "description": "FindOneAndDelete with hint string", - "operations": [ - { - "object": "collection0", - "name": "findOneAndDelete", - "arguments": { - "filter": { - "_id": 1 - }, - "hint": "_id_" - }, - "expectResult": { - "_id": 1, - "x": 11 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "findOneAndDelete_hint", - "query": { - "_id": 1 - }, - "hint": "_id_", - "remove": true - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "findOneAndDelete_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "FindOneAndDelete with hint document", - "operations": [ - { - "object": "collection0", - "name": "findOneAndDelete", - "arguments": { - "filter": { - "_id": 1 - }, - "hint": { - "_id": 1 - } - }, - "expectResult": { - "_id": 1, - "x": 11 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "findOneAndDelete_hint", - "query": { - "_id": 1 - }, - "hint": { - "_id": 1 - }, - "remove": true - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "findOneAndDelete_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 2, - "x": 22 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/findOneAndDelete-hint.yml b/testdata/crud/unified/findOneAndDelete-hint.yml deleted file mode 100644 index 3dc4f3ff41..0000000000 --- a/testdata/crud/unified/findOneAndDelete-hint.yml +++ /dev/null @@ -1,102 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: findOneAndDelete-hint -schemaVersion: '1.0' -runOnRequirements: - - - minServerVersion: 4.3.4 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name findOneAndDelete_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 -tests: - - - description: 'FindOneAndDelete with hint string' - operations: - - - object: *collection0 - name: findOneAndDelete - arguments: - filter: &filter - _id: 1 - hint: _id_ - expectResult: &result - _id: 1 - x: 11 - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - findAndModify: *collection_name - query: *filter - hint: _id_ - remove: true - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 2 - x: 22 - - - description: 'FindOneAndDelete with hint document' - operations: - - - object: *collection0 - name: findOneAndDelete - arguments: - filter: &filter - _id: 1 - hint: - _id: 1 - expectResult: &result - _id: 1 - x: 11 - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - findAndModify: *collection_name - query: *filter - hint: - _id: 1 - remove: true - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 2 - x: 22 diff --git a/testdata/crud/unified/findOneAndDelete-let.json b/testdata/crud/unified/findOneAndDelete-let.json deleted file mode 100644 index ba8e681c0e..0000000000 --- a/testdata/crud/unified/findOneAndDelete-let.json +++ /dev/null @@ -1,180 +0,0 @@ -{ - "description": "findOneAndDelete-let", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ], - "tests": [ - { - "description": "findOneAndDelete with let option", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "findOneAndDelete", - "object": "collection0", - "arguments": { - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "let": { - "id": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "coll0", - "query": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "remove": true, - "let": { - "id": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 2 - } - ] - } - ] - }, - { - "description": "findOneAndDelete with let option unsupported (server-side error)", - "runOnRequirements": [ - { - "minServerVersion": "4.2.0", - "maxServerVersion": "4.4.99" - } - ], - "operations": [ - { - "name": "findOneAndDelete", - "object": "collection0", - "arguments": { - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "let": { - "id": 1 - } - }, - "expectError": { - "errorContains": "field 'let' is an unknown field", - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "coll0", - "query": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "remove": true, - "let": { - "id": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/findOneAndDelete-let.yml b/testdata/crud/unified/findOneAndDelete-let.yml deleted file mode 100644 index 0174af0a2b..0000000000 --- a/testdata/crud/unified/findOneAndDelete-let.yml +++ /dev/null @@ -1,86 +0,0 @@ -description: "findOneAndDelete-let" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } - -tests: - - description: "findOneAndDelete with let option" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: findOneAndDelete - object: *collection0 - arguments: - filter: &filter - $expr: - $eq: [ "$_id", "$$id" ] - let: &let0 - id: 1 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - findAndModify: *collection0Name - query: *filter - remove: true - let: *let0 - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 2 } - - - description: "findOneAndDelete with let option unsupported (server-side error)" - runOnRequirements: - - minServerVersion: "4.2.0" - maxServerVersion: "4.4.99" - operations: - - name: findOneAndDelete - object: *collection0 - arguments: - filter: &filter1 - $expr: - $eq: [ "$_id", "$$id" ] - let: &let1 - id: 1 - expectError: - # This error message is consistent between 4.2.x and 4.4.x servers. - # Older servers return a different error message. - errorContains: "field 'let' is an unknown field" - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - findAndModify: *collection0Name - query: *filter1 - remove: true - let: *let1 - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } - diff --git a/testdata/crud/unified/findOneAndReplace-comment.json b/testdata/crud/unified/findOneAndReplace-comment.json deleted file mode 100644 index 06a3bbc68b..0000000000 --- a/testdata/crud/unified/findOneAndReplace-comment.json +++ /dev/null @@ -1,234 +0,0 @@ -{ - "description": "findOneAndReplace-comment", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ], - "tests": [ - { - "description": "findOneAndReplace with string comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "findOneAndReplace", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "x": 5 - }, - "comment": "comment" - }, - "expectResult": { - "_id": 1 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "coll0", - "query": { - "_id": 1 - }, - "update": { - "x": 5 - }, - "comment": "comment" - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 5 - }, - { - "_id": 2 - } - ] - } - ] - }, - { - "description": "findOneAndReplace with document comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "findOneAndReplace", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "x": 5 - }, - "comment": { - "key": "value" - } - }, - "expectResult": { - "_id": 1 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "coll0", - "query": { - "_id": 1 - }, - "update": { - "x": 5 - }, - "comment": { - "key": "value" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 5 - }, - { - "_id": 2 - } - ] - } - ] - }, - { - "description": "findOneAndReplace with comment - pre 4.4", - "runOnRequirements": [ - { - "minServerVersion": "4.2.0", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "findOneAndReplace", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "x": 5 - }, - "comment": "comment" - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "coll0", - "query": { - "_id": 1 - }, - "update": { - "x": 5 - }, - "comment": "comment" - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ] - } - ] - } \ No newline at end of file diff --git a/testdata/crud/unified/findOneAndReplace-comment.yml b/testdata/crud/unified/findOneAndReplace-comment.yml deleted file mode 100644 index 2c6aaef07b..0000000000 --- a/testdata/crud/unified/findOneAndReplace-comment.yml +++ /dev/null @@ -1,101 +0,0 @@ -description: "findOneAndReplace-comment" -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } - -tests: - - description: "findOneAndReplace with string comment" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: findOneAndReplace - object: *collection0 - arguments: - filter: &filter - _id: 1 - replacement: &replacement - x: 5 - comment: "comment" - expectResult: - _id: 1 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - findAndModify: *collection0Name - query: *filter - update: *replacement - comment: "comment" - outcome: &outcome - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 5 } - - { _id: 2 } - - - description: "findOneAndReplace with document comment" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: findOneAndReplace - object: *collection0 - arguments: - filter: *filter - replacement: *replacement - comment: &comment { key: "value"} - expectResult: - _id: 1 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - findAndModify: *collection0Name - query: *filter - update: *replacement - comment: *comment - outcome: *outcome - - - - description: "findOneAndReplace with comment - pre 4.4" - runOnRequirements: - - minServerVersion: "4.2.0" # findAndModify option validation was introduced in 4.2 - maxServerVersion: "4.2.99" - operations: - - name: findOneAndReplace - object: *collection0 - arguments: - filter: *filter - replacement: *replacement - comment: "comment" - expectError: - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - findAndModify: *collection0Name - query: *filter - update: *replacement - comment: "comment" - outcome: *initialData diff --git a/testdata/crud/unified/findOneAndReplace-dots_and_dollars.json b/testdata/crud/unified/findOneAndReplace-dots_and_dollars.json deleted file mode 100644 index 19ac447f84..0000000000 --- a/testdata/crud/unified/findOneAndReplace-dots_and_dollars.json +++ /dev/null @@ -1,430 +0,0 @@ -{ - "description": "findOneAndReplace-dots_and_dollars", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - } - ] - } - ], - "tests": [ - { - "description": "Replacing document with top-level dotted key on 3.6+ server", - "runOnRequirements": [ - { - "minServerVersion": "3.6" - } - ], - "operations": [ - { - "name": "findOneAndReplace", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "_id": 1, - "a.b": 1 - } - }, - "expectResult": { - "_id": 1 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "coll0", - "query": { - "_id": 1 - }, - "update": { - "_id": 1, - "a.b": 1 - }, - "new": { - "$$unsetOrMatches": false - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "a.b": 1 - } - ] - } - ] - }, - { - "description": "Replacing document with top-level dotted key on pre-3.6 server yields server-side error", - "runOnRequirements": [ - { - "maxServerVersion": "3.4.99" - } - ], - "operations": [ - { - "name": "findOneAndReplace", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "_id": 1, - "a.b": 1 - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "coll0", - "query": { - "_id": 1 - }, - "update": { - "_id": 1, - "a.b": 1 - }, - "new": { - "$$unsetOrMatches": false - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - } - ] - } - ] - }, - { - "description": "Replacing document with dollar-prefixed key in embedded doc on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "findOneAndReplace", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "_id": 1, - "a": { - "$b": 1 - } - } - }, - "expectResult": { - "_id": 1 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "coll0", - "query": { - "_id": 1 - }, - "update": { - "_id": 1, - "a": { - "$b": 1 - } - }, - "new": { - "$$unsetOrMatches": false - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "a": { - "$b": 1 - } - } - ] - } - ] - }, - { - "description": "Replacing document with dollar-prefixed key in embedded doc on pre-5.0 server yields server-side error", - "runOnRequirements": [ - { - "maxServerVersion": "4.99" - } - ], - "operations": [ - { - "name": "findOneAndReplace", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "_id": 1, - "a": { - "$b": 1 - } - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "coll0", - "query": { - "_id": 1 - }, - "update": { - "_id": 1, - "a": { - "$b": 1 - } - }, - "new": { - "$$unsetOrMatches": false - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - } - ] - } - ] - }, - { - "description": "Replacing document with dotted key in embedded doc on 3.6+ server", - "runOnRequirements": [ - { - "minServerVersion": "3.6" - } - ], - "operations": [ - { - "name": "findOneAndReplace", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "_id": 1, - "a": { - "b.c": 1 - } - } - }, - "expectResult": { - "_id": 1 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "coll0", - "query": { - "_id": 1 - }, - "update": { - "_id": 1, - "a": { - "b.c": 1 - } - }, - "new": { - "$$unsetOrMatches": false - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "a": { - "b.c": 1 - } - } - ] - } - ] - }, - { - "description": "Replacing document with dotted key in embedded doc on pre-3.6 server yields server-side error", - "runOnRequirements": [ - { - "maxServerVersion": "3.4.99" - } - ], - "operations": [ - { - "name": "findOneAndReplace", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "_id": 1, - "a": { - "b.c": 1 - } - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "coll0", - "query": { - "_id": 1 - }, - "update": { - "_id": 1, - "a": { - "b.c": 1 - } - }, - "new": { - "$$unsetOrMatches": false - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/findOneAndReplace-dots_and_dollars.yml b/testdata/crud/unified/findOneAndReplace-dots_and_dollars.yml deleted file mode 100644 index 0823824cca..0000000000 --- a/testdata/crud/unified/findOneAndReplace-dots_and_dollars.yml +++ /dev/null @@ -1,140 +0,0 @@ -description: "findOneAndReplace-dots_and_dollars" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - &initialDocument { _id: 1 } - -tests: - - description: "Replacing document with top-level dotted key on 3.6+ server" - runOnRequirements: - - minServerVersion: "3.6" - operations: - - name: findOneAndReplace - object: *collection0 - arguments: - filter: { _id: 1 } - replacement: &dottedKey { _id: 1, a.b: 1 } - expectResult: *initialDocument - expectEvents: &expectEventsDottedKey - - client: *client0 - events: - - commandStartedEvent: - command: - findAndModify: *collection0Name - query: { _id: 1 } - update: *dottedKey - new: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *dottedKey - - - description: "Replacing document with top-level dotted key on pre-3.6 server yields server-side error" - runOnRequirements: - - maxServerVersion: "3.4.99" - operations: - - name: findOneAndReplace - object: *collection0 - arguments: - filter: { _id: 1 } - replacement: *dottedKey - expectError: - isClientError: false - expectEvents: *expectEventsDottedKey - outcome: *initialData - - - description: "Replacing document with dollar-prefixed key in embedded doc on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: findOneAndReplace - object: *collection0 - arguments: - filter: { _id: 1 } - replacement: &dollarPrefixedKeyInEmbedded { _id: 1, a: { $b: 1 } } - expectResult: *initialDocument - expectEvents: &expectEventsDollarPrefixedKeyInEmbedded - - client: *client0 - events: - - commandStartedEvent: - command: - findAndModify: *collection0Name - query: { _id: 1 } - update: *dollarPrefixedKeyInEmbedded - new: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *dollarPrefixedKeyInEmbedded - - - description: "Replacing document with dollar-prefixed key in embedded doc on pre-5.0 server yields server-side error" - runOnRequirements: - - maxServerVersion: "4.99" - operations: - - name: findOneAndReplace - object: *collection0 - arguments: - filter: { _id: 1 } - replacement: *dollarPrefixedKeyInEmbedded - expectError: - isClientError: false - expectEvents: *expectEventsDollarPrefixedKeyInEmbedded - outcome: *initialData - - - description: "Replacing document with dotted key in embedded doc on 3.6+ server" - runOnRequirements: - - minServerVersion: "3.6" - operations: - - name: findOneAndReplace - object: *collection0 - arguments: - filter: { _id: 1 } - replacement: &dottedKeyInEmbedded { _id: 1, a: { b.c: 1 } } - expectResult: *initialDocument - expectEvents: &expectEventsDottedKeyInEmbedded - - client: *client0 - events: - - commandStartedEvent: - command: - findAndModify: *collection0Name - query: { _id: 1 } - update: *dottedKeyInEmbedded - new: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *dottedKeyInEmbedded - - - description: "Replacing document with dotted key in embedded doc on pre-3.6 server yields server-side error" - runOnRequirements: - - maxServerVersion: "3.4.99" - operations: - - name: findOneAndReplace - object: *collection0 - arguments: - filter: { _id: 1 } - replacement: *dottedKeyInEmbedded - expectError: - isClientError: false - expectEvents: *expectEventsDottedKeyInEmbedded - outcome: *initialData diff --git a/testdata/crud/unified/findOneAndReplace-hint-clientError.json b/testdata/crud/unified/findOneAndReplace-hint-clientError.json deleted file mode 100644 index 6b07eb1f4d..0000000000 --- a/testdata/crud/unified/findOneAndReplace-hint-clientError.json +++ /dev/null @@ -1,139 +0,0 @@ -{ - "description": "findOneAndReplace-hint-clientError", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "maxServerVersion": "4.0.99" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "findOneAndReplace_hint" - } - } - ], - "initialData": [ - { - "collectionName": "findOneAndReplace_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ], - "tests": [ - { - "description": "FindOneAndReplace with hint string unsupported (client-side error)", - "operations": [ - { - "object": "collection0", - "name": "findOneAndReplace", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "x": 33 - }, - "hint": "_id_" - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "findOneAndReplace_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "FindOneAndReplace with hint document unsupported (client-side error)", - "operations": [ - { - "object": "collection0", - "name": "findOneAndReplace", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "x": 33 - }, - "hint": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "findOneAndReplace_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/findOneAndReplace-hint-clientError.yml b/testdata/crud/unified/findOneAndReplace-hint-clientError.yml deleted file mode 100644 index f59952ffc0..0000000000 --- a/testdata/crud/unified/findOneAndReplace-hint-clientError.yml +++ /dev/null @@ -1,83 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: findOneAndReplace-hint-clientError -schemaVersion: '1.0' -runOnRequirements: - - - maxServerVersion: 4.0.99 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name findOneAndReplace_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 -tests: - - - description: 'FindOneAndReplace with hint string unsupported (client-side error)' - operations: - - - object: *collection0 - name: findOneAndReplace - arguments: - filter: &filter - _id: 1 - replacement: &replacement - x: 33 - hint: _id_ - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - description: 'FindOneAndReplace with hint document unsupported (client-side error)' - operations: - - - object: *collection0 - name: findOneAndReplace - arguments: - filter: *filter - replacement: *replacement - hint: - _id: 1 - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: *outcome diff --git a/testdata/crud/unified/findOneAndReplace-hint-serverError.json b/testdata/crud/unified/findOneAndReplace-hint-serverError.json deleted file mode 100644 index 7fbf5a0ea3..0000000000 --- a/testdata/crud/unified/findOneAndReplace-hint-serverError.json +++ /dev/null @@ -1,172 +0,0 @@ -{ - "description": "findOneAndReplace-hint-serverError", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "4.2.0", - "maxServerVersion": "4.3.0" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "findOneAndReplace_hint" - } - } - ], - "initialData": [ - { - "collectionName": "findOneAndReplace_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ], - "tests": [ - { - "description": "FindOneAndReplace with hint string unsupported (server-side error)", - "operations": [ - { - "object": "collection0", - "name": "findOneAndReplace", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "x": 33 - }, - "hint": "_id_" - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "findOneAndReplace_hint", - "query": { - "_id": 1 - }, - "update": { - "x": 33 - }, - "hint": "_id_" - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "findOneAndReplace_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "FindOneAndReplace with hint document unsupported (server-side error)", - "operations": [ - { - "object": "collection0", - "name": "findOneAndReplace", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "x": 33 - }, - "hint": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "findOneAndReplace_hint", - "query": { - "_id": 1 - }, - "update": { - "x": 33 - }, - "hint": { - "_id": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "findOneAndReplace_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/findOneAndReplace-hint-serverError.yml b/testdata/crud/unified/findOneAndReplace-hint-serverError.yml deleted file mode 100644 index 664cd0bbc5..0000000000 --- a/testdata/crud/unified/findOneAndReplace-hint-serverError.yml +++ /dev/null @@ -1,99 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: findOneAndReplace-hint-serverError -schemaVersion: '1.0' -runOnRequirements: - - - minServerVersion: 4.2.0 - maxServerVersion: 4.3.0 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name findOneAndReplace_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 -tests: - - - description: 'FindOneAndReplace with hint string unsupported (server-side error)' - operations: - - - object: *collection0 - name: findOneAndReplace - arguments: - filter: &filter - _id: 1 - replacement: &replacement - x: 33 - hint: _id_ - expectError: - isError: true - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - findAndModify: *collection_name - query: *filter - update: *replacement - hint: _id_ - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - description: 'FindOneAndReplace with hint document unsupported (server-side error)' - operations: - - - object: *collection0 - name: findOneAndReplace - arguments: - filter: *filter - replacement: *replacement - hint: - _id: 1 - expectError: - isError: true - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - findAndModify: *collection_name - query: *filter - update: *replacement - hint: - _id: 1 - outcome: *outcome diff --git a/testdata/crud/unified/findOneAndReplace-hint.json b/testdata/crud/unified/findOneAndReplace-hint.json deleted file mode 100644 index d07c5921a7..0000000000 --- a/testdata/crud/unified/findOneAndReplace-hint.json +++ /dev/null @@ -1,173 +0,0 @@ -{ - "description": "findOneAndReplace-hint", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "findOneAndReplace_hint" - } - } - ], - "initialData": [ - { - "collectionName": "findOneAndReplace_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ], - "tests": [ - { - "description": "FindOneAndReplace with hint string", - "operations": [ - { - "object": "collection0", - "name": "findOneAndReplace", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "x": 33 - }, - "hint": "_id_" - }, - "expectResult": { - "_id": 1, - "x": 11 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "findOneAndReplace_hint", - "query": { - "_id": 1 - }, - "update": { - "x": 33 - }, - "hint": "_id_" - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "findOneAndReplace_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 33 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "FindOneAndReplace with hint document", - "operations": [ - { - "object": "collection0", - "name": "findOneAndReplace", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "x": 33 - }, - "hint": { - "_id": 1 - } - }, - "expectResult": { - "_id": 1, - "x": 11 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "findOneAndReplace_hint", - "query": { - "_id": 1 - }, - "update": { - "x": 33 - }, - "hint": { - "_id": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "findOneAndReplace_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 33 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/findOneAndReplace-hint.yml b/testdata/crud/unified/findOneAndReplace-hint.yml deleted file mode 100644 index 9c581270a7..0000000000 --- a/testdata/crud/unified/findOneAndReplace-hint.yml +++ /dev/null @@ -1,98 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: findOneAndReplace-hint -schemaVersion: '1.0' -runOnRequirements: - - - minServerVersion: 4.3.1 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name findOneAndReplace_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 -tests: - - - description: 'FindOneAndReplace with hint string' - operations: - - - object: *collection0 - name: findOneAndReplace - arguments: - filter: &filter - _id: 1 - replacement: &replacement - x: 33 - hint: _id_ - expectResult: &result - _id: 1 - x: 11 - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - findAndModify: *collection_name - query: *filter - update: *replacement - hint: _id_ - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 33 - - - _id: 2 - x: 22 - - - description: 'FindOneAndReplace with hint document' - operations: - - - object: *collection0 - name: findOneAndReplace - arguments: - filter: *filter - replacement: *replacement - hint: - _id: 1 - expectResult: *result - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - findAndModify: *collection_name - query: *filter - update: *replacement - hint: - _id: 1 - outcome: *outcome diff --git a/testdata/crud/unified/findOneAndReplace-let.json b/testdata/crud/unified/findOneAndReplace-let.json deleted file mode 100644 index 5e5de44b31..0000000000 --- a/testdata/crud/unified/findOneAndReplace-let.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "description": "findOneAndReplace-let", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ], - "tests": [ - { - "description": "findOneAndReplace with let option", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "findOneAndReplace", - "object": "collection0", - "arguments": { - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "replacement": { - "x": "x" - }, - "let": { - "id": 1 - } - }, - "expectResult": { - "_id": 1 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "coll0", - "query": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "update": { - "x": "x" - }, - "let": { - "id": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": "x" - }, - { - "_id": 2 - } - ] - } - ] - }, - { - "description": "findOneAndReplace with let option unsupported (server-side error)", - "runOnRequirements": [ - { - "minServerVersion": "4.2.0", - "maxServerVersion": "4.4.99" - } - ], - "operations": [ - { - "name": "findOneAndReplace", - "object": "collection0", - "arguments": { - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "replacement": { - "x": "x" - }, - "let": { - "id": 1 - } - }, - "expectError": { - "errorContains": "field 'let' is an unknown field", - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "coll0", - "query": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "update": { - "x": "x" - }, - "let": { - "id": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/findOneAndReplace-let.yml b/testdata/crud/unified/findOneAndReplace-let.yml deleted file mode 100644 index 3ee1b7b672..0000000000 --- a/testdata/crud/unified/findOneAndReplace-let.yml +++ /dev/null @@ -1,94 +0,0 @@ -description: "findOneAndReplace-let" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } - -tests: - - description: "findOneAndReplace with let option" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: findOneAndReplace - object: *collection0 - arguments: - filter: &filter - $expr: - $eq: [ "$_id", "$$id" ] - replacement: &replacement - x: "x" - let: &let0 - id: 1 - expectResult: - _id: 1 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - findAndModify: *collection0Name - query: *filter - update: *replacement - let: *let0 - outcome: - - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: "x" } - - { _id: 2 } - - - description: "findOneAndReplace with let option unsupported (server-side error)" - runOnRequirements: - - minServerVersion: "4.2.0" - maxServerVersion: "4.4.99" - operations: - - name: findOneAndReplace - object: *collection0 - arguments: - filter: &filter1 - $expr: - $eq: [ "$_id", "$$id" ] - replacement: &replacement1 - x: "x" - let: &let1 - id: 1 - expectError: - # This error message is consistent between 4.2.x and 4.4.x servers. - # Older servers return a different error message. - errorContains: "field 'let' is an unknown field" - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - findAndModify: *collection0Name - query: *filter1 - update: *replacement1 - let: *let1 - outcome: - - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } diff --git a/testdata/crud/unified/findOneAndUpdate-comment.json b/testdata/crud/unified/findOneAndUpdate-comment.json deleted file mode 100644 index 9f042fdc13..0000000000 --- a/testdata/crud/unified/findOneAndUpdate-comment.json +++ /dev/null @@ -1,228 +0,0 @@ -{ - "description": "findOneAndUpdate-comment", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ], - "tests": [ - { - "description": "findOneAndUpdate with string comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "findOneAndUpdate", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$set": { - "x": 5 - } - } - ], - "comment": "comment" - }, - "expectResult": { - "_id": 1 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "coll0", - "query": { - "_id": 1 - }, - "update": [ - { - "$set": { - "x": 5 - } - } - ], - "comment": "comment" - } - } - } - ] - } - ] - }, - { - "description": "findOneAndUpdate with document comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "findOneAndUpdate", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$set": { - "x": 5 - } - } - ], - "comment": { - "key": "value" - } - }, - "expectResult": { - "_id": 1 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "coll0", - "query": { - "_id": 1 - }, - "update": [ - { - "$set": { - "x": 5 - } - } - ], - "comment": { - "key": "value" - } - } - } - } - ] - } - ] - }, - { - "description": "findOneAndUpdate with comment - pre 4.4", - "runOnRequirements": [ - { - "minServerVersion": "4.2.0", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "findOneAndUpdate", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$set": { - "x": 5 - } - } - ], - "comment": "comment" - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "coll0", - "query": { - "_id": 1 - }, - "update": [ - { - "$set": { - "x": 5 - } - } - ], - "comment": "comment" - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/testdata/crud/unified/findOneAndUpdate-comment.yml b/testdata/crud/unified/findOneAndUpdate-comment.yml deleted file mode 100644 index 66d2d099c1..0000000000 --- a/testdata/crud/unified/findOneAndUpdate-comment.yml +++ /dev/null @@ -1,95 +0,0 @@ -description: "findOneAndUpdate-comment" -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } - -tests: - - description: "findOneAndUpdate with string comment" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: findOneAndUpdate - object: *collection0 - arguments: - filter: &filter - _id: 1 - update: &update - - $set: {x: 5 } - comment: "comment" - expectResult: - _id: 1 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - findAndModify: *collection0Name - query: *filter - update: *update - comment: "comment" - - - description: "findOneAndUpdate with document comment" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: findOneAndUpdate - object: *collection0 - arguments: - filter: &filter - _id: 1 - update: &update - - $set: {x: 5 } - comment: &comment { key: "value"} - expectResult: - _id: 1 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - findAndModify: *collection0Name - query: *filter - update: *update - comment: *comment - - - description: "findOneAndUpdate with comment - pre 4.4" - runOnRequirements: - - minServerVersion: "4.2.0" # findAndModify option validation was introduced in 4.2 - maxServerVersion: "4.2.99" - operations: - - name: findOneAndUpdate - object: *collection0 - arguments: - filter: *filter - update: *update - comment: "comment" - expectError: - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - findAndModify: *collection0Name - query: *filter - update: *update - comment: "comment" - outcome: *initialData diff --git a/testdata/crud/unified/findOneAndUpdate-dots_and_dollars.json b/testdata/crud/unified/findOneAndUpdate-dots_and_dollars.json deleted file mode 100644 index 40eb547392..0000000000 --- a/testdata/crud/unified/findOneAndUpdate-dots_and_dollars.json +++ /dev/null @@ -1,380 +0,0 @@ -{ - "description": "findOneAndUpdate-dots_and_dollars", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "foo": {} - } - ] - } - ], - "tests": [ - { - "description": "Updating document to set top-level dollar-prefixed key on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "findOneAndUpdate", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$replaceWith": { - "$setField": { - "field": { - "$literal": "$a" - }, - "value": 1, - "input": "$$ROOT" - } - } - } - ] - }, - "expectResult": { - "_id": 1, - "foo": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "coll0", - "query": { - "_id": 1 - }, - "update": [ - { - "$replaceWith": { - "$setField": { - "field": { - "$literal": "$a" - }, - "value": 1, - "input": "$$ROOT" - } - } - } - ], - "new": { - "$$unsetOrMatches": false - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "foo": {}, - "$a": 1 - } - ] - } - ] - }, - { - "description": "Updating document to set top-level dotted key on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "findOneAndUpdate", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$replaceWith": { - "$setField": { - "field": { - "$literal": "a.b" - }, - "value": 1, - "input": "$$ROOT" - } - } - } - ] - }, - "expectResult": { - "_id": 1, - "foo": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "coll0", - "query": { - "_id": 1 - }, - "update": [ - { - "$replaceWith": { - "$setField": { - "field": { - "$literal": "a.b" - }, - "value": 1, - "input": "$$ROOT" - } - } - } - ], - "new": { - "$$unsetOrMatches": false - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "foo": {}, - "a.b": 1 - } - ] - } - ] - }, - { - "description": "Updating document to set dollar-prefixed key in embedded doc on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "findOneAndUpdate", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$set": { - "foo": { - "$setField": { - "field": { - "$literal": "$a" - }, - "value": 1, - "input": "$foo" - } - } - } - } - ] - }, - "expectResult": { - "_id": 1, - "foo": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "coll0", - "query": { - "_id": 1 - }, - "update": [ - { - "$set": { - "foo": { - "$setField": { - "field": { - "$literal": "$a" - }, - "value": 1, - "input": "$foo" - } - } - } - } - ], - "new": { - "$$unsetOrMatches": false - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "foo": { - "$a": 1 - } - } - ] - } - ] - }, - { - "description": "Updating document to set dotted key in embedded doc on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "findOneAndUpdate", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$set": { - "foo": { - "$setField": { - "field": { - "$literal": "a.b" - }, - "value": 1, - "input": "$foo" - } - } - } - } - ] - }, - "expectResult": { - "_id": 1, - "foo": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "coll0", - "query": { - "_id": 1 - }, - "update": [ - { - "$set": { - "foo": { - "$setField": { - "field": { - "$literal": "a.b" - }, - "value": 1, - "input": "$foo" - } - } - } - } - ], - "new": { - "$$unsetOrMatches": false - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "foo": { - "a.b": 1 - } - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/findOneAndUpdate-dots_and_dollars.yml b/testdata/crud/unified/findOneAndUpdate-dots_and_dollars.yml deleted file mode 100644 index 69b46a15bc..0000000000 --- a/testdata/crud/unified/findOneAndUpdate-dots_and_dollars.yml +++ /dev/null @@ -1,127 +0,0 @@ -description: "findOneAndUpdate-dots_and_dollars" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - &initialDocument { _id: 1, foo: {} } - -tests: - - description: "Updating document to set top-level dollar-prefixed key on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: findOneAndUpdate - object: *collection0 - arguments: - filter: { _id: 1 } - update: &dollarPrefixedKey - - { $replaceWith: { $setField: { field: { $literal: $a }, value: 1, input: $$ROOT } } } - expectResult: *initialDocument - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - findAndModify: *collection0Name - query: { _id: 1 } - update: *dollarPrefixedKey - new: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, foo: {}, $a: 1 } - - - description: "Updating document to set top-level dotted key on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: findOneAndUpdate - object: *collection0 - arguments: - filter: { _id: 1 } - update: &dottedKey - - { $replaceWith: { $setField: { field: { $literal: a.b }, value: 1, input: $$ROOT } } } - expectResult: *initialDocument - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - findAndModify: *collection0Name - query: { _id: 1 } - update: *dottedKey - new: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, foo: {}, a.b: 1 } - - - description: "Updating document to set dollar-prefixed key in embedded doc on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: findOneAndUpdate - object: *collection0 - arguments: - filter: { _id: 1 } - update: &dollarPrefixedKeyInEmbedded - - { $set: { foo: { $setField: { field: { $literal: $a }, value: 1, input: $foo } } } } - expectResult: *initialDocument - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - findAndModify: *collection0Name - query: { _id: 1 } - update: *dollarPrefixedKeyInEmbedded - new: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, foo: { $a: 1 } } - - - description: "Updating document to set dotted key in embedded doc on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: findOneAndUpdate - object: *collection0 - arguments: - filter: { _id: 1 } - update: &dottedKeyInEmbedded - - { $set: { foo: { $setField: { field: { $literal: a.b }, value: 1, input: $foo } } } } - expectResult: *initialDocument - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - findAndModify: *collection0Name - query: { _id: 1 } - update: *dottedKeyInEmbedded - new: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, foo: { a.b: 1 } } diff --git a/testdata/crud/unified/findOneAndUpdate-errorResponse.json b/testdata/crud/unified/findOneAndUpdate-errorResponse.json deleted file mode 100644 index 5023a450f3..0000000000 --- a/testdata/crud/unified/findOneAndUpdate-errorResponse.json +++ /dev/null @@ -1,132 +0,0 @@ -{ - "description": "findOneAndUpdate-errorResponse", - "schemaVersion": "1.12", - "createEntities": [ - { - "client": { - "id": "client0" - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test" - } - } - ], - "initialData": [ - { - "collectionName": "test", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": "foo" - } - ] - } - ], - "tests": [ - { - "description": "findOneAndUpdate DuplicateKey error is accessible", - "runOnRequirements": [ - { - "minServerVersion": "4.2" - } - ], - "operations": [ - { - "name": "createIndex", - "object": "collection0", - "arguments": { - "keys": { - "x": 1 - }, - "unique": true - } - }, - { - "name": "findOneAndUpdate", - "object": "collection0", - "arguments": { - "filter": { - "_id": 2 - }, - "update": { - "$set": { - "x": "foo" - } - }, - "upsert": true - }, - "expectError": { - "errorCode": 11000, - "errorResponse": { - "keyPattern": { - "x": 1 - }, - "keyValue": { - "x": "foo" - } - } - } - } - ] - }, - { - "description": "findOneAndUpdate document validation errInfo is accessible", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "modifyCollection", - "object": "database0", - "arguments": { - "collection": "test", - "validator": { - "x": { - "$type": "string" - } - } - } - }, - { - "name": "findOneAndUpdate", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$set": { - "x": 1 - } - } - }, - "expectError": { - "errorCode": 121, - "errorResponse": { - "errInfo": { - "failingDocumentId": 1, - "details": { - "$$type": "object" - } - } - } - } - } - ] - } - ] -} diff --git a/testdata/crud/unified/findOneAndUpdate-errorResponse.yml b/testdata/crud/unified/findOneAndUpdate-errorResponse.yml deleted file mode 100644 index 8faed76809..0000000000 --- a/testdata/crud/unified/findOneAndUpdate-errorResponse.yml +++ /dev/null @@ -1,69 +0,0 @@ -description: "findOneAndUpdate-errorResponse" - -schemaVersion: "1.12" - -createEntities: - - client: - id: &client0 client0 - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name test - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: "foo" } - -tests: - - description: "findOneAndUpdate DuplicateKey error is accessible" - runOnRequirements: - - minServerVersion: "4.2" # SERVER-37124 - operations: - - name: createIndex - object: *collection0 - arguments: - keys: { x: 1 } - unique: true - - name: findOneAndUpdate - object: *collection0 - arguments: - filter: { _id: 2 } - update: { $set: { x: "foo" } } - upsert: true - expectError: - errorCode: 11000 # DuplicateKey - errorResponse: - keyPattern: { x: 1 } - keyValue: { x: "foo" } - - - description: "findOneAndUpdate document validation errInfo is accessible" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: modifyCollection - object: *database0 - arguments: - collection: *collection0Name - validator: - x: { $type: "string" } - - name: findOneAndUpdate - object: *collection0 - arguments: - filter: { _id: 1 } - update: { $set: { x: 1 } } - expectError: - errorCode: 121 # DocumentValidationFailure - errorResponse: - # Avoid asserting the exact contents of errInfo as it may vary by - # server version. Likewise, this is why drivers do not model the - # document. The following is sufficient to test that validation - # details are accessible. See SERVER-20547 for more context. - errInfo: - failingDocumentId: 1 - details: { $$type: "object" } diff --git a/testdata/crud/unified/findOneAndUpdate-hint-clientError.json b/testdata/crud/unified/findOneAndUpdate-hint-clientError.json deleted file mode 100644 index d0b51313c9..0000000000 --- a/testdata/crud/unified/findOneAndUpdate-hint-clientError.json +++ /dev/null @@ -1,143 +0,0 @@ -{ - "description": "findOneAndUpdate-hint-clientError", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "maxServerVersion": "4.0.99" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "findOneAndUpdate_hint" - } - } - ], - "initialData": [ - { - "collectionName": "findOneAndUpdate_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ], - "tests": [ - { - "description": "FindOneAndUpdate with hint string unsupported (client-side error)", - "operations": [ - { - "object": "collection0", - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": "_id_" - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "findOneAndUpdate_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "FindOneAndUpdate with hint document unsupported (client-side error)", - "operations": [ - { - "object": "collection0", - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "findOneAndUpdate_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/findOneAndUpdate-hint-clientError.yml b/testdata/crud/unified/findOneAndUpdate-hint-clientError.yml deleted file mode 100644 index 5ad4f07ccf..0000000000 --- a/testdata/crud/unified/findOneAndUpdate-hint-clientError.yml +++ /dev/null @@ -1,84 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: findOneAndUpdate-hint-clientError -schemaVersion: '1.0' -runOnRequirements: - - - maxServerVersion: 4.0.99 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name findOneAndUpdate_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 -tests: - - - description: 'FindOneAndUpdate with hint string unsupported (client-side error)' - operations: - - - object: *collection0 - name: findOneAndUpdate - arguments: - filter: &filter - _id: 1 - update: &update - $inc: - x: 1 - hint: _id_ - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - description: 'FindOneAndUpdate with hint document unsupported (client-side error)' - operations: - - - object: *collection0 - name: findOneAndUpdate - arguments: - filter: *filter - update: *update - hint: - _id: 1 - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: *outcome diff --git a/testdata/crud/unified/findOneAndUpdate-hint-serverError.json b/testdata/crud/unified/findOneAndUpdate-hint-serverError.json deleted file mode 100644 index 99fd9938f8..0000000000 --- a/testdata/crud/unified/findOneAndUpdate-hint-serverError.json +++ /dev/null @@ -1,180 +0,0 @@ -{ - "description": "findOneAndUpdate-hint-serverError", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "4.2.0", - "maxServerVersion": "4.3.0" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "findOneAndUpdate_hint" - } - } - ], - "initialData": [ - { - "collectionName": "findOneAndUpdate_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ], - "tests": [ - { - "description": "FindOneAndUpdate with hint string unsupported (server-side error)", - "operations": [ - { - "object": "collection0", - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": "_id_" - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "findOneAndUpdate_hint", - "query": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": "_id_" - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "findOneAndUpdate_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "FindOneAndUpdate with hint document unsupported (server-side error)", - "operations": [ - { - "object": "collection0", - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "findOneAndUpdate_hint", - "query": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": { - "_id": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "findOneAndUpdate_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/findOneAndUpdate-hint-serverError.yml b/testdata/crud/unified/findOneAndUpdate-hint-serverError.yml deleted file mode 100644 index f6b4f8d623..0000000000 --- a/testdata/crud/unified/findOneAndUpdate-hint-serverError.yml +++ /dev/null @@ -1,100 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: findOneAndUpdate-hint-serverError -schemaVersion: '1.0' -runOnRequirements: - - - minServerVersion: 4.2.0 - maxServerVersion: 4.3.0 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name findOneAndUpdate_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 -tests: - - - description: 'FindOneAndUpdate with hint string unsupported (server-side error)' - operations: - - - object: *collection0 - name: findOneAndUpdate - arguments: - filter: &filter - _id: 1 - update: &update - $inc: - x: 1 - hint: _id_ - expectError: - isError: true - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - findAndModify: *collection_name - query: *filter - update: *update - hint: _id_ - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - description: 'FindOneAndUpdate with hint document unsupported (server-side error)' - operations: - - - object: *collection0 - name: findOneAndUpdate - arguments: - filter: *filter - update: *update - hint: - _id: 1 - expectError: - isError: true - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - findAndModify: *collection_name - query: *filter - update: *update - hint: - _id: 1 - outcome: *outcome diff --git a/testdata/crud/unified/findOneAndUpdate-hint.json b/testdata/crud/unified/findOneAndUpdate-hint.json deleted file mode 100644 index 5be6d2b3e8..0000000000 --- a/testdata/crud/unified/findOneAndUpdate-hint.json +++ /dev/null @@ -1,181 +0,0 @@ -{ - "description": "findOneAndUpdate-hint", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "findOneAndUpdate_hint" - } - } - ], - "initialData": [ - { - "collectionName": "findOneAndUpdate_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ], - "tests": [ - { - "description": "FindOneAndUpdate with hint string", - "operations": [ - { - "object": "collection0", - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": "_id_" - }, - "expectResult": { - "_id": 1, - "x": 11 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "findOneAndUpdate_hint", - "query": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": "_id_" - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "findOneAndUpdate_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 12 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "FindOneAndUpdate with hint document", - "operations": [ - { - "object": "collection0", - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": { - "_id": 1 - } - }, - "expectResult": { - "_id": 1, - "x": 11 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "findOneAndUpdate_hint", - "query": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": { - "_id": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "findOneAndUpdate_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 12 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/findOneAndUpdate-hint.yml b/testdata/crud/unified/findOneAndUpdate-hint.yml deleted file mode 100644 index 5e835faa9e..0000000000 --- a/testdata/crud/unified/findOneAndUpdate-hint.yml +++ /dev/null @@ -1,99 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: findOneAndUpdate-hint -schemaVersion: '1.0' -runOnRequirements: - - - minServerVersion: 4.3.1 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name findOneAndUpdate_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 -tests: - - - description: 'FindOneAndUpdate with hint string' - operations: - - - object: *collection0 - name: findOneAndUpdate - arguments: - filter: &filter - _id: 1 - update: &update - $inc: - x: 1 - hint: _id_ - expectResult: &result - _id: 1 - x: 11 - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - findAndModify: *collection_name - query: *filter - update: *update - hint: _id_ - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 12 - - - _id: 2 - x: 22 - - - description: 'FindOneAndUpdate with hint document' - operations: - - - object: *collection0 - name: findOneAndUpdate - arguments: - filter: *filter - update: *update - hint: - _id: 1 - expectResult: *result - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - findAndModify: *collection_name - query: *filter - update: *update - hint: - _id: 1 - outcome: *outcome diff --git a/testdata/crud/unified/findOneAndUpdate-let.json b/testdata/crud/unified/findOneAndUpdate-let.json deleted file mode 100644 index 74d7d0e58b..0000000000 --- a/testdata/crud/unified/findOneAndUpdate-let.json +++ /dev/null @@ -1,217 +0,0 @@ -{ - "description": "findOneAndUpdate-let", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ], - "tests": [ - { - "description": "findOneAndUpdate with let option", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "findOneAndUpdate", - "object": "collection0", - "arguments": { - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "update": [ - { - "$set": { - "x": "$$x" - } - } - ], - "let": { - "id": 1, - "x": "foo" - } - }, - "expectResult": { - "_id": 1 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "coll0", - "query": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "update": [ - { - "$set": { - "x": "$$x" - } - } - ], - "let": { - "id": 1, - "x": "foo" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": "foo" - }, - { - "_id": 2 - } - ] - } - ] - }, - { - "description": "findOneAndUpdate with let option unsupported (server-side error)", - "runOnRequirements": [ - { - "minServerVersion": "4.2.0", - "maxServerVersion": "4.4.99" - } - ], - "operations": [ - { - "name": "findOneAndUpdate", - "object": "collection0", - "arguments": { - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "update": [ - { - "$set": { - "x": "$$x" - } - } - ], - "let": { - "id": 1, - "x": "foo" - } - }, - "expectError": { - "errorContains": "field 'let' is an unknown field", - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "coll0", - "query": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "update": [ - { - "$set": { - "x": "$$x" - } - } - ], - "let": { - "id": 1, - "x": "foo" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/findOneAndUpdate-let.yml b/testdata/crud/unified/findOneAndUpdate-let.yml deleted file mode 100644 index 761001db9e..0000000000 --- a/testdata/crud/unified/findOneAndUpdate-let.yml +++ /dev/null @@ -1,96 +0,0 @@ -description: "findOneAndUpdate-let" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } - -tests: - - description: "findOneAndUpdate with let option" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: findOneAndUpdate - object: *collection0 - arguments: - filter: &filter - $expr: - $eq: [ "$_id", "$$id" ] - update: &update - - $set: {x: "$$x" } - let: &let0 - id: 1 - x: "foo" - expectResult: - _id: 1 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - findAndModify: *collection0Name - query: *filter - update: *update - let: *let0 - outcome: - - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: "foo" } - - { _id: 2 } - - - description: "findOneAndUpdate with let option unsupported (server-side error)" - runOnRequirements: - - minServerVersion: "4.2.0" - maxServerVersion: "4.4.99" - operations: - - name: findOneAndUpdate - object: *collection0 - arguments: - filter: &filter1 - $expr: - $eq: [ "$_id", "$$id" ] - update: &update1 - - $set: {x: "$$x"} - let: &let1 - id: 1 - x: "foo" - expectError: - # This error message is consistent between 4.2.x and 4.4.x servers. - # Older servers return a different error message. - errorContains: "field 'let' is an unknown field" - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - findAndModify: *collection0Name - query: *filter1 - update: *update1 - let: *let1 - outcome: - - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } diff --git a/testdata/crud/unified/insertMany-comment.json b/testdata/crud/unified/insertMany-comment.json deleted file mode 100644 index 2b4c80b3f0..0000000000 --- a/testdata/crud/unified/insertMany-comment.json +++ /dev/null @@ -1,226 +0,0 @@ -{ - "description": "insertMany-comment", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ], - "tests": [ - { - "description": "insertMany with string comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "insertMany", - "object": "collection0", - "arguments": { - "documents": [ - { - "_id": 2, - "x": 22 - } - ], - "comment": "comment" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll0", - "documents": [ - { - "_id": 2, - "x": 22 - } - ], - "comment": "comment" - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "insertMany with document comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "insertMany", - "object": "collection0", - "arguments": { - "documents": [ - { - "_id": 2, - "x": 22 - } - ], - "comment": { - "key": "value" - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll0", - "documents": [ - { - "_id": 2, - "x": 22 - } - ], - "comment": { - "key": "value" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "insertMany with comment - pre 4.4", - "runOnRequirements": [ - { - "minServerVersion": "3.4.0", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "insertMany", - "object": "collection0", - "arguments": { - "documents": [ - { - "_id": 2, - "x": 22 - } - ], - "comment": "comment" - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll0", - "documents": [ - { - "_id": 2, - "x": 22 - } - ], - "comment": "comment" - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/insertMany-comment.yml b/testdata/crud/unified/insertMany-comment.yml deleted file mode 100644 index 4b51584df2..0000000000 --- a/testdata/crud/unified/insertMany-comment.yml +++ /dev/null @@ -1,93 +0,0 @@ -description: "insertMany-comment" -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - -tests: - - description: "insertMany with string comment" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: insertMany - object: *collection0 - arguments: - documents: - - &document { _id: 2, x: 22 } - comment: "comment" - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection0Name - documents: - - *document - comment: "comment" - outcome: &outcome - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - - description: "insertMany with document comment" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: insertMany - object: *collection0 - arguments: - documents: - - *document - comment: &comment { key: "value" } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection0Name - documents: - - *document - comment: *comment - outcome: *outcome - - - description: "insertMany with comment - pre 4.4" - runOnRequirements: - - minServerVersion: "3.4.0" - maxServerVersion: "4.2.99" - operations: - - name: insertMany - object: *collection0 - arguments: - documents: - - *document - comment: "comment" - expectError: - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection0Name - documents: - - *document - comment: "comment" - outcome: *initialData diff --git a/testdata/crud/unified/insertMany-dots_and_dollars.json b/testdata/crud/unified/insertMany-dots_and_dollars.json deleted file mode 100644 index eed8997df9..0000000000 --- a/testdata/crud/unified/insertMany-dots_and_dollars.json +++ /dev/null @@ -1,338 +0,0 @@ -{ - "description": "insertMany-dots_and_dollars", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [] - } - ], - "tests": [ - { - "description": "Inserting document with top-level dollar-prefixed key on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "insertMany", - "object": "collection0", - "arguments": { - "documents": [ - { - "_id": 1, - "$a": 1 - } - ] - }, - "expectResult": { - "$$unsetOrMatches": { - "insertedIds": { - "$$unsetOrMatches": { - "0": 1 - } - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll0", - "documents": [ - { - "_id": 1, - "$a": 1 - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "$a": 1 - } - ] - } - ] - }, - { - "description": "Inserting document with top-level dollar-prefixed key on pre-5.0 server yields server-side error", - "runOnRequirements": [ - { - "maxServerVersion": "4.99" - } - ], - "operations": [ - { - "name": "insertMany", - "object": "collection0", - "arguments": { - "documents": [ - { - "_id": 1, - "$a": 1 - } - ] - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll0", - "documents": [ - { - "_id": 1, - "$a": 1 - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [] - } - ] - }, - { - "description": "Inserting document with top-level dotted key", - "operations": [ - { - "name": "insertMany", - "object": "collection0", - "arguments": { - "documents": [ - { - "_id": 1, - "a.b": 1 - } - ] - }, - "expectResult": { - "$$unsetOrMatches": { - "insertedIds": { - "$$unsetOrMatches": { - "0": 1 - } - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll0", - "documents": [ - { - "_id": 1, - "a.b": 1 - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "a.b": 1 - } - ] - } - ] - }, - { - "description": "Inserting document with dollar-prefixed key in embedded doc", - "operations": [ - { - "name": "insertMany", - "object": "collection0", - "arguments": { - "documents": [ - { - "_id": 1, - "a": { - "$b": 1 - } - } - ] - }, - "expectResult": { - "$$unsetOrMatches": { - "insertedIds": { - "$$unsetOrMatches": { - "0": 1 - } - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll0", - "documents": [ - { - "_id": 1, - "a": { - "$b": 1 - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "a": { - "$b": 1 - } - } - ] - } - ] - }, - { - "description": "Inserting document with dotted key in embedded doc", - "operations": [ - { - "name": "insertMany", - "object": "collection0", - "arguments": { - "documents": [ - { - "_id": 1, - "a": { - "b.c": 1 - } - } - ] - }, - "expectResult": { - "$$unsetOrMatches": { - "insertedIds": { - "$$unsetOrMatches": { - "0": 1 - } - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll0", - "documents": [ - { - "_id": 1, - "a": { - "b.c": 1 - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "a": { - "b.c": 1 - } - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/insertMany-dots_and_dollars.yml b/testdata/crud/unified/insertMany-dots_and_dollars.yml deleted file mode 100644 index 913a55e4c0..0000000000 --- a/testdata/crud/unified/insertMany-dots_and_dollars.yml +++ /dev/null @@ -1,128 +0,0 @@ -description: "insertMany-dots_and_dollars" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: [] - -tests: - - description: "Inserting document with top-level dollar-prefixed key on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: insertMany - object: *collection0 - arguments: - documents: - - &dollarPrefixedKey { _id: 1, $a: 1 } - expectResult: &insertResult - # InsertManyResult is optional because all of its fields are optional - $$unsetOrMatches: { insertedIds: { $$unsetOrMatches: { 0: 1 } } } - expectEvents: &expectEventsDollarPrefixedKey - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection0Name - documents: - - *dollarPrefixedKey - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *dollarPrefixedKey - - - description: "Inserting document with top-level dollar-prefixed key on pre-5.0 server yields server-side error" - runOnRequirements: - - maxServerVersion: "4.99" - operations: - - name: insertMany - object: *collection0 - arguments: - documents: - - *dollarPrefixedKey - expectError: - isClientError: false - expectEvents: *expectEventsDollarPrefixedKey - outcome: *initialData - - - description: "Inserting document with top-level dotted key" - operations: - - name: insertMany - object: *collection0 - arguments: - documents: - - &dottedKey { _id: 1, a.b: 1 } - expectResult: *insertResult - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection0Name - documents: - - *dottedKey - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *dottedKey - - - description: "Inserting document with dollar-prefixed key in embedded doc" - operations: - - name: insertMany - object: *collection0 - arguments: - documents: - - &dollarPrefixedKeyInEmbedded { _id: 1, a: { $b: 1 } } - expectResult: *insertResult - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection0Name - documents: - - *dollarPrefixedKeyInEmbedded - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *dollarPrefixedKeyInEmbedded - - - description: "Inserting document with dotted key in embedded doc" - operations: - - name: insertMany - object: *collection0 - arguments: - documents: - - &dottedKeyInEmbedded { _id: 1, a: { b.c: 1 } } - expectResult: *insertResult - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection0Name - documents: - - *dottedKeyInEmbedded - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *dottedKeyInEmbedded diff --git a/testdata/crud/unified/insertOne-comment.json b/testdata/crud/unified/insertOne-comment.json deleted file mode 100644 index dbd83d9f64..0000000000 --- a/testdata/crud/unified/insertOne-comment.json +++ /dev/null @@ -1,220 +0,0 @@ -{ - "description": "insertOne-comment", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ], - "tests": [ - { - "description": "insertOne with string comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 2, - "x": 22 - }, - "comment": "comment" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll0", - "documents": [ - { - "_id": 2, - "x": 22 - } - ], - "comment": "comment" - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "insertOne with document comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 2, - "x": 22 - }, - "comment": { - "key": "value" - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll0", - "documents": [ - { - "_id": 2, - "x": 22 - } - ], - "comment": { - "key": "value" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "insertOne with comment - pre 4.4", - "runOnRequirements": [ - { - "minServerVersion": "3.4.0", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 2, - "x": 22 - }, - "comment": "comment" - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll0", - "documents": [ - { - "_id": 2, - "x": 22 - } - ], - "comment": "comment" - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/insertOne-comment.yml b/testdata/crud/unified/insertOne-comment.yml deleted file mode 100644 index 34d57c65ec..0000000000 --- a/testdata/crud/unified/insertOne-comment.yml +++ /dev/null @@ -1,92 +0,0 @@ -description: "insertOne-comment" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - -tests: - - description: "insertOne with string comment" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: insertOne - object: *collection0 - arguments: - document: &document { _id: 2, x: 22 } - comment: "comment" - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection0Name - documents: - - *document - comment: "comment" - outcome: &outcome - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - - description: "insertOne with document comment" - runOnRequirements: - - minServerVersion: "3.4.0" - - minServerVersion: "4.4" - operations: - - name: insertOne - object: *collection0 - arguments: - document: *document - comment: &comment { key: "value" } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection0Name - documents: - - *document - comment: *comment - outcome: *outcome - - - description: "insertOne with comment - pre 4.4" - runOnRequirements: - - minServerVersion: "3.4.0" - maxServerVersion: "4.2.99" - operations: - - name: insertOne - object: *collection0 - arguments: - document: *document - comment: "comment" - expectError: - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection0Name - documents: - - *document - comment: "comment" - outcome: *initialData diff --git a/testdata/crud/unified/insertOne-dots_and_dollars.json b/testdata/crud/unified/insertOne-dots_and_dollars.json deleted file mode 100644 index fdc17af2e8..0000000000 --- a/testdata/crud/unified/insertOne-dots_and_dollars.json +++ /dev/null @@ -1,614 +0,0 @@ -{ - "description": "insertOne-dots_and_dollars", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - }, - { - "collection": { - "id": "collection1", - "database": "database0", - "collectionName": "coll1", - "collectionOptions": { - "writeConcern": { - "w": 0 - } - } - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [] - } - ], - "tests": [ - { - "description": "Inserting document with top-level dollar-prefixed key on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 1, - "$a": 1 - } - }, - "expectResult": { - "$$unsetOrMatches": { - "insertedId": { - "$$unsetOrMatches": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll0", - "documents": [ - { - "_id": 1, - "$a": 1 - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "$a": 1 - } - ] - } - ] - }, - { - "description": "Inserting document with top-level dollar-prefixed key on pre-5.0 server yields server-side error", - "runOnRequirements": [ - { - "maxServerVersion": "4.99" - } - ], - "operations": [ - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 1, - "$a": 1 - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll0", - "documents": [ - { - "_id": 1, - "$a": 1 - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [] - } - ] - }, - { - "description": "Inserting document with top-level dotted key", - "operations": [ - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 1, - "a.b": 1 - } - }, - "expectResult": { - "$$unsetOrMatches": { - "insertedId": { - "$$unsetOrMatches": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll0", - "documents": [ - { - "_id": 1, - "a.b": 1 - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "a.b": 1 - } - ] - } - ] - }, - { - "description": "Inserting document with dollar-prefixed key in embedded doc", - "operations": [ - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 1, - "a": { - "$b": 1 - } - } - }, - "expectResult": { - "$$unsetOrMatches": { - "insertedId": { - "$$unsetOrMatches": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll0", - "documents": [ - { - "_id": 1, - "a": { - "$b": 1 - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "a": { - "$b": 1 - } - } - ] - } - ] - }, - { - "description": "Inserting document with dotted key in embedded doc", - "operations": [ - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 1, - "a": { - "b.c": 1 - } - } - }, - "expectResult": { - "$$unsetOrMatches": { - "insertedId": { - "$$unsetOrMatches": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll0", - "documents": [ - { - "_id": 1, - "a": { - "b.c": 1 - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "a": { - "b.c": 1 - } - } - ] - } - ] - }, - { - "description": "Inserting document with dollar-prefixed key in _id yields server-side error", - "operations": [ - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": { - "$a": 1 - } - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll0", - "documents": [ - { - "_id": { - "$a": 1 - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [] - } - ] - }, - { - "description": "Inserting document with dotted key in _id on 3.6+ server", - "runOnRequirements": [ - { - "minServerVersion": "3.6" - } - ], - "operations": [ - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": { - "a.b": 1 - } - } - }, - "expectResult": { - "$$unsetOrMatches": { - "insertedId": { - "$$unsetOrMatches": { - "a.b": 1 - } - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll0", - "documents": [ - { - "_id": { - "a.b": 1 - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": { - "a.b": 1 - } - } - ] - } - ] - }, - { - "description": "Inserting document with dotted key in _id on pre-3.6 server yields server-side error", - "runOnRequirements": [ - { - "maxServerVersion": "3.4.99" - } - ], - "operations": [ - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": { - "a.b": 1 - } - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll0", - "documents": [ - { - "_id": { - "a.b": 1 - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [] - } - ] - }, - { - "description": "Inserting document with DBRef-like keys", - "operations": [ - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 1, - "a": { - "$db": "foo" - } - } - }, - "expectResult": { - "$$unsetOrMatches": { - "insertedId": { - "$$unsetOrMatches": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll0", - "documents": [ - { - "_id": 1, - "a": { - "$db": "foo" - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "a": { - "$db": "foo" - } - } - ] - } - ] - }, - { - "description": "Unacknowledged write using dollar-prefixed or dotted keys may be silently rejected on pre-5.0 server", - "runOnRequirements": [ - { - "maxServerVersion": "4.99" - } - ], - "operations": [ - { - "name": "insertOne", - "object": "collection1", - "arguments": { - "document": { - "_id": { - "$a": 1 - } - } - }, - "expectResult": { - "$$unsetOrMatches": { - "acknowledged": { - "$$unsetOrMatches": false - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll1", - "documents": [ - { - "_id": { - "$a": 1 - } - } - ], - "writeConcern": { - "w": 0 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [] - } - ] - } - ] -} diff --git a/testdata/crud/unified/insertOne-dots_and_dollars.yml b/testdata/crud/unified/insertOne-dots_and_dollars.yml deleted file mode 100644 index f255b52413..0000000000 --- a/testdata/crud/unified/insertOne-dots_and_dollars.yml +++ /dev/null @@ -1,238 +0,0 @@ -description: "insertOne-dots_and_dollars" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - - collection: - id: &collection1 collection1 - database: *database0 - collectionName: &collection1Name coll1 - collectionOptions: - writeConcern: { w: 0 } - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: [] - -tests: - - description: "Inserting document with top-level dollar-prefixed key on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: insertOne - object: *collection0 - arguments: - document: &dollarPrefixedKey { _id: 1, $a: 1 } - expectResult: &insertResult - # InsertOneResult is optional because all of its fields are optional - $$unsetOrMatches: { insertedId: { $$unsetOrMatches: 1 } } - expectEvents: &expectEventsDollarPrefixedKey - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection0Name - documents: - - *dollarPrefixedKey - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *dollarPrefixedKey - - - description: "Inserting document with top-level dollar-prefixed key on pre-5.0 server yields server-side error" - runOnRequirements: - - maxServerVersion: "4.99" - operations: - - name: insertOne - object: *collection0 - arguments: - document: *dollarPrefixedKey - expectError: - isClientError: false - expectEvents: *expectEventsDollarPrefixedKey - outcome: *initialData - - - description: "Inserting document with top-level dotted key" - operations: - - name: insertOne - object: *collection0 - arguments: - document: &dottedKey { _id: 1, a.b: 1 } - expectResult: *insertResult - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection0Name - documents: - - *dottedKey - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *dottedKey - - - description: "Inserting document with dollar-prefixed key in embedded doc" - operations: - - name: insertOne - object: *collection0 - arguments: - document: &dollarPrefixedKeyInEmbedded { _id: 1, a: { $b: 1 } } - expectResult: *insertResult - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection0Name - documents: - - *dollarPrefixedKeyInEmbedded - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *dollarPrefixedKeyInEmbedded - - - description: "Inserting document with dotted key in embedded doc" - operations: - - name: insertOne - object: *collection0 - arguments: - document: &dottedKeyInEmbedded { _id: 1, a: { b.c: 1 } } - expectResult: *insertResult - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection0Name - documents: - - *dottedKeyInEmbedded - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *dottedKeyInEmbedded - - - description: "Inserting document with dollar-prefixed key in _id yields server-side error" - # Note: 5.0+ did not remove restrictions on dollar-prefixed keys in _id documents - operations: - - name: insertOne - object: *collection0 - arguments: - document: &dollarPrefixedKeyInId { _id: { $a: 1 } } - expectError: - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection0Name - documents: - - *dollarPrefixedKeyInId - outcome: *initialData - - - description: "Inserting document with dotted key in _id on 3.6+ server" - runOnRequirements: - - minServerVersion: "3.6" - operations: - - name: insertOne - object: *collection0 - arguments: - document: &dottedKeyInId { _id: { a.b: 1 } } - expectResult: - # InsertOneResult is optional because all of its fields are optional - $$unsetOrMatches: { insertedId: { $$unsetOrMatches: { a.b: 1 } } } - expectEvents: &expectEventsDottedKeyInId - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection0Name - documents: - - *dottedKeyInId - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *dottedKeyInId - - - description: "Inserting document with dotted key in _id on pre-3.6 server yields server-side error" - runOnRequirements: - - maxServerVersion: "3.4.99" - operations: - - name: insertOne - object: *collection0 - arguments: - document: *dottedKeyInId - expectError: - isClientError: false - expectEvents: *expectEventsDottedKeyInId - outcome: *initialData - - - description: "Inserting document with DBRef-like keys" - operations: - - name: insertOne - object: *collection0 - arguments: - # Note: an incomplete DBRef document may cause issues loading the test - # file with an Extended JSON parser, since the presence of one DBRef - # key may cause the parser to require others and/or enforce expected - # types (e.g. $ref and $db must be strings). - # - # Using "$db" here works for libmongoc so long as it's a string type; - # however, neither $ref nor $id would be accepted on their own. - # - # See https://github.com/mongodb/specifications/blob/master/source/extended-json.rst#parsers - document: &dbrefLikeKey { _id: 1, a: { $db: "foo" } } - expectResult: *insertResult - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection0Name - documents: - - *dbrefLikeKey - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *dbrefLikeKey - - - description: "Unacknowledged write using dollar-prefixed or dotted keys may be silently rejected on pre-5.0 server" - runOnRequirements: - - maxServerVersion: "4.99" - operations: - - name: insertOne - object: *collection1 - arguments: - document: *dollarPrefixedKeyInId - expectResult: - # InsertOneResult is optional because all of its fields are optional - $$unsetOrMatches: { acknowledged: { $$unsetOrMatches: false } } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection1Name - documents: - - *dollarPrefixedKeyInId - writeConcern: { w: 0 } - outcome: *initialData diff --git a/testdata/crud/unified/insertOne-errorResponse.json b/testdata/crud/unified/insertOne-errorResponse.json deleted file mode 100644 index 04ea6a7451..0000000000 --- a/testdata/crud/unified/insertOne-errorResponse.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "description": "insertOne-errorResponse", - "schemaVersion": "1.12", - "createEntities": [ - { - "client": { - "id": "client0", - "useMultipleMongoses": false - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test" - } - } - ], - "tests": [ - { - "description": "insert operations support errorResponse assertions", - "runOnRequirements": [ - { - "minServerVersion": "4.0.0", - "topologies": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.2.0", - "topologies": [ - "sharded" - ] - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "errorCode": 8 - } - } - } - }, - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 1 - } - }, - "expectError": { - "errorCode": 8, - "errorResponse": { - "code": 8 - } - } - } - ] - } - ] -} diff --git a/testdata/crud/unified/insertOne-errorResponse.yml b/testdata/crud/unified/insertOne-errorResponse.yml deleted file mode 100644 index b14caa1737..0000000000 --- a/testdata/crud/unified/insertOne-errorResponse.yml +++ /dev/null @@ -1,46 +0,0 @@ -description: "insertOne-errorResponse" - -schemaVersion: "1.12" - -createEntities: - - client: - id: &client0 client0 - useMultipleMongoses: false - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name test - -tests: - # Some drivers may still need to skip this test because the CRUD spec does not - # prescribe how drivers should formulate a WriteException beyond collecting a - # write or write concern error. - - description: "insert operations support errorResponse assertions" - runOnRequirements: - - minServerVersion: "4.0.0" - topologies: [ single, replicaset ] - - minServerVersion: "4.2.0" - topologies: [ sharded ] - operations: - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ insert ] - errorCode: &errorCode 8 # UnknownError - - name: insertOne - object: *collection0 - arguments: - document: { _id: 1 } - expectError: - errorCode: *errorCode - errorResponse: - code: *errorCode diff --git a/testdata/crud/unified/replaceOne-comment.json b/testdata/crud/unified/replaceOne-comment.json deleted file mode 100644 index 4b6f2ae9a0..0000000000 --- a/testdata/crud/unified/replaceOne-comment.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "description": "replaceOne-comment", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ], - "tests": [ - { - "description": "ReplaceOne with string comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "replaceOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "x": 22 - }, - "comment": "comment" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "x": 22 - } - } - ], - "comment": "comment" - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 22 - } - ] - } - ] - }, - { - "description": "ReplaceOne with document comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "replaceOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "x": 22 - }, - "comment": { - "key": "value" - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "x": 22 - } - } - ], - "comment": { - "key": "value" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 22 - } - ] - } - ] - }, - { - "description": "ReplaceOne with comment - pre 4.4", - "runOnRequirements": [ - { - "minServerVersion": "3.4.0", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "replaceOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "x": 22 - }, - "comment": "comment" - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "x": 22 - } - } - ], - "comment": "comment" - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/replaceOne-comment.yml b/testdata/crud/unified/replaceOne-comment.yml deleted file mode 100644 index 3fe1f0d0fe..0000000000 --- a/testdata/crud/unified/replaceOne-comment.yml +++ /dev/null @@ -1,99 +0,0 @@ -description: "replaceOne-comment" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - -tests: - - description: "ReplaceOne with string comment" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: replaceOne - object: *collection0 - arguments: - filter: &filter { _id: 1 } - replacement: &replacement { x: 22 } - comment: "comment" - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - - q: *filter - u: *replacement - comment: "comment" - outcome: &outcome - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 22 } - - - description: "ReplaceOne with document comment" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: replaceOne - object: *collection0 - arguments: - filter: *filter - replacement: *replacement - comment: &comment { key: "value" } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - - q: *filter - u: *replacement - comment: *comment - outcome: *outcome - - - description: "ReplaceOne with comment - pre 4.4" - runOnRequirements: - - minServerVersion: "3.4.0" - maxServerVersion: "4.2.99" - operations: - - name: replaceOne - object: *collection0 - arguments: - filter: *filter - replacement: *replacement - comment: "comment" - expectError: - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - - q: *filter - u: *replacement - comment: "comment" - outcome: *initialData diff --git a/testdata/crud/unified/replaceOne-dots_and_dollars.json b/testdata/crud/unified/replaceOne-dots_and_dollars.json deleted file mode 100644 index d5003dc5ea..0000000000 --- a/testdata/crud/unified/replaceOne-dots_and_dollars.json +++ /dev/null @@ -1,567 +0,0 @@ -{ - "description": "replaceOne-dots_and_dollars", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - }, - { - "collection": { - "id": "collection1", - "database": "database0", - "collectionName": "coll1", - "collectionOptions": { - "writeConcern": { - "w": 0 - } - } - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - } - ] - } - ], - "tests": [ - { - "description": "Replacing document with top-level dotted key on 3.6+ server", - "runOnRequirements": [ - { - "minServerVersion": "3.6" - } - ], - "operations": [ - { - "name": "replaceOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "_id": 1, - "a.b": 1 - } - }, - "expectResult": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "_id": 1, - "a.b": 1 - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "a.b": 1 - } - ] - } - ] - }, - { - "description": "Replacing document with top-level dotted key on pre-3.6 server yields server-side error", - "runOnRequirements": [ - { - "maxServerVersion": "3.4.99" - } - ], - "operations": [ - { - "name": "replaceOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "_id": 1, - "a.b": 1 - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "_id": 1, - "a.b": 1 - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - } - ] - } - ] - }, - { - "description": "Replacing document with dollar-prefixed key in embedded doc on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "replaceOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "_id": 1, - "a": { - "$b": 1 - } - } - }, - "expectResult": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "_id": 1, - "a": { - "$b": 1 - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "a": { - "$b": 1 - } - } - ] - } - ] - }, - { - "description": "Replacing document with dollar-prefixed key in embedded doc on pre-5.0 server yields server-side error", - "runOnRequirements": [ - { - "maxServerVersion": "4.99" - } - ], - "operations": [ - { - "name": "replaceOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "_id": 1, - "a": { - "$b": 1 - } - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "_id": 1, - "a": { - "$b": 1 - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - } - ] - } - ] - }, - { - "description": "Replacing document with dotted key in embedded doc on 3.6+ server", - "runOnRequirements": [ - { - "minServerVersion": "3.6" - } - ], - "operations": [ - { - "name": "replaceOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "_id": 1, - "a": { - "b.c": 1 - } - } - }, - "expectResult": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "_id": 1, - "a": { - "b.c": 1 - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "a": { - "b.c": 1 - } - } - ] - } - ] - }, - { - "description": "Replacing document with dotted key in embedded doc on pre-3.6 server yields server-side error", - "runOnRequirements": [ - { - "maxServerVersion": "3.4.99" - } - ], - "operations": [ - { - "name": "replaceOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "_id": 1, - "a": { - "b.c": 1 - } - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "_id": 1, - "a": { - "b.c": 1 - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - } - ] - } - ] - }, - { - "description": "Unacknowledged write using dollar-prefixed or dotted keys may be silently rejected on pre-5.0 server", - "runOnRequirements": [ - { - "maxServerVersion": "4.99" - } - ], - "operations": [ - { - "name": "replaceOne", - "object": "collection1", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "_id": 1, - "a": { - "$b": 1 - } - } - }, - "expectResult": { - "acknowledged": { - "$$unsetOrMatches": false - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll1", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "_id": 1, - "a": { - "$b": 1 - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "writeConcern": { - "w": 0 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/replaceOne-dots_and_dollars.yml b/testdata/crud/unified/replaceOne-dots_and_dollars.yml deleted file mode 100644 index b834e22205..0000000000 --- a/testdata/crud/unified/replaceOne-dots_and_dollars.yml +++ /dev/null @@ -1,180 +0,0 @@ -description: "replaceOne-dots_and_dollars" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - - collection: - id: &collection1 collection1 - database: *database0 - collectionName: &collection1Name coll1 - collectionOptions: - writeConcern: { w: 0 } - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - -tests: - - description: "Replacing document with top-level dotted key on 3.6+ server" - runOnRequirements: - - minServerVersion: "3.6" - operations: - - name: replaceOne - object: *collection0 - arguments: - filter: { _id: 1 } - replacement: &dottedKey { _id: 1, a.b: 1 } - expectResult: &replaceResult - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - expectEvents: &expectEventsDottedKey - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: { _id: 1 } - u: *dottedKey - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *dottedKey - - - description: "Replacing document with top-level dotted key on pre-3.6 server yields server-side error" - runOnRequirements: - - maxServerVersion: "3.4.99" - operations: - - name: replaceOne - object: *collection0 - arguments: - filter: { _id: 1 } - replacement: *dottedKey - expectError: - isClientError: false - expectEvents: *expectEventsDottedKey - outcome: *initialData - - - description: "Replacing document with dollar-prefixed key in embedded doc on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: replaceOne - object: *collection0 - arguments: - filter: { _id: 1 } - replacement: &dollarPrefixedKeyInEmbedded { _id: 1, a: { $b: 1 } } - expectResult: *replaceResult - expectEvents: &expectEventsDollarPrefixedKeyInEmbedded - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: { _id: 1 } - u: *dollarPrefixedKeyInEmbedded - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *dollarPrefixedKeyInEmbedded - - - description: "Replacing document with dollar-prefixed key in embedded doc on pre-5.0 server yields server-side error" - runOnRequirements: - - maxServerVersion: "4.99" - operations: - - name: replaceOne - object: *collection0 - arguments: - filter: { _id: 1 } - replacement: *dollarPrefixedKeyInEmbedded - expectError: - isClientError: false - expectEvents: *expectEventsDollarPrefixedKeyInEmbedded - outcome: *initialData - - - description: "Replacing document with dotted key in embedded doc on 3.6+ server" - runOnRequirements: - - minServerVersion: "3.6" - operations: - - name: replaceOne - object: *collection0 - arguments: - filter: { _id: 1 } - replacement: &dottedKeyInEmbedded { _id: 1, a: { b.c: 1 } } - expectResult: *replaceResult - expectEvents: &expectEventsDottedKeyInEmbedded - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: { _id: 1 } - u: *dottedKeyInEmbedded - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - *dottedKeyInEmbedded - - - description: "Replacing document with dotted key in embedded doc on pre-3.6 server yields server-side error" - runOnRequirements: - - maxServerVersion: "3.4.99" - operations: - - name: replaceOne - object: *collection0 - arguments: - filter: { _id: 1 } - replacement: *dottedKeyInEmbedded - expectError: - isClientError: false - expectEvents: *expectEventsDottedKeyInEmbedded - outcome: *initialData - - - description: "Unacknowledged write using dollar-prefixed or dotted keys may be silently rejected on pre-5.0 server" - runOnRequirements: - - maxServerVersion: "4.99" - operations: - - name: replaceOne - object: *collection1 - arguments: - filter: { _id: 1 } - replacement: *dollarPrefixedKeyInEmbedded - expectResult: - acknowledged: { $$unsetOrMatches: false } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection1Name - updates: - - q: { _id: 1 } - u: *dollarPrefixedKeyInEmbedded - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - writeConcern: { w: 0 } - outcome: *initialData diff --git a/testdata/crud/unified/replaceOne-hint.json b/testdata/crud/unified/replaceOne-hint.json deleted file mode 100644 index 6926e9d8df..0000000000 --- a/testdata/crud/unified/replaceOne-hint.json +++ /dev/null @@ -1,203 +0,0 @@ -{ - "description": "replaceOne-hint", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "4.2.0" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test_replaceone_hint" - } - } - ], - "initialData": [ - { - "collectionName": "test_replaceone_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ], - "tests": [ - { - "description": "ReplaceOne with hint string", - "operations": [ - { - "object": "collection0", - "name": "replaceOne", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "replacement": { - "x": 111 - }, - "hint": "_id_" - }, - "expectResult": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test_replaceone_hint", - "updates": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "u": { - "x": 111 - }, - "hint": "_id_", - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test_replaceone_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 111 - } - ] - } - ] - }, - { - "description": "ReplaceOne with hint document", - "operations": [ - { - "object": "collection0", - "name": "replaceOne", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "replacement": { - "x": 111 - }, - "hint": { - "_id": 1 - } - }, - "expectResult": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test_replaceone_hint", - "updates": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "u": { - "x": 111 - }, - "hint": { - "_id": 1 - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test_replaceone_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 111 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/replaceOne-hint.yml b/testdata/crud/unified/replaceOne-hint.yml deleted file mode 100644 index 8a28be9825..0000000000 --- a/testdata/crud/unified/replaceOne-hint.yml +++ /dev/null @@ -1,108 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: replaceOne-hint -schemaVersion: '1.0' -runOnRequirements: - - - minServerVersion: 4.2.0 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name test_replaceone_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 -tests: - - - description: 'ReplaceOne with hint string' - operations: - - - object: *collection0 - name: replaceOne - arguments: - filter: &filter - _id: - $gt: 1 - replacement: &replacement - x: 111 - hint: _id_ - expectResult: &result - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - update: *collection_name - updates: - - - q: *filter - u: *replacement - hint: _id_ - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 111 - - - description: 'ReplaceOne with hint document' - operations: - - - object: *collection0 - name: replaceOne - arguments: - filter: *filter - replacement: *replacement - hint: - _id: 1 - expectResult: *result - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - update: *collection_name - updates: - - - q: *filter - u: *replacement - hint: - _id: 1 - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - outcome: *outcome diff --git a/testdata/crud/unified/replaceOne-let.json b/testdata/crud/unified/replaceOne-let.json deleted file mode 100644 index e7a7ee65a5..0000000000 --- a/testdata/crud/unified/replaceOne-let.json +++ /dev/null @@ -1,219 +0,0 @@ -{ - "description": "replaceOne-let", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ], - "tests": [ - { - "description": "ReplaceOne with let option", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "replaceOne", - "object": "collection0", - "arguments": { - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "replacement": { - "x": "foo" - }, - "let": { - "id": 1 - } - }, - "expectResult": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "u": { - "x": "foo" - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "let": { - "id": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": "foo" - }, - { - "_id": 2 - } - ] - } - ] - }, - { - "description": "ReplaceOne with let option unsupported (server-side error)", - "runOnRequirements": [ - { - "minServerVersion": "3.6.0", - "maxServerVersion": "4.4.99" - } - ], - "operations": [ - { - "name": "replaceOne", - "object": "collection0", - "arguments": { - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "replacement": { - "x": "foo" - }, - "let": { - "id": 1 - } - }, - "expectError": { - "errorContains": "'update.let' is an unknown field", - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "u": { - "x": "foo" - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "let": { - "id": 1 - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/replaceOne-let.yml b/testdata/crud/unified/replaceOne-let.yml deleted file mode 100644 index fda5bb6744..0000000000 --- a/testdata/crud/unified/replaceOne-let.yml +++ /dev/null @@ -1,98 +0,0 @@ -description: "replaceOne-let" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } - -tests: - - description: "ReplaceOne with let option" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: replaceOne - object: *collection0 - arguments: - filter: &filter - $expr: - $eq: [ "$_id", "$$id" ] - replacement: &replacement - x: "foo" - let: &let - id: 1 - expectResult: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - - q: *filter - u: *replacement - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - let: *let - outcome: - - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: "foo" } - - { _id: 2 } - - - description: "ReplaceOne with let option unsupported (server-side error)" - runOnRequirements: - - minServerVersion: "3.6.0" - maxServerVersion: "4.4.99" - operations: - - name: replaceOne - object: *collection0 - arguments: - filter: *filter - replacement: *replacement - let: *let - expectError: - errorContains: "'update.let' is an unknown field" - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - - q: *filter - u: *replacement - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - let: *let - outcome: - - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } diff --git a/testdata/crud/unified/replaceOne-sort.json b/testdata/crud/unified/replaceOne-sort.json deleted file mode 100644 index cf2271dda5..0000000000 --- a/testdata/crud/unified/replaceOne-sort.json +++ /dev/null @@ -1,232 +0,0 @@ -{ - "description": "replaceOne-sort", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent", - "commandSucceededEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "ReplaceOne with sort option", - "runOnRequirements": [ - { - "minServerVersion": "8.0" - } - ], - "operations": [ - { - "name": "replaceOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "sort": { - "_id": -1 - }, - "replacement": { - "x": 1 - } - }, - "expectResult": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "u": { - "x": 1 - }, - "sort": { - "_id": -1 - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "n": 1 - }, - "commandName": "update" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 1 - } - ] - } - ] - }, - { - "description": "replaceOne with sort option unsupported (server-side error)", - "runOnRequirements": [ - { - "maxServerVersion": "7.99" - } - ], - "operations": [ - { - "name": "replaceOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "sort": { - "_id": -1 - }, - "replacement": { - "x": 1 - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "u": { - "x": 1 - }, - "sort": { - "_id": -1 - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/replaceOne-sort.yml b/testdata/crud/unified/replaceOne-sort.yml deleted file mode 100644 index 3395b795e8..0000000000 --- a/testdata/crud/unified/replaceOne-sort.yml +++ /dev/null @@ -1,94 +0,0 @@ -description: replaceOne-sort - -schemaVersion: "1.0" - -createEntities: - - client: - id: client0 - observeEvents: [ commandStartedEvent, commandSucceededEvent ] - - database: - id: database0 - client: client0 - databaseName: crud-tests - - collection: - id: collection0 - database: database0 - collectionName: coll0 - -initialData: - - collectionName: coll0 - databaseName: crud-tests - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -tests: - - description: ReplaceOne with sort option - runOnRequirements: - - minServerVersion: "8.0" - operations: - - name: replaceOne - object: collection0 - arguments: - filter: { _id: { $gt: 1 } } - sort: { _id: -1 } - replacement: { x: 1 } - expectResult: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - update: coll0 - updates: - - q: { _id: { $gt: 1 } } - u: { x: 1 } - sort: { _id: -1 } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - commandSucceededEvent: - reply: { ok: 1, n: 1 } - commandName: update - outcome: - - collectionName: coll0 - databaseName: crud-tests - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 1 } - - - description: replaceOne with sort option unsupported (server-side error) - runOnRequirements: - - maxServerVersion: "7.99" - operations: - - name: replaceOne - object: collection0 - arguments: - filter: { _id: { $gt: 1 } } - sort: { _id: -1 } - replacement: { x: 1 } - expectError: - isClientError: false - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - update: coll0 - updates: - - q: { _id: { $gt: 1 } } - u: { x: 1 } - sort: { _id: -1 } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: coll0 - databaseName: crud-tests - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } diff --git a/testdata/crud/unified/replaceOne-validation.json b/testdata/crud/unified/replaceOne-validation.json deleted file mode 100644 index 6f5b173e02..0000000000 --- a/testdata/crud/unified/replaceOne-validation.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "description": "replaceOne-validation", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ], - "tests": [ - { - "description": "ReplaceOne prohibits atomic modifiers", - "operations": [ - { - "name": "replaceOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "$set": { - "x": 22 - } - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/replaceOne-validation.yml b/testdata/crud/unified/replaceOne-validation.yml deleted file mode 100644 index db5a2a6666..0000000000 --- a/testdata/crud/unified/replaceOne-validation.yml +++ /dev/null @@ -1,37 +0,0 @@ -description: "replaceOne-validation" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - -tests: - - description: "ReplaceOne prohibits atomic modifiers" - operations: - - name: replaceOne - object: *collection0 - arguments: - filter: { _id: 1 } - replacement: { $set: { x: 22 } } - expectError: - isClientError: true - expectEvents: - - client: *client0 - events: [] - outcome: *initialData diff --git a/testdata/crud/unified/unacknowledged-bulkWrite-delete-hint-clientError.json b/testdata/crud/unified/unacknowledged-bulkWrite-delete-hint-clientError.json deleted file mode 100644 index dbaa2e84f4..0000000000 --- a/testdata/crud/unified/unacknowledged-bulkWrite-delete-hint-clientError.json +++ /dev/null @@ -1,193 +0,0 @@ -{ - "description": "unacknowledged-bulkWrite-delete-hint-clientError", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "BulkWrite_delete_hint", - "collectionOptions": { - "writeConcern": { - "w": 0 - } - } - } - } - ], - "initialData": [ - { - "collectionName": "BulkWrite_delete_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "tests": [ - { - "description": "Unacknowledged bulkWrite deleteOne with hints fails with client-side error", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "deleteOne": { - "filter": { - "_id": 1 - }, - "hint": "_id_" - } - }, - { - "deleteOne": { - "filter": { - "_id": 2 - }, - "hint": { - "_id": 1 - } - } - } - ], - "ordered": true - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "BulkWrite_delete_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ] - }, - { - "description": "Unacknowledged bulkWrite deleteMany with hints fails with client-side error", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "deleteMany": { - "filter": { - "_id": { - "$lt": 3 - } - }, - "hint": "_id_" - } - }, - { - "deleteMany": { - "filter": { - "_id": { - "$gte": 4 - } - }, - "hint": { - "_id": 1 - } - } - } - ], - "ordered": true - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "BulkWrite_delete_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/unacknowledged-bulkWrite-delete-hint-clientError.yml b/testdata/crud/unified/unacknowledged-bulkWrite-delete-hint-clientError.yml deleted file mode 100644 index 3aaa182436..0000000000 --- a/testdata/crud/unified/unacknowledged-bulkWrite-delete-hint-clientError.yml +++ /dev/null @@ -1,112 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: unacknowledged-bulkWrite-delete-hint-clientError -schemaVersion: '1.0' -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name BulkWrite_delete_hint - collectionOptions: - writeConcern: { w: 0 } -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 - - - _id: 4 - x: 44 -tests: - - - description: 'Unacknowledged bulkWrite deleteOne with hints fails with client-side error' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - deleteOne: - filter: &deleteOne_filter1 - _id: 1 - hint: &hint_string _id_ - - - deleteOne: - filter: &deleteOne_filter2 - _id: 2 - hint: &hint_doc - _id: 1 - ordered: true - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 - - - _id: 4 - x: 44 - - - description: 'Unacknowledged bulkWrite deleteMany with hints fails with client-side error' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - deleteMany: - filter: &deleteMany_filter1 - _id: - $lt: 3 - hint: *hint_string - - - deleteMany: - filter: &deleteMany_filter2 - _id: - $gte: 4 - hint: *hint_doc - ordered: true - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: *outcome diff --git a/testdata/crud/unified/unacknowledged-bulkWrite-update-hint-clientError.json b/testdata/crud/unified/unacknowledged-bulkWrite-update-hint-clientError.json deleted file mode 100644 index 858967b90c..0000000000 --- a/testdata/crud/unified/unacknowledged-bulkWrite-update-hint-clientError.json +++ /dev/null @@ -1,284 +0,0 @@ -{ - "description": "unacknowledged-bulkWrite-update-hint-clientError", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "Bulkwrite_update_hint", - "collectionOptions": { - "writeConcern": { - "w": 0 - } - } - } - } - ], - "initialData": [ - { - "collectionName": "Bulkwrite_update_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "tests": [ - { - "description": "Unacknowledged bulkWrite updateOne with hints fails with client-side error", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "updateOne": { - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": "_id_" - } - }, - { - "updateOne": { - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": { - "_id": 1 - } - } - } - ], - "ordered": true - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "Bulkwrite_update_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ] - }, - { - "description": "Unacknowledged bulkWrite updateMany with hints fails with client-side error", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "updateMany": { - "filter": { - "_id": { - "$lt": 3 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": "_id_" - } - }, - { - "updateMany": { - "filter": { - "_id": { - "$lt": 3 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": { - "_id": 1 - } - } - } - ], - "ordered": true - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "Bulkwrite_update_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ] - }, - { - "description": "Unacknowledged bulkWrite replaceOne with hints fails with client-side error", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "replaceOne": { - "filter": { - "_id": 3 - }, - "replacement": { - "x": 333 - }, - "hint": "_id_" - } - }, - { - "replaceOne": { - "filter": { - "_id": 4 - }, - "replacement": { - "x": 444 - }, - "hint": { - "_id": 1 - } - } - } - ], - "ordered": true - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "Bulkwrite_update_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/unacknowledged-bulkWrite-update-hint-clientError.yml b/testdata/crud/unified/unacknowledged-bulkWrite-update-hint-clientError.yml deleted file mode 100644 index 95620f097a..0000000000 --- a/testdata/crud/unified/unacknowledged-bulkWrite-update-hint-clientError.yml +++ /dev/null @@ -1,147 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: unacknowledged-bulkWrite-update-hint-clientError -schemaVersion: '1.0' -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name Bulkwrite_update_hint - collectionOptions: - writeConcern: { w: 0 } -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 - - - _id: 4 - x: 44 -tests: - - - description: 'Unacknowledged bulkWrite updateOne with hints fails with client-side error' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - updateOne: - filter: &updateOne_filter - _id: 1 - update: &updateOne_update - $inc: - x: 1 - hint: &hint_string _id_ - - - updateOne: - filter: *updateOne_filter - update: *updateOne_update - hint: &hint_doc - _id: 1 - ordered: true - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 - - - _id: 4 - x: 44 - - - description: 'Unacknowledged bulkWrite updateMany with hints fails with client-side error' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - updateMany: - filter: &updateMany_filter - _id: - $lt: 3 - update: &updateMany_update - $inc: - x: 1 - hint: *hint_string - - - updateMany: - filter: *updateMany_filter - update: *updateMany_update - hint: *hint_doc - ordered: true - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: *outcome - - - description: 'Unacknowledged bulkWrite replaceOne with hints fails with client-side error' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - replaceOne: - filter: - _id: 3 - replacement: - x: 333 - hint: *hint_string - - - replaceOne: - filter: - _id: 4 - replacement: - x: 444 - hint: *hint_doc - ordered: true - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: *outcome diff --git a/testdata/crud/unified/unacknowledged-deleteMany-hint-clientError.json b/testdata/crud/unified/unacknowledged-deleteMany-hint-clientError.json deleted file mode 100644 index c5d9f6af36..0000000000 --- a/testdata/crud/unified/unacknowledged-deleteMany-hint-clientError.json +++ /dev/null @@ -1,149 +0,0 @@ -{ - "description": "unacknowledged-deleteMany-hint-clientError", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "DeleteMany_hint", - "collectionOptions": { - "writeConcern": { - "w": 0 - } - } - } - } - ], - "initialData": [ - { - "collectionName": "DeleteMany_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "Unacknowledged deleteMany with hint string fails with client-side error", - "operations": [ - { - "object": "collection0", - "name": "deleteMany", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "hint": "_id_" - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "DeleteMany_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "Unacknowledged deleteMany with hint document fails with client-side error", - "operations": [ - { - "object": "collection0", - "name": "deleteMany", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "hint": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "DeleteMany_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/unacknowledged-deleteMany-hint-clientError.yml b/testdata/crud/unified/unacknowledged-deleteMany-hint-clientError.yml deleted file mode 100644 index 7acbbc7ca8..0000000000 --- a/testdata/crud/unified/unacknowledged-deleteMany-hint-clientError.yml +++ /dev/null @@ -1,86 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: unacknowledged-deleteMany-hint-clientError -schemaVersion: '1.0' -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name DeleteMany_hint - collectionOptions: - writeConcern: { w: 0 } -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 -tests: - - - description: 'Unacknowledged deleteMany with hint string fails with client-side error' - operations: - - - object: *collection0 - name: deleteMany - arguments: - filter: &filter - _id: - $gt: 1 - hint: _id_ - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 - - - description: 'Unacknowledged deleteMany with hint document fails with client-side error' - operations: - - - object: *collection0 - name: deleteMany - arguments: - filter: *filter - hint: - _id: 1 - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: *outcome diff --git a/testdata/crud/unified/unacknowledged-deleteOne-hint-clientError.json b/testdata/crud/unified/unacknowledged-deleteOne-hint-clientError.json deleted file mode 100644 index 177ad889bb..0000000000 --- a/testdata/crud/unified/unacknowledged-deleteOne-hint-clientError.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "description": "unacknowledged-deleteOne-hint-clientError", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "DeleteOne_hint", - "collectionOptions": { - "writeConcern": { - "w": 0 - } - } - } - } - ], - "initialData": [ - { - "collectionName": "DeleteOne_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ], - "tests": [ - { - "description": "Unacknowledged deleteOne with hint string fails with client-side error", - "operations": [ - { - "object": "collection0", - "name": "deleteOne", - "arguments": { - "filter": { - "_id": 1 - }, - "hint": "_id_" - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "DeleteOne_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "Unacknowledged deleteOne with hint document fails with client-side error", - "operations": [ - { - "object": "collection0", - "name": "deleteOne", - "arguments": { - "filter": { - "_id": 1 - }, - "hint": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "DeleteOne_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/unacknowledged-deleteOne-hint-clientError.yml b/testdata/crud/unified/unacknowledged-deleteOne-hint-clientError.yml deleted file mode 100644 index 996dad6cac..0000000000 --- a/testdata/crud/unified/unacknowledged-deleteOne-hint-clientError.yml +++ /dev/null @@ -1,79 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: unacknowledged-deleteOne-hint-clientError -schemaVersion: '1.0' -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name DeleteOne_hint - collectionOptions: - writeConcern: { w: 0 } -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 -tests: - - - description: 'Unacknowledged deleteOne with hint string fails with client-side error' - operations: - - - object: *collection0 - name: deleteOne - arguments: - filter: &filter - _id: 1 - hint: _id_ - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - description: 'Unacknowledged deleteOne with hint document fails with client-side error' - operations: - - - object: *collection0 - name: deleteOne - arguments: - filter: *filter - hint: - _id: 1 - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: *outcome diff --git a/testdata/crud/unified/unacknowledged-findOneAndDelete-hint-clientError.json b/testdata/crud/unified/unacknowledged-findOneAndDelete-hint-clientError.json deleted file mode 100644 index 6ee59cdf64..0000000000 --- a/testdata/crud/unified/unacknowledged-findOneAndDelete-hint-clientError.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "description": "unacknowledged-findOneAndDelete-hint-clientError", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "findOneAndDelete_hint", - "collectionOptions": { - "writeConcern": { - "w": 0 - } - } - } - } - ], - "initialData": [ - { - "collectionName": "findOneAndDelete_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ], - "tests": [ - { - "description": "Unacknowledged findOneAndDelete with hint string fails with client-side error", - "operations": [ - { - "object": "collection0", - "name": "findOneAndDelete", - "arguments": { - "filter": { - "_id": 1 - }, - "hint": "_id_" - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "findOneAndDelete_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "Unacknowledged findOneAndDelete with hint document fails with client-side error", - "operations": [ - { - "object": "collection0", - "name": "findOneAndDelete", - "arguments": { - "filter": { - "_id": 1 - }, - "hint": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "findOneAndDelete_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/unacknowledged-findOneAndDelete-hint-clientError.yml b/testdata/crud/unified/unacknowledged-findOneAndDelete-hint-clientError.yml deleted file mode 100644 index 7a619d30a0..0000000000 --- a/testdata/crud/unified/unacknowledged-findOneAndDelete-hint-clientError.yml +++ /dev/null @@ -1,90 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: unacknowledged-findOneAndDelete-hint-clientError -schemaVersion: '1.0' -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name findOneAndDelete_hint - collectionOptions: - writeConcern: { w: 0 } -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 -tests: - - - description: 'Unacknowledged findOneAndDelete with hint string fails with client-side error' - operations: - - - object: *collection0 - name: findOneAndDelete - arguments: - filter: &filter - _id: 1 - hint: _id_ - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - description: 'Unacknowledged findOneAndDelete with hint document fails with client-side error' - operations: - - - object: *collection0 - name: findOneAndDelete - arguments: - filter: &filter - _id: 1 - hint: - _id: 1 - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 diff --git a/testdata/crud/unified/unacknowledged-findOneAndReplace-hint-clientError.json b/testdata/crud/unified/unacknowledged-findOneAndReplace-hint-clientError.json deleted file mode 100644 index 15ca773228..0000000000 --- a/testdata/crud/unified/unacknowledged-findOneAndReplace-hint-clientError.json +++ /dev/null @@ -1,139 +0,0 @@ -{ - "description": "unacknowledged-findOneAndReplace-hint-clientError", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "FindOneAndReplace_hint", - "collectionOptions": { - "writeConcern": { - "w": 0 - } - } - } - } - ], - "initialData": [ - { - "collectionName": "FindOneAndReplace_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ], - "tests": [ - { - "description": "Unacknowledged findOneAndReplace with hint string fails with client-side error", - "operations": [ - { - "object": "collection0", - "name": "findOneAndReplace", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "x": 33 - }, - "hint": "_id_" - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "FindOneAndReplace_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "Unacknowledged findOneAndReplace with hint document fails with client-side error", - "operations": [ - { - "object": "collection0", - "name": "findOneAndReplace", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "x": 33 - }, - "hint": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "FindOneAndReplace_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/unacknowledged-findOneAndReplace-hint-clientError.yml b/testdata/crud/unified/unacknowledged-findOneAndReplace-hint-clientError.yml deleted file mode 100644 index cbd12dac98..0000000000 --- a/testdata/crud/unified/unacknowledged-findOneAndReplace-hint-clientError.yml +++ /dev/null @@ -1,82 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: unacknowledged-findOneAndReplace-hint-clientError -schemaVersion: '1.0' -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name FindOneAndReplace_hint - collectionOptions: - writeConcern: { w: 0 } -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 -tests: - - - description: 'Unacknowledged findOneAndReplace with hint string fails with client-side error' - operations: - - - object: *collection0 - name: findOneAndReplace - arguments: - filter: &filter - _id: 1 - replacement: &replacement - x: 33 - hint: _id_ - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - description: 'Unacknowledged findOneAndReplace with hint document fails with client-side error' - operations: - - - object: *collection0 - name: findOneAndReplace - arguments: - filter: *filter - replacement: *replacement - hint: - _id: 1 - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: *outcome diff --git a/testdata/crud/unified/unacknowledged-findOneAndUpdate-hint-clientError.json b/testdata/crud/unified/unacknowledged-findOneAndUpdate-hint-clientError.json deleted file mode 100644 index e18767f8b2..0000000000 --- a/testdata/crud/unified/unacknowledged-findOneAndUpdate-hint-clientError.json +++ /dev/null @@ -1,143 +0,0 @@ -{ - "description": "unacknowledged-findOneAndUpdate-hint-clientError", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "FindOneAndUpdate_hint", - "collectionOptions": { - "writeConcern": { - "w": 0 - } - } - } - } - ], - "initialData": [ - { - "collectionName": "FindOneAndUpdate_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ], - "tests": [ - { - "description": "Unacknowledged findOneAndUpdate with hint string fails with client-side error", - "operations": [ - { - "object": "collection0", - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": "_id_" - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "FindOneAndUpdate_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "Unacknowledged findOneAndUpdate with hint document fails with client-side error", - "operations": [ - { - "object": "collection0", - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "FindOneAndUpdate_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/unacknowledged-findOneAndUpdate-hint-clientError.yml b/testdata/crud/unified/unacknowledged-findOneAndUpdate-hint-clientError.yml deleted file mode 100644 index b9cd0229cb..0000000000 --- a/testdata/crud/unified/unacknowledged-findOneAndUpdate-hint-clientError.yml +++ /dev/null @@ -1,83 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: unacknowledged-findOneAndUpdate-hint-clientError -schemaVersion: '1.0' -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name FindOneAndUpdate_hint - collectionOptions: - writeConcern: { w: 0 } -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 -tests: - - - description: 'Unacknowledged findOneAndUpdate with hint string fails with client-side error' - operations: - - - object: *collection0 - name: findOneAndUpdate - arguments: - filter: &filter - _id: 1 - update: &update - $inc: - x: 1 - hint: _id_ - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - description: 'Unacknowledged findOneAndUpdate with hint document fails with client-side error' - operations: - - - object: *collection0 - name: findOneAndUpdate - arguments: - filter: *filter - update: *update - hint: - _id: 1 - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: *outcome diff --git a/testdata/crud/unified/unacknowledged-replaceOne-hint-clientError.json b/testdata/crud/unified/unacknowledged-replaceOne-hint-clientError.json deleted file mode 100644 index 52ec59d0c0..0000000000 --- a/testdata/crud/unified/unacknowledged-replaceOne-hint-clientError.json +++ /dev/null @@ -1,143 +0,0 @@ -{ - "description": "unacknowledged-replaceOne-hint-clientError", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "ReplaceOne_hint", - "collectionOptions": { - "writeConcern": { - "w": 0 - } - } - } - } - ], - "initialData": [ - { - "collectionName": "ReplaceOne_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ], - "tests": [ - { - "description": "Unacknowledged ReplaceOne with hint string fails with client-side error", - "operations": [ - { - "object": "collection0", - "name": "replaceOne", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "replacement": { - "x": 111 - }, - "hint": "_id_" - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "ReplaceOne_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "Unacknowledged ReplaceOne with hint document fails with client-side error", - "operations": [ - { - "object": "collection0", - "name": "replaceOne", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "replacement": { - "x": 111 - }, - "hint": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "ReplaceOne_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/unacknowledged-replaceOne-hint-clientError.yml b/testdata/crud/unified/unacknowledged-replaceOne-hint-clientError.yml deleted file mode 100644 index 710cd424b1..0000000000 --- a/testdata/crud/unified/unacknowledged-replaceOne-hint-clientError.yml +++ /dev/null @@ -1,83 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: unacknowledged-replaceOne-hint-clientError -schemaVersion: '1.0' -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name ReplaceOne_hint - collectionOptions: - writeConcern: { w: 0 } -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 -tests: - - - description: 'Unacknowledged ReplaceOne with hint string fails with client-side error' - operations: - - - object: *collection0 - name: replaceOne - arguments: - filter: &filter - _id: - $gt: 1 - replacement: &replacement - x: 111 - hint: _id_ - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - description: 'Unacknowledged ReplaceOne with hint document fails with client-side error' - operations: - - - object: *collection0 - name: replaceOne - arguments: - filter: *filter - replacement: *replacement - hint: - _id: 1 - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: *outcome diff --git a/testdata/crud/unified/unacknowledged-updateMany-hint-clientError.json b/testdata/crud/unified/unacknowledged-updateMany-hint-clientError.json deleted file mode 100644 index 6199dfa2be..0000000000 --- a/testdata/crud/unified/unacknowledged-updateMany-hint-clientError.json +++ /dev/null @@ -1,159 +0,0 @@ -{ - "description": "unacknowledged-updateMany-hint-clientError", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "Updatemany_hint", - "collectionOptions": { - "writeConcern": { - "w": 0 - } - } - } - } - ], - "initialData": [ - { - "collectionName": "Updatemany_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "Unacknowledged updateMany with hint string fails with client-side error", - "operations": [ - { - "object": "collection0", - "name": "updateMany", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": "_id_" - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "Updatemany_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "Unacknowledged updateMany with hint document fails with client-side error", - "operations": [ - { - "object": "collection0", - "name": "updateMany", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "Updatemany_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/unacknowledged-updateMany-hint-clientError.yml b/testdata/crud/unified/unacknowledged-updateMany-hint-clientError.yml deleted file mode 100644 index 1594c7cd44..0000000000 --- a/testdata/crud/unified/unacknowledged-updateMany-hint-clientError.yml +++ /dev/null @@ -1,90 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: unacknowledged-updateMany-hint-clientError -schemaVersion: '1.0' -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name Updatemany_hint - collectionOptions: - writeConcern: { w: 0 } -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 -tests: - - - description: 'Unacknowledged updateMany with hint string fails with client-side error' - operations: - - - object: *collection0 - name: updateMany - arguments: - filter: &filter - _id: - $gt: 1 - update: &update - $inc: - x: 1 - hint: _id_ - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 - - - description: 'Unacknowledged updateMany with hint document fails with client-side error' - operations: - - - object: *collection0 - name: updateMany - arguments: - filter: *filter - update: *update - hint: - _id: 1 - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: *outcome diff --git a/testdata/crud/unified/unacknowledged-updateOne-hint-clientError.json b/testdata/crud/unified/unacknowledged-updateOne-hint-clientError.json deleted file mode 100644 index 3828a9e8df..0000000000 --- a/testdata/crud/unified/unacknowledged-updateOne-hint-clientError.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "description": "unacknowledged-updateOne-hint-clientError", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "UpdateOne_hint", - "collectionOptions": { - "writeConcern": { - "w": 0 - } - } - } - } - ], - "initialData": [ - { - "collectionName": "UpdateOne_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ], - "tests": [ - { - "description": "Unacknowledged updateOne with hint string fails with client-side error", - "operations": [ - { - "object": "collection0", - "name": "updateOne", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": "_id_" - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "UpdateOne_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "Unacknowledged updateOne with hint document fails with client-side error", - "operations": [ - { - "object": "collection0", - "name": "updateOne", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "UpdateOne_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/unacknowledged-updateOne-hint-clientError.yml b/testdata/crud/unified/unacknowledged-updateOne-hint-clientError.yml deleted file mode 100644 index 49126ea006..0000000000 --- a/testdata/crud/unified/unacknowledged-updateOne-hint-clientError.yml +++ /dev/null @@ -1,84 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: unacknowledged-updateOne-hint-clientError -schemaVersion: '1.0' -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name UpdateOne_hint - collectionOptions: - writeConcern: { w: 0 } -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 -tests: - - - description: 'Unacknowledged updateOne with hint string fails with client-side error' - operations: - - - object: *collection0 - name: updateOne - arguments: - filter: &filter - _id: - $gt: 1 - update: &update - $inc: - x: 1 - hint: _id_ - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - description: 'Unacknowledged updateOne with hint document fails with client-side error' - operations: - - - object: *collection0 - name: updateOne - arguments: - filter: *filter - update: *update - hint: - _id: 1 - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: *outcome diff --git a/testdata/crud/unified/updateMany-comment.json b/testdata/crud/unified/updateMany-comment.json deleted file mode 100644 index 88b8b67f5a..0000000000 --- a/testdata/crud/unified/updateMany-comment.json +++ /dev/null @@ -1,254 +0,0 @@ -{ - "description": "updateMany-comment", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ], - "tests": [ - { - "description": "UpdateMany with string comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "updateMany", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$set": { - "x": 22 - } - }, - "comment": "comment" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "$set": { - "x": 22 - } - }, - "multi": true, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "comment": "comment" - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 22 - } - ] - } - ] - }, - { - "description": "UpdateMany with document comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "updateMany", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$set": { - "x": 22 - } - }, - "comment": { - "key": "value" - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "$set": { - "x": 22 - } - }, - "multi": true, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "comment": { - "key": "value" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 22 - } - ] - } - ] - }, - { - "description": "UpdateMany with comment - pre 4.4", - "runOnRequirements": [ - { - "minServerVersion": "3.4.0", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "updateMany", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$set": { - "x": 22 - } - }, - "comment": "comment" - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "$set": { - "x": 22 - } - }, - "multi": true, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "comment": "comment" - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/updateMany-comment.yml b/testdata/crud/unified/updateMany-comment.yml deleted file mode 100644 index 4c6fbacd77..0000000000 --- a/testdata/crud/unified/updateMany-comment.yml +++ /dev/null @@ -1,104 +0,0 @@ -description: "updateMany-comment" -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - -tests: - - description: "UpdateMany with string comment" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: updateMany - object: *collection0 - arguments: - filter: &filter { _id: 1 } - update: &update { $set: {x: 22} } - comment: "comment" - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - - q: *filter - u: *update - multi: true - upsert: { $$unsetOrMatches: false } - comment: "comment" - outcome: &outcome - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 22 } - - - description: "UpdateMany with document comment" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: updateMany - object: *collection0 - arguments: - filter: *filter - update: *update - comment: &comment { key: "value" } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - - q: *filter - u: *update - multi: true - upsert: { $$unsetOrMatches: false } - comment: *comment - outcome: *outcome - - - description: "UpdateMany with comment - pre 4.4" - runOnRequirements: - - minServerVersion: "3.4.0" - maxServerVersion: "4.2.99" - operations: - - name: updateMany - object: *collection0 - arguments: - filter: *filter - update: *update - comment: "comment" - expectError: - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - - q: *filter - u: *update - multi: true - upsert: { $$unsetOrMatches: false } - comment: "comment" - outcome: *initialData diff --git a/testdata/crud/unified/updateMany-dots_and_dollars.json b/testdata/crud/unified/updateMany-dots_and_dollars.json deleted file mode 100644 index 5d3b9d0453..0000000000 --- a/testdata/crud/unified/updateMany-dots_and_dollars.json +++ /dev/null @@ -1,404 +0,0 @@ -{ - "description": "updateMany-dots_and_dollars", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "foo": {} - } - ] - } - ], - "tests": [ - { - "description": "Updating document to set top-level dollar-prefixed key on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "updateMany", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$replaceWith": { - "$setField": { - "field": { - "$literal": "$a" - }, - "value": 1, - "input": "$$ROOT" - } - } - } - ] - }, - "expectResult": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": [ - { - "$replaceWith": { - "$setField": { - "field": { - "$literal": "$a" - }, - "value": 1, - "input": "$$ROOT" - } - } - } - ], - "multi": true, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "foo": {}, - "$a": 1 - } - ] - } - ] - }, - { - "description": "Updating document to set top-level dotted key on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "updateMany", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$replaceWith": { - "$setField": { - "field": { - "$literal": "a.b" - }, - "value": 1, - "input": "$$ROOT" - } - } - } - ] - }, - "expectResult": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": [ - { - "$replaceWith": { - "$setField": { - "field": { - "$literal": "a.b" - }, - "value": 1, - "input": "$$ROOT" - } - } - } - ], - "multi": true, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "foo": {}, - "a.b": 1 - } - ] - } - ] - }, - { - "description": "Updating document to set dollar-prefixed key in embedded doc on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "updateMany", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$set": { - "foo": { - "$setField": { - "field": { - "$literal": "$a" - }, - "value": 1, - "input": "$foo" - } - } - } - } - ] - }, - "expectResult": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": [ - { - "$set": { - "foo": { - "$setField": { - "field": { - "$literal": "$a" - }, - "value": 1, - "input": "$foo" - } - } - } - } - ], - "multi": true, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "foo": { - "$a": 1 - } - } - ] - } - ] - }, - { - "description": "Updating document to set dotted key in embedded doc on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "updateMany", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$set": { - "foo": { - "$setField": { - "field": { - "$literal": "a.b" - }, - "value": 1, - "input": "$foo" - } - } - } - } - ] - }, - "expectResult": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": [ - { - "$set": { - "foo": { - "$setField": { - "field": { - "$literal": "a.b" - }, - "value": 1, - "input": "$foo" - } - } - } - } - ], - "multi": true, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "foo": { - "a.b": 1 - } - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/updateMany-dots_and_dollars.yml b/testdata/crud/unified/updateMany-dots_and_dollars.yml deleted file mode 100644 index 6c9da82a5a..0000000000 --- a/testdata/crud/unified/updateMany-dots_and_dollars.yml +++ /dev/null @@ -1,138 +0,0 @@ -description: "updateMany-dots_and_dollars" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, foo: {} } - -tests: - - description: "Updating document to set top-level dollar-prefixed key on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: updateMany - object: *collection0 - arguments: - filter: { _id: 1 } - update: &dollarPrefixedKey - - { $replaceWith: { $setField: { field: { $literal: $a }, value: 1, input: $$ROOT } } } - expectResult: &updateResult - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: { _id: 1 } - u: *dollarPrefixedKey - multi: true - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, foo: {}, $a: 1 } - - - description: "Updating document to set top-level dotted key on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: updateMany - object: *collection0 - arguments: - filter: { _id: 1 } - update: &dottedKey - - { $replaceWith: { $setField: { field: { $literal: a.b }, value: 1, input: $$ROOT } } } - expectResult: *updateResult - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: { _id: 1 } - u: *dottedKey - multi: true - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, foo: {}, a.b: 1 } - - - description: "Updating document to set dollar-prefixed key in embedded doc on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: updateMany - object: *collection0 - arguments: - filter: { _id: 1 } - update: &dollarPrefixedKeyInEmbedded - - { $set: { foo: { $setField: { field: { $literal: $a }, value: 1, input: $foo } } } } - expectResult: *updateResult - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: { _id: 1 } - u: *dollarPrefixedKeyInEmbedded - multi: true - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, foo: { $a: 1 } } - - - description: "Updating document to set dotted key in embedded doc on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: updateMany - object: *collection0 - arguments: - filter: { _id: 1 } - update: &dottedKeyInEmbedded - - { $set: { foo: { $setField: { field: { $literal: a.b }, value: 1, input: $foo } } } } - expectResult: *updateResult - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: { _id: 1 } - u: *dottedKeyInEmbedded - multi: true - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, foo: { a.b: 1 } } diff --git a/testdata/crud/unified/updateMany-hint-clientError.json b/testdata/crud/unified/updateMany-hint-clientError.json deleted file mode 100644 index 5da878e293..0000000000 --- a/testdata/crud/unified/updateMany-hint-clientError.json +++ /dev/null @@ -1,159 +0,0 @@ -{ - "description": "updateMany-hint-clientError", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "maxServerVersion": "3.3.99" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test_updatemany_hint" - } - } - ], - "initialData": [ - { - "collectionName": "test_updatemany_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "UpdateMany with hint string unsupported (client-side error)", - "operations": [ - { - "object": "collection0", - "name": "updateMany", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": "_id_" - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "test_updatemany_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "UpdateMany with hint document unsupported (client-side error)", - "operations": [ - { - "object": "collection0", - "name": "updateMany", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "test_updatemany_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/updateMany-hint-clientError.yml b/testdata/crud/unified/updateMany-hint-clientError.yml deleted file mode 100644 index 9734078ce3..0000000000 --- a/testdata/crud/unified/updateMany-hint-clientError.yml +++ /dev/null @@ -1,91 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: updateMany-hint-clientError -schemaVersion: '1.0' -runOnRequirements: - - - maxServerVersion: 3.3.99 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name test_updatemany_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 -tests: - - - description: 'UpdateMany with hint string unsupported (client-side error)' - operations: - - - object: *collection0 - name: updateMany - arguments: - filter: &filter - _id: - $gt: 1 - update: &update - $inc: - x: 1 - hint: _id_ - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 - - - description: 'UpdateMany with hint document unsupported (client-side error)' - operations: - - - object: *collection0 - name: updateMany - arguments: - filter: *filter - update: *update - hint: - _id: 1 - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: *outcome diff --git a/testdata/crud/unified/updateMany-hint-serverError.json b/testdata/crud/unified/updateMany-hint-serverError.json deleted file mode 100644 index c81f36b13c..0000000000 --- a/testdata/crud/unified/updateMany-hint-serverError.json +++ /dev/null @@ -1,216 +0,0 @@ -{ - "description": "updateMany-hint-serverError", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "3.4.0", - "maxServerVersion": "4.1.9" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test_updatemany_hint" - } - } - ], - "initialData": [ - { - "collectionName": "test_updatemany_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "UpdateMany with hint string unsupported (server-side error)", - "operations": [ - { - "object": "collection0", - "name": "updateMany", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": "_id_" - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test_updatemany_hint", - "updates": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "u": { - "$inc": { - "x": 1 - } - }, - "multi": true, - "hint": "_id_", - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test_updatemany_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "UpdateMany with hint document unsupported (server-side error)", - "operations": [ - { - "object": "collection0", - "name": "updateMany", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test_updatemany_hint", - "updates": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "u": { - "$inc": { - "x": 1 - } - }, - "multi": true, - "hint": { - "_id": 1 - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test_updatemany_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/updateMany-hint-serverError.yml b/testdata/crud/unified/updateMany-hint-serverError.yml deleted file mode 100644 index 03b803bdde..0000000000 --- a/testdata/crud/unified/updateMany-hint-serverError.yml +++ /dev/null @@ -1,115 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: updateMany-hint-serverError -schemaVersion: '1.0' -runOnRequirements: - - - minServerVersion: 3.4.0 - maxServerVersion: 4.1.9 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name test_updatemany_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 -tests: - - - description: 'UpdateMany with hint string unsupported (server-side error)' - operations: - - - object: *collection0 - name: updateMany - arguments: - filter: &filter - _id: - $gt: 1 - update: &update - $inc: - x: 1 - hint: _id_ - expectError: - isError: true - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - update: *collection_name - updates: - - - q: *filter - u: *update - multi: true - hint: _id_ - upsert: { $$unsetOrMatches: false } - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 - - - description: 'UpdateMany with hint document unsupported (server-side error)' - operations: - - - object: *collection0 - name: updateMany - arguments: - filter: *filter - update: *update - hint: - _id: 1 - expectError: - isError: true - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - update: *collection_name - updates: - - - q: *filter - u: *update - multi: true - hint: - _id: 1 - upsert: { $$unsetOrMatches: false } - outcome: *outcome diff --git a/testdata/crud/unified/updateMany-hint.json b/testdata/crud/unified/updateMany-hint.json deleted file mode 100644 index 929be52994..0000000000 --- a/testdata/crud/unified/updateMany-hint.json +++ /dev/null @@ -1,219 +0,0 @@ -{ - "description": "updateMany-hint", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "4.2.0" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test_updatemany_hint" - } - } - ], - "initialData": [ - { - "collectionName": "test_updatemany_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "UpdateMany with hint string", - "operations": [ - { - "object": "collection0", - "name": "updateMany", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": "_id_" - }, - "expectResult": { - "matchedCount": 2, - "modifiedCount": 2, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test_updatemany_hint", - "updates": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "u": { - "$inc": { - "x": 1 - } - }, - "multi": true, - "hint": "_id_", - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test_updatemany_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 23 - }, - { - "_id": 3, - "x": 34 - } - ] - } - ] - }, - { - "description": "UpdateMany with hint document", - "operations": [ - { - "object": "collection0", - "name": "updateMany", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": { - "_id": 1 - } - }, - "expectResult": { - "matchedCount": 2, - "modifiedCount": 2, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test_updatemany_hint", - "updates": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "u": { - "$inc": { - "x": 1 - } - }, - "multi": true, - "hint": { - "_id": 1 - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test_updatemany_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 23 - }, - { - "_id": 3, - "x": 34 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/updateMany-hint.yml b/testdata/crud/unified/updateMany-hint.yml deleted file mode 100644 index 8b6c228f4d..0000000000 --- a/testdata/crud/unified/updateMany-hint.yml +++ /dev/null @@ -1,115 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: updateMany-hint -schemaVersion: '1.0' -runOnRequirements: - - - minServerVersion: 4.2.0 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name test_updatemany_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - _id: 3 - x: 33 -tests: - - - description: 'UpdateMany with hint string' - operations: - - - object: *collection0 - name: updateMany - arguments: - filter: &filter - _id: - $gt: 1 - update: &update - $inc: - x: 1 - hint: _id_ - expectResult: &result - matchedCount: 2 - modifiedCount: 2 - upsertedCount: 0 - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - update: *collection_name - updates: - - - q: *filter - u: *update - multi: true - hint: _id_ - upsert: { $$unsetOrMatches: false } - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 23 - - - _id: 3 - x: 34 - - - description: 'UpdateMany with hint document' - operations: - - - object: *collection0 - name: updateMany - arguments: - filter: *filter - update: *update - hint: - _id: 1 - expectResult: *result - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - update: *collection_name - updates: - - - q: *filter - u: *update - multi: true - hint: - _id: 1 - upsert: { $$unsetOrMatches: false } - outcome: *outcome diff --git a/testdata/crud/unified/updateMany-let.json b/testdata/crud/unified/updateMany-let.json deleted file mode 100644 index cff3bd4c79..0000000000 --- a/testdata/crud/unified/updateMany-let.json +++ /dev/null @@ -1,249 +0,0 @@ -{ - "description": "updateMany-let", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2, - "name": "name" - }, - { - "_id": 3, - "name": "name" - } - ] - } - ], - "tests": [ - { - "description": "updateMany with let option", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "updateMany", - "object": "collection0", - "arguments": { - "filter": { - "$expr": { - "$eq": [ - "$name", - "$$name" - ] - } - }, - "update": [ - { - "$set": { - "x": "$$x", - "y": "$$y" - } - } - ], - "let": { - "name": "name", - "x": "foo", - "y": { - "$literal": "bar" - } - } - }, - "expectResult": { - "matchedCount": 2, - "modifiedCount": 2, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "$expr": { - "$eq": [ - "$name", - "$$name" - ] - } - }, - "u": [ - { - "$set": { - "x": "$$x", - "y": "$$y" - } - } - ], - "multi": true, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "let": { - "name": "name", - "x": "foo", - "y": { - "$literal": "bar" - } - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2, - "name": "name", - "x": "foo", - "y": "bar" - }, - { - "_id": 3, - "name": "name", - "x": "foo", - "y": "bar" - } - ] - } - ] - }, - { - "description": "updateMany with let option unsupported (server-side error)", - "runOnRequirements": [ - { - "minServerVersion": "4.2.0", - "maxServerVersion": "4.4.99" - } - ], - "operations": [ - { - "name": "updateMany", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$set": { - "x": "$$x" - } - } - ], - "let": { - "x": "foo" - } - }, - "expectError": { - "errorContains": "'update.let' is an unknown field", - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": [ - { - "$set": { - "x": "$$x" - } - } - ], - "multi": true, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "let": { - "x": "foo" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2, - "name": "name" - }, - { - "_id": 3, - "name": "name" - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/updateMany-let.yml b/testdata/crud/unified/updateMany-let.yml deleted file mode 100644 index 402000967b..0000000000 --- a/testdata/crud/unified/updateMany-let.yml +++ /dev/null @@ -1,107 +0,0 @@ -description: "updateMany-let" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2, name: "name" } - - { _id: 3, name: "name" } - - -tests: - - description: "updateMany with let option" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: updateMany - object: *collection0 - arguments: - filter: &filter - $expr: - $eq: [ "$name", "$$name" ] - update: &update - - $set: {x: "$$x", y: "$$y" } - let: &let0 - name: name - x: foo - y: { $literal: "bar" } - expectResult: - matchedCount: 2 - modifiedCount: 2 - upsertedCount: 0 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - - q: *filter - u: *update - multi: true - upsert: { $$unsetOrMatches: false } - let: *let0 - outcome: - - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2, name: "name", x: "foo", y: "bar" } - - { _id: 3, name: "name", x: "foo", y: "bar" } - - - description: "updateMany with let option unsupported (server-side error)" - runOnRequirements: - - minServerVersion: "4.2.0" - maxServerVersion: "4.4.99" - operations: - - name: updateMany - object: *collection0 - arguments: - filter: &filter1 - _id: 1 - update: &update1 - - $set: {x: "$$x"} - let: &let1 - x: foo - expectError: - errorContains: "'update.let' is an unknown field" - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - - q: *filter1 - u: *update1 - multi: true - upsert: { $$unsetOrMatches: false } - let: *let1 - outcome: - - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2, name: "name" } - - { _id: 3, name: "name" } diff --git a/testdata/crud/unified/updateMany-validation.json b/testdata/crud/unified/updateMany-validation.json deleted file mode 100644 index e3e46a1384..0000000000 --- a/testdata/crud/unified/updateMany-validation.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "description": "updateMany-validation", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "UpdateMany requires atomic modifiers", - "operations": [ - { - "name": "updateMany", - "object": "collection0", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "x": 44 - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/updateMany-validation.yml b/testdata/crud/unified/updateMany-validation.yml deleted file mode 100644 index 4e86eff1f3..0000000000 --- a/testdata/crud/unified/updateMany-validation.yml +++ /dev/null @@ -1,39 +0,0 @@ -description: "updateMany-validation" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -tests: - - description: "UpdateMany requires atomic modifiers" - operations: - - name: updateMany - object: *collection0 - arguments: - filter: { _id: { $gt: 1 } } - update: { x: 44 } - expectError: - isClientError: true - expectEvents: - - client: *client0 - events: [] - outcome: *initialData diff --git a/testdata/crud/unified/updateOne-comment.json b/testdata/crud/unified/updateOne-comment.json deleted file mode 100644 index f4ee74db38..0000000000 --- a/testdata/crud/unified/updateOne-comment.json +++ /dev/null @@ -1,260 +0,0 @@ -{ - "description": "updateOne-comment", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ], - "tests": [ - { - "description": "UpdateOne with string comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$set": { - "x": 22 - } - }, - "comment": "comment" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "$set": { - "x": 22 - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "comment": "comment" - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 22 - } - ] - } - ] - }, - { - "description": "UpdateOne with document comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$set": { - "x": 22 - } - }, - "comment": { - "key": "value" - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "$set": { - "x": 22 - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "comment": { - "key": "value" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 22 - } - ] - } - ] - }, - { - "description": "UpdateOne with comment - pre 4.4", - "runOnRequirements": [ - { - "minServerVersion": "3.4.0", - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$set": { - "x": 22 - } - }, - "comment": "comment" - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": { - "$set": { - "x": 22 - } - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "comment": "comment" - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/updateOne-comment.yml b/testdata/crud/unified/updateOne-comment.yml deleted file mode 100644 index a176d620eb..0000000000 --- a/testdata/crud/unified/updateOne-comment.yml +++ /dev/null @@ -1,104 +0,0 @@ -description: "updateOne-comment" -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - -tests: - - description: "UpdateOne with string comment" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: updateOne - object: *collection0 - arguments: - filter: &filter { _id: 1 } - update: &update { $set: {x: 22} } - comment: "comment" - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - - q: *filter - u: *update - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - comment: "comment" - outcome: &outcome - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 22 } - - - description: "UpdateOne with document comment" - runOnRequirements: - - minServerVersion: "4.4" - operations: - - name: updateOne - object: *collection0 - arguments: - filter: *filter - update: *update - comment: &comment { key: "value" } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - - q: *filter - u: *update - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - comment: *comment - outcome: *outcome - - - description: "UpdateOne with comment - pre 4.4" - runOnRequirements: - - minServerVersion: "3.4.0" - maxServerVersion: "4.2.99" - operations: - - name: updateOne - object: *collection0 - arguments: - filter: *filter - update: *update - comment: "comment" - expectError: - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - - q: *filter - u: *update - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - comment: "comment" - outcome: *initialData diff --git a/testdata/crud/unified/updateOne-dots_and_dollars.json b/testdata/crud/unified/updateOne-dots_and_dollars.json deleted file mode 100644 index 798d522cba..0000000000 --- a/testdata/crud/unified/updateOne-dots_and_dollars.json +++ /dev/null @@ -1,412 +0,0 @@ -{ - "description": "updateOne-dots_and_dollars", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "foo": {} - } - ] - } - ], - "tests": [ - { - "description": "Updating document to set top-level dollar-prefixed key on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$replaceWith": { - "$setField": { - "field": { - "$literal": "$a" - }, - "value": 1, - "input": "$$ROOT" - } - } - } - ] - }, - "expectResult": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": [ - { - "$replaceWith": { - "$setField": { - "field": { - "$literal": "$a" - }, - "value": 1, - "input": "$$ROOT" - } - } - } - ], - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "foo": {}, - "$a": 1 - } - ] - } - ] - }, - { - "description": "Updating document to set top-level dotted key on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$replaceWith": { - "$setField": { - "field": { - "$literal": "a.b" - }, - "value": 1, - "input": "$$ROOT" - } - } - } - ] - }, - "expectResult": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": [ - { - "$replaceWith": { - "$setField": { - "field": { - "$literal": "a.b" - }, - "value": 1, - "input": "$$ROOT" - } - } - } - ], - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "foo": {}, - "a.b": 1 - } - ] - } - ] - }, - { - "description": "Updating document to set dollar-prefixed key in embedded doc on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$set": { - "foo": { - "$setField": { - "field": { - "$literal": "$a" - }, - "value": 1, - "input": "$foo" - } - } - } - } - ] - }, - "expectResult": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": [ - { - "$set": { - "foo": { - "$setField": { - "field": { - "$literal": "$a" - }, - "value": 1, - "input": "$foo" - } - } - } - } - ], - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "foo": { - "$a": 1 - } - } - ] - } - ] - }, - { - "description": "Updating document to set dotted key in embedded doc on 5.0+ server", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$set": { - "foo": { - "$setField": { - "field": { - "$literal": "a.b" - }, - "value": 1, - "input": "$foo" - } - } - } - } - ] - }, - "expectResult": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": [ - { - "$set": { - "foo": { - "$setField": { - "field": { - "$literal": "a.b" - }, - "value": 1, - "input": "$foo" - } - } - } - } - ], - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "foo": { - "a.b": 1 - } - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/updateOne-dots_and_dollars.yml b/testdata/crud/unified/updateOne-dots_and_dollars.yml deleted file mode 100644 index 9ff8a38d73..0000000000 --- a/testdata/crud/unified/updateOne-dots_and_dollars.yml +++ /dev/null @@ -1,138 +0,0 @@ -description: "updateOne-dots_and_dollars" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, foo: {} } - -tests: - - description: "Updating document to set top-level dollar-prefixed key on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: updateOne - object: *collection0 - arguments: - filter: { _id: 1 } - update: &dollarPrefixedKey - - { $replaceWith: { $setField: { field: { $literal: $a }, value: 1, input: $$ROOT } } } - expectResult: &updateResult - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: { _id: 1 } - u: *dollarPrefixedKey - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, foo: {}, $a: 1 } - - - description: "Updating document to set top-level dotted key on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: updateOne - object: *collection0 - arguments: - filter: { _id: 1 } - update: &dottedKey - - { $replaceWith: { $setField: { field: { $literal: a.b }, value: 1, input: $$ROOT } } } - expectResult: *updateResult - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: { _id: 1 } - u: *dottedKey - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, foo: {}, a.b: 1 } - - - description: "Updating document to set dollar-prefixed key in embedded doc on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: updateOne - object: *collection0 - arguments: - filter: { _id: 1 } - update: &dollarPrefixedKeyInEmbedded - - { $set: { foo: { $setField: { field: { $literal: $a }, value: 1, input: $foo } } } } - expectResult: *updateResult - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: { _id: 1 } - u: *dollarPrefixedKeyInEmbedded - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, foo: { $a: 1 } } - - - description: "Updating document to set dotted key in embedded doc on 5.0+ server" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: updateOne - object: *collection0 - arguments: - filter: { _id: 1 } - update: &dottedKeyInEmbedded - - { $set: { foo: { $setField: { field: { $literal: a.b }, value: 1, input: $foo } } } } - expectResult: *updateResult - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - q: { _id: 1 } - u: *dottedKeyInEmbedded - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, foo: { a.b: 1 } } diff --git a/testdata/crud/unified/updateOne-errorResponse.json b/testdata/crud/unified/updateOne-errorResponse.json deleted file mode 100644 index 0ceddbc4fc..0000000000 --- a/testdata/crud/unified/updateOne-errorResponse.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "description": "updateOne-errorResponse", - "schemaVersion": "1.12", - "createEntities": [ - { - "client": { - "id": "client0", - "useMultipleMongoses": false - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test" - } - } - ], - "tests": [ - { - "description": "update operations support errorResponse assertions", - "runOnRequirements": [ - { - "minServerVersion": "4.0.0", - "topologies": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.2.0", - "topologies": [ - "sharded" - ] - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "update" - ], - "errorCode": 8 - } - } - } - }, - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$set": { - "x": 1 - } - } - }, - "expectError": { - "errorCode": 8, - "errorResponse": { - "code": 8 - } - } - } - ] - } - ] -} diff --git a/testdata/crud/unified/updateOne-errorResponse.yml b/testdata/crud/unified/updateOne-errorResponse.yml deleted file mode 100644 index 6d42195b0b..0000000000 --- a/testdata/crud/unified/updateOne-errorResponse.yml +++ /dev/null @@ -1,47 +0,0 @@ -description: "updateOne-errorResponse" - -schemaVersion: "1.12" - -createEntities: - - client: - id: &client0 client0 - useMultipleMongoses: false - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name test - -tests: - # Some drivers may still need to skip this test because the CRUD spec does not - # prescribe how drivers should formulate a WriteException beyond collecting a - # write or write concern error. - - description: "update operations support errorResponse assertions" - runOnRequirements: - - minServerVersion: "4.0.0" - topologies: [ single, replicaset ] - - minServerVersion: "4.2.0" - topologies: [ sharded ] - operations: - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ update ] - errorCode: &errorCode 8 # UnknownError - - name: updateOne - object: *collection0 - arguments: - filter: { _id: 1 } - update: { $set: { x: 1 } } - expectError: - errorCode: *errorCode - errorResponse: - code: *errorCode diff --git a/testdata/crud/unified/updateOne-hint-clientError.json b/testdata/crud/unified/updateOne-hint-clientError.json deleted file mode 100644 index d4f1a53430..0000000000 --- a/testdata/crud/unified/updateOne-hint-clientError.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "description": "updateOne-hint-clientError", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "maxServerVersion": "3.3.99" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test_updateone_hint" - } - } - ], - "initialData": [ - { - "collectionName": "test_updateone_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ], - "tests": [ - { - "description": "UpdateOne with hint string unsupported (client-side error)", - "operations": [ - { - "object": "collection0", - "name": "updateOne", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": "_id_" - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "test_updateone_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "UpdateOne with hint document unsupported (client-side error)", - "operations": [ - { - "object": "collection0", - "name": "updateOne", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "test_updateone_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/updateOne-hint-clientError.yml b/testdata/crud/unified/updateOne-hint-clientError.yml deleted file mode 100644 index 87b4444c3a..0000000000 --- a/testdata/crud/unified/updateOne-hint-clientError.yml +++ /dev/null @@ -1,85 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: updateOne-hint-clientError -schemaVersion: '1.0' -runOnRequirements: - - - maxServerVersion: 3.3.99 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name test_updateone_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 -tests: - - - description: 'UpdateOne with hint string unsupported (client-side error)' - operations: - - - object: *collection0 - name: updateOne - arguments: - filter: &filter - _id: - $gt: 1 - update: &update - $inc: - x: 1 - hint: _id_ - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - description: 'UpdateOne with hint document unsupported (client-side error)' - operations: - - - object: *collection0 - name: updateOne - arguments: - filter: *filter - update: *update - hint: - _id: 1 - expectError: - isError: true - expectEvents: - - - client: *client0 - events: [] - outcome: *outcome diff --git a/testdata/crud/unified/updateOne-hint-serverError.json b/testdata/crud/unified/updateOne-hint-serverError.json deleted file mode 100644 index 05fb033319..0000000000 --- a/testdata/crud/unified/updateOne-hint-serverError.json +++ /dev/null @@ -1,208 +0,0 @@ -{ - "description": "updateOne-hint-serverError", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "3.4.0", - "maxServerVersion": "4.1.9" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test_updateone_hint" - } - } - ], - "initialData": [ - { - "collectionName": "test_updateone_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ], - "tests": [ - { - "description": "UpdateOne with hint string unsupported (server-side error)", - "operations": [ - { - "object": "collection0", - "name": "updateOne", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": "_id_" - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test_updateone_hint", - "updates": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "u": { - "$inc": { - "x": 1 - } - }, - "hint": "_id_", - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test_updateone_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "UpdateOne with hint document unsupported (server-side error)", - "operations": [ - { - "object": "collection0", - "name": "updateOne", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test_updateone_hint", - "updates": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "u": { - "$inc": { - "x": 1 - } - }, - "hint": { - "_id": 1 - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test_updateone_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/updateOne-hint-serverError.yml b/testdata/crud/unified/updateOne-hint-serverError.yml deleted file mode 100644 index 0b804d05a7..0000000000 --- a/testdata/crud/unified/updateOne-hint-serverError.yml +++ /dev/null @@ -1,109 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: updateOne-hint-serverError -schemaVersion: '1.0' -runOnRequirements: - - - minServerVersion: 3.4.0 - maxServerVersion: 4.1.9 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name test_updateone_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 -tests: - - - description: 'UpdateOne with hint string unsupported (server-side error)' - operations: - - - object: *collection0 - name: updateOne - arguments: - filter: &filter - _id: - $gt: 1 - update: &update - $inc: - x: 1 - hint: _id_ - expectError: - isError: true - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - update: *collection_name - updates: - - - q: *filter - u: *update - hint: _id_ - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 - - - description: 'UpdateOne with hint document unsupported (server-side error)' - operations: - - - object: *collection0 - name: updateOne - arguments: - filter: *filter - update: *update - hint: - _id: 1 - expectError: - isError: true - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - update: *collection_name - updates: - - - q: *filter - u: *update - hint: - _id: 1 - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - outcome: *outcome diff --git a/testdata/crud/unified/updateOne-hint.json b/testdata/crud/unified/updateOne-hint.json deleted file mode 100644 index 484e00757d..0000000000 --- a/testdata/crud/unified/updateOne-hint.json +++ /dev/null @@ -1,211 +0,0 @@ -{ - "description": "updateOne-hint", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "4.2.0" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-v2" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test_updateone_hint" - } - } - ], - "initialData": [ - { - "collectionName": "test_updateone_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ], - "tests": [ - { - "description": "UpdateOne with hint string", - "operations": [ - { - "object": "collection0", - "name": "updateOne", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": "_id_" - }, - "expectResult": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test_updateone_hint", - "updates": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "u": { - "$inc": { - "x": 1 - } - }, - "hint": "_id_", - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test_updateone_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 23 - } - ] - } - ] - }, - { - "description": "UpdateOne with hint document", - "operations": [ - { - "object": "collection0", - "name": "updateOne", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "hint": { - "_id": 1 - } - }, - "expectResult": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test_updateone_hint", - "updates": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "u": { - "$inc": { - "x": 1 - } - }, - "hint": { - "_id": 1 - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test_updateone_hint", - "databaseName": "crud-v2", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 23 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/updateOne-hint.yml b/testdata/crud/unified/updateOne-hint.yml deleted file mode 100644 index 8f5d1460a2..0000000000 --- a/testdata/crud/unified/updateOne-hint.yml +++ /dev/null @@ -1,109 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: updateOne-hint -schemaVersion: '1.0' -runOnRequirements: - - - minServerVersion: 4.2.0 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-v2 - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name test_updateone_hint -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 22 -tests: - - - description: 'UpdateOne with hint string' - operations: - - - object: *collection0 - name: updateOne - arguments: - filter: &filter - _id: - $gt: 1 - update: &update - $inc: - x: 1 - hint: _id_ - expectResult: &result - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - update: *collection_name - updates: - - - q: *filter - u: *update - hint: _id_ - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - outcome: &outcome - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 11 - - - _id: 2 - x: 23 - - - description: 'UpdateOne with hint document' - operations: - - - object: *collection0 - name: updateOne - arguments: - filter: *filter - update: *update - hint: - _id: 1 - expectResult: *result - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - update: *collection_name - updates: - - - q: *filter - u: *update - hint: - _id: 1 - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - outcome: *outcome diff --git a/testdata/crud/unified/updateOne-let.json b/testdata/crud/unified/updateOne-let.json deleted file mode 100644 index e43b979358..0000000000 --- a/testdata/crud/unified/updateOne-let.json +++ /dev/null @@ -1,227 +0,0 @@ -{ - "description": "updateOne-let", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ], - "tests": [ - { - "description": "UpdateOne with let option", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "update": [ - { - "$set": { - "x": "$$x" - } - } - ], - "let": { - "id": 1, - "x": "foo" - } - }, - "expectResult": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "$expr": { - "$eq": [ - "$_id", - "$$id" - ] - } - }, - "u": [ - { - "$set": { - "x": "$$x" - } - } - ], - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "let": { - "id": 1, - "x": "foo" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": "foo" - }, - { - "_id": 2 - } - ] - } - ] - }, - { - "description": "UpdateOne with let option unsupported (server-side error)", - "runOnRequirements": [ - { - "minServerVersion": "4.2.0", - "maxServerVersion": "4.4.99" - } - ], - "operations": [ - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$set": { - "x": "$$x" - } - } - ], - "let": { - "x": "foo" - } - }, - "expectError": { - "errorContains": "'update.let' is an unknown field", - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": [ - { - "$set": { - "x": "$$x" - } - } - ], - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ], - "let": { - "x": "foo" - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/updateOne-let.yml b/testdata/crud/unified/updateOne-let.yml deleted file mode 100644 index 0044fdac66..0000000000 --- a/testdata/crud/unified/updateOne-let.yml +++ /dev/null @@ -1,102 +0,0 @@ -description: "updateOne-let" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } - -tests: - - description: "UpdateOne with let option" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: updateOne - object: *collection0 - arguments: - filter: &filter - $expr: - $eq: [ "$_id", "$$id" ] - update: &update - - $set: {x: "$$x" } - let: &let0 - id: 1 - x: "foo" - expectResult: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - - q: *filter - u: *update - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - let: *let0 - outcome: - - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: "foo" } - - { _id: 2 } - - - description: "UpdateOne with let option unsupported (server-side error)" - runOnRequirements: - - minServerVersion: "4.2.0" - maxServerVersion: "4.4.99" - operations: - - name: updateOne - object: *collection0 - arguments: - filter: &filter1 - _id: 1 - update: &update1 - - $set: {x: "$$x"} - let: &let1 - x: foo - expectError: - errorContains: "'update.let' is an unknown field" - isClientError: false - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - update: *collection0Name - updates: - - - q: *filter1 - u: *update1 - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - let: *let1 - outcome: - - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } diff --git a/testdata/crud/unified/updateOne-sort.json b/testdata/crud/unified/updateOne-sort.json deleted file mode 100644 index 8fe4f50b94..0000000000 --- a/testdata/crud/unified/updateOne-sort.json +++ /dev/null @@ -1,240 +0,0 @@ -{ - "description": "updateOne-sort", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent", - "commandSucceededEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "UpdateOne with sort option", - "runOnRequirements": [ - { - "minServerVersion": "8.0" - } - ], - "operations": [ - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "sort": { - "_id": -1 - }, - "update": { - "$inc": { - "x": 1 - } - } - }, - "expectResult": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "u": { - "$inc": { - "x": 1 - } - }, - "sort": { - "_id": -1 - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - }, - { - "commandSucceededEvent": { - "reply": { - "ok": 1, - "n": 1 - }, - "commandName": "update" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 34 - } - ] - } - ] - }, - { - "description": "updateOne with sort option unsupported (server-side error)", - "runOnRequirements": [ - { - "maxServerVersion": "7.99" - } - ], - "operations": [ - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "sort": { - "_id": -1 - }, - "update": { - "$inc": { - "x": 1 - } - } - }, - "expectError": { - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "coll0", - "updates": [ - { - "q": { - "_id": { - "$gt": 1 - } - }, - "u": { - "$inc": { - "x": 1 - } - }, - "sort": { - "_id": -1 - }, - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/updateOne-sort.yml b/testdata/crud/unified/updateOne-sort.yml deleted file mode 100644 index a278575fa5..0000000000 --- a/testdata/crud/unified/updateOne-sort.yml +++ /dev/null @@ -1,96 +0,0 @@ -description: updateOne-sort - -schemaVersion: "1.0" - -createEntities: - - client: - id: client0 - observeEvents: - - commandStartedEvent - - commandSucceededEvent - - database: - id: database0 - client: client0 - databaseName: crud-tests - - collection: - id: collection0 - database: database0 - collectionName: coll0 - -initialData: - - collectionName: coll0 - databaseName: crud-tests - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -tests: - - description: UpdateOne with sort option - runOnRequirements: - - minServerVersion: "8.0" - operations: - - name: updateOne - object: collection0 - arguments: - filter: { _id: { $gt: 1 } } - sort: { _id: -1 } - update: { $inc: { x: 1 } } - expectResult: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - update: coll0 - updates: - - q: { _id: { $gt: 1 } } - u: { $inc: { x: 1 } } - sort: { _id: -1 } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - - commandSucceededEvent: - reply: { ok: 1, n: 1 } - commandName: update - outcome: - - collectionName: coll0 - databaseName: crud-tests - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 34 } - - - description: updateOne with sort option unsupported (server-side error) - runOnRequirements: - - maxServerVersion: "7.99" - operations: - - name: updateOne - object: collection0 - arguments: - filter: { _id: { $gt: 1 } } - sort: { _id: -1 } - update: { $inc: { x: 1 } } - expectError: - isClientError: false - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - update: coll0 - updates: - - q: { _id: { $gt: 1 } } - u: { $inc: { x: 1 } } - sort: { _id: -1 } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - outcome: - - collectionName: coll0 - databaseName: crud-tests - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } diff --git a/testdata/crud/unified/updateOne-validation.json b/testdata/crud/unified/updateOne-validation.json deleted file mode 100644 index 1464642c59..0000000000 --- a/testdata/crud/unified/updateOne-validation.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "description": "updateOne-validation", - "schemaVersion": "1.0", - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ], - "tests": [ - { - "description": "UpdateOne requires atomic modifiers", - "operations": [ - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "x": 22 - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/updateOne-validation.yml b/testdata/crud/unified/updateOne-validation.yml deleted file mode 100644 index b6f49a6568..0000000000 --- a/testdata/crud/unified/updateOne-validation.yml +++ /dev/null @@ -1,37 +0,0 @@ -description: "updateOne-validation" - -schemaVersion: "1.0" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name crud-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: &initialData - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - -tests: - - description: "UpdateOne requires atomic modifiers" - operations: - - name: updateOne - object: *collection0 - arguments: - filter: { _id: 1 } - update: { x: 22 } - expectError: - isClientError: true - expectEvents: - - client: *client0 - events: [] - outcome: *initialData diff --git a/testdata/crud/unified/updateWithPipelines.json b/testdata/crud/unified/updateWithPipelines.json deleted file mode 100644 index 164f2f6a19..0000000000 --- a/testdata/crud/unified/updateWithPipelines.json +++ /dev/null @@ -1,494 +0,0 @@ -{ - "description": "updateWithPipelines", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "4.1.11" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "crud-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test" - } - } - ], - "initialData": [ - { - "collectionName": "test", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 1, - "y": 1, - "t": { - "u": { - "v": 1 - } - } - }, - { - "_id": 2, - "x": 2, - "y": 1 - } - ] - } - ], - "tests": [ - { - "description": "UpdateOne using pipelines", - "operations": [ - { - "object": "collection0", - "name": "updateOne", - "arguments": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$replaceRoot": { - "newRoot": "$t" - } - }, - { - "$addFields": { - "foo": 1 - } - } - ] - }, - "expectResult": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": [ - { - "$replaceRoot": { - "newRoot": "$t" - } - }, - { - "$addFields": { - "foo": 1 - } - } - ], - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - }, - "commandName": "update", - "databaseName": "crud-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "u": { - "v": 1 - }, - "foo": 1 - }, - { - "_id": 2, - "x": 2, - "y": 1 - } - ] - } - ] - }, - { - "description": "UpdateMany using pipelines", - "operations": [ - { - "object": "collection0", - "name": "updateMany", - "arguments": { - "filter": {}, - "update": [ - { - "$project": { - "x": 1 - } - }, - { - "$addFields": { - "foo": 1 - } - } - ] - }, - "expectResult": { - "matchedCount": 2, - "modifiedCount": 2, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test", - "updates": [ - { - "q": {}, - "u": [ - { - "$project": { - "x": 1 - } - }, - { - "$addFields": { - "foo": 1 - } - } - ], - "multi": true, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - }, - "commandName": "update", - "databaseName": "crud-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 1, - "foo": 1 - }, - { - "_id": 2, - "x": 2, - "foo": 1 - } - ] - } - ] - }, - { - "description": "FindOneAndUpdate using pipelines", - "operations": [ - { - "object": "collection0", - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$project": { - "x": 1 - } - }, - { - "$addFields": { - "foo": 1 - } - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "test", - "update": [ - { - "$project": { - "x": 1 - } - }, - { - "$addFields": { - "foo": 1 - } - } - ] - }, - "commandName": "findAndModify", - "databaseName": "crud-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 1, - "foo": 1 - }, - { - "_id": 2, - "x": 2, - "y": 1 - } - ] - } - ] - }, - { - "description": "UpdateOne in bulk write using pipelines", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "updateOne": { - "filter": { - "_id": 1 - }, - "update": [ - { - "$replaceRoot": { - "newRoot": "$t" - } - }, - { - "$addFields": { - "foo": 1 - } - } - ] - } - } - ] - }, - "expectResult": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test", - "updates": [ - { - "q": { - "_id": 1 - }, - "u": [ - { - "$replaceRoot": { - "newRoot": "$t" - } - }, - { - "$addFields": { - "foo": 1 - } - } - ], - "multi": { - "$$unsetOrMatches": false - }, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - }, - "commandName": "update", - "databaseName": "crud-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "u": { - "v": 1 - }, - "foo": 1 - }, - { - "_id": 2, - "x": 2, - "y": 1 - } - ] - } - ] - }, - { - "description": "UpdateMany in bulk write using pipelines", - "operations": [ - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "updateMany": { - "filter": {}, - "update": [ - { - "$project": { - "x": 1 - } - }, - { - "$addFields": { - "foo": 1 - } - } - ] - } - } - ] - }, - "expectResult": { - "matchedCount": 2, - "modifiedCount": 2, - "upsertedCount": 0 - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "test", - "updates": [ - { - "q": {}, - "u": [ - { - "$project": { - "x": 1 - } - }, - { - "$addFields": { - "foo": 1 - } - } - ], - "multi": true, - "upsert": { - "$$unsetOrMatches": false - } - } - ] - }, - "commandName": "update", - "databaseName": "crud-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test", - "databaseName": "crud-tests", - "documents": [ - { - "_id": 1, - "x": 1, - "foo": 1 - }, - { - "_id": 2, - "x": 2, - "foo": 1 - } - ] - } - ] - } - ] -} diff --git a/testdata/crud/unified/updateWithPipelines.yml b/testdata/crud/unified/updateWithPipelines.yml deleted file mode 100644 index 30666e31dd..0000000000 --- a/testdata/crud/unified/updateWithPipelines.yml +++ /dev/null @@ -1,299 +0,0 @@ -# This file was created automatically using mongodb-spec-converter. -# Please review the generated file, then remove this notice. - -description: updateWithPipelines -schemaVersion: '1.0' -runOnRequirements: - - - minServerVersion: 4.1.11 -createEntities: - - - client: - id: &client0 client0 - observeEvents: - - commandStartedEvent - - - database: - id: &database0 database0 - client: client0 - databaseName: &database_name crud-tests - - - collection: - id: &collection0 collection0 - database: database0 - collectionName: &collection_name test -initialData: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 1 - 'y': 1 - t: - u: - v: 1 - - - _id: 2 - x: 2 - 'y': 1 -tests: - - - description: 'UpdateOne using pipelines' - operations: - - - object: *collection0 - name: updateOne - arguments: - filter: - _id: 1 - update: - - - $replaceRoot: - newRoot: $t - - - $addFields: - foo: 1 - expectResult: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - update: *collection_name - updates: - - - q: - _id: 1 - u: - - { $replaceRoot: { newRoot: $t } } - - { $addFields: { foo: 1 } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - commandName: update - databaseName: *database_name - outcome: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - u: - v: 1 - foo: 1 - - - _id: 2 - x: 2 - 'y': 1 - - - description: 'UpdateMany using pipelines' - operations: - - - object: *collection0 - name: updateMany - arguments: - filter: { } - update: - - - $project: - x: 1 - - - $addFields: - foo: 1 - expectResult: - matchedCount: 2 - modifiedCount: 2 - upsertedCount: 0 - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - update: *collection_name - updates: - - - q: { } - u: - - { $project: { x: 1 } } - - { $addFields: { foo: 1 } } - multi: true - upsert: { $$unsetOrMatches: false } - commandName: update - databaseName: *database_name - outcome: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 1 - foo: 1 - - - _id: 2 - x: 2 - foo: 1 - - - description: 'FindOneAndUpdate using pipelines' - operations: - - - object: *collection0 - name: findOneAndUpdate - arguments: - filter: - _id: 1 - update: - - - $project: - x: 1 - - - $addFields: - foo: 1 - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - findAndModify: *collection_name - update: - - - $project: - x: 1 - - - $addFields: - foo: 1 - commandName: findAndModify - databaseName: *database_name - outcome: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 1 - foo: 1 - - - _id: 2 - x: 2 - 'y': 1 - - - description: 'UpdateOne in bulk write using pipelines' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - updateOne: - filter: - _id: 1 - update: - - - $replaceRoot: - newRoot: $t - - - $addFields: - foo: 1 - expectResult: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - update: *collection_name - updates: - - - q: - _id: 1 - u: - - { $replaceRoot: { newRoot: $t } } - - { $addFields: { foo: 1 } } - multi: { $$unsetOrMatches: false } - upsert: { $$unsetOrMatches: false } - commandName: update - databaseName: *database_name - outcome: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - u: - v: 1 - foo: 1 - - - _id: 2 - x: 2 - 'y': 1 - - - description: 'UpdateMany in bulk write using pipelines' - operations: - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - updateMany: - filter: { } - update: - - - $project: - x: 1 - - - $addFields: - foo: 1 - expectResult: - matchedCount: 2 - modifiedCount: 2 - upsertedCount: 0 - expectEvents: - - - client: *client0 - events: - - - commandStartedEvent: - command: - update: *collection_name - updates: - - - q: { } - u: - - { $project: { x: 1 } } - - { $addFields: { foo: 1 } } - multi: true - upsert: { $$unsetOrMatches: false } - commandName: update - databaseName: *database_name - outcome: - - - collectionName: *collection_name - databaseName: *database_name - documents: - - - _id: 1 - x: 1 - foo: 1 - - - _id: 2 - x: 2 - foo: 1 diff --git a/testdata/crud/v1/read/aggregate-collation.json b/testdata/crud/v1/read/aggregate-collation.json deleted file mode 100644 index d958e447bf..0000000000 --- a/testdata/crud/v1/read/aggregate-collation.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": "ping" - } - ], - "minServerVersion": "3.4", - "serverless": "forbid", - "tests": [ - { - "description": "Aggregate with collation", - "operation": { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "x": "PING" - } - } - ], - "collation": { - "locale": "en_US", - "strength": 2 - } - } - }, - "outcome": { - "result": [ - { - "_id": 1, - "x": "ping" - } - ] - } - } - ] -} diff --git a/testdata/crud/v1/read/aggregate-collation.yml b/testdata/crud/v1/read/aggregate-collation.yml deleted file mode 100644 index 924192a6e5..0000000000 --- a/testdata/crud/v1/read/aggregate-collation.yml +++ /dev/null @@ -1,18 +0,0 @@ -data: - - {_id: 1, x: 'ping'} -minServerVersion: '3.4' -serverless: 'forbid' - -tests: - - - description: "Aggregate with collation" - operation: - name: aggregate - arguments: - pipeline: - - $match: - x: 'PING' - collation: { locale: 'en_US', strength: 2 } # https://www.mongodb.com/docs/manual/reference/collation/#collation-document - outcome: - result: - - {_id: 1, x: 'ping'} diff --git a/testdata/crud/v1/read/aggregate-out.json b/testdata/crud/v1/read/aggregate-out.json deleted file mode 100644 index c195e163e0..0000000000 --- a/testdata/crud/v1/read/aggregate-out.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ], - "minServerVersion": "2.6", - "serverless": "forbid", - "tests": [ - { - "description": "Aggregate with $out", - "operation": { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$sort": { - "x": 1 - } - }, - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$out": "other_test_collection" - } - ], - "batchSize": 2 - } - }, - "outcome": { - "collection": { - "name": "other_test_collection", - "data": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "Aggregate with $out and batch size of 0", - "operation": { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$sort": { - "x": 1 - } - }, - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$out": "other_test_collection" - } - ], - "batchSize": 0 - } - }, - "outcome": { - "collection": { - "name": "other_test_collection", - "data": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/read/aggregate-out.yml b/testdata/crud/v1/read/aggregate-out.yml deleted file mode 100644 index d6688dd08d..0000000000 --- a/testdata/crud/v1/read/aggregate-out.yml +++ /dev/null @@ -1,44 +0,0 @@ -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} -minServerVersion: '2.6' -serverless: 'forbid' - -tests: - - - description: "Aggregate with $out" - operation: - name: aggregate - arguments: - pipeline: - - $sort: {x: 1} - - $match: - _id: {$gt: 1} - - $out: "other_test_collection" - batchSize: 2 - - outcome: - collection: - name: "other_test_collection" - data: - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - - description: "Aggregate with $out and batch size of 0" - operation: - name: aggregate - arguments: - pipeline: - - $sort: {x: 1} - - $match: - _id: {$gt: 1} - - $out: "other_test_collection" - batchSize: 0 - - outcome: - collection: - name: "other_test_collection" - data: - - {_id: 2, x: 22} - - {_id: 3, x: 33} diff --git a/testdata/crud/v1/read/aggregate.json b/testdata/crud/v1/read/aggregate.json deleted file mode 100644 index 797a922395..0000000000 --- a/testdata/crud/v1/read/aggregate.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ], - "tests": [ - { - "description": "Aggregate with multiple stages", - "operation": { - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$sort": { - "x": 1 - } - }, - { - "$match": { - "_id": { - "$gt": 1 - } - } - } - ], - "batchSize": 2 - } - }, - "outcome": { - "result": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - ] -} diff --git a/testdata/crud/v1/read/aggregate.yml b/testdata/crud/v1/read/aggregate.yml deleted file mode 100644 index 98b69445c2..0000000000 --- a/testdata/crud/v1/read/aggregate.yml +++ /dev/null @@ -1,21 +0,0 @@ -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - -tests: - - - description: "Aggregate with multiple stages" - operation: - name: aggregate - arguments: - pipeline: - - $sort: {x: 1} - - $match: - _id: {$gt: 1} - batchSize: 2 - - outcome: - result: - - {_id: 2, x: 22} - - {_id: 3, x: 33} diff --git a/testdata/crud/v1/read/count-collation.json b/testdata/crud/v1/read/count-collation.json deleted file mode 100644 index 7d61508493..0000000000 --- a/testdata/crud/v1/read/count-collation.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": "PING" - } - ], - "minServerVersion": "3.4", - "serverless": "forbid", - "tests": [ - { - "description": "Count documents with collation", - "operation": { - "name": "countDocuments", - "arguments": { - "filter": { - "x": "ping" - }, - "collation": { - "locale": "en_US", - "strength": 2 - } - } - }, - "outcome": { - "result": 1 - } - }, - { - "description": "Deprecated count with collation", - "operation": { - "name": "count", - "arguments": { - "filter": { - "x": "ping" - }, - "collation": { - "locale": "en_US", - "strength": 2 - } - } - }, - "outcome": { - "result": 1 - } - } - ] -} diff --git a/testdata/crud/v1/read/count-collation.yml b/testdata/crud/v1/read/count-collation.yml deleted file mode 100644 index fd1c29a07e..0000000000 --- a/testdata/crud/v1/read/count-collation.yml +++ /dev/null @@ -1,26 +0,0 @@ -data: - - {_id: 1, x: 'PING'} -minServerVersion: '3.4' -serverless: 'forbid' - -tests: - - - description: "Count documents with collation" - operation: - name: countDocuments - arguments: - filter: { x: 'ping' } - collation: { locale: 'en_US', strength: 2 } # https://www.mongodb.com/docs/manual/reference/collation/#collation-document - - outcome: - result: 1 - - - description: "Deprecated count with collation" - operation: - name: count - arguments: - filter: { x: 'ping' } - collation: { locale: 'en_US', strength: 2 } - - outcome: - result: 1 diff --git a/testdata/crud/v1/read/count-empty.json b/testdata/crud/v1/read/count-empty.json deleted file mode 100644 index 2b8627e0c6..0000000000 --- a/testdata/crud/v1/read/count-empty.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "data": [], - "tests": [ - { - "description": "Estimated document count with empty collection", - "operation": { - "name": "estimatedDocumentCount", - "arguments": {} - }, - "outcome": { - "result": 0 - } - }, - { - "description": "Count documents with empty collection", - "operation": { - "name": "countDocuments", - "arguments": { - "filter": {} - } - }, - "outcome": { - "result": 0 - } - }, - { - "description": "Deprecated count with empty collection", - "operation": { - "name": "count", - "arguments": { - "filter": {} - } - }, - "outcome": { - "result": 0 - } - } - ] -} diff --git a/testdata/crud/v1/read/count-empty.yml b/testdata/crud/v1/read/count-empty.yml deleted file mode 100644 index 83098ec18f..0000000000 --- a/testdata/crud/v1/read/count-empty.yml +++ /dev/null @@ -1,29 +0,0 @@ -data: [] - -tests: - - - description: "Estimated document count with empty collection" - operation: - name: estimatedDocumentCount - arguments: { } - - outcome: - result: 0 - - - description: "Count documents with empty collection" - operation: - name: countDocuments - arguments: - filter: { } - - outcome: - result: 0 - - - description: "Deprecated count with empty collection" - operation: - name: count - arguments: - filter: { } - - outcome: - result: 0 diff --git a/testdata/crud/v1/read/count.json b/testdata/crud/v1/read/count.json deleted file mode 100644 index 9642b2fbd0..0000000000 --- a/testdata/crud/v1/read/count.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ], - "tests": [ - { - "description": "Estimated document count", - "operation": { - "name": "estimatedDocumentCount", - "arguments": {} - }, - "outcome": { - "result": 3 - } - }, - { - "description": "Count documents without a filter", - "operation": { - "name": "countDocuments", - "arguments": { - "filter": {} - } - }, - "outcome": { - "result": 3 - } - }, - { - "description": "Count documents with a filter", - "operation": { - "name": "countDocuments", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - } - } - }, - "outcome": { - "result": 2 - } - }, - { - "description": "Count documents with skip and limit", - "operation": { - "name": "countDocuments", - "arguments": { - "filter": {}, - "skip": 1, - "limit": 3 - } - }, - "outcome": { - "result": 2 - } - }, - { - "description": "Deprecated count without a filter", - "operation": { - "name": "count", - "arguments": { - "filter": {} - } - }, - "outcome": { - "result": 3 - } - }, - { - "description": "Deprecated count with a filter", - "operation": { - "name": "count", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - } - } - }, - "outcome": { - "result": 2 - } - }, - { - "description": "Deprecated count with skip and limit", - "operation": { - "name": "count", - "arguments": { - "filter": {}, - "skip": 1, - "limit": 3 - } - }, - "outcome": { - "result": 2 - } - } - ] -} diff --git a/testdata/crud/v1/read/count.yml b/testdata/crud/v1/read/count.yml deleted file mode 100644 index 33d380b7d5..0000000000 --- a/testdata/crud/v1/read/count.yml +++ /dev/null @@ -1,74 +0,0 @@ -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - -tests: - - - description: "Estimated document count" - operation: - name: estimatedDocumentCount - arguments: { } - - outcome: - result: 3 - - - description: "Count documents without a filter" - operation: - name: countDocuments - arguments: - filter: { } - - outcome: - result: 3 - - - description: "Count documents with a filter" - operation: - name: countDocuments - arguments: - filter: - _id: {$gt: 1} - - outcome: - result: 2 - - - description: "Count documents with skip and limit" - operation: - name: countDocuments - arguments: - filter: {} - skip: 1 - limit: 3 - - outcome: - result: 2 - - - description: "Deprecated count without a filter" - operation: - name: count - arguments: - filter: { } - - outcome: - result: 3 - - - description: "Deprecated count with a filter" - operation: - name: count - arguments: - filter: - _id: {$gt: 1} - - outcome: - result: 2 - - - description: "Deprecated count with skip and limit" - operation: - name: count - arguments: - filter: {} - skip: 1 - limit: 3 - - outcome: - result: 2 diff --git a/testdata/crud/v1/read/distinct-collation.json b/testdata/crud/v1/read/distinct-collation.json deleted file mode 100644 index 984991a43b..0000000000 --- a/testdata/crud/v1/read/distinct-collation.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "string": "PING" - }, - { - "_id": 2, - "string": "ping" - } - ], - "minServerVersion": "3.4", - "serverless": "forbid", - "tests": [ - { - "description": "Distinct with a collation", - "operation": { - "name": "distinct", - "arguments": { - "fieldName": "string", - "collation": { - "locale": "en_US", - "strength": 2 - } - } - }, - "outcome": { - "result": [ - "PING" - ] - } - } - ] -} diff --git a/testdata/crud/v1/read/distinct-collation.yml b/testdata/crud/v1/read/distinct-collation.yml deleted file mode 100644 index 8785f29d4b..0000000000 --- a/testdata/crud/v1/read/distinct-collation.yml +++ /dev/null @@ -1,18 +0,0 @@ -data: - - {_id: 1, string: 'PING'} - - {_id: 2, string: 'ping'} -minServerVersion: '3.4' -serverless: 'forbid' - -tests: - - - description: "Distinct with a collation" - operation: - name: distinct - arguments: - fieldName: "string" - collation: { locale: 'en_US', strength: 2 } # https://www.mongodb.com/docs/manual/reference/collation/#collation-document - - outcome: - result: - - 'PING' diff --git a/testdata/crud/v1/read/distinct.json b/testdata/crud/v1/read/distinct.json deleted file mode 100644 index a57ee36a83..0000000000 --- a/testdata/crud/v1/read/distinct.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ], - "tests": [ - { - "description": "Distinct without a filter", - "operation": { - "name": "distinct", - "arguments": { - "fieldName": "x", - "filter": {} - } - }, - "outcome": { - "result": [ - 11, - 22, - 33 - ] - } - }, - { - "description": "Distinct with a filter", - "operation": { - "name": "distinct", - "arguments": { - "fieldName": "x", - "filter": { - "_id": { - "$gt": 1 - } - } - } - }, - "outcome": { - "result": [ - 22, - 33 - ] - } - } - ] -} diff --git a/testdata/crud/v1/read/distinct.yml b/testdata/crud/v1/read/distinct.yml deleted file mode 100644 index aefc7e0fdf..0000000000 --- a/testdata/crud/v1/read/distinct.yml +++ /dev/null @@ -1,32 +0,0 @@ -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - -tests: - - - description: "Distinct without a filter" - operation: - name: distinct - arguments: - fieldName: "x" - filter: {} - - outcome: - result: - - 11 - - 22 - - 33 - - - description: "Distinct with a filter" - operation: - name: distinct - arguments: - fieldName: "x" - filter: - _id: {$gt: 1} - - outcome: - result: - - 22 - - 33 \ No newline at end of file diff --git a/testdata/crud/v1/read/find-collation.json b/testdata/crud/v1/read/find-collation.json deleted file mode 100644 index 4e56c05253..0000000000 --- a/testdata/crud/v1/read/find-collation.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": "ping" - } - ], - "minServerVersion": "3.4", - "serverless": "forbid", - "tests": [ - { - "description": "Find with a collation", - "operation": { - "name": "find", - "arguments": { - "filter": { - "x": "PING" - }, - "collation": { - "locale": "en_US", - "strength": 2 - } - } - }, - "outcome": { - "result": [ - { - "_id": 1, - "x": "ping" - } - ] - } - } - ] -} diff --git a/testdata/crud/v1/read/find-collation.yml b/testdata/crud/v1/read/find-collation.yml deleted file mode 100644 index 1ecc491546..0000000000 --- a/testdata/crud/v1/read/find-collation.yml +++ /dev/null @@ -1,16 +0,0 @@ -data: - - {_id: 1, x: 'ping'} -minServerVersion: '3.4' -serverless: 'forbid' - -tests: - - - description: "Find with a collation" - operation: - name: "find" - arguments: - filter: {x: 'PING'} - collation: { locale: 'en_US', strength: 2 } # https://www.mongodb.com/docs/manual/reference/collation/#collation-document - outcome: - result: - - {_id: 1, x: 'ping'} diff --git a/testdata/crud/v1/read/find.json b/testdata/crud/v1/read/find.json deleted file mode 100644 index 3597e37be6..0000000000 --- a/testdata/crud/v1/read/find.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 5, - "x": 55 - } - ], - "tests": [ - { - "description": "Find with filter", - "operation": { - "name": "find", - "arguments": { - "filter": { - "_id": 1 - } - } - }, - "outcome": { - "result": [ - { - "_id": 1, - "x": 11 - } - ] - } - }, - { - "description": "Find with filter, sort, skip, and limit", - "operation": { - "name": "find", - "arguments": { - "filter": { - "_id": { - "$gt": 2 - } - }, - "sort": { - "_id": 1 - }, - "skip": 2, - "limit": 2 - } - }, - "outcome": { - "result": [ - { - "_id": 5, - "x": 55 - } - ] - } - }, - { - "description": "Find with limit, sort, and batchsize", - "operation": { - "name": "find", - "arguments": { - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4, - "batchSize": 2 - } - }, - "outcome": { - "result": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - } - ] -} diff --git a/testdata/crud/v1/read/find.yml b/testdata/crud/v1/read/find.yml deleted file mode 100644 index 25099df7f1..0000000000 --- a/testdata/crud/v1/read/find.yml +++ /dev/null @@ -1,49 +0,0 @@ -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - {_id: 4, x: 44} - - {_id: 5, x: 55} - -tests: - - - description: "Find with filter" - operation: - name: "find" - arguments: - filter: {_id: 1} - - outcome: - result: - - {_id: 1, x: 11} - - - - description: "Find with filter, sort, skip, and limit" - operation: - name: "find" - arguments: - filter: - _id: {$gt: 2} - sort: {_id: 1} - skip: 2 - limit: 2 - - outcome: - result: - - {_id: 5, x: 55} - - - description: "Find with limit, sort, and batchsize" - operation: - name: "find" - arguments: - filter: {} - sort: {_id: 1} - limit: 4 - batchSize: 2 - - outcome: - result: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - {_id: 4, x: 44} diff --git a/testdata/crud/v1/write/bulkWrite-arrayFilters.json b/testdata/crud/v1/write/bulkWrite-arrayFilters.json deleted file mode 100644 index 99e73f5d75..0000000000 --- a/testdata/crud/v1/write/bulkWrite-arrayFilters.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "y": [ - { - "b": 3 - }, - { - "b": 1 - } - ] - }, - { - "_id": 2, - "y": [ - { - "b": 0 - }, - { - "b": 1 - } - ] - } - ], - "minServerVersion": "3.5.6", - "tests": [ - { - "description": "BulkWrite with arrayFilters", - "operation": { - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$set": { - "y.$[i].b": 2 - } - }, - "arrayFilters": [ - { - "i.b": 3 - } - ] - } - }, - { - "name": "updateMany", - "arguments": { - "filter": {}, - "update": { - "$set": { - "y.$[i].b": 2 - } - }, - "arrayFilters": [ - { - "i.b": 1 - } - ] - } - } - ], - "options": { - "ordered": true - } - } - }, - "outcome": { - "result": { - "deletedCount": 0, - "insertedCount": 0, - "insertedIds": {}, - "matchedCount": 3, - "modifiedCount": 3, - "upsertedCount": 0, - "upsertedIds": {} - }, - "collection": { - "data": [ - { - "_id": 1, - "y": [ - { - "b": 2 - }, - { - "b": 2 - } - ] - }, - { - "_id": 2, - "y": [ - { - "b": 0 - }, - { - "b": 2 - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/write/bulkWrite-arrayFilters.yml b/testdata/crud/v1/write/bulkWrite-arrayFilters.yml deleted file mode 100644 index 1089f08c09..0000000000 --- a/testdata/crud/v1/write/bulkWrite-arrayFilters.yml +++ /dev/null @@ -1,45 +0,0 @@ -data: - - {_id: 1, y: [{b: 3}, {b: 1}]} - - {_id: 2, y: [{b: 0}, {b: 1}]} - -minServerVersion: '3.5.6' - -tests: - - - description: "BulkWrite with arrayFilters" - operation: - name: "bulkWrite" - arguments: - requests: - - - # UpdateOne when one document matches arrayFilters - name: "updateOne" - arguments: - filter: {} - update: - $set: {"y.$[i].b": 2} - arrayFilters: - - {i.b: 3} - - - # UpdateMany when multiple documents match arrayFilters - name: "updateMany" - arguments: - filter: {} - update: - $set: {"y.$[i].b": 2} - arrayFilters: - - {i.b: 1} - options: { ordered: true } - outcome: - result: - deletedCount: 0 - insertedCount: 0 - insertedIds: {} - matchedCount: 3 - modifiedCount: 3 - upsertedCount: 0 - upsertedIds: {} - collection: - data: - - {_id: 1, y: [{b: 2}, {b: 2}]} - - {_id: 2, y: [{b: 0}, {b: 2}]} diff --git a/testdata/crud/v1/write/bulkWrite-collation.json b/testdata/crud/v1/write/bulkWrite-collation.json deleted file mode 100644 index bc90aa8172..0000000000 --- a/testdata/crud/v1/write/bulkWrite-collation.json +++ /dev/null @@ -1,218 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": "ping" - }, - { - "_id": 3, - "x": "pINg" - }, - { - "_id": 4, - "x": "pong" - }, - { - "_id": 5, - "x": "pONg" - } - ], - "minServerVersion": "3.4", - "serverless": "forbid", - "tests": [ - { - "description": "BulkWrite with delete operations and collation", - "operation": { - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "name": "deleteOne", - "arguments": { - "filter": { - "x": "PING" - }, - "collation": { - "locale": "en_US", - "strength": 2 - } - } - }, - { - "name": "deleteOne", - "arguments": { - "filter": { - "x": "PING" - }, - "collation": { - "locale": "en_US", - "strength": 2 - } - } - }, - { - "name": "deleteMany", - "arguments": { - "filter": { - "x": "PONG" - }, - "collation": { - "locale": "en_US", - "strength": 2 - } - } - } - ], - "options": { - "ordered": true - } - } - }, - "outcome": { - "result": { - "deletedCount": 4, - "insertedCount": 0, - "insertedIds": {}, - "matchedCount": 0, - "modifiedCount": 0, - "upsertedCount": 0, - "upsertedIds": {} - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - } - ] - } - } - }, - { - "description": "BulkWrite with update operations and collation", - "operation": { - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "name": "updateMany", - "arguments": { - "filter": { - "x": "ping" - }, - "update": { - "$set": { - "x": "PONG" - } - }, - "collation": { - "locale": "en_US", - "strength": 3 - } - } - }, - { - "name": "updateOne", - "arguments": { - "filter": { - "x": "ping" - }, - "update": { - "$set": { - "x": "PONG" - } - }, - "collation": { - "locale": "en_US", - "strength": 2 - } - } - }, - { - "name": "replaceOne", - "arguments": { - "filter": { - "x": "ping" - }, - "replacement": { - "_id": 6, - "x": "ping" - }, - "upsert": true, - "collation": { - "locale": "en_US", - "strength": 3 - } - } - }, - { - "name": "updateMany", - "arguments": { - "filter": { - "x": "pong" - }, - "update": { - "$set": { - "x": "PONG" - } - }, - "collation": { - "locale": "en_US", - "strength": 2 - } - } - } - ], - "options": { - "ordered": true - } - } - }, - "outcome": { - "result": { - "deletedCount": 0, - "insertedCount": 0, - "insertedIds": {}, - "matchedCount": 6, - "modifiedCount": 4, - "upsertedCount": 1, - "upsertedIds": { - "2": 6 - } - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": "PONG" - }, - { - "_id": 3, - "x": "PONG" - }, - { - "_id": 4, - "x": "PONG" - }, - { - "_id": 5, - "x": "PONG" - }, - { - "_id": 6, - "x": "ping" - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/write/bulkWrite-collation.yml b/testdata/crud/v1/write/bulkWrite-collation.yml deleted file mode 100644 index 75ab468a5e..0000000000 --- a/testdata/crud/v1/write/bulkWrite-collation.yml +++ /dev/null @@ -1,102 +0,0 @@ -data: - - {_id: 1, x: 11} - - {_id: 2, x: 'ping'} - - {_id: 3, x: 'pINg'} - - {_id: 4, x: 'pong'} - - {_id: 5, x: 'pONg'} - -minServerVersion: '3.4' -serverless: 'forbid' - -# See: https://www.mongodb.com/docs/manual/reference/collation/#collation-document -tests: - - - description: "BulkWrite with delete operations and collation" - operation: - name: "bulkWrite" - arguments: - requests: - - - # matches two documents but deletes one - name: "deleteOne" - arguments: - filter: { x: "PING" } - collation: { locale: "en_US", strength: 2 } - - - # matches the remaining document and deletes it - name: "deleteOne" - arguments: - filter: { x: "PING" } - collation: { locale: "en_US", strength: 2 } - - - # matches two documents and deletes them - name: "deleteMany" - arguments: - filter: { x: "PONG" } - collation: { locale: "en_US", strength: 2 } - options: { ordered: true } - outcome: - result: - deletedCount: 4 - insertedCount: 0 - insertedIds: {} - matchedCount: 0 - modifiedCount: 0 - upsertedCount: 0 - upsertedIds: {} - collection: - data: - - {_id: 1, x: 11 } - - - description: "BulkWrite with update operations and collation" - operation: - name: "bulkWrite" - arguments: - requests: - - - # matches only one document due to strength and updates - name: "updateMany" - arguments: - filter: { x: "ping" } - update: { $set: { x: "PONG" } } - collation: { locale: "en_US", strength: 3 } - - - # matches one document and updates - name: "updateOne" - arguments: - filter: { x: "ping" } - update: { $set: { x: "PONG" } } - collation: { locale: "en_US", strength: 2 } - - - # matches no document due to strength and upserts - name: "replaceOne" - arguments: - filter: { x: "ping" } - replacement: { _id: 6, x: "ping" } - upsert: true - collation: { locale: "en_US", strength: 3 } - - - # matches two documents and updates - name: "updateMany" - arguments: - filter: { x: "pong" } - update: { $set: { x: "PONG" } } - collation: { locale: "en_US", strength: 2 } - options: { ordered: true } - outcome: - result: - deletedCount: 0 - insertedCount: 0 - insertedIds: {} - matchedCount: 6 - modifiedCount: 4 - upsertedCount: 1 - upsertedIds: { 2: 6 } - collection: - data: - - {_id: 1, x: 11 } - - {_id: 2, x: "PONG" } - - {_id: 3, x: "PONG" } - - {_id: 4, x: "PONG" } - - {_id: 5, x: "PONG" } - - {_id: 6, x: "ping" } diff --git a/testdata/crud/v1/write/bulkWrite.json b/testdata/crud/v1/write/bulkWrite.json deleted file mode 100644 index dc00da28ad..0000000000 --- a/testdata/crud/v1/write/bulkWrite.json +++ /dev/null @@ -1,778 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ], - "minServerVersion": "2.6", - "tests": [ - { - "description": "BulkWrite with deleteOne operations", - "operation": { - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "name": "deleteOne", - "arguments": { - "filter": { - "_id": 3 - } - } - }, - { - "name": "deleteOne", - "arguments": { - "filter": { - "_id": 2 - } - } - } - ], - "options": { - "ordered": true - } - } - }, - "outcome": { - "result": { - "deletedCount": 1, - "insertedCount": 0, - "insertedIds": {}, - "matchedCount": 0, - "modifiedCount": 0, - "upsertedCount": 0, - "upsertedIds": {} - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - } - ] - } - } - }, - { - "description": "BulkWrite with deleteMany operations", - "operation": { - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "name": "deleteMany", - "arguments": { - "filter": { - "x": { - "$lt": 11 - } - } - } - }, - { - "name": "deleteMany", - "arguments": { - "filter": { - "x": { - "$lte": 22 - } - } - } - } - ], - "options": { - "ordered": true - } - } - }, - "outcome": { - "result": { - "deletedCount": 2, - "insertedCount": 0, - "insertedIds": {}, - "matchedCount": 0, - "modifiedCount": 0, - "upsertedCount": 0, - "upsertedIds": {} - }, - "collection": { - "data": [] - } - } - }, - { - "description": "BulkWrite with insertOne operations", - "operation": { - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 3, - "x": 33 - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 4, - "x": 44 - } - } - } - ], - "options": { - "ordered": true - } - } - }, - "outcome": { - "result": { - "deletedCount": 0, - "insertedCount": 2, - "insertedIds": { - "0": 3, - "1": 4 - }, - "matchedCount": 0, - "modifiedCount": 0, - "upsertedCount": 0, - "upsertedIds": {} - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - } - }, - { - "description": "BulkWrite with replaceOne operations", - "operation": { - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "name": "replaceOne", - "arguments": { - "filter": { - "_id": 3 - }, - "replacement": { - "x": 33 - } - } - }, - { - "name": "replaceOne", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "x": 12 - } - } - }, - { - "name": "replaceOne", - "arguments": { - "filter": { - "_id": 3 - }, - "replacement": { - "x": 33 - }, - "upsert": true - } - } - ], - "options": { - "ordered": true - } - } - }, - "outcome": { - "result": { - "deletedCount": 0, - "insertedCount": 0, - "insertedIds": {}, - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 1, - "upsertedIds": { - "2": 3 - } - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 12 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "BulkWrite with updateOne operations", - "operation": { - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "name": "updateOne", - "arguments": { - "filter": { - "_id": 0 - }, - "update": { - "$set": { - "x": 0 - } - } - } - }, - { - "name": "updateOne", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$set": { - "x": 11 - } - } - } - }, - { - "name": "updateOne", - "arguments": { - "filter": { - "_id": 2 - }, - "update": { - "$inc": { - "x": 1 - } - } - } - }, - { - "name": "updateOne", - "arguments": { - "filter": { - "_id": 3 - }, - "update": { - "$set": { - "x": 33 - } - }, - "upsert": true - } - } - ], - "options": { - "ordered": true - } - } - }, - "outcome": { - "result": { - "deletedCount": 0, - "insertedCount": 0, - "insertedIds": {}, - "matchedCount": 2, - "modifiedCount": 1, - "upsertedCount": 1, - "upsertedIds": { - "3": 3 - } - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 23 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "BulkWrite with updateMany operations", - "operation": { - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "name": "updateMany", - "arguments": { - "filter": { - "x": { - "$lt": 11 - } - }, - "update": { - "$set": { - "x": 0 - } - } - } - }, - { - "name": "updateMany", - "arguments": { - "filter": { - "x": { - "$lte": 22 - } - }, - "update": { - "$unset": { - "y": 1 - } - } - } - }, - { - "name": "updateMany", - "arguments": { - "filter": { - "x": { - "$lte": 22 - } - }, - "update": { - "$inc": { - "x": 1 - } - } - } - }, - { - "name": "updateMany", - "arguments": { - "filter": { - "_id": 3 - }, - "update": { - "$set": { - "x": 33 - } - }, - "upsert": true - } - } - ], - "options": { - "ordered": true - } - } - }, - "outcome": { - "result": { - "deletedCount": 0, - "insertedCount": 0, - "insertedIds": {}, - "matchedCount": 4, - "modifiedCount": 2, - "upsertedCount": 1, - "upsertedIds": { - "3": 3 - } - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 12 - }, - { - "_id": 2, - "x": 23 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "BulkWrite with mixed ordered operations", - "operation": { - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 3, - "x": 33 - } - } - }, - { - "name": "updateOne", - "arguments": { - "filter": { - "_id": 2 - }, - "update": { - "$inc": { - "x": 1 - } - } - } - }, - { - "name": "updateMany", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "$inc": { - "x": 1 - } - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 4, - "x": 44 - } - } - }, - { - "name": "deleteMany", - "arguments": { - "filter": { - "x": { - "$nin": [ - 24, - 34 - ] - } - } - } - }, - { - "name": "replaceOne", - "arguments": { - "filter": { - "_id": 4 - }, - "replacement": { - "_id": 4, - "x": 44 - }, - "upsert": true - } - } - ], - "options": { - "ordered": true - } - } - }, - "outcome": { - "result": { - "deletedCount": 2, - "insertedCount": 2, - "insertedIds": { - "0": 3, - "3": 4 - }, - "matchedCount": 3, - "modifiedCount": 3, - "upsertedCount": 1, - "upsertedIds": { - "5": 4 - } - }, - "collection": { - "data": [ - { - "_id": 2, - "x": 24 - }, - { - "_id": 3, - "x": 34 - }, - { - "_id": 4, - "x": 44 - } - ] - } - } - }, - { - "description": "BulkWrite with mixed unordered operations", - "operation": { - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "name": "replaceOne", - "arguments": { - "filter": { - "_id": 3 - }, - "replacement": { - "_id": 3, - "x": 33 - }, - "upsert": true - } - }, - { - "name": "deleteOne", - "arguments": { - "filter": { - "_id": 1 - } - } - }, - { - "name": "updateOne", - "arguments": { - "filter": { - "_id": 2 - }, - "update": { - "$inc": { - "x": 1 - } - } - } - } - ], - "options": { - "ordered": false - } - } - }, - "outcome": { - "result": { - "deletedCount": 1, - "insertedCount": 0, - "insertedIds": {}, - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 1, - "upsertedIds": { - "0": 3 - } - }, - "collection": { - "data": [ - { - "_id": 2, - "x": 23 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "BulkWrite continue-on-error behavior with unordered (preexisting duplicate key)", - "operation": { - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 2, - "x": 22 - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 3, - "x": 33 - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 4, - "x": 44 - } - } - } - ], - "options": { - "ordered": false - } - } - }, - "outcome": { - "error": true, - "result": { - "deletedCount": 0, - "insertedCount": 2, - "matchedCount": 0, - "modifiedCount": 0, - "upsertedCount": 0, - "upsertedIds": {} - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - } - }, - { - "description": "BulkWrite continue-on-error behavior with unordered (duplicate key in requests)", - "operation": { - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 3, - "x": 33 - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 3, - "x": 33 - } - } - }, - { - "name": "insertOne", - "arguments": { - "document": { - "_id": 4, - "x": 44 - } - } - } - ], - "options": { - "ordered": false - } - } - }, - "outcome": { - "error": true, - "result": { - "deletedCount": 0, - "insertedCount": 2, - "matchedCount": 0, - "modifiedCount": 0, - "upsertedCount": 0, - "upsertedIds": {} - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/write/bulkWrite.yml b/testdata/crud/v1/write/bulkWrite.yml deleted file mode 100644 index 988bdf4d45..0000000000 --- a/testdata/crud/v1/write/bulkWrite.yml +++ /dev/null @@ -1,401 +0,0 @@ -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - -minServerVersion: '2.6' - -tests: - - - description: "BulkWrite with deleteOne operations" - operation: - name: "bulkWrite" - arguments: - # Note: as in the "DeleteOne when many documents match" test in - # deleteOne.yml, we omit a deleteOne operation that might match - # multiple documents as that would hinder our ability to assert - # the final state of the collection under test. - requests: - - - # does not match an existing document - name: "deleteOne" - arguments: - filter: { _id: 3 } - - - # deletes the matched document - name: "deleteOne" - arguments: - filter: { _id: 2 } - options: { ordered: true } - outcome: - result: - deletedCount: 1 - insertedCount: 0 - insertedIds: {} - matchedCount: 0 - modifiedCount: 0 - upsertedCount: 0 - upsertedIds: {} - collection: - data: - - {_id: 1, x: 11 } - - - description: "BulkWrite with deleteMany operations" - operation: - name: "bulkWrite" - arguments: - requests: - - - # does not match any existing documents - name: "deleteMany" - arguments: - filter: { x: { $lt: 11 } } - - - # deletes the matched documents - name: "deleteMany" - arguments: - filter: { x: { $lte: 22 } } - options: { ordered: true } - outcome: - result: - deletedCount: 2 - insertedCount: 0 - insertedIds: {} - matchedCount: 0 - modifiedCount: 0 - upsertedCount: 0 - upsertedIds: {} - collection: - data: [] - - - description: "BulkWrite with insertOne operations" - operation: - name: "bulkWrite" - arguments: - requests: - - - name: "insertOne" - arguments: - document: { _id: 3, x: 33 } - - - name: "insertOne" - arguments: - document: { _id: 4, x: 44 } - options: { ordered: true } - outcome: - result: - deletedCount: 0 - insertedCount: 2 - insertedIds: { 0: 3, 1: 4 } - matchedCount: 0 - modifiedCount: 0 - upsertedCount: 0 - upsertedIds: {} - collection: - data: - - {_id: 1, x: 11 } - - {_id: 2, x: 22 } - - {_id: 3, x: 33 } - - {_id: 4, x: 44 } - - - description: "BulkWrite with replaceOne operations" - operation: - name: "bulkWrite" - arguments: - # Note: as in the "ReplaceOne when many documents match" test in - # replaceOne.yml, we omit a replaceOne operation that might - # match multiple documents as that would hinder our ability to - # assert the final state of the collection under test. - requests: - - - # does not match an existing document - name: "replaceOne" - arguments: - filter: { _id: 3 } - replacement: { x: 33 } - - - # modifies the matched document - name: "replaceOne" - arguments: - filter: { _id: 1 } - replacement: { x: 12 } - - - # does not match an existing document and upserts - name: "replaceOne" - arguments: - filter: { _id: 3 } - replacement: { x: 33 } - upsert: true - options: { ordered: true } - outcome: - result: - deletedCount: 0 - insertedCount: 0 - insertedIds: {} - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 1 - upsertedIds: { 2: 3 } - collection: - data: - - {_id: 1, x: 12 } - - {_id: 2, x: 22 } - - {_id: 3, x: 33 } - - - description: "BulkWrite with updateOne operations" - operation: - name: "bulkWrite" - arguments: - # Note: as in the "UpdateOne when many documents match" test in - # updateOne.yml, we omit an updateOne operation that might match - # multiple documents as that would hinder our ability to assert - # the final state of the collection under test. - requests: - - - # does not match an existing document - name: "updateOne" - arguments: - filter: { _id: 0 } - update: { $set: { x: 0 } } - - - # does not modify the matched document - name: "updateOne" - arguments: - filter: { _id: 1 } - update: { $set: { x: 11 } } - - - # modifies the matched document - name: "updateOne" - arguments: - filter: { _id: 2 } - update: { $inc: { x: 1 } } - - - # does not match an existing document and upserts - name: "updateOne" - arguments: - filter: { _id: 3 } - update: { $set: { x: 33 } } - upsert: true - options: { ordered: true } - outcome: - result: - deletedCount: 0 - insertedCount: 0 - insertedIds: {} - matchedCount: 2 - modifiedCount: 1 - upsertedCount: 1 - upsertedIds: { 3: 3 } - collection: - data: - - {_id: 1, x: 11 } - - {_id: 2, x: 23 } - - {_id: 3, x: 33 } - - - description: "BulkWrite with updateMany operations" - operation: - name: "bulkWrite" - arguments: - requests: - - - # does not match any existing documents - name: "updateMany" - arguments: - filter: { x: { $lt: 11 } } - update: { $set: { x: 0 } } - - - # does not modify the matched documents - name: "updateMany" - arguments: - filter: { x: { $lte: 22 } } - update: { $unset: { y: 1 } } - - - # modifies the matched documents - name: "updateMany" - arguments: - filter: { x: { $lte: 22 } } - update: { $inc: { x: 1 } } - - - # does not match any existing documents and upserts - name: "updateMany" - arguments: - filter: { _id: 3 } - update: { $set: { x: 33 } } - upsert: true - options: { ordered: true } - outcome: - result: - deletedCount: 0 - insertedCount: 0 - insertedIds: {} - matchedCount: 4 - modifiedCount: 2 - upsertedCount: 1 - upsertedIds: { 3: 3 } - collection: - data: - - {_id: 1, x: 12 } - - {_id: 2, x: 23 } - - {_id: 3, x: 33 } - - - description: "BulkWrite with mixed ordered operations" - operation: - name: "bulkWrite" - arguments: - requests: - - - name: "insertOne" - arguments: - document: { _id: 3, x: 33 } - - - name: "updateOne" - arguments: - filter: { _id: 2 } - update: { $inc: { x: 1 } } - - - name: "updateMany" - arguments: - filter: { _id: { $gt: 1 } } - update: { $inc: { x: 1 } } - - - name: "insertOne" - arguments: - document: { _id: 4, x: 44 } - - - name: "deleteMany" - arguments: - filter: { x: { $nin: [ 24, 34 ] } } - - - name: "replaceOne" - arguments: - filter: { _id: 4 } - replacement: { _id: 4, x: 44 } - upsert: true - options: { ordered: true } - outcome: - result: - deletedCount: 2 - insertedCount: 2 - insertedIds: { 0: 3, 3: 4 } - matchedCount: 3 - modifiedCount: 3 - upsertedCount: 1 - upsertedIds: { 5: 4 } - collection: - data: - - {_id: 2, x: 24 } - - {_id: 3, x: 34 } - - {_id: 4, x: 44 } - - - description: "BulkWrite with mixed unordered operations" - operation: - name: "bulkWrite" - arguments: - # We omit inserting multiple documents and updating documents - # that may not exist at the start of this test as we cannot - # assume the order in which the operations will execute. - requests: - - - name: "replaceOne" - arguments: - filter: { _id: 3 } - replacement: { _id: 3, x: 33 } - upsert: true - - - name: "deleteOne" - arguments: - filter: { _id: 1 } - - - name: "updateOne" - arguments: - filter: { _id: 2 } - update: { $inc: { x: 1 } } - options: { ordered: false } - outcome: - result: - deletedCount: 1 - insertedCount: 0 - insertedIds: {} - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 1 - upsertedIds: { 0: 3 } - collection: - data: - - {_id: 2, x: 23 } - - {_id: 3, x: 33 } - - - description: "BulkWrite continue-on-error behavior with unordered (preexisting duplicate key)" - operation: - name: "bulkWrite" - arguments: - requests: - - - name: "insertOne" - arguments: - document: { _id: 2, x: 22 } - - - name: "insertOne" - arguments: - document: { _id: 3, x: 33 } - - - name: "insertOne" - arguments: - document: { _id: 4, x: 44 } - options: { ordered: false } - outcome: - error: true - result: - deletedCount: 0 - insertedCount: 2 - # Since the map of insertedIds is generated before execution it - # could indicate inserts that did not actually succeed. We omit - # this field rather than expect drivers to provide an accurate - # map filtered by write errors. - matchedCount: 0 - modifiedCount: 0 - upsertedCount: 0 - upsertedIds: { } - collection: - data: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - - { _id: 4, x: 44 } - - - description: "BulkWrite continue-on-error behavior with unordered (duplicate key in requests)" - operation: - name: "bulkWrite" - arguments: - requests: - - - name: "insertOne" - arguments: - document: { _id: 3, x: 33 } - - - name: "insertOne" - arguments: - document: { _id: 3, x: 33 } - - - name: "insertOne" - arguments: - document: { _id: 4, x: 44 } - options: { ordered: false } - outcome: - error: true - result: - deletedCount: 0 - insertedCount: 2 - # Since the map of insertedIds is generated before execution it - # could indicate inserts that did not actually succeed. We omit - # this field rather than expect drivers to provide an accurate - # map filtered by write errors. - matchedCount: 0 - modifiedCount: 0 - upsertedCount: 0 - upsertedIds: { } - collection: - data: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - - { _id: 4, x: 44 } diff --git a/testdata/crud/v1/write/deleteMany-collation.json b/testdata/crud/v1/write/deleteMany-collation.json deleted file mode 100644 index fce75e488a..0000000000 --- a/testdata/crud/v1/write/deleteMany-collation.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": "ping" - }, - { - "_id": 3, - "x": "pINg" - } - ], - "minServerVersion": "3.4", - "serverless": "forbid", - "tests": [ - { - "description": "DeleteMany when many documents match with collation", - "operation": { - "name": "deleteMany", - "arguments": { - "filter": { - "x": "PING" - }, - "collation": { - "locale": "en_US", - "strength": 2 - } - } - }, - "outcome": { - "result": { - "deletedCount": 2 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/write/deleteMany-collation.yml b/testdata/crud/v1/write/deleteMany-collation.yml deleted file mode 100644 index 65a49b7fda..0000000000 --- a/testdata/crud/v1/write/deleteMany-collation.yml +++ /dev/null @@ -1,23 +0,0 @@ -data: - - {_id: 1, x: 11} - - {_id: 2, x: 'ping'} - - {_id: 3, x: 'pINg'} -minServerVersion: '3.4' -serverless: 'forbid' - -tests: - - - description: "DeleteMany when many documents match with collation" - operation: - name: "deleteMany" - arguments: - filter: - x: 'PING' - collation: { locale: 'en_US', strength: 2 } # https://www.mongodb.com/docs/manual/reference/collation/#collation-document - - outcome: - result: - deletedCount: 2 - collection: - data: - - {_id: 1, x: 11} diff --git a/testdata/crud/v1/write/deleteMany.json b/testdata/crud/v1/write/deleteMany.json deleted file mode 100644 index 7eee85e77f..0000000000 --- a/testdata/crud/v1/write/deleteMany.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ], - "tests": [ - { - "description": "DeleteMany when many documents match", - "operation": { - "name": "deleteMany", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - } - } - }, - "outcome": { - "result": { - "deletedCount": 2 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - } - ] - } - } - }, - { - "description": "DeleteMany when no document matches", - "operation": { - "name": "deleteMany", - "arguments": { - "filter": { - "_id": 4 - } - } - }, - "outcome": { - "result": { - "deletedCount": 0 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/write/deleteMany.yml b/testdata/crud/v1/write/deleteMany.yml deleted file mode 100644 index e776c82f9a..0000000000 --- a/testdata/crud/v1/write/deleteMany.yml +++ /dev/null @@ -1,35 +0,0 @@ -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - -tests: - - - description: "DeleteMany when many documents match" - operation: - name: "deleteMany" - arguments: - filter: - _id: {$gt: 1} - - outcome: - result: - deletedCount: 2 - collection: - data: - - {_id: 1, x: 11} - - - description: "DeleteMany when no document matches" - operation: - name: "deleteMany" - arguments: - filter: {_id: 4} - - outcome: - result: - deletedCount: 0 - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} diff --git a/testdata/crud/v1/write/deleteOne-collation.json b/testdata/crud/v1/write/deleteOne-collation.json deleted file mode 100644 index 9bcef411ef..0000000000 --- a/testdata/crud/v1/write/deleteOne-collation.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": "ping" - }, - { - "_id": 3, - "x": "pINg" - } - ], - "minServerVersion": "3.4", - "serverless": "forbid", - "tests": [ - { - "description": "DeleteOne when many documents matches with collation", - "operation": { - "name": "deleteOne", - "arguments": { - "filter": { - "x": "PING" - }, - "collation": { - "locale": "en_US", - "strength": 2 - } - } - }, - "outcome": { - "result": { - "deletedCount": 1 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 3, - "x": "pINg" - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/write/deleteOne-collation.yml b/testdata/crud/v1/write/deleteOne-collation.yml deleted file mode 100644 index ce335bf3de..0000000000 --- a/testdata/crud/v1/write/deleteOne-collation.yml +++ /dev/null @@ -1,23 +0,0 @@ -data: - - {_id: 1, x: 11} - - {_id: 2, x: 'ping'} - - {_id: 3, x: 'pINg'} -minServerVersion: '3.4' -serverless: 'forbid' - -tests: - - - description: "DeleteOne when many documents matches with collation" - operation: - name: "deleteOne" - arguments: - filter: {x: 'PING'} - collation: { locale: 'en_US', strength: 2 } # https://www.mongodb.com/docs/manual/reference/collation/#collation-document - - outcome: - result: - deletedCount: 1 - collection: - data: - - {_id: 1, x: 11} - - {_id: 3, x: 'pINg'} diff --git a/testdata/crud/v1/write/deleteOne.json b/testdata/crud/v1/write/deleteOne.json deleted file mode 100644 index a1106deae3..0000000000 --- a/testdata/crud/v1/write/deleteOne.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ], - "tests": [ - { - "description": "DeleteOne when many documents match", - "operation": { - "name": "deleteOne", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - } - } - }, - "outcome": { - "result": { - "deletedCount": 1 - } - } - }, - { - "description": "DeleteOne when one document matches", - "operation": { - "name": "deleteOne", - "arguments": { - "filter": { - "_id": 2 - } - } - }, - "outcome": { - "result": { - "deletedCount": 1 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "DeleteOne when no documents match", - "operation": { - "name": "deleteOne", - "arguments": { - "filter": { - "_id": 4 - } - } - }, - "outcome": { - "result": { - "deletedCount": 0 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/write/deleteOne.yml b/testdata/crud/v1/write/deleteOne.yml deleted file mode 100644 index 2d8a90779f..0000000000 --- a/testdata/crud/v1/write/deleteOne.yml +++ /dev/null @@ -1,48 +0,0 @@ -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - -tests: - - - description: "DeleteOne when many documents match" - operation: - name: "deleteOne" - arguments: - filter: - _id: {$gt: 1} - - outcome: - result: - deletedCount: 1 - # can't verify collection because we don't have a way - # of knowing which document gets deleted. - - - description: "DeleteOne when one document matches" - operation: - name: "deleteOne" - arguments: - filter: {_id: 2} - - outcome: - result: - deletedCount: 1 - collection: - data: - - {_id: 1, x: 11} - - {_id: 3, x: 33} - - - description: "DeleteOne when no documents match" - operation: - name: "deleteOne" - arguments: - filter: {_id: 4} - - outcome: - result: - deletedCount: 0 - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} diff --git a/testdata/crud/v1/write/findOneAndDelete-collation.json b/testdata/crud/v1/write/findOneAndDelete-collation.json deleted file mode 100644 index 32480da842..0000000000 --- a/testdata/crud/v1/write/findOneAndDelete-collation.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": "ping" - }, - { - "_id": 3, - "x": "pINg" - } - ], - "minServerVersion": "3.4", - "serverless": "forbid", - "tests": [ - { - "description": "FindOneAndDelete when one document matches with collation", - "operation": { - "name": "findOneAndDelete", - "arguments": { - "filter": { - "_id": 2, - "x": "PING" - }, - "projection": { - "x": 1, - "_id": 0 - }, - "sort": { - "x": 1 - }, - "collation": { - "locale": "en_US", - "strength": 2 - } - } - }, - "outcome": { - "result": { - "x": "ping" - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 3, - "x": "pINg" - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/write/findOneAndDelete-collation.yml b/testdata/crud/v1/write/findOneAndDelete-collation.yml deleted file mode 100644 index 720ecb2f81..0000000000 --- a/testdata/crud/v1/write/findOneAndDelete-collation.yml +++ /dev/null @@ -1,24 +0,0 @@ -data: - - {_id: 1, x: 11} - - {_id: 2, x: 'ping'} - - {_id: 3, x: 'pINg'} -minServerVersion: '3.4' -serverless: 'forbid' - -tests: - - - description: "FindOneAndDelete when one document matches with collation" - operation: - name: findOneAndDelete - arguments: - filter: {_id: 2, x: 'PING'} - projection: {x: 1, _id: 0} - sort: {x: 1} - collation: { locale: 'en_US', strength: 2 } # https://www.mongodb.com/docs/manual/reference/collation/#collation-document - - outcome: - result: {x: 'ping'} - collection: - data: - - {_id: 1, x: 11} - - {_id: 3, x: 'pINg'} diff --git a/testdata/crud/v1/write/findOneAndDelete.json b/testdata/crud/v1/write/findOneAndDelete.json deleted file mode 100644 index e424e2aad1..0000000000 --- a/testdata/crud/v1/write/findOneAndDelete.json +++ /dev/null @@ -1,127 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ], - "tests": [ - { - "description": "FindOneAndDelete when many documents match", - "operation": { - "name": "findOneAndDelete", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "projection": { - "x": 1, - "_id": 0 - }, - "sort": { - "x": 1 - } - } - }, - "outcome": { - "result": { - "x": 22 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "FindOneAndDelete when one document matches", - "operation": { - "name": "findOneAndDelete", - "arguments": { - "filter": { - "_id": 2 - }, - "projection": { - "x": 1, - "_id": 0 - }, - "sort": { - "x": 1 - } - } - }, - "outcome": { - "result": { - "x": 22 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "FindOneAndDelete when no documents match", - "operation": { - "name": "findOneAndDelete", - "arguments": { - "filter": { - "_id": 4 - }, - "projection": { - "x": 1, - "_id": 0 - }, - "sort": { - "x": 1 - } - } - }, - "outcome": { - "result": null, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/write/findOneAndDelete.yml b/testdata/crud/v1/write/findOneAndDelete.yml deleted file mode 100644 index a485ee46a5..0000000000 --- a/testdata/crud/v1/write/findOneAndDelete.yml +++ /dev/null @@ -1,53 +0,0 @@ -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - -tests: - - - description: "FindOneAndDelete when many documents match" - operation: - name: findOneAndDelete - arguments: - filter: - _id: {$gt: 1} - projection: {x: 1, _id: 0} - sort: {x: 1} - - outcome: - result: {x: 22} - collection: - data: - - {_id: 1, x: 11} - - {_id: 3, x: 33} - - - description: "FindOneAndDelete when one document matches" - operation: - name: findOneAndDelete - arguments: - filter: {_id: 2} - projection: {x: 1, _id: 0} - sort: {x: 1} - - outcome: - result: {x: 22} - collection: - data: - - {_id: 1, x: 11} - - {_id: 3, x: 33} - - - description: "FindOneAndDelete when no documents match" - operation: - name: findOneAndDelete - arguments: - filter: {_id: 4} - projection: {x: 1, _id: 0} - sort: {x: 1} - - outcome: - result: null - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} \ No newline at end of file diff --git a/testdata/crud/v1/write/findOneAndReplace-collation.json b/testdata/crud/v1/write/findOneAndReplace-collation.json deleted file mode 100644 index 9b3c25005b..0000000000 --- a/testdata/crud/v1/write/findOneAndReplace-collation.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": "ping" - } - ], - "minServerVersion": "3.4", - "serverless": "forbid", - "tests": [ - { - "description": "FindOneAndReplace when one document matches with collation returning the document after modification", - "operation": { - "name": "findOneAndReplace", - "arguments": { - "filter": { - "x": "PING" - }, - "replacement": { - "x": "pong" - }, - "projection": { - "x": 1, - "_id": 0 - }, - "returnDocument": "After", - "sort": { - "x": 1 - }, - "collation": { - "locale": "en_US", - "strength": 2 - } - } - }, - "outcome": { - "result": { - "x": "pong" - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": "pong" - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/write/findOneAndReplace-collation.yml b/testdata/crud/v1/write/findOneAndReplace-collation.yml deleted file mode 100644 index f132b1211d..0000000000 --- a/testdata/crud/v1/write/findOneAndReplace-collation.yml +++ /dev/null @@ -1,25 +0,0 @@ -data: - - {_id: 1, x: 11} - - {_id: 2, x: 'ping'} -minServerVersion: '3.4' -serverless: 'forbid' - -tests: - - - description: "FindOneAndReplace when one document matches with collation returning the document after modification" - operation: - name: findOneAndReplace - arguments: - filter: {x: 'PING'} - replacement: {x: 'pong'} - projection: {x: 1, _id: 0} - returnDocument: After - sort: {x: 1} - collation: { locale: 'en_US', strength: 2 } # https://www.mongodb.com/docs/manual/reference/collation/#collation-document - - outcome: - result: {x: 'pong'} - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 'pong'} diff --git a/testdata/crud/v1/write/findOneAndReplace-upsert.json b/testdata/crud/v1/write/findOneAndReplace-upsert.json deleted file mode 100644 index 0f07bf9c18..0000000000 --- a/testdata/crud/v1/write/findOneAndReplace-upsert.json +++ /dev/null @@ -1,201 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ], - "minServerVersion": "2.6", - "tests": [ - { - "description": "FindOneAndReplace when no documents match without id specified with upsert returning the document before modification", - "operation": { - "name": "findOneAndReplace", - "arguments": { - "filter": { - "_id": 4 - }, - "replacement": { - "x": 44 - }, - "projection": { - "x": 1, - "_id": 0 - }, - "upsert": true - } - }, - "outcome": { - "result": null, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - } - }, - { - "description": "FindOneAndReplace when no documents match without id specified with upsert returning the document after modification", - "operation": { - "name": "findOneAndReplace", - "arguments": { - "filter": { - "_id": 4 - }, - "replacement": { - "x": 44 - }, - "projection": { - "x": 1, - "_id": 0 - }, - "returnDocument": "After", - "sort": { - "x": 1 - }, - "upsert": true - } - }, - "outcome": { - "result": { - "x": 44 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - } - }, - { - "description": "FindOneAndReplace when no documents match with id specified with upsert returning the document before modification", - "operation": { - "name": "findOneAndReplace", - "arguments": { - "filter": { - "_id": 4 - }, - "replacement": { - "_id": 4, - "x": 44 - }, - "projection": { - "x": 1, - "_id": 0 - }, - "upsert": true - } - }, - "outcome": { - "result": null, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - } - }, - { - "description": "FindOneAndReplace when no documents match with id specified with upsert returning the document after modification", - "operation": { - "name": "findOneAndReplace", - "arguments": { - "filter": { - "_id": 4 - }, - "replacement": { - "_id": 4, - "x": 44 - }, - "projection": { - "x": 1, - "_id": 0 - }, - "returnDocument": "After", - "sort": { - "x": 1 - }, - "upsert": true - } - }, - "outcome": { - "result": { - "x": 44 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/write/findOneAndReplace-upsert.yml b/testdata/crud/v1/write/findOneAndReplace-upsert.yml deleted file mode 100644 index 2bd64c94ec..0000000000 --- a/testdata/crud/v1/write/findOneAndReplace-upsert.yml +++ /dev/null @@ -1,91 +0,0 @@ -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} -minServerVersion: '2.6' - -tests: - - - description: "FindOneAndReplace when no documents match without id specified with upsert returning the document before modification" - operation: - name: findOneAndReplace - arguments: - filter: {_id: 4} - replacement: {x: 44} - projection: {x: 1, _id: 0} - # Omit the sort option as it has no effect when no documents - # match and would only cause an inconsistent return value on - # pre-3.0 servers when combined with returnDocument "before" - # (see: SERVER-17650). - upsert: true - - outcome: - result: null - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - {_id: 4, x: 44} - - - description: "FindOneAndReplace when no documents match without id specified with upsert returning the document after modification" - operation: - name: findOneAndReplace - arguments: - filter: {_id: 4} - replacement: {x: 44} - projection: {x: 1, _id: 0} - returnDocument: After - sort: {x: 1} - upsert: true - - outcome: - result: {x: 44} - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - {_id: 4, x: 44} - - - description: "FindOneAndReplace when no documents match with id specified with upsert returning the document before modification" - operation: - name: findOneAndReplace - arguments: - filter: {_id: 4} - replacement: {_id: 4, x: 44} - projection: {x: 1, _id: 0} - # Omit the sort option as it has no effect when no documents - # match and would only cause an inconsistent return value on - # pre-3.0 servers when combined with returnDocument "before" - # (see: SERVER-17650). - upsert: true - - outcome: - result: null - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - {_id: 4, x: 44} - - - description: "FindOneAndReplace when no documents match with id specified with upsert returning the document after modification" - operation: - name: findOneAndReplace - arguments: - filter: {_id: 4} - replacement: {_id: 4, x: 44} - projection: {x: 1, _id: 0} - returnDocument: After - sort: {x: 1} - upsert: true - - outcome: - result: {x: 44} - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - {_id: 4, x: 44} diff --git a/testdata/crud/v1/write/findOneAndReplace.json b/testdata/crud/v1/write/findOneAndReplace.json deleted file mode 100644 index 70e5c3df4e..0000000000 --- a/testdata/crud/v1/write/findOneAndReplace.json +++ /dev/null @@ -1,273 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ], - "tests": [ - { - "description": "FindOneAndReplace when many documents match returning the document before modification", - "operation": { - "name": "findOneAndReplace", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "replacement": { - "x": 32 - }, - "projection": { - "x": 1, - "_id": 0 - }, - "sort": { - "x": 1 - } - } - }, - "outcome": { - "result": { - "x": 22 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 32 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "FindOneAndReplace when many documents match returning the document after modification", - "operation": { - "name": "findOneAndReplace", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "replacement": { - "x": 32 - }, - "projection": { - "x": 1, - "_id": 0 - }, - "returnDocument": "After", - "sort": { - "x": 1 - } - } - }, - "outcome": { - "result": { - "x": 32 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 32 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "FindOneAndReplace when one document matches returning the document before modification", - "operation": { - "name": "findOneAndReplace", - "arguments": { - "filter": { - "_id": 2 - }, - "replacement": { - "x": 32 - }, - "projection": { - "x": 1, - "_id": 0 - }, - "sort": { - "x": 1 - } - } - }, - "outcome": { - "result": { - "x": 22 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 32 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "FindOneAndReplace when one document matches returning the document after modification", - "operation": { - "name": "findOneAndReplace", - "arguments": { - "filter": { - "_id": 2 - }, - "replacement": { - "x": 32 - }, - "projection": { - "x": 1, - "_id": 0 - }, - "returnDocument": "After", - "sort": { - "x": 1 - } - } - }, - "outcome": { - "result": { - "x": 32 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 32 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "FindOneAndReplace when no documents match returning the document before modification", - "operation": { - "name": "findOneAndReplace", - "arguments": { - "filter": { - "_id": 4 - }, - "replacement": { - "x": 44 - }, - "projection": { - "x": 1, - "_id": 0 - }, - "sort": { - "x": 1 - } - } - }, - "outcome": { - "result": null, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "FindOneAndReplace when no documents match returning the document after modification", - "operation": { - "name": "findOneAndReplace", - "arguments": { - "filter": { - "_id": 4 - }, - "replacement": { - "x": 44 - }, - "projection": { - "x": 1, - "_id": 0 - }, - "returnDocument": "After", - "sort": { - "x": 1 - } - } - }, - "outcome": { - "result": null, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/write/findOneAndReplace.yml b/testdata/crud/v1/write/findOneAndReplace.yml deleted file mode 100644 index c121418b78..0000000000 --- a/testdata/crud/v1/write/findOneAndReplace.yml +++ /dev/null @@ -1,113 +0,0 @@ -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - -tests: - - - description: "FindOneAndReplace when many documents match returning the document before modification" - operation: - name: findOneAndReplace - arguments: - filter: - _id: {$gt: 1} - replacement: {x: 32} - projection: {x: 1, _id: 0} - sort: {x: 1} - - outcome: - result: {x: 22} - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 32} - - {_id: 3, x: 33} - - - description: "FindOneAndReplace when many documents match returning the document after modification" - operation: - name: findOneAndReplace - arguments: - filter: - _id: {$gt: 1} - replacement: {x: 32} - projection: {x: 1, _id: 0} - returnDocument: After - sort: {x: 1} - - outcome: - result: {x: 32} - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 32} - - {_id: 3, x: 33} - - - description: "FindOneAndReplace when one document matches returning the document before modification" - operation: - name: findOneAndReplace - arguments: - filter: {_id: 2} - replacement: {x: 32} - projection: {x: 1, _id: 0} - sort: {x: 1} - - outcome: - result: {x: 22} - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 32} - - {_id: 3, x: 33} - - - description: "FindOneAndReplace when one document matches returning the document after modification" - operation: - name: findOneAndReplace - arguments: - filter: {_id: 2} - replacement: {x: 32} - projection: {x: 1, _id: 0} - returnDocument: After - sort: {x: 1} - - outcome: - result: {x: 32} - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 32} - - {_id: 3, x: 33} - - - description: "FindOneAndReplace when no documents match returning the document before modification" - operation: - name: findOneAndReplace - arguments: - filter: {_id: 4} - replacement: {x: 44} - projection: {x: 1, _id: 0} - sort: {x: 1} - - outcome: - result: null - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - - description: "FindOneAndReplace when no documents match returning the document after modification" - operation: - name: findOneAndReplace - arguments: - filter: {_id: 4} - replacement: {x: 44} - projection: {x: 1, _id: 0} - returnDocument: After - sort: {x: 1} - - outcome: - result: null - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} diff --git a/testdata/crud/v1/write/findOneAndUpdate-arrayFilters.json b/testdata/crud/v1/write/findOneAndUpdate-arrayFilters.json deleted file mode 100644 index 1aa13b863e..0000000000 --- a/testdata/crud/v1/write/findOneAndUpdate-arrayFilters.json +++ /dev/null @@ -1,203 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "y": [ - { - "b": 3 - }, - { - "b": 1 - } - ] - }, - { - "_id": 2, - "y": [ - { - "b": 0 - }, - { - "b": 1 - } - ] - } - ], - "minServerVersion": "3.5.6", - "tests": [ - { - "description": "FindOneAndUpdate when no document matches arrayFilters", - "operation": { - "name": "findOneAndUpdate", - "arguments": { - "filter": {}, - "update": { - "$set": { - "y.$[i].b": 2 - } - }, - "arrayFilters": [ - { - "i.b": 4 - } - ] - } - }, - "outcome": { - "result": { - "_id": 1, - "y": [ - { - "b": 3 - }, - { - "b": 1 - } - ] - }, - "collection": { - "data": [ - { - "_id": 1, - "y": [ - { - "b": 3 - }, - { - "b": 1 - } - ] - }, - { - "_id": 2, - "y": [ - { - "b": 0 - }, - { - "b": 1 - } - ] - } - ] - } - } - }, - { - "description": "FindOneAndUpdate when one document matches arrayFilters", - "operation": { - "name": "findOneAndUpdate", - "arguments": { - "filter": {}, - "update": { - "$set": { - "y.$[i].b": 2 - } - }, - "arrayFilters": [ - { - "i.b": 3 - } - ] - } - }, - "outcome": { - "result": { - "_id": 1, - "y": [ - { - "b": 3 - }, - { - "b": 1 - } - ] - }, - "collection": { - "data": [ - { - "_id": 1, - "y": [ - { - "b": 2 - }, - { - "b": 1 - } - ] - }, - { - "_id": 2, - "y": [ - { - "b": 0 - }, - { - "b": 1 - } - ] - } - ] - } - } - }, - { - "description": "FindOneAndUpdate when multiple documents match arrayFilters", - "operation": { - "name": "findOneAndUpdate", - "arguments": { - "filter": {}, - "update": { - "$set": { - "y.$[i].b": 2 - } - }, - "arrayFilters": [ - { - "i.b": 1 - } - ] - } - }, - "outcome": { - "result": { - "_id": 1, - "y": [ - { - "b": 3 - }, - { - "b": 1 - } - ] - }, - "collection": { - "data": [ - { - "_id": 1, - "y": [ - { - "b": 3 - }, - { - "b": 2 - } - ] - }, - { - "_id": 2, - "y": [ - { - "b": 0 - }, - { - "b": 1 - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/write/findOneAndUpdate-arrayFilters.yml b/testdata/crud/v1/write/findOneAndUpdate-arrayFilters.yml deleted file mode 100644 index 7665ad0c59..0000000000 --- a/testdata/crud/v1/write/findOneAndUpdate-arrayFilters.yml +++ /dev/null @@ -1,69 +0,0 @@ -data: - - {_id: 1, y: [{b: 3}, {b: 1}]} - - {_id: 2, y: [{b: 0}, {b: 1}]} -minServerVersion: '3.5.6' - -tests: - - - description: "FindOneAndUpdate when no document matches arrayFilters" - operation: - name: findOneAndUpdate - arguments: - filter: {} - update: - $set: {"y.$[i].b": 2} - arrayFilters: - - {i.b: 4} - - outcome: - result: - _id: 1 - y: - - {b: 3} - - {b: 1} - collection: - data: - - {_id: 1, y: [{b: 3}, {b: 1}]} - - {_id: 2, y: [{b: 0}, {b: 1}]} - - - description: "FindOneAndUpdate when one document matches arrayFilters" - operation: - name: findOneAndUpdate - arguments: - filter: {} - update: - $set: {"y.$[i].b": 2} - arrayFilters: - - {i.b: 3} - - outcome: - result: - _id: 1 - y: - - {b: 3} - - {b: 1} - collection: - data: - - {_id: 1, y: [{b: 2}, {b: 1}]} - - {_id: 2, y: [{b: 0}, {b: 1}]} - - - description: "FindOneAndUpdate when multiple documents match arrayFilters" - operation: - name: findOneAndUpdate - arguments: - filter: {} - update: - $set: {"y.$[i].b": 2} - arrayFilters: - - {i.b: 1} - - outcome: - result: - _id: 1 - y: - - {b: 3} - - {b: 1} - collection: - data: - - {_id: 1, y: [{b: 3}, {b: 2}]} - - {_id: 2, y: [{b: 0}, {b: 1}]} diff --git a/testdata/crud/v1/write/findOneAndUpdate-collation.json b/testdata/crud/v1/write/findOneAndUpdate-collation.json deleted file mode 100644 index 8abab7bd6b..0000000000 --- a/testdata/crud/v1/write/findOneAndUpdate-collation.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": "ping" - }, - { - "_id": 3, - "x": "pINg" - } - ], - "minServerVersion": "3.4", - "serverless": "forbid", - "tests": [ - { - "description": "FindOneAndUpdate when many documents match with collation returning the document before modification", - "operation": { - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "x": "PING" - }, - "update": { - "$set": { - "x": "pong" - } - }, - "projection": { - "x": 1, - "_id": 0 - }, - "sort": { - "_id": 1 - }, - "collation": { - "locale": "en_US", - "strength": 2 - } - } - }, - "outcome": { - "result": { - "x": "ping" - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": "pong" - }, - { - "_id": 3, - "x": "pINg" - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/write/findOneAndUpdate-collation.yml b/testdata/crud/v1/write/findOneAndUpdate-collation.yml deleted file mode 100644 index 5a110b01bf..0000000000 --- a/testdata/crud/v1/write/findOneAndUpdate-collation.yml +++ /dev/null @@ -1,28 +0,0 @@ -data: - - {_id: 1, x: 11} - - {_id: 2, x: 'ping'} - - {_id: 3, x: 'pINg'} -minServerVersion: '3.4' -serverless: 'forbid' - -tests: - - - description: "FindOneAndUpdate when many documents match with collation returning the document before modification" - operation: - name: findOneAndUpdate - arguments: - filter: - x: 'PING' - update: - $set: {x: 'pong'} - projection: {x: 1, _id: 0} - sort: {_id: 1} - collation: { locale: 'en_US', strength: 2 } # https://www.mongodb.com/docs/manual/reference/collation/#collation-document - - outcome: - result: {x: 'ping'} - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 'pong'} - - {_id: 3, x: 'pINg'} diff --git a/testdata/crud/v1/write/findOneAndUpdate.json b/testdata/crud/v1/write/findOneAndUpdate.json deleted file mode 100644 index 6da8325273..0000000000 --- a/testdata/crud/v1/write/findOneAndUpdate.json +++ /dev/null @@ -1,379 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ], - "tests": [ - { - "description": "FindOneAndUpdate when many documents match returning the document before modification", - "operation": { - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "projection": { - "x": 1, - "_id": 0 - }, - "sort": { - "x": 1 - } - } - }, - "outcome": { - "result": { - "x": 22 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 23 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "FindOneAndUpdate when many documents match returning the document after modification", - "operation": { - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "$inc": { - "x": 1 - } - }, - "projection": { - "x": 1, - "_id": 0 - }, - "returnDocument": "After", - "sort": { - "x": 1 - } - } - }, - "outcome": { - "result": { - "x": 23 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 23 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "FindOneAndUpdate when one document matches returning the document before modification", - "operation": { - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "_id": 2 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "projection": { - "x": 1, - "_id": 0 - }, - "sort": { - "x": 1 - } - } - }, - "outcome": { - "result": { - "x": 22 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 23 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "FindOneAndUpdate when one document matches returning the document after modification", - "operation": { - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "_id": 2 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "projection": { - "x": 1, - "_id": 0 - }, - "returnDocument": "After", - "sort": { - "x": 1 - } - } - }, - "outcome": { - "result": { - "x": 23 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 23 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "FindOneAndUpdate when no documents match returning the document before modification", - "operation": { - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "_id": 4 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "projection": { - "x": 1, - "_id": 0 - }, - "sort": { - "x": 1 - } - } - }, - "outcome": { - "result": null, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "FindOneAndUpdate when no documents match with upsert returning the document before modification", - "operation": { - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "_id": 4 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "projection": { - "x": 1, - "_id": 0 - }, - "upsert": true - } - }, - "outcome": { - "result": null, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 1 - } - ] - } - } - }, - { - "description": "FindOneAndUpdate when no documents match returning the document after modification", - "operation": { - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "_id": 4 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "projection": { - "x": 1, - "_id": 0 - }, - "returnDocument": "After", - "sort": { - "x": 1 - } - } - }, - "outcome": { - "result": null, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "FindOneAndUpdate when no documents match with upsert returning the document after modification", - "operation": { - "name": "findOneAndUpdate", - "arguments": { - "filter": { - "_id": 4 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "projection": { - "x": 1, - "_id": 0 - }, - "returnDocument": "After", - "sort": { - "x": 1 - }, - "upsert": true - } - }, - "outcome": { - "result": { - "x": 1 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 1 - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/write/findOneAndUpdate.yml b/testdata/crud/v1/write/findOneAndUpdate.yml deleted file mode 100644 index bed02f146a..0000000000 --- a/testdata/crud/v1/write/findOneAndUpdate.yml +++ /dev/null @@ -1,163 +0,0 @@ -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - -tests: - - - description: "FindOneAndUpdate when many documents match returning the document before modification" - operation: - name: findOneAndUpdate - arguments: - filter: - _id: {$gt: 1} - update: - $inc: {x: 1} - projection: {x: 1, _id: 0} - sort: {x: 1} - - outcome: - result: {x: 22} - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 23} - - {_id: 3, x: 33} - - - description: "FindOneAndUpdate when many documents match returning the document after modification" - operation: - name: findOneAndUpdate - arguments: - filter: - _id: {$gt: 1} - update: - $inc: {x: 1} - projection: {x: 1, _id: 0} - returnDocument: After - sort: {x: 1} - - outcome: - result: {x: 23} - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 23} - - {_id: 3, x: 33} - - - description: "FindOneAndUpdate when one document matches returning the document before modification" - operation: - name: findOneAndUpdate - arguments: - filter: {_id: 2} - update: - $inc: {x: 1} - projection: {x: 1, _id: 0} - sort: {x: 1} - - outcome: - result: {x: 22} - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 23} - - {_id: 3, x: 33} - - - description: "FindOneAndUpdate when one document matches returning the document after modification" - operation: - name: findOneAndUpdate - arguments: - filter: {_id: 2} - update: - $inc: {x: 1} - projection: {x: 1, _id: 0} - returnDocument: After - sort: {x: 1} - - outcome: - result: {x: 23} - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 23} - - {_id: 3, x: 33} - - - description: "FindOneAndUpdate when no documents match returning the document before modification" - operation: - name: findOneAndUpdate - arguments: - filter: {_id: 4} - update: - $inc: {x: 1} - projection: {x: 1, _id: 0} - sort: {x: 1} - - outcome: - result: null - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - - description: "FindOneAndUpdate when no documents match with upsert returning the document before modification" - operation: - name: findOneAndUpdate - arguments: - filter: {_id: 4} - update: - $inc: {x: 1} - projection: {x: 1, _id: 0} - # Omit the sort option as it has no effect when no documents - # match and would only cause an inconsistent return value on - # pre-3.0 servers when combined with returnDocument "before" - # (see: SERVER-17650). - upsert: true - - outcome: - result: null - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - {_id: 4, x: 1} - - - description: "FindOneAndUpdate when no documents match returning the document after modification" - operation: - name: findOneAndUpdate - arguments: - filter: {_id: 4} - update: - $inc: {x: 1} - projection: {x: 1, _id: 0} - returnDocument: After - sort: {x: 1} - - outcome: - result: null - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - - description: "FindOneAndUpdate when no documents match with upsert returning the document after modification" - operation: - name: findOneAndUpdate - arguments: - filter: {_id: 4} - update: - $inc: {x: 1} - projection: {x: 1, _id: 0} - returnDocument: After - sort: {x: 1} - upsert: true - - outcome: - result: {x: 1} - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - {_id: 4, x: 1} \ No newline at end of file diff --git a/testdata/crud/v1/write/insertMany.json b/testdata/crud/v1/write/insertMany.json deleted file mode 100644 index 6a2e5261b7..0000000000 --- a/testdata/crud/v1/write/insertMany.json +++ /dev/null @@ -1,159 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - } - ], - "tests": [ - { - "description": "InsertMany with non-existing documents", - "operation": { - "name": "insertMany", - "arguments": { - "documents": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ], - "options": { - "ordered": true - } - } - }, - "outcome": { - "result": { - "insertedIds": { - "0": 2, - "1": 3 - } - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "InsertMany continue-on-error behavior with unordered (preexisting duplicate key)", - "operation": { - "name": "insertMany", - "arguments": { - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ], - "options": { - "ordered": false - } - } - }, - "outcome": { - "error": true, - "result": { - "deletedCount": 0, - "insertedCount": 2, - "matchedCount": 0, - "modifiedCount": 0, - "upsertedCount": 0, - "upsertedIds": {} - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "InsertMany continue-on-error behavior with unordered (duplicate key in requests)", - "operation": { - "name": "insertMany", - "arguments": { - "documents": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ], - "options": { - "ordered": false - } - } - }, - "outcome": { - "error": true, - "result": { - "deletedCount": 0, - "insertedCount": 2, - "matchedCount": 0, - "modifiedCount": 0, - "upsertedCount": 0, - "upsertedIds": {} - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/write/insertMany.yml b/testdata/crud/v1/write/insertMany.yml deleted file mode 100644 index f76e4af68d..0000000000 --- a/testdata/crud/v1/write/insertMany.yml +++ /dev/null @@ -1,77 +0,0 @@ -data: - - {_id: 1, x: 11} - -tests: - - - description: "InsertMany with non-existing documents" - operation: - name: "insertMany" - arguments: - documents: - - {_id: 2, x: 22} - - {_id: 3, x: 33} - options: { ordered: true } - outcome: - result: - insertedIds: { 0: 2, 1: 3 } - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - - description: "InsertMany continue-on-error behavior with unordered (preexisting duplicate key)" - operation: - name: "insertMany" - arguments: - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - options: { ordered: false } - outcome: - error: true - result: - deletedCount: 0 - insertedCount: 2 - # Since the map of insertedIds is generated before execution it - # could indicate inserts that did not actually succeed. We omit - # this field rather than expect drivers to provide an accurate - # map filtered by write errors. - matchedCount: 0 - modifiedCount: 0 - upsertedCount: 0 - upsertedIds: { } - collection: - data: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - - - description: "InsertMany continue-on-error behavior with unordered (duplicate key in requests)" - operation: - name: "insertMany" - arguments: - documents: - - { _id: 2, x: 22 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - options: { ordered: false } - outcome: - error: true - result: - deletedCount: 0 - insertedCount: 2 - # Since the map of insertedIds is generated before execution it - # could indicate inserts that did not actually succeed. We omit - # this field rather than expect drivers to provide an accurate - # map filtered by write errors. - matchedCount: 0 - modifiedCount: 0 - upsertedCount: 0 - upsertedIds: { } - collection: - data: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } diff --git a/testdata/crud/v1/write/insertOne.json b/testdata/crud/v1/write/insertOne.json deleted file mode 100644 index 525de75e07..0000000000 --- a/testdata/crud/v1/write/insertOne.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - } - ], - "tests": [ - { - "description": "InsertOne with a non-existing document", - "operation": { - "name": "insertOne", - "arguments": { - "document": { - "_id": 2, - "x": 22 - } - } - }, - "outcome": { - "result": { - "insertedId": 2 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/write/insertOne.yml b/testdata/crud/v1/write/insertOne.yml deleted file mode 100644 index 8d65499d9b..0000000000 --- a/testdata/crud/v1/write/insertOne.yml +++ /dev/null @@ -1,18 +0,0 @@ -data: - - {_id: 1, x: 11} - -tests: - - - description: "InsertOne with a non-existing document" - operation: - name: "insertOne" - arguments: - document: {_id: 2, x: 22} - - outcome: - result: - insertedId: 2 - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} \ No newline at end of file diff --git a/testdata/crud/v1/write/replaceOne-collation.json b/testdata/crud/v1/write/replaceOne-collation.json deleted file mode 100644 index fa4cbe9970..0000000000 --- a/testdata/crud/v1/write/replaceOne-collation.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": "ping" - } - ], - "minServerVersion": "3.4", - "serverless": "forbid", - "tests": [ - { - "description": "ReplaceOne when one document matches with collation", - "operation": { - "name": "replaceOne", - "arguments": { - "filter": { - "x": "PING" - }, - "replacement": { - "_id": 2, - "x": "pong" - }, - "collation": { - "locale": "en_US", - "strength": 2 - } - } - }, - "outcome": { - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": "pong" - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/write/replaceOne-collation.yml b/testdata/crud/v1/write/replaceOne-collation.yml deleted file mode 100644 index cad343caa1..0000000000 --- a/testdata/crud/v1/write/replaceOne-collation.yml +++ /dev/null @@ -1,25 +0,0 @@ -data: - - {_id: 1, x: 11} - - {_id: 2, x: 'ping'} -minServerVersion: '3.4' -serverless: 'forbid' - -tests: - - - description: "ReplaceOne when one document matches with collation" - operation: - name: "replaceOne" - arguments: - filter: {x: 'PING'} - replacement: {_id: 2, x: 'pong'} - collation: {locale: 'en_US', strength: 2} # https://www.mongodb.com/docs/manual/reference/collation/#collation-document - - outcome: - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 'pong'} diff --git a/testdata/crud/v1/write/replaceOne.json b/testdata/crud/v1/write/replaceOne.json deleted file mode 100644 index 101af25c7c..0000000000 --- a/testdata/crud/v1/write/replaceOne.json +++ /dev/null @@ -1,205 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ], - "minServerVersion": "2.6", - "tests": [ - { - "description": "ReplaceOne when many documents match", - "operation": { - "name": "replaceOne", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "replacement": { - "x": 111 - } - } - }, - "outcome": { - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - }, - { - "description": "ReplaceOne when one document matches", - "operation": { - "name": "replaceOne", - "arguments": { - "filter": { - "_id": 1 - }, - "replacement": { - "_id": 1, - "x": 111 - } - } - }, - "outcome": { - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 111 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "ReplaceOne when no documents match", - "operation": { - "name": "replaceOne", - "arguments": { - "filter": { - "_id": 4 - }, - "replacement": { - "_id": 4, - "x": 1 - } - } - }, - "outcome": { - "result": { - "matchedCount": 0, - "modifiedCount": 0, - "upsertedCount": 0 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "ReplaceOne with upsert when no documents match without an id specified", - "operation": { - "name": "replaceOne", - "arguments": { - "filter": { - "_id": 4 - }, - "replacement": { - "x": 1 - }, - "upsert": true - } - }, - "outcome": { - "result": { - "matchedCount": 0, - "modifiedCount": 0, - "upsertedCount": 1, - "upsertedId": 4 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 1 - } - ] - } - } - }, - { - "description": "ReplaceOne with upsert when no documents match with an id specified", - "operation": { - "name": "replaceOne", - "arguments": { - "filter": { - "_id": 4 - }, - "replacement": { - "_id": 4, - "x": 1 - }, - "upsert": true - } - }, - "outcome": { - "result": { - "matchedCount": 0, - "modifiedCount": 0, - "upsertedCount": 1, - "upsertedId": 4 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 1 - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/write/replaceOne.yml b/testdata/crud/v1/write/replaceOne.yml deleted file mode 100644 index 4bccd36008..0000000000 --- a/testdata/crud/v1/write/replaceOne.yml +++ /dev/null @@ -1,102 +0,0 @@ -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} -minServerVersion: '2.6' - -tests: - - - description: "ReplaceOne when many documents match" - operation: - name: "replaceOne" - arguments: - filter: - _id: {$gt: 1} - replacement: {x: 111} - - outcome: - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - # Can't verify collection data because we don't have a way of - # knowing which document gets updated. - - - description: "ReplaceOne when one document matches" - operation: - name: "replaceOne" - arguments: - filter: {_id: 1} - replacement: {_id: 1, x: 111} - - outcome: - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - collection: - data: - - {_id: 1, x: 111} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - - description: "ReplaceOne when no documents match" - operation: - name: "replaceOne" - arguments: - filter: {_id: 4} - replacement: {_id: 4, x: 1} - - outcome: - result: - matchedCount: 0 - modifiedCount: 0 - upsertedCount: 0 - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - - description: "ReplaceOne with upsert when no documents match without an id specified" - operation: - name: "replaceOne" - arguments: - filter: {_id: 4} - replacement: {x: 1} - upsert: true - - outcome: - result: - matchedCount: 0 - modifiedCount: 0 - upsertedCount: 1 - upsertedId: 4 - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - {_id: 4, x: 1} - - - - description: "ReplaceOne with upsert when no documents match with an id specified" - operation: - name: "replaceOne" - arguments: - filter: {_id: 4} - replacement: {_id: 4, x: 1} - upsert: true - - outcome: - result: - matchedCount: 0 - modifiedCount: 0 - upsertedCount: 1 - upsertedId: 4 - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - {_id: 4, x: 1} diff --git a/testdata/crud/v1/write/updateMany-arrayFilters.json b/testdata/crud/v1/write/updateMany-arrayFilters.json deleted file mode 100644 index ae4c123ea5..0000000000 --- a/testdata/crud/v1/write/updateMany-arrayFilters.json +++ /dev/null @@ -1,185 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "y": [ - { - "b": 3 - }, - { - "b": 1 - } - ] - }, - { - "_id": 2, - "y": [ - { - "b": 0 - }, - { - "b": 1 - } - ] - } - ], - "minServerVersion": "3.5.6", - "tests": [ - { - "description": "UpdateMany when no documents match arrayFilters", - "operation": { - "name": "updateMany", - "arguments": { - "filter": {}, - "update": { - "$set": { - "y.$[i].b": 2 - } - }, - "arrayFilters": [ - { - "i.b": 4 - } - ] - } - }, - "outcome": { - "result": { - "matchedCount": 2, - "modifiedCount": 0, - "upsertedCount": 0 - }, - "collection": { - "data": [ - { - "_id": 1, - "y": [ - { - "b": 3 - }, - { - "b": 1 - } - ] - }, - { - "_id": 2, - "y": [ - { - "b": 0 - }, - { - "b": 1 - } - ] - } - ] - } - } - }, - { - "description": "UpdateMany when one document matches arrayFilters", - "operation": { - "name": "updateMany", - "arguments": { - "filter": {}, - "update": { - "$set": { - "y.$[i].b": 2 - } - }, - "arrayFilters": [ - { - "i.b": 3 - } - ] - } - }, - "outcome": { - "result": { - "matchedCount": 2, - "modifiedCount": 1, - "upsertedCount": 0 - }, - "collection": { - "data": [ - { - "_id": 1, - "y": [ - { - "b": 2 - }, - { - "b": 1 - } - ] - }, - { - "_id": 2, - "y": [ - { - "b": 0 - }, - { - "b": 1 - } - ] - } - ] - } - } - }, - { - "description": "UpdateMany when multiple documents match arrayFilters", - "operation": { - "name": "updateMany", - "arguments": { - "filter": {}, - "update": { - "$set": { - "y.$[i].b": 2 - } - }, - "arrayFilters": [ - { - "i.b": 1 - } - ] - } - }, - "outcome": { - "result": { - "matchedCount": 2, - "modifiedCount": 2, - "upsertedCount": 0 - }, - "collection": { - "data": [ - { - "_id": 1, - "y": [ - { - "b": 3 - }, - { - "b": 2 - } - ] - }, - { - "_id": 2, - "y": [ - { - "b": 0 - }, - { - "b": 2 - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/write/updateMany-arrayFilters.yml b/testdata/crud/v1/write/updateMany-arrayFilters.yml deleted file mode 100644 index 3cfee56924..0000000000 --- a/testdata/crud/v1/write/updateMany-arrayFilters.yml +++ /dev/null @@ -1,66 +0,0 @@ -data: - - {_id: 1, y: [{b: 3}, {b: 1}]} - - {_id: 2, y: [{b: 0}, {b: 1}]} -minServerVersion: '3.5.6' - -tests: - - - description: "UpdateMany when no documents match arrayFilters" - operation: - name: "updateMany" - arguments: - filter: {} - update: - $set: {"y.$[i].b": 2} - arrayFilters: - - {i.b: 4} - - outcome: - result: - matchedCount: 2 - modifiedCount: 0 - upsertedCount: 0 - collection: - data: - - {_id: 1, y: [{b: 3}, {b: 1}]} - - {_id: 2, y: [{b: 0}, {b: 1}]} - - - description: "UpdateMany when one document matches arrayFilters" - operation: - name: "updateMany" - arguments: - filter: {} - update: - $set: {"y.$[i].b": 2} - arrayFilters: - - {i.b: 3} - - outcome: - result: - matchedCount: 2 - modifiedCount: 1 - upsertedCount: 0 - collection: - data: - - {_id: 1, y: [{b: 2}, {b: 1}]} - - {_id: 2, y: [{b: 0}, {b: 1}]} - - - description: "UpdateMany when multiple documents match arrayFilters" - operation: - name: "updateMany" - arguments: - filter: {} - update: - $set: {"y.$[i].b": 2} - arrayFilters: - - {i.b: 1} - - outcome: - result: - matchedCount: 2 - modifiedCount: 2 - upsertedCount: 0 - collection: - data: - - {_id: 1, y: [{b: 3}, {b: 2}]} - - {_id: 2, y: [{b: 0}, {b: 2}]} diff --git a/testdata/crud/v1/write/updateMany-collation.json b/testdata/crud/v1/write/updateMany-collation.json deleted file mode 100644 index 8becfd806b..0000000000 --- a/testdata/crud/v1/write/updateMany-collation.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": "ping" - }, - { - "_id": 3, - "x": "pINg" - } - ], - "minServerVersion": "3.4", - "serverless": "forbid", - "tests": [ - { - "description": "UpdateMany when many documents match with collation", - "operation": { - "name": "updateMany", - "arguments": { - "filter": { - "x": "ping" - }, - "update": { - "$set": { - "x": "pong" - } - }, - "collation": { - "locale": "en_US", - "strength": 2 - } - } - }, - "outcome": { - "result": { - "matchedCount": 2, - "modifiedCount": 2, - "upsertedCount": 0 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": "pong" - }, - { - "_id": 3, - "x": "pong" - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/write/updateMany-collation.yml b/testdata/crud/v1/write/updateMany-collation.yml deleted file mode 100644 index b373789649..0000000000 --- a/testdata/crud/v1/write/updateMany-collation.yml +++ /dev/null @@ -1,29 +0,0 @@ -data: - - {_id: 1, x: 11} - - {_id: 2, x: 'ping'} - - {_id: 3, x: 'pINg'} -minServerVersion: '3.4' -serverless: 'forbid' - -tests: - - - description: "UpdateMany when many documents match with collation" - operation: - name: "updateMany" - arguments: - filter: - x: 'ping' - update: - $set: {x: 'pong'} - collation: { locale: 'en_US', strength: 2 } # https://www.mongodb.com/docs/manual/reference/collation/#collation-document - - outcome: - result: - matchedCount: 2 - modifiedCount: 2 - upsertedCount: 0 - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 'pong'} - - {_id: 3, x: 'pong'} diff --git a/testdata/crud/v1/write/updateMany.json b/testdata/crud/v1/write/updateMany.json deleted file mode 100644 index a3c339987d..0000000000 --- a/testdata/crud/v1/write/updateMany.json +++ /dev/null @@ -1,183 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ], - "minServerVersion": "2.6", - "tests": [ - { - "description": "UpdateMany when many documents match", - "operation": { - "name": "updateMany", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "$inc": { - "x": 1 - } - } - } - }, - "outcome": { - "result": { - "matchedCount": 2, - "modifiedCount": 2, - "upsertedCount": 0 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 23 - }, - { - "_id": 3, - "x": 34 - } - ] - } - } - }, - { - "description": "UpdateMany when one document matches", - "operation": { - "name": "updateMany", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - } - } - }, - "outcome": { - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 12 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "UpdateMany when no documents match", - "operation": { - "name": "updateMany", - "arguments": { - "filter": { - "_id": 4 - }, - "update": { - "$inc": { - "x": 1 - } - } - } - }, - "outcome": { - "result": { - "matchedCount": 0, - "modifiedCount": 0, - "upsertedCount": 0 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "UpdateMany with upsert when no documents match", - "operation": { - "name": "updateMany", - "arguments": { - "filter": { - "_id": 4 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "upsert": true - } - }, - "outcome": { - "result": { - "matchedCount": 0, - "modifiedCount": 0, - "upsertedCount": 1, - "upsertedId": 4 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 1 - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/write/updateMany.yml b/testdata/crud/v1/write/updateMany.yml deleted file mode 100644 index a0eb62ba83..0000000000 --- a/testdata/crud/v1/write/updateMany.yml +++ /dev/null @@ -1,87 +0,0 @@ -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} -minServerVersion: '2.6' - -tests: - - - description: "UpdateMany when many documents match" - operation: - name: "updateMany" - arguments: - filter: - _id: {$gt: 1} - update: - $inc: {x: 1} - - outcome: - result: - matchedCount: 2 - modifiedCount: 2 - upsertedCount: 0 - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 23} - - {_id: 3, x: 34} - - - description: "UpdateMany when one document matches" - operation: - name: "updateMany" - arguments: - filter: {_id: 1} - update: - $inc: {x: 1} - - outcome: - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - collection: - data: - - {_id: 1, x: 12} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - - description: "UpdateMany when no documents match" - operation: - name: "updateMany" - arguments: - filter: {_id: 4} - update: - $inc: {x: 1} - - outcome: - result: - matchedCount: 0 - modifiedCount: 0 - upsertedCount: 0 - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - - description: "UpdateMany with upsert when no documents match" - operation: - name: "updateMany" - arguments: - filter: {_id: 4} - update: - $inc: {x: 1} - upsert: true - - outcome: - result: - matchedCount: 0 - modifiedCount: 0 - upsertedCount: 1 - upsertedId: 4 - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - {_id: 4, x: 1} diff --git a/testdata/crud/v1/write/updateOne-arrayFilters.json b/testdata/crud/v1/write/updateOne-arrayFilters.json deleted file mode 100644 index 087ed4b82f..0000000000 --- a/testdata/crud/v1/write/updateOne-arrayFilters.json +++ /dev/null @@ -1,395 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "y": [ - { - "b": 3 - }, - { - "b": 1 - } - ] - }, - { - "_id": 2, - "y": [ - { - "b": 0 - }, - { - "b": 1 - } - ] - }, - { - "_id": 3, - "y": [ - { - "b": 5, - "c": [ - { - "d": 2 - }, - { - "d": 1 - } - ] - } - ] - } - ], - "minServerVersion": "3.5.6", - "tests": [ - { - "description": "UpdateOne when no document matches arrayFilters", - "operation": { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$set": { - "y.$[i].b": 2 - } - }, - "arrayFilters": [ - { - "i.b": 4 - } - ] - } - }, - "outcome": { - "result": { - "matchedCount": 1, - "modifiedCount": 0, - "upsertedCount": 0 - }, - "collection": { - "data": [ - { - "_id": 1, - "y": [ - { - "b": 3 - }, - { - "b": 1 - } - ] - }, - { - "_id": 2, - "y": [ - { - "b": 0 - }, - { - "b": 1 - } - ] - }, - { - "_id": 3, - "y": [ - { - "b": 5, - "c": [ - { - "d": 2 - }, - { - "d": 1 - } - ] - } - ] - } - ] - } - } - }, - { - "description": "UpdateOne when one document matches arrayFilters", - "operation": { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$set": { - "y.$[i].b": 2 - } - }, - "arrayFilters": [ - { - "i.b": 3 - } - ] - } - }, - "outcome": { - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - }, - "collection": { - "data": [ - { - "_id": 1, - "y": [ - { - "b": 2 - }, - { - "b": 1 - } - ] - }, - { - "_id": 2, - "y": [ - { - "b": 0 - }, - { - "b": 1 - } - ] - }, - { - "_id": 3, - "y": [ - { - "b": 5, - "c": [ - { - "d": 2 - }, - { - "d": 1 - } - ] - } - ] - } - ] - } - } - }, - { - "description": "UpdateOne when multiple documents match arrayFilters", - "operation": { - "name": "updateOne", - "arguments": { - "filter": {}, - "update": { - "$set": { - "y.$[i].b": 2 - } - }, - "arrayFilters": [ - { - "i.b": 1 - } - ] - } - }, - "outcome": { - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - }, - "collection": { - "data": [ - { - "_id": 1, - "y": [ - { - "b": 3 - }, - { - "b": 2 - } - ] - }, - { - "_id": 2, - "y": [ - { - "b": 0 - }, - { - "b": 1 - } - ] - }, - { - "_id": 3, - "y": [ - { - "b": 5, - "c": [ - { - "d": 2 - }, - { - "d": 1 - } - ] - } - ] - } - ] - } - } - }, - { - "description": "UpdateOne when no documents match multiple arrayFilters", - "operation": { - "name": "updateOne", - "arguments": { - "filter": { - "_id": 3 - }, - "update": { - "$set": { - "y.$[i].c.$[j].d": 0 - } - }, - "arrayFilters": [ - { - "i.b": 5 - }, - { - "j.d": 3 - } - ] - } - }, - "outcome": { - "result": { - "matchedCount": 1, - "modifiedCount": 0, - "upsertedCount": 0 - }, - "collection": { - "data": [ - { - "_id": 1, - "y": [ - { - "b": 3 - }, - { - "b": 1 - } - ] - }, - { - "_id": 2, - "y": [ - { - "b": 0 - }, - { - "b": 1 - } - ] - }, - { - "_id": 3, - "y": [ - { - "b": 5, - "c": [ - { - "d": 2 - }, - { - "d": 1 - } - ] - } - ] - } - ] - } - } - }, - { - "description": "UpdateOne when one document matches multiple arrayFilters", - "operation": { - "name": "updateOne", - "arguments": { - "filter": { - "_id": 3 - }, - "update": { - "$set": { - "y.$[i].c.$[j].d": 0 - } - }, - "arrayFilters": [ - { - "i.b": 5 - }, - { - "j.d": 1 - } - ] - } - }, - "outcome": { - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - }, - "collection": { - "data": [ - { - "_id": 1, - "y": [ - { - "b": 3 - }, - { - "b": 1 - } - ] - }, - { - "_id": 2, - "y": [ - { - "b": 0 - }, - { - "b": 1 - } - ] - }, - { - "_id": 3, - "y": [ - { - "b": 5, - "c": [ - { - "d": 2 - }, - { - "d": 0 - } - ] - } - ] - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/write/updateOne-arrayFilters.yml b/testdata/crud/v1/write/updateOne-arrayFilters.yml deleted file mode 100644 index a35e15c687..0000000000 --- a/testdata/crud/v1/write/updateOne-arrayFilters.yml +++ /dev/null @@ -1,114 +0,0 @@ -data: - - {_id: 1, y: [{b: 3}, {b: 1}]} - - {_id: 2, y: [{b: 0}, {b: 1}]} - - {_id: 3, y: [{b: 5, c: [{d: 2}, {d: 1}] }]} -minServerVersion: '3.5.6' - -tests: - - - description: "UpdateOne when no document matches arrayFilters" - operation: - name: "updateOne" - arguments: - filter: {} - update: - $set: {"y.$[i].b": 2} - arrayFilters: - - {i.b: 4} - - outcome: - result: - matchedCount: 1 - modifiedCount: 0 - upsertedCount: 0 - collection: - data: - - {_id: 1, y: [{b: 3}, {b: 1}]} - - {_id: 2, y: [{b: 0}, {b: 1}]} - - {_id: 3, y: [{b: 5, c: [{d: 2}, {d: 1}] }]} - - - description: "UpdateOne when one document matches arrayFilters" - operation: - name: "updateOne" - arguments: - filter: {} - update: - $set: {"y.$[i].b": 2} - arrayFilters: - - {i.b: 3} - - outcome: - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - collection: - data: - - {_id: 1, y: [{b: 2}, {b: 1}]} - - {_id: 2, y: [{b: 0}, {b: 1}]} - - {_id: 3, y: [{b: 5, c: [{d: 2}, {d: 1}] }]} - - - description: "UpdateOne when multiple documents match arrayFilters" - operation: - name: "updateOne" - arguments: - filter: {} - update: - $set: {"y.$[i].b": 2} - arrayFilters: - - {i.b: 1} - - outcome: - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - collection: - data: - - {_id: 1, y: [{b: 3}, {b: 2}]} - - {_id: 2, y: [{b: 0}, {b: 1}]} - - {_id: 3, y: [{b: 5, c: [{d: 2}, {d: 1}] }]} - - - description: "UpdateOne when no documents match multiple arrayFilters" - operation: - name: "updateOne" - arguments: - filter: {_id: 3} - update: - $set: {"y.$[i].c.$[j].d": 0} - arrayFilters: - - {i.b: 5} - - {j.d: 3} - - outcome: - result: - matchedCount: 1 - modifiedCount: 0 - upsertedCount: 0 - collection: - data: - - {_id: 1, y: [{b: 3}, {b: 1}]} - - {_id: 2, y: [{b: 0}, {b: 1}]} - - {_id: 3, y: [{b: 5, c: [{d: 2}, {d: 1}] }]} - - - description: "UpdateOne when one document matches multiple arrayFilters" - operation: - name: "updateOne" - arguments: - filter: {_id: 3} - update: - $set: {"y.$[i].c.$[j].d": 0} - arrayFilters: - - {i.b: 5} - - {j.d: 1} - - outcome: - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - collection: - data: - - {_id: 1, y: [{b: 3}, {b: 1}]} - - {_id: 2, y: [{b: 0}, {b: 1}]} - - {_id: 3, y: [{b: 5, c: [{d: 2}, {d: 0}] }]} diff --git a/testdata/crud/v1/write/updateOne-collation.json b/testdata/crud/v1/write/updateOne-collation.json deleted file mode 100644 index 3afdb83e0f..0000000000 --- a/testdata/crud/v1/write/updateOne-collation.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": "ping" - } - ], - "minServerVersion": "3.4", - "serverless": "forbid", - "tests": [ - { - "description": "UpdateOne when one document matches with collation", - "operation": { - "name": "updateOne", - "arguments": { - "filter": { - "x": "PING" - }, - "update": { - "$set": { - "x": "pong" - } - }, - "collation": { - "locale": "en_US", - "strength": 2 - } - } - }, - "outcome": { - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": "pong" - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/write/updateOne-collation.yml b/testdata/crud/v1/write/updateOne-collation.yml deleted file mode 100644 index c20087176e..0000000000 --- a/testdata/crud/v1/write/updateOne-collation.yml +++ /dev/null @@ -1,26 +0,0 @@ -data: - - {_id: 1, x: 11} - - {_id: 2, x: 'ping'} -minServerVersion: '3.4' -serverless: 'forbid' - -tests: - - - description: "UpdateOne when one document matches with collation" - operation: - name: "updateOne" - arguments: - filter: {x: 'PING'} - update: - $set: {x: 'pong'} - collation: { locale: 'en_US', strength: 2} # https://www.mongodb.com/docs/manual/reference/collation/#collation-document - - outcome: - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 'pong'} diff --git a/testdata/crud/v1/write/updateOne.json b/testdata/crud/v1/write/updateOne.json deleted file mode 100644 index 76d2086bdb..0000000000 --- a/testdata/crud/v1/write/updateOne.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ], - "minServerVersion": "2.6", - "tests": [ - { - "description": "UpdateOne when many documents match", - "operation": { - "name": "updateOne", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - }, - "update": { - "$inc": { - "x": 1 - } - } - } - }, - "outcome": { - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - } - } - }, - { - "description": "UpdateOne when one document matches", - "operation": { - "name": "updateOne", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - } - } - }, - "outcome": { - "result": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedCount": 0 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 12 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "UpdateOne when no documents match", - "operation": { - "name": "updateOne", - "arguments": { - "filter": { - "_id": 4 - }, - "update": { - "$inc": { - "x": 1 - } - } - } - }, - "outcome": { - "result": { - "matchedCount": 0, - "modifiedCount": 0, - "upsertedCount": 0 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - } - }, - { - "description": "UpdateOne with upsert when no documents match", - "operation": { - "name": "updateOne", - "arguments": { - "filter": { - "_id": 4 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "upsert": true - } - }, - "outcome": { - "result": { - "matchedCount": 0, - "modifiedCount": 0, - "upsertedCount": 1, - "upsertedId": 4 - }, - "collection": { - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 1 - } - ] - } - } - } - ] -} diff --git a/testdata/crud/v1/write/updateOne.yml b/testdata/crud/v1/write/updateOne.yml deleted file mode 100644 index 223532feac..0000000000 --- a/testdata/crud/v1/write/updateOne.yml +++ /dev/null @@ -1,84 +0,0 @@ -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} -minServerVersion: '2.6' - -tests: - - - description: "UpdateOne when many documents match" - operation: - name: "updateOne" - arguments: - filter: - _id: {$gt: 1} - update: - $inc: {x: 1} - - outcome: - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - # Can't verify collection data because we don't have a way of - # knowing which document gets updated. - - - description: "UpdateOne when one document matches" - operation: - name: "updateOne" - arguments: - filter: {_id: 1} - update: - $inc: {x: 1} - - outcome: - result: - matchedCount: 1 - modifiedCount: 1 - upsertedCount: 0 - collection: - data: - - {_id: 1, x: 12} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - - description: "UpdateOne when no documents match" - operation: - name: "updateOne" - arguments: - filter: {_id: 4} - update: - $inc: {x: 1} - - outcome: - result: - matchedCount: 0 - modifiedCount: 0 - upsertedCount: 0 - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - - description: "UpdateOne with upsert when no documents match" - operation: - name: "updateOne" - arguments: - filter: {_id: 4} - update: - $inc: {x: 1} - upsert: true - - outcome: - result: - matchedCount: 0 - modifiedCount: 0 - upsertedCount: 1 - upsertedId: 4 - collection: - data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - {_id: 4, x: 1} diff --git a/testdata/extended_bson/deep_bson.json.gz b/testdata/extended_bson/deep_bson.json.gz deleted file mode 100644 index e2588ef533a525d215b0dd604e087565f68fb53d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 616 zcmV-u0+;zAqc9kS_kD^I>pns67-Is4 zUcU0BbEAWp!yrLC4s^*SaZ&Cpf-x5w557+EWBG^;hd~n?3+(5NJ zIedtdRhzRsIGaAhu=j6|C0;ZVX?D<0I^bVwvQQVPyYSSs2ut8xMqglf;|u70$DFB} zUkxZLnSC5~ueOMvwSfwI=PTKeSxddn!kUc|^<|od8jL4J`n%N6AHM;Afz-dO2LJ$6 Ccq|nF diff --git a/testdata/extended_bson/flat_bson.json.gz b/testdata/extended_bson/flat_bson.json.gz deleted file mode 100644 index 124148bf67162d2a58f75312a92121a8aa304230..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5078 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 b&|k&j3SE!K acc + x); }" - }, - "out": { - "inline": 1 - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "mapReduce": "default_write_concern_coll", - "map": { - "$code": "function inc() { return emit(0, this.x + 1) }" - }, - "reduce": { - "$code": "function sum(key, values) { return values.reduce((acc, x) => acc + x); }" - }, - "out": { - "inline": 1 - }, - "writeConcern": null - } - } - } - ] - } - ] -} diff --git a/testdata/read-write-concern/operation/default-write-concern-3.4.yml b/testdata/read-write-concern/operation/default-write-concern-3.4.yml deleted file mode 100644 index c7b586cadc..0000000000 --- a/testdata/read-write-concern/operation/default-write-concern-3.4.yml +++ /dev/null @@ -1,95 +0,0 @@ -# Test that setting a default write concern does not add a write concern -# to the command sent over the wire. -# Test operations that require 3.4+ server, where all commands started -# to accept a write concern. - -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} -collection_name: &collection_name default_write_concern_coll -database_name: &database_name default_write_concern_db - -runOn: - - minServerVersion: "3.4" - -tests: - - description: Aggregate with $out omits default write concern - operations: - - object: collection - collectionOptions: {writeConcern: {}} - name: aggregate - arguments: - pipeline: &out_pipeline - - $match: {_id: {$gt: 1}} - - $out: &other_collection_name "other_collection_name" - outcome: - collection: - name: *other_collection_name - data: - - {_id: 2, x: 22} - expectations: - - command_started_event: - command: - aggregate: *collection_name - pipeline: *out_pipeline - writeConcern: null - - description: RunCommand with a write command omits default write concern (runCommand should never inherit write concern) - operations: - - object: database - databaseOptions: {writeConcern: {}} - name: runCommand - command_name: delete - arguments: - command: - delete: *collection_name - deletes: - - {q: {}, limit: 1} - expectations: - - command_started_event: - command: - delete: *collection_name - deletes: - - {q: {}, limit: 1} - writeConcern: null - - description: CreateIndex and dropIndex omits default write concern - operations: - - object: collection - collectionOptions: {writeConcern: {}} - name: createIndex - arguments: - keys: {x: 1} - - object: collection - collectionOptions: {writeConcern: {}} - name: dropIndex - arguments: - name: x_1 - expectations: - - command_started_event: - command: - createIndexes: *collection_name - indexes: - - name: x_1 - key: {x: 1} - writeConcern: null - - command_started_event: - command: - dropIndexes: *collection_name - index: x_1 - writeConcern: null - - description: MapReduce omits default write concern - operations: - - name: mapReduce - object: collection - collectionOptions: {writeConcern: {}} - arguments: - map: { $code: 'function inc() { return emit(0, this.x + 1) }' } - reduce: { $code: 'function sum(key, values) { return values.reduce((acc, x) => acc + x); }' } - out: { inline: 1 } - expectations: - - command_started_event: - command: - mapReduce: *collection_name - map: { $code: 'function inc() { return emit(0, this.x + 1) }' } - reduce: { $code: 'function sum(key, values) { return values.reduce((acc, x) => acc + x); }' } - out: { inline: 1 } - writeConcern: null \ No newline at end of file diff --git a/testdata/read-write-concern/operation/default-write-concern-4.2.json b/testdata/read-write-concern/operation/default-write-concern-4.2.json deleted file mode 100644 index fef192d1a3..0000000000 --- a/testdata/read-write-concern/operation/default-write-concern-4.2.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ], - "collection_name": "default_write_concern_coll", - "database_name": "default_write_concern_db", - "runOn": [ - { - "minServerVersion": "4.2" - } - ], - "tests": [ - { - "description": "Aggregate with $merge omits default write concern", - "operations": [ - { - "object": "collection", - "databaseOptions": { - "writeConcern": {} - }, - "collectionOptions": { - "writeConcern": {} - }, - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$merge": { - "into": "other_collection_name" - } - } - ] - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "default_write_concern_coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$merge": { - "into": "other_collection_name" - } - } - ], - "writeConcern": null - } - } - } - ], - "outcome": { - "collection": { - "name": "other_collection_name", - "data": [ - { - "_id": 2, - "x": 22 - } - ] - } - } - } - ] -} diff --git a/testdata/read-write-concern/operation/default-write-concern-4.2.yml b/testdata/read-write-concern/operation/default-write-concern-4.2.yml deleted file mode 100644 index 6039b55814..0000000000 --- a/testdata/read-write-concern/operation/default-write-concern-4.2.yml +++ /dev/null @@ -1,36 +0,0 @@ -# Test that setting a default write concern does not add a write concern -# to the command sent over the wire. -# Test operations that require 4.2+ server. - -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} -collection_name: &collection_name default_write_concern_coll -database_name: &database_name default_write_concern_db - -runOn: - - minServerVersion: "4.2" - -tests: - - description: Aggregate with $merge omits default write concern - operations: - - object: collection - databaseOptions: {writeConcern: {}} - collectionOptions: {writeConcern: {}} - name: aggregate - arguments: - pipeline: &merge_pipeline - - $match: {_id: {$gt: 1}} - - $merge: {into: &other_collection_name "other_collection_name" } - expectations: - - command_started_event: - command: - aggregate: *collection_name - pipeline: *merge_pipeline - # "null" fields will be checked for non-existence - writeConcern: null - outcome: - collection: - name: *other_collection_name - data: - - {_id: 2, x: 22} \ No newline at end of file diff --git a/testdata/retryable-reads/legacy/aggregate-merge.json b/testdata/retryable-reads/legacy/aggregate-merge.json deleted file mode 100644 index b401d741ba..0000000000 --- a/testdata/retryable-reads/legacy/aggregate-merge.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.1.11" - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ], - "tests": [ - { - "description": "Aggregate with $merge does not retry", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "closeConnection": true - } - }, - "operations": [ - { - "object": "collection", - "name": "aggregate", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - }, - { - "$merge": { - "into": "output-collection" - } - } - ] - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - }, - { - "$merge": { - "into": "output-collection" - } - } - ] - }, - "command_name": "aggregate", - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/aggregate-merge.yml b/testdata/retryable-reads/legacy/aggregate-merge.yml deleted file mode 100644 index f9913348f4..0000000000 --- a/testdata/retryable-reads/legacy/aggregate-merge.yml +++ /dev/null @@ -1,39 +0,0 @@ -runOn: - - - minServerVersion: "4.1.11" - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - -tests: - - - description: "Aggregate with $merge does not retry" - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [aggregate] - closeConnection: true - operations: - - - object: collection - name: aggregate - arguments: - pipeline: &pipeline - - $match: {_id: {$gt: 1}} - - $sort: {x: 1} - - $merge: { into: "output-collection" } - error: true - expectations: - - - command_started_event: - command: - aggregate: *collection_name - pipeline: *pipeline - command_name: aggregate - database_name: *database_name diff --git a/testdata/retryable-reads/legacy/aggregate-serverErrors.json b/testdata/retryable-reads/legacy/aggregate-serverErrors.json deleted file mode 100644 index 1155f808dc..0000000000 --- a/testdata/retryable-reads/legacy/aggregate-serverErrors.json +++ /dev/null @@ -1,1208 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ], - "tests": [ - { - "description": "Aggregate succeeds after InterruptedAtShutdown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 11600 - } - }, - "operations": [ - { - "name": "aggregate", - "object": "collection", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "result": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Aggregate succeeds after InterruptedDueToReplStateChange", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 11602 - } - }, - "operations": [ - { - "name": "aggregate", - "object": "collection", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "result": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Aggregate succeeds after NotWritablePrimary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "aggregate", - "object": "collection", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "result": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Aggregate succeeds after NotPrimaryNoSecondaryOk", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 13435 - } - }, - "operations": [ - { - "name": "aggregate", - "object": "collection", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "result": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Aggregate succeeds after NotPrimaryOrSecondary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 13436 - } - }, - "operations": [ - { - "name": "aggregate", - "object": "collection", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "result": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Aggregate succeeds after PrimarySteppedDown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 189 - } - }, - "operations": [ - { - "name": "aggregate", - "object": "collection", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "result": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Aggregate succeeds after ShutdownInProgress", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 91 - } - }, - "operations": [ - { - "name": "aggregate", - "object": "collection", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "result": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Aggregate succeeds after HostNotFound", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 7 - } - }, - "operations": [ - { - "name": "aggregate", - "object": "collection", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "result": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Aggregate succeeds after HostUnreachable", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 6 - } - }, - "operations": [ - { - "name": "aggregate", - "object": "collection", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "result": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Aggregate succeeds after NetworkTimeout", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 89 - } - }, - "operations": [ - { - "name": "aggregate", - "object": "collection", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "result": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Aggregate succeeds after SocketException", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 9001 - } - }, - "operations": [ - { - "name": "aggregate", - "object": "collection", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "result": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Aggregate fails after two NotWritablePrimary errors", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "aggregate", - "object": "collection", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Aggregate fails after NotWritablePrimary when retryReads is false", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "aggregate", - "object": "collection", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/aggregate-serverErrors.yml b/testdata/retryable-reads/legacy/aggregate-serverErrors.yml deleted file mode 100644 index bf9fc01892..0000000000 --- a/testdata/retryable-reads/legacy/aggregate-serverErrors.yml +++ /dev/null @@ -1,157 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - -tests: - - - description: "Aggregate succeeds after InterruptedAtShutdown" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: { failCommands: [aggregate], errorCode: 11600 } - operations: - - &retryable_operation_succeeds - <<: &retryable_operation - name: aggregate - object: collection - arguments: - pipeline: - - $match: - _id: {$gt: 1} - - $sort: {x: 1} - result: - - {_id: 2, x: 22} - - {_id: 3, x: 33} - expectations: - - &retryable_command_started_event - command_started_event: - command: - aggregate: *collection_name - pipeline: [{$match: {_id: {$gt: 1}}}, {$sort: {x: 1}}] - database_name: *database_name - - *retryable_command_started_event - - - description: "Aggregate succeeds after InterruptedDueToReplStateChange" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 11602 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Aggregate succeeds after NotWritablePrimary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 10107 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Aggregate succeeds after NotPrimaryNoSecondaryOk" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 13435 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Aggregate succeeds after NotPrimaryOrSecondary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 13436 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Aggregate succeeds after PrimarySteppedDown" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 189 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Aggregate succeeds after ShutdownInProgress" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 91 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Aggregate succeeds after HostNotFound" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 7 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Aggregate succeeds after HostUnreachable" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 6 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Aggregate succeeds after NetworkTimeout" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 89 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Aggregate succeeds after SocketException" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 9001 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Aggregate fails after two NotWritablePrimary errors" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - data: { failCommands: [aggregate], errorCode: 10107 } - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Aggregate fails after NotWritablePrimary when retryReads is false" - clientOptions: - retryReads: false - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 10107 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event diff --git a/testdata/retryable-reads/legacy/aggregate.json b/testdata/retryable-reads/legacy/aggregate.json deleted file mode 100644 index f23d5c6793..0000000000 --- a/testdata/retryable-reads/legacy/aggregate.json +++ /dev/null @@ -1,406 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ], - "tests": [ - { - "description": "Aggregate succeeds on first attempt", - "operations": [ - { - "name": "aggregate", - "object": "collection", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "result": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Aggregate succeeds on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "aggregate", - "object": "collection", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "result": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Aggregate fails on first attempt", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "aggregate", - "object": "collection", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Aggregate fails on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "aggregate", - "object": "collection", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Aggregate with $out does not retry", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "aggregate", - "object": "collection", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - }, - { - "$out": "output-collection" - } - ] - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": { - "_id": { - "$gt": 1 - } - } - }, - { - "$sort": { - "x": 1 - } - }, - { - "$out": "output-collection" - } - ] - }, - "command_name": "aggregate", - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/aggregate.yml b/testdata/retryable-reads/legacy/aggregate.yml deleted file mode 100644 index de9c0d7069..0000000000 --- a/testdata/retryable-reads/legacy/aggregate.yml +++ /dev/null @@ -1,87 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - -tests: - - - description: "Aggregate succeeds on first attempt" - operations: - - &retryable_operation_succeeds - <<: &retryable_operation - name: aggregate - object: collection - arguments: - pipeline: - - $match: {_id: {$gt: 1}} - - $sort: {x: 1} - result: - - {_id: 2, x: 22} - - {_id: 3, x: 33} - expectations: - - &retryable_command_started_event - command_started_event: - command: - aggregate: *collection_name - pipeline: [{$match: {_id: {$gt: 1}}}, {$sort: {x: 1}}] - database_name: *database_name - - - description: "Aggregate succeeds on second attempt" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [aggregate] - closeConnection: true - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Aggregate fails on first attempt" - clientOptions: - retryReads: false - failPoint: *failCommand_failPoint - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - - description: "Aggregate fails on second attempt" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Aggregate with $out does not retry" - failPoint: *failCommand_failPoint - operations: - - <<: *retryable_operation_fails - arguments: - pipeline: - - $match: {_id: {$gt: 1}} - - $sort: {x: 1} - - $out: "output-collection" - expectations: - - command_started_event: - command: - aggregate: *collection_name - pipeline: [{$match: {_id: {$gt: 1}}}, {$sort: {x: 1}}, {$out: 'output-collection'}] - command_name: aggregate - database_name: *database_name diff --git a/testdata/retryable-reads/legacy/changeStreams-client.watch-serverErrors.json b/testdata/retryable-reads/legacy/changeStreams-client.watch-serverErrors.json deleted file mode 100644 index 73dbfee916..0000000000 --- a/testdata/retryable-reads/legacy/changeStreams-client.watch-serverErrors.json +++ /dev/null @@ -1,740 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ], - "serverless": "forbid" - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ], - "tests": [ - { - "description": "client.watch succeeds after InterruptedAtShutdown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 11600 - } - }, - "operations": [ - { - "name": "watch", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - } - ] - }, - { - "description": "client.watch succeeds after InterruptedDueToReplStateChange", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 11602 - } - }, - "operations": [ - { - "name": "watch", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - } - ] - }, - { - "description": "client.watch succeeds after NotWritablePrimary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "watch", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - } - ] - }, - { - "description": "client.watch succeeds after NotPrimaryNoSecondaryOk", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 13435 - } - }, - "operations": [ - { - "name": "watch", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - } - ] - }, - { - "description": "client.watch succeeds after NotPrimaryOrSecondary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 13436 - } - }, - "operations": [ - { - "name": "watch", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - } - ] - }, - { - "description": "client.watch succeeds after PrimarySteppedDown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 189 - } - }, - "operations": [ - { - "name": "watch", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - } - ] - }, - { - "description": "client.watch succeeds after ShutdownInProgress", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 91 - } - }, - "operations": [ - { - "name": "watch", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - } - ] - }, - { - "description": "client.watch succeeds after HostNotFound", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 7 - } - }, - "operations": [ - { - "name": "watch", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - } - ] - }, - { - "description": "client.watch succeeds after HostUnreachable", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 6 - } - }, - "operations": [ - { - "name": "watch", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - } - ] - }, - { - "description": "client.watch succeeds after NetworkTimeout", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 89 - } - }, - "operations": [ - { - "name": "watch", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - } - ] - }, - { - "description": "client.watch succeeds after SocketException", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 9001 - } - }, - "operations": [ - { - "name": "watch", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - } - ] - }, - { - "description": "client.watch fails after two NotWritablePrimary errors", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "watch", - "object": "client", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - } - ] - }, - { - "description": "client.watch fails after NotWritablePrimary when retryReads is false", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "watch", - "object": "client", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/changeStreams-client.watch-serverErrors.yml b/testdata/retryable-reads/legacy/changeStreams-client.watch-serverErrors.yml deleted file mode 100644 index a1f1069643..0000000000 --- a/testdata/retryable-reads/legacy/changeStreams-client.watch-serverErrors.yml +++ /dev/null @@ -1,150 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - serverless: "forbid" - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - -tests: - - - description: "client.watch succeeds after InterruptedAtShutdown" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: { failCommands: [aggregate], errorCode: 11600 } - operations: - - &retryable_operation - name: watch - object: client - expectations: - - &retryable_command_started_event - command_started_event: - command: - aggregate: 1 - cursor: {} - pipeline: [ { $changeStream: { allChangesForCluster: true } } ] - database_name: admin - - *retryable_command_started_event - - - description: "client.watch succeeds after InterruptedDueToReplStateChange" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 11602 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "client.watch succeeds after NotWritablePrimary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 10107 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "client.watch succeeds after NotPrimaryNoSecondaryOk" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 13435 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "client.watch succeeds after NotPrimaryOrSecondary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 13436 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "client.watch succeeds after PrimarySteppedDown" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 189 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "client.watch succeeds after ShutdownInProgress" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 91 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "client.watch succeeds after HostNotFound" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 7 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "client.watch succeeds after HostUnreachable" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 6 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "client.watch succeeds after NetworkTimeout" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 89 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "client.watch succeeds after SocketException" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 9001 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "client.watch fails after two NotWritablePrimary errors" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - data: { failCommands: [aggregate], errorCode: 10107 } - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "client.watch fails after NotWritablePrimary when retryReads is false" - clientOptions: - retryReads: false - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 10107 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event diff --git a/testdata/retryable-reads/legacy/changeStreams-client.watch.json b/testdata/retryable-reads/legacy/changeStreams-client.watch.json deleted file mode 100644 index 30a53037ad..0000000000 --- a/testdata/retryable-reads/legacy/changeStreams-client.watch.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ], - "serverless": "forbid" - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [ - { - "_id": 1, - "x": 11 - } - ], - "tests": [ - { - "description": "client.watch succeeds on first attempt", - "operations": [ - { - "name": "watch", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - } - ] - }, - { - "description": "client.watch succeeds on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "watch", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - } - ] - }, - { - "description": "client.watch fails on first attempt", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "watch", - "object": "client", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - } - ] - }, - { - "description": "client.watch fails on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "watch", - "object": "client", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": { - "allChangesForCluster": true - } - } - ] - }, - "database_name": "admin" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/changeStreams-client.watch.yml b/testdata/retryable-reads/legacy/changeStreams-client.watch.yml deleted file mode 100644 index ea7f7e069a..0000000000 --- a/testdata/retryable-reads/legacy/changeStreams-client.watch.yml +++ /dev/null @@ -1,62 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - serverless: "forbid" - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: - - {_id: 1, x: 11} - -tests: - - - description: "client.watch succeeds on first attempt" - operations: - - &retryable_operation - name: watch - object: client - expectations: - - &retryable_command_started_event - command_started_event: - command: - aggregate: 1 - cursor: {} - pipeline: [ { $changeStream: { "allChangesForCluster": true } } ] - database_name: admin - - - description: "client.watch succeeds on second attempt" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [aggregate] - closeConnection: true - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "client.watch fails on first attempt" - clientOptions: - retryReads: false - failPoint: *failCommand_failPoint - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - - description: "client.watch fails on second attempt" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event diff --git a/testdata/retryable-reads/legacy/changeStreams-db.coll.watch-serverErrors.json b/testdata/retryable-reads/legacy/changeStreams-db.coll.watch-serverErrors.json deleted file mode 100644 index 77b3af04f4..0000000000 --- a/testdata/retryable-reads/legacy/changeStreams-db.coll.watch-serverErrors.json +++ /dev/null @@ -1,690 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ], - "serverless": "forbid" - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ], - "tests": [ - { - "description": "db.coll.watch succeeds after InterruptedAtShutdown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 11600 - } - }, - "operations": [ - { - "name": "watch", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.coll.watch succeeds after InterruptedDueToReplStateChange", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 11602 - } - }, - "operations": [ - { - "name": "watch", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.coll.watch succeeds after NotWritablePrimary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "watch", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.coll.watch succeeds after NotPrimaryNoSecondaryOk", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 13435 - } - }, - "operations": [ - { - "name": "watch", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.coll.watch succeeds after NotPrimaryOrSecondary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 13436 - } - }, - "operations": [ - { - "name": "watch", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.coll.watch succeeds after PrimarySteppedDown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 189 - } - }, - "operations": [ - { - "name": "watch", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.coll.watch succeeds after ShutdownInProgress", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 91 - } - }, - "operations": [ - { - "name": "watch", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.coll.watch succeeds after HostNotFound", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 7 - } - }, - "operations": [ - { - "name": "watch", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.coll.watch succeeds after HostUnreachable", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 6 - } - }, - "operations": [ - { - "name": "watch", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.coll.watch succeeds after NetworkTimeout", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 89 - } - }, - "operations": [ - { - "name": "watch", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.coll.watch succeeds after SocketException", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 9001 - } - }, - "operations": [ - { - "name": "watch", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.coll.watch fails after two NotWritablePrimary errors", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "watch", - "object": "collection", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.coll.watch fails after NotWritablePrimary when retryReads is false", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "watch", - "object": "collection", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/changeStreams-db.coll.watch-serverErrors.yml b/testdata/retryable-reads/legacy/changeStreams-db.coll.watch-serverErrors.yml deleted file mode 100644 index 4e4bb4a1b7..0000000000 --- a/testdata/retryable-reads/legacy/changeStreams-db.coll.watch-serverErrors.yml +++ /dev/null @@ -1,150 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - serverless: "forbid" - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - -tests: - - - description: "db.coll.watch succeeds after InterruptedAtShutdown" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: { failCommands: [aggregate], errorCode: 11600 } - operations: - - &retryable_operation - name: watch - object: collection - expectations: - - &retryable_command_started_event - command_started_event: - command: - aggregate: *collection_name - cursor: {} - pipeline: [ { $changeStream: { } } ] - database_name: *database_name - - *retryable_command_started_event - - - description: "db.coll.watch succeeds after InterruptedDueToReplStateChange" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 11602 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "db.coll.watch succeeds after NotWritablePrimary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 10107 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "db.coll.watch succeeds after NotPrimaryNoSecondaryOk" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 13435 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "db.coll.watch succeeds after NotPrimaryOrSecondary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 13436 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "db.coll.watch succeeds after PrimarySteppedDown" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 189 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "db.coll.watch succeeds after ShutdownInProgress" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 91 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "db.coll.watch succeeds after HostNotFound" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 7 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "db.coll.watch succeeds after HostUnreachable" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 6 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "db.coll.watch succeeds after NetworkTimeout" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 89 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "db.coll.watch succeeds after SocketException" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 9001 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "db.coll.watch fails after two NotWritablePrimary errors" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - data: { failCommands: [aggregate], errorCode: 10107 } - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "db.coll.watch fails after NotWritablePrimary when retryReads is false" - clientOptions: - retryReads: false - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 10107 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event diff --git a/testdata/retryable-reads/legacy/changeStreams-db.coll.watch.json b/testdata/retryable-reads/legacy/changeStreams-db.coll.watch.json deleted file mode 100644 index 27f6105a4b..0000000000 --- a/testdata/retryable-reads/legacy/changeStreams-db.coll.watch.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ], - "serverless": "forbid" - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [ - { - "_id": 1, - "x": 11 - } - ], - "tests": [ - { - "description": "db.coll.watch succeeds on first attempt", - "operations": [ - { - "name": "watch", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.coll.watch succeeds on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "watch", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.coll.watch fails on first attempt", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "watch", - "object": "collection", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.coll.watch fails on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "watch", - "object": "collection", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/changeStreams-db.coll.watch.yml b/testdata/retryable-reads/legacy/changeStreams-db.coll.watch.yml deleted file mode 100644 index c8334b1a99..0000000000 --- a/testdata/retryable-reads/legacy/changeStreams-db.coll.watch.yml +++ /dev/null @@ -1,66 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - serverless: "forbid" - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: - - {_id: 1, x: 11} - -tests: - - - description: "db.coll.watch succeeds on first attempt" - operations: - - &retryable_operation - name: watch - object: collection - expectations: - - &retryable_command_started_event - command_started_event: - command: - aggregate: *collection_name - cursor: {} - pipeline: [ { $changeStream: { } } ] - database_name: *database_name - - - description: "db.coll.watch succeeds on second attempt" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: - - aggregate - closeConnection: true - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "db.coll.watch fails on first attempt" - clientOptions: - retryReads: false - failPoint: *failCommand_failPoint - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - - description: "db.coll.watch fails on second attempt" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - diff --git a/testdata/retryable-reads/legacy/changeStreams-db.watch-serverErrors.json b/testdata/retryable-reads/legacy/changeStreams-db.watch-serverErrors.json deleted file mode 100644 index 7a87534508..0000000000 --- a/testdata/retryable-reads/legacy/changeStreams-db.watch-serverErrors.json +++ /dev/null @@ -1,690 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ], - "serverless": "forbid" - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ], - "tests": [ - { - "description": "db.watch succeeds after InterruptedAtShutdown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 11600 - } - }, - "operations": [ - { - "name": "watch", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.watch succeeds after InterruptedDueToReplStateChange", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 11602 - } - }, - "operations": [ - { - "name": "watch", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.watch succeeds after NotWritablePrimary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "watch", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.watch succeeds after NotPrimaryNoSecondaryOk", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 13435 - } - }, - "operations": [ - { - "name": "watch", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.watch succeeds after NotPrimaryOrSecondary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 13436 - } - }, - "operations": [ - { - "name": "watch", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.watch succeeds after PrimarySteppedDown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 189 - } - }, - "operations": [ - { - "name": "watch", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.watch succeeds after ShutdownInProgress", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 91 - } - }, - "operations": [ - { - "name": "watch", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.watch succeeds after HostNotFound", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 7 - } - }, - "operations": [ - { - "name": "watch", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.watch succeeds after HostUnreachable", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 6 - } - }, - "operations": [ - { - "name": "watch", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.watch succeeds after NetworkTimeout", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 89 - } - }, - "operations": [ - { - "name": "watch", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.watch succeeds after SocketException", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 9001 - } - }, - "operations": [ - { - "name": "watch", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.watch fails after two NotWritablePrimary errors", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "watch", - "object": "database", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.watch fails after NotWritablePrimary when retryReads is false", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "watch", - "object": "database", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/changeStreams-db.watch-serverErrors.yml b/testdata/retryable-reads/legacy/changeStreams-db.watch-serverErrors.yml deleted file mode 100644 index a527935bae..0000000000 --- a/testdata/retryable-reads/legacy/changeStreams-db.watch-serverErrors.yml +++ /dev/null @@ -1,154 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - serverless: "forbid" - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - -tests: - - - description: "db.watch succeeds after InterruptedAtShutdown" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: { failCommands: [aggregate], errorCode: 11600 } - operations: - - &retryable_operation - name: watch - object: database - expectations: - - &retryable_command_started_event - command_started_event: - command: - aggregate: 1 - cursor: {} - pipeline: [ { $changeStream: { } } ] - database_name: *database_name - - *retryable_command_started_event - - - description: "db.watch succeeds after InterruptedDueToReplStateChange" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 11602 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "db.watch succeeds after NotWritablePrimary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 10107 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "db.watch succeeds after NotPrimaryNoSecondaryOk" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 13435 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "db.watch succeeds after NotPrimaryOrSecondary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 13436 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "db.watch succeeds after PrimarySteppedDown" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 189 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "db.watch succeeds after ShutdownInProgress" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 91 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "db.watch succeeds after HostNotFound" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 7 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "db.watch succeeds after HostUnreachable" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 6 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "db.watch succeeds after NetworkTimeout" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 89 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "db.watch succeeds after SocketException" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 9001 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "db.watch fails after two NotWritablePrimary errors" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - data: { failCommands: [aggregate], errorCode: 10107 } - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "db.watch fails after NotWritablePrimary when retryReads is false" - clientOptions: - retryReads: false - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 10107 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - - - - diff --git a/testdata/retryable-reads/legacy/changeStreams-db.watch.json b/testdata/retryable-reads/legacy/changeStreams-db.watch.json deleted file mode 100644 index e6b0b9b781..0000000000 --- a/testdata/retryable-reads/legacy/changeStreams-db.watch.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ], - "serverless": "forbid" - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [ - { - "_id": 1, - "x": 11 - } - ], - "tests": [ - { - "description": "db.watch succeeds on first attempt", - "operations": [ - { - "name": "watch", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.watch succeeds on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "watch", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.watch fails on first attempt", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "watch", - "object": "database", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "db.watch fails on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "watch", - "object": "database", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": 1, - "cursor": {}, - "pipeline": [ - { - "$changeStream": {} - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/changeStreams-db.watch.yml b/testdata/retryable-reads/legacy/changeStreams-db.watch.yml deleted file mode 100644 index e2ceacbb66..0000000000 --- a/testdata/retryable-reads/legacy/changeStreams-db.watch.yml +++ /dev/null @@ -1,62 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - serverless: "forbid" - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: - - {_id: 1, x: 11} - -tests: - - - description: "db.watch succeeds on first attempt" - operations: - - &retryable_operation - name: watch - object: database - expectations: - - &retryable_command_started_event - command_started_event: - command: - aggregate: 1 - cursor: {} - pipeline: [ { $changeStream: { } } ] - database_name: *database_name - - - description: "db.watch succeeds on second attempt" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [aggregate] - closeConnection: true - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "db.watch fails on first attempt" - clientOptions: - retryReads: false - failPoint: *failCommand_failPoint - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - - description: "db.watch fails on second attempt" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event diff --git a/testdata/retryable-reads/legacy/count-serverErrors.json b/testdata/retryable-reads/legacy/count-serverErrors.json deleted file mode 100644 index 36a0c17cab..0000000000 --- a/testdata/retryable-reads/legacy/count-serverErrors.json +++ /dev/null @@ -1,586 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ], - "tests": [ - { - "description": "Count succeeds after InterruptedAtShutdown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 11600 - } - }, - "operations": [ - { - "name": "count", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Count succeeds after InterruptedDueToReplStateChange", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 11602 - } - }, - "operations": [ - { - "name": "count", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Count succeeds after NotWritablePrimary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "count", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Count succeeds after NotPrimaryNoSecondaryOk", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 13435 - } - }, - "operations": [ - { - "name": "count", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Count succeeds after NotPrimaryOrSecondary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 13436 - } - }, - "operations": [ - { - "name": "count", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Count succeeds after PrimarySteppedDown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 189 - } - }, - "operations": [ - { - "name": "count", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Count succeeds after ShutdownInProgress", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 91 - } - }, - "operations": [ - { - "name": "count", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Count succeeds after HostNotFound", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 7 - } - }, - "operations": [ - { - "name": "count", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Count succeeds after HostUnreachable", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 6 - } - }, - "operations": [ - { - "name": "count", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Count succeeds after NetworkTimeout", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 89 - } - }, - "operations": [ - { - "name": "count", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Count succeeds after SocketException", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 9001 - } - }, - "operations": [ - { - "name": "count", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Count fails after two NotWritablePrimary errors", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "count", - "object": "collection", - "arguments": { - "filter": {} - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Count fails after NotWritablePrimary when retryReads is false", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "count", - "object": "collection", - "arguments": { - "filter": {} - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/count-serverErrors.yml b/testdata/retryable-reads/legacy/count-serverErrors.yml deleted file mode 100644 index 48ceaea68b..0000000000 --- a/testdata/retryable-reads/legacy/count-serverErrors.yml +++ /dev/null @@ -1,150 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - -tests: - - - description: "Count succeeds after InterruptedAtShutdown" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: { failCommands: [count], errorCode: 11600 } - operations: - - &retryable_operation_succeeds - <<: &retryable_operation - name: count - object: collection - arguments: { filter: { } } - result: 2 - expectations: - - &retryable_command_started_event - command_started_event: - command: - count: *collection_name - database_name: *database_name - - *retryable_command_started_event - - - description: "Count succeeds after InterruptedDueToReplStateChange" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [count], errorCode: 11602 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Count succeeds after NotWritablePrimary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [count], errorCode: 10107 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Count succeeds after NotPrimaryNoSecondaryOk" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [count], errorCode: 13435 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Count succeeds after NotPrimaryOrSecondary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [count], errorCode: 13436 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Count succeeds after PrimarySteppedDown" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [count], errorCode: 189 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Count succeeds after ShutdownInProgress" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [count], errorCode: 91 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Count succeeds after HostNotFound" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [count], errorCode: 7 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Count succeeds after HostUnreachable" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [count], errorCode: 6 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Count succeeds after NetworkTimeout" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [count], errorCode: 89 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Count succeeds after SocketException" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [count], errorCode: 9001 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Count fails after two NotWritablePrimary errors" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - data: { failCommands: [count], errorCode: 10107 } - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Count fails after NotWritablePrimary when retryReads is false" - clientOptions: - retryReads: false - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [count], errorCode: 10107 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - diff --git a/testdata/retryable-reads/legacy/count.json b/testdata/retryable-reads/legacy/count.json deleted file mode 100644 index 139a545131..0000000000 --- a/testdata/retryable-reads/legacy/count.json +++ /dev/null @@ -1,179 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ], - "tests": [ - { - "description": "Count succeeds on first attempt", - "operations": [ - { - "name": "count", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Count succeeds on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "count", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Count fails on first attempt", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "count", - "object": "collection", - "arguments": { - "filter": {} - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Count fails on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "count" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "count", - "object": "collection", - "arguments": { - "filter": {} - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/count.yml b/testdata/retryable-reads/legacy/count.yml deleted file mode 100644 index c9c3936b6b..0000000000 --- a/testdata/retryable-reads/legacy/count.yml +++ /dev/null @@ -1,64 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - -tests: - - - description: "Count succeeds on first attempt" - operations: - - &retryable_operation_succeeds - <<: &retryable_operation - name: count - object: collection - arguments: { filter: { } } - result: 2 - expectations: - - &retryable_command_started_event - command_started_event: - command: - count: *collection_name - database_name: *database_name - - - description: "Count succeeds on second attempt" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [count] - closeConnection: true - - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Count fails on first attempt" - clientOptions: - retryReads: false - failPoint: *failCommand_failPoint - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - - description: "Count fails on second attempt" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event diff --git a/testdata/retryable-reads/legacy/countDocuments-serverErrors.json b/testdata/retryable-reads/legacy/countDocuments-serverErrors.json deleted file mode 100644 index 782ea5e4f1..0000000000 --- a/testdata/retryable-reads/legacy/countDocuments-serverErrors.json +++ /dev/null @@ -1,911 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ], - "tests": [ - { - "description": "CountDocuments succeeds after InterruptedAtShutdown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 11600 - } - }, - "operations": [ - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "CountDocuments succeeds after InterruptedDueToReplStateChange", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 11602 - } - }, - "operations": [ - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "CountDocuments succeeds after NotWritablePrimary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "CountDocuments succeeds after NotPrimaryNoSecondaryOk", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 13435 - } - }, - "operations": [ - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "CountDocuments succeeds after NotPrimaryOrSecondary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 13436 - } - }, - "operations": [ - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "CountDocuments succeeds after PrimarySteppedDown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 189 - } - }, - "operations": [ - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "CountDocuments succeeds after ShutdownInProgress", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 91 - } - }, - "operations": [ - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "CountDocuments succeeds after HostNotFound", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 7 - } - }, - "operations": [ - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "CountDocuments succeeds after HostUnreachable", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 6 - } - }, - "operations": [ - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "CountDocuments succeeds after NetworkTimeout", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 89 - } - }, - "operations": [ - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "CountDocuments succeeds after SocketException", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 9001 - } - }, - "operations": [ - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "CountDocuments fails after two NotWritablePrimary errors", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "filter": {} - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "CountDocuments fails after NotWritablePrimary when retryReads is false", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "filter": {} - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/countDocuments-serverErrors.yml b/testdata/retryable-reads/legacy/countDocuments-serverErrors.yml deleted file mode 100644 index 4ffb9a05b5..0000000000 --- a/testdata/retryable-reads/legacy/countDocuments-serverErrors.yml +++ /dev/null @@ -1,150 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - -tests: - - - description: "CountDocuments succeeds after InterruptedAtShutdown" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: { failCommands: [aggregate], errorCode: 11600 } - operations: - - &retryable_operation_succeeds - <<: &retryable_operation - name: countDocuments - object: collection - arguments: { filter: { } } - result: 2 - expectations: - - &retryable_command_started_event - command_started_event: - command: - aggregate: *collection_name - pipeline: [{'$match': {}}, {'$group': {'_id': 1, 'n': {'$sum': 1}}}] - database_name: *database_name - - *retryable_command_started_event - - - description: "CountDocuments succeeds after InterruptedDueToReplStateChange" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 11602 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "CountDocuments succeeds after NotWritablePrimary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 10107 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "CountDocuments succeeds after NotPrimaryNoSecondaryOk" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 13435 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "CountDocuments succeeds after NotPrimaryOrSecondary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 13436 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "CountDocuments succeeds after PrimarySteppedDown" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 189 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "CountDocuments succeeds after ShutdownInProgress" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 91 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "CountDocuments succeeds after HostNotFound" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 7 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "CountDocuments succeeds after HostUnreachable" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 6 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "CountDocuments succeeds after NetworkTimeout" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 89 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "CountDocuments succeeds after SocketException" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 9001 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "CountDocuments fails after two NotWritablePrimary errors" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - data: { failCommands: [aggregate], errorCode: 10107 } - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "CountDocuments fails after NotWritablePrimary when retryReads is false" - clientOptions: - retryReads: false - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [aggregate], errorCode: 10107 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event diff --git a/testdata/retryable-reads/legacy/countDocuments.json b/testdata/retryable-reads/legacy/countDocuments.json deleted file mode 100644 index 57a64e45b7..0000000000 --- a/testdata/retryable-reads/legacy/countDocuments.json +++ /dev/null @@ -1,257 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ], - "tests": [ - { - "description": "CountDocuments succeeds on first attempt", - "operations": [ - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "CountDocuments succeeds on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "filter": {} - }, - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "CountDocuments fails on first attempt", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "filter": {} - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "CountDocuments fails on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "countDocuments", - "object": "collection", - "arguments": { - "filter": {} - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "aggregate": "coll", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ] - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/countDocuments.yml b/testdata/retryable-reads/legacy/countDocuments.yml deleted file mode 100644 index 9e2565129c..0000000000 --- a/testdata/retryable-reads/legacy/countDocuments.yml +++ /dev/null @@ -1,64 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - -tests: - - - description: "CountDocuments succeeds on first attempt" - operations: - - &retryable_operation_succeeds - <<: &retryable_operation - name: countDocuments - object: collection - arguments: { filter: { } } - result: 2 - expectations: - - &retryable_command_started_event - command_started_event: - command: - aggregate: *collection_name - pipeline: [{'$match': {}}, {'$group': {'_id': 1, 'n': {'$sum': 1}}}] - database_name: *database_name - - - description: "CountDocuments succeeds on second attempt" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [aggregate] - closeConnection: true - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "CountDocuments fails on first attempt" - clientOptions: - retryReads: false - failPoint: *failCommand_failPoint - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - - description: "CountDocuments fails on second attempt" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event diff --git a/testdata/retryable-reads/legacy/distinct-serverErrors.json b/testdata/retryable-reads/legacy/distinct-serverErrors.json deleted file mode 100644 index d7c6018a62..0000000000 --- a/testdata/retryable-reads/legacy/distinct-serverErrors.json +++ /dev/null @@ -1,838 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ], - "tests": [ - { - "description": "Distinct succeeds after InterruptedAtShutdown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "distinct" - ], - "errorCode": 11600 - } - }, - "operations": [ - { - "name": "distinct", - "object": "collection", - "arguments": { - "fieldName": "x", - "filter": { - "_id": { - "$gt": 1 - } - } - }, - "result": [ - 22, - 33 - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Distinct succeeds after InterruptedDueToReplStateChange", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "distinct" - ], - "errorCode": 11602 - } - }, - "operations": [ - { - "name": "distinct", - "object": "collection", - "arguments": { - "fieldName": "x", - "filter": { - "_id": { - "$gt": 1 - } - } - }, - "result": [ - 22, - 33 - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Distinct succeeds after NotWritablePrimary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "distinct" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "distinct", - "object": "collection", - "arguments": { - "fieldName": "x", - "filter": { - "_id": { - "$gt": 1 - } - } - }, - "result": [ - 22, - 33 - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Distinct succeeds after NotPrimaryNoSecondaryOk", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "distinct" - ], - "errorCode": 13435 - } - }, - "operations": [ - { - "name": "distinct", - "object": "collection", - "arguments": { - "fieldName": "x", - "filter": { - "_id": { - "$gt": 1 - } - } - }, - "result": [ - 22, - 33 - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Distinct succeeds after NotPrimaryOrSecondary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "distinct" - ], - "errorCode": 13436 - } - }, - "operations": [ - { - "name": "distinct", - "object": "collection", - "arguments": { - "fieldName": "x", - "filter": { - "_id": { - "$gt": 1 - } - } - }, - "result": [ - 22, - 33 - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Distinct succeeds after PrimarySteppedDown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "distinct" - ], - "errorCode": 189 - } - }, - "operations": [ - { - "name": "distinct", - "object": "collection", - "arguments": { - "fieldName": "x", - "filter": { - "_id": { - "$gt": 1 - } - } - }, - "result": [ - 22, - 33 - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Distinct succeeds after ShutdownInProgress", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "distinct" - ], - "errorCode": 91 - } - }, - "operations": [ - { - "name": "distinct", - "object": "collection", - "arguments": { - "fieldName": "x", - "filter": { - "_id": { - "$gt": 1 - } - } - }, - "result": [ - 22, - 33 - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Distinct succeeds after HostNotFound", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "distinct" - ], - "errorCode": 7 - } - }, - "operations": [ - { - "name": "distinct", - "object": "collection", - "arguments": { - "fieldName": "x", - "filter": { - "_id": { - "$gt": 1 - } - } - }, - "result": [ - 22, - 33 - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Distinct succeeds after HostUnreachable", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "distinct" - ], - "errorCode": 6 - } - }, - "operations": [ - { - "name": "distinct", - "object": "collection", - "arguments": { - "fieldName": "x", - "filter": { - "_id": { - "$gt": 1 - } - } - }, - "result": [ - 22, - 33 - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Distinct succeeds after NetworkTimeout", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "distinct" - ], - "errorCode": 89 - } - }, - "operations": [ - { - "name": "distinct", - "object": "collection", - "arguments": { - "fieldName": "x", - "filter": { - "_id": { - "$gt": 1 - } - } - }, - "result": [ - 22, - 33 - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Distinct succeeds after SocketException", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "distinct" - ], - "errorCode": 9001 - } - }, - "operations": [ - { - "name": "distinct", - "object": "collection", - "arguments": { - "fieldName": "x", - "filter": { - "_id": { - "$gt": 1 - } - } - }, - "result": [ - 22, - 33 - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Distinct fails after two NotWritablePrimary errors", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "distinct" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "distinct", - "object": "collection", - "arguments": { - "fieldName": "x", - "filter": { - "_id": { - "$gt": 1 - } - } - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Distinct fails after NotWritablePrimary when retryReads is false", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "distinct" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "distinct", - "object": "collection", - "arguments": { - "fieldName": "x", - "filter": { - "_id": { - "$gt": 1 - } - } - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/distinct-serverErrors.yml b/testdata/retryable-reads/legacy/distinct-serverErrors.yml deleted file mode 100644 index d4bc118ff6..0000000000 --- a/testdata/retryable-reads/legacy/distinct-serverErrors.yml +++ /dev/null @@ -1,156 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - -tests: - - - description: "Distinct succeeds after InterruptedAtShutdown" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: { failCommands: [distinct], errorCode: 11600 } - operations: - - &retryable_operation_succeeds - <<: &retryable_operation - name: distinct - object: collection - arguments: { fieldName: "x", filter: { _id: { $gt: 1 } } } - result: - - 22 - - 33 - expectations: - - &retryable_command_started_event - command_started_event: - command: - distinct: *collection_name - key: "x" - query: - _id: {$gt: 1} - database_name: *database_name - - *retryable_command_started_event - - - description: "Distinct succeeds after InterruptedDueToReplStateChange" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [distinct], errorCode: 11602 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Distinct succeeds after NotWritablePrimary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [distinct], errorCode: 10107 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Distinct succeeds after NotPrimaryNoSecondaryOk" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [distinct], errorCode: 13435 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Distinct succeeds after NotPrimaryOrSecondary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [distinct], errorCode: 13436 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Distinct succeeds after PrimarySteppedDown" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [distinct], errorCode: 189 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Distinct succeeds after ShutdownInProgress" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [distinct], errorCode: 91 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Distinct succeeds after HostNotFound" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [distinct], errorCode: 7 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Distinct succeeds after HostUnreachable" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [distinct], errorCode: 6 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Distinct succeeds after NetworkTimeout" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [distinct], errorCode: 89 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Distinct succeeds after SocketException" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [distinct], errorCode: 9001 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Distinct fails after two NotWritablePrimary errors" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - data: { failCommands: [distinct], errorCode: 10107 } - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Distinct fails after NotWritablePrimary when retryReads is false" - clientOptions: - retryReads: false - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [distinct], errorCode: 10107 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - diff --git a/testdata/retryable-reads/legacy/distinct.json b/testdata/retryable-reads/legacy/distinct.json deleted file mode 100644 index 1fd415da81..0000000000 --- a/testdata/retryable-reads/legacy/distinct.json +++ /dev/null @@ -1,245 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ], - "tests": [ - { - "description": "Distinct succeeds on first attempt", - "operations": [ - { - "name": "distinct", - "object": "collection", - "arguments": { - "fieldName": "x", - "filter": { - "_id": { - "$gt": 1 - } - } - }, - "result": [ - 22, - 33 - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Distinct succeeds on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "distinct" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "distinct", - "object": "collection", - "arguments": { - "fieldName": "x", - "filter": { - "_id": { - "$gt": 1 - } - } - }, - "result": [ - 22, - 33 - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Distinct fails on first attempt", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "distinct" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "distinct", - "object": "collection", - "arguments": { - "fieldName": "x", - "filter": { - "_id": { - "$gt": 1 - } - } - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Distinct fails on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "distinct" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "distinct", - "object": "collection", - "arguments": { - "fieldName": "x", - "filter": { - "_id": { - "$gt": 1 - } - } - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "distinct": "coll", - "key": "x", - "query": { - "_id": { - "$gt": 1 - } - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/distinct.yml b/testdata/retryable-reads/legacy/distinct.yml deleted file mode 100644 index 8ca2ac8315..0000000000 --- a/testdata/retryable-reads/legacy/distinct.yml +++ /dev/null @@ -1,71 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - -tests: - - - description: "Distinct succeeds on first attempt" - operations: - - &retryable_operation_succeeds - <<: &retryable_operation - name: distinct - object: collection - arguments: { fieldName: "x", filter: { _id: { $gt: 1 } } } - result: - - 22 - - 33 - expectations: - - &retryable_command_started_event - command_started_event: - command: - distinct: *collection_name - key: "x" - query: - _id: {$gt: 1} - database_name: *database_name - - - description: "Distinct succeeds on second attempt" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [distinct] - closeConnection: true - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Distinct fails on first attempt" - clientOptions: - retryReads: false - failPoint: *failCommand_failPoint - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - - - description: "Distinct fails on second attempt" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - diff --git a/testdata/retryable-reads/legacy/estimatedDocumentCount-serverErrors.json b/testdata/retryable-reads/legacy/estimatedDocumentCount-serverErrors.json deleted file mode 100644 index 6bb128f5f3..0000000000 --- a/testdata/retryable-reads/legacy/estimatedDocumentCount-serverErrors.json +++ /dev/null @@ -1,546 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ], - "tests": [ - { - "description": "EstimatedDocumentCount succeeds after InterruptedAtShutdown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 11600 - } - }, - "operations": [ - { - "name": "estimatedDocumentCount", - "object": "collection", - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "EstimatedDocumentCount succeeds after InterruptedDueToReplStateChange", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 11602 - } - }, - "operations": [ - { - "name": "estimatedDocumentCount", - "object": "collection", - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "EstimatedDocumentCount succeeds after NotWritablePrimary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "estimatedDocumentCount", - "object": "collection", - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "EstimatedDocumentCount succeeds after NotPrimaryNoSecondaryOk", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 13435 - } - }, - "operations": [ - { - "name": "estimatedDocumentCount", - "object": "collection", - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "EstimatedDocumentCount succeeds after NotPrimaryOrSecondary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 13436 - } - }, - "operations": [ - { - "name": "estimatedDocumentCount", - "object": "collection", - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "EstimatedDocumentCount succeeds after PrimarySteppedDown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 189 - } - }, - "operations": [ - { - "name": "estimatedDocumentCount", - "object": "collection", - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "EstimatedDocumentCount succeeds after ShutdownInProgress", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 91 - } - }, - "operations": [ - { - "name": "estimatedDocumentCount", - "object": "collection", - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "EstimatedDocumentCount succeeds after HostNotFound", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 7 - } - }, - "operations": [ - { - "name": "estimatedDocumentCount", - "object": "collection", - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "EstimatedDocumentCount succeeds after HostUnreachable", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 6 - } - }, - "operations": [ - { - "name": "estimatedDocumentCount", - "object": "collection", - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "EstimatedDocumentCount succeeds after NetworkTimeout", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 89 - } - }, - "operations": [ - { - "name": "estimatedDocumentCount", - "object": "collection", - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "EstimatedDocumentCount succeeds after SocketException", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 9001 - } - }, - "operations": [ - { - "name": "estimatedDocumentCount", - "object": "collection", - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "EstimatedDocumentCount fails after two NotWritablePrimary errors", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "estimatedDocumentCount", - "object": "collection", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "EstimatedDocumentCount fails after NotWritablePrimary when retryReads is false", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "estimatedDocumentCount", - "object": "collection", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/estimatedDocumentCount-serverErrors.yml b/testdata/retryable-reads/legacy/estimatedDocumentCount-serverErrors.yml deleted file mode 100644 index aefb89ca69..0000000000 --- a/testdata/retryable-reads/legacy/estimatedDocumentCount-serverErrors.yml +++ /dev/null @@ -1,148 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - -tests: - - - description: "EstimatedDocumentCount succeeds after InterruptedAtShutdown" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: { failCommands: [count], errorCode: 11600 } - operations: - - &retryable_operation_succeeds - <<: &retryable_operation - name: estimatedDocumentCount - object: collection - result: 2 - expectations: - - &retryable_command_started_event - command_started_event: - command: - count: *collection_name - database_name: *database_name - - *retryable_command_started_event - - - description: "EstimatedDocumentCount succeeds after InterruptedDueToReplStateChange" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [count], errorCode: 11602 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "EstimatedDocumentCount succeeds after NotWritablePrimary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [count], errorCode: 10107 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "EstimatedDocumentCount succeeds after NotPrimaryNoSecondaryOk" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [count], errorCode: 13435 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "EstimatedDocumentCount succeeds after NotPrimaryOrSecondary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [count], errorCode: 13436 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "EstimatedDocumentCount succeeds after PrimarySteppedDown" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [count], errorCode: 189 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "EstimatedDocumentCount succeeds after ShutdownInProgress" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [count], errorCode: 91 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "EstimatedDocumentCount succeeds after HostNotFound" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [count], errorCode: 7 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "EstimatedDocumentCount succeeds after HostUnreachable" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [count], errorCode: 6 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "EstimatedDocumentCount succeeds after NetworkTimeout" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [count], errorCode: 89 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "EstimatedDocumentCount succeeds after SocketException" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [count], errorCode: 9001 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "EstimatedDocumentCount fails after two NotWritablePrimary errors" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - data: { failCommands: [count], errorCode: 10107 } - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "EstimatedDocumentCount fails after NotWritablePrimary when retryReads is false" - clientOptions: - retryReads: false - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [count], errorCode: 10107 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event diff --git a/testdata/retryable-reads/legacy/estimatedDocumentCount.json b/testdata/retryable-reads/legacy/estimatedDocumentCount.json deleted file mode 100644 index 8dfa15a2cd..0000000000 --- a/testdata/retryable-reads/legacy/estimatedDocumentCount.json +++ /dev/null @@ -1,166 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ], - "tests": [ - { - "description": "EstimatedDocumentCount succeeds on first attempt", - "operations": [ - { - "name": "estimatedDocumentCount", - "object": "collection", - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "EstimatedDocumentCount succeeds on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "estimatedDocumentCount", - "object": "collection", - "result": 2 - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "EstimatedDocumentCount fails on first attempt", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "count" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "estimatedDocumentCount", - "object": "collection", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "EstimatedDocumentCount fails on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "count" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "estimatedDocumentCount", - "object": "collection", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "count": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/estimatedDocumentCount.yml b/testdata/retryable-reads/legacy/estimatedDocumentCount.yml deleted file mode 100644 index de03e483bb..0000000000 --- a/testdata/retryable-reads/legacy/estimatedDocumentCount.yml +++ /dev/null @@ -1,62 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - -tests: - - - description: "EstimatedDocumentCount succeeds on first attempt" - operations: - - &retryable_operation_succeeds - <<: &retryable_operation - name: estimatedDocumentCount - object: collection - result: 2 - expectations: - - &retryable_command_started_event - command_started_event: - command: - count: *collection_name - database_name: *database_name - - - description: "EstimatedDocumentCount succeeds on second attempt" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [count] - closeConnection: true - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "EstimatedDocumentCount fails on first attempt" - clientOptions: - retryReads: false - failPoint: *failCommand_failPoint - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - - description: "EstimatedDocumentCount fails on second attempt" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event diff --git a/testdata/retryable-reads/legacy/find-serverErrors.json b/testdata/retryable-reads/legacy/find-serverErrors.json deleted file mode 100644 index f6b96c6dcb..0000000000 --- a/testdata/retryable-reads/legacy/find-serverErrors.json +++ /dev/null @@ -1,962 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 5, - "x": 55 - } - ], - "tests": [ - { - "description": "Find succeeds after InterruptedAtShutdown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 11600 - } - }, - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "result": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Find succeeds after InterruptedDueToReplStateChange", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 11602 - } - }, - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "result": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Find succeeds after NotWritablePrimary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "result": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Find succeeds after NotPrimaryNoSecondaryOk", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 13435 - } - }, - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "result": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Find succeeds after NotPrimaryOrSecondary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 13436 - } - }, - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "result": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Find succeeds after PrimarySteppedDown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 189 - } - }, - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "result": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Find succeeds after ShutdownInProgress", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 91 - } - }, - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "result": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Find succeeds after HostNotFound", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 7 - } - }, - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "result": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Find succeeds after HostUnreachable", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 6 - } - }, - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "result": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Find succeeds after NetworkTimeout", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 89 - } - }, - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "result": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Find succeeds after SocketException", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 9001 - } - }, - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "result": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Find fails after two NotWritablePrimary errors", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Find fails after NotWritablePrimary when retryReads is false", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/find-serverErrors.yml b/testdata/retryable-reads/legacy/find-serverErrors.yml deleted file mode 100644 index e122f3e2c8..0000000000 --- a/testdata/retryable-reads/legacy/find-serverErrors.yml +++ /dev/null @@ -1,160 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - {_id: 4, x: 44} - - {_id: 5, x: 55} - -tests: - - - description: "Find succeeds after InterruptedAtShutdown" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: { failCommands: [find], errorCode: 11600 } - operations: - - &retryable_operation_succeeds - <<: &retryable_operation - name: find - object: collection - arguments: { filter: {}, sort: { _id: 1 }, limit: 4 } - result: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - {_id: 4, x: 44} - expectations: - - &retryable_command_started_event - command_started_event: - command: - find: *collection_name - filter: {} - sort: {_id: 1} - limit: 4 - database_name: *database_name - - *retryable_command_started_event - - - description: "Find succeeds after InterruptedDueToReplStateChange" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 11602 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Find succeeds after NotWritablePrimary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 10107 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Find succeeds after NotPrimaryNoSecondaryOk" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 13435 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Find succeeds after NotPrimaryOrSecondary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 13436 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Find succeeds after PrimarySteppedDown" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 189 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Find succeeds after ShutdownInProgress" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 91 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Find succeeds after HostNotFound" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 7 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Find succeeds after HostUnreachable" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 6 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Find succeeds after NetworkTimeout" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 89 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Find succeeds after SocketException" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 9001 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Find fails after two NotWritablePrimary errors" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - data: { failCommands: [find], errorCode: 10107 } - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Find fails after NotWritablePrimary when retryReads is false" - clientOptions: - retryReads: false - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 10107 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - diff --git a/testdata/retryable-reads/legacy/find.json b/testdata/retryable-reads/legacy/find.json deleted file mode 100644 index 00d419c0da..0000000000 --- a/testdata/retryable-reads/legacy/find.json +++ /dev/null @@ -1,348 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 5, - "x": 55 - } - ], - "tests": [ - { - "description": "Find succeeds on first attempt", - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "result": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Find succeeds on second attempt with explicit clientOptions", - "clientOptions": { - "retryReads": true - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "result": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Find succeeds on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "result": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Find fails on first attempt", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Find fails on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "find" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "find", - "object": "collection", - "arguments": { - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": {}, - "sort": { - "_id": 1 - }, - "limit": 4 - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/find.yml b/testdata/retryable-reads/legacy/find.yml deleted file mode 100644 index b685c07b6a..0000000000 --- a/testdata/retryable-reads/legacy/find.yml +++ /dev/null @@ -1,86 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - {_id: 4, x: 44} - - {_id: 5, x: 55} - -tests: - - - description: "Find succeeds on first attempt" - operations: - - &retryable_operation_succeeds - <<: &retryable_operation - name: find - object: collection - arguments: - filter: {} - sort: {_id: 1} - limit: 4 - result: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - {_id: 4, x: 44} - expectations: - - &retryable_command_started_event - command_started_event: - command: - find: *collection_name - filter: {} - sort: {_id: 1} - limit: 4 - database_name: *database_name - - - description: "Find succeeds on second attempt with explicit clientOptions" - clientOptions: - retryReads: true - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [find] - closeConnection: true - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Find succeeds on second attempt" - failPoint: *failCommand_failPoint - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Find fails on first attempt" - clientOptions: - retryReads: false - failPoint: *failCommand_failPoint - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - - description: "Find fails on second attempt" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - diff --git a/testdata/retryable-reads/legacy/findOne-serverErrors.json b/testdata/retryable-reads/legacy/findOne-serverErrors.json deleted file mode 100644 index d039ef247e..0000000000 --- a/testdata/retryable-reads/legacy/findOne-serverErrors.json +++ /dev/null @@ -1,732 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 5, - "x": 55 - } - ], - "tests": [ - { - "description": "FindOne succeeds after InterruptedAtShutdown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 11600 - } - }, - "operations": [ - { - "name": "findOne", - "object": "collection", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": { - "_id": 1, - "x": 11 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "FindOne succeeds after InterruptedDueToReplStateChange", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 11602 - } - }, - "operations": [ - { - "name": "findOne", - "object": "collection", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": { - "_id": 1, - "x": 11 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "FindOne succeeds after NotWritablePrimary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "findOne", - "object": "collection", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": { - "_id": 1, - "x": 11 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "FindOne succeeds after NotPrimaryNoSecondaryOk", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 13435 - } - }, - "operations": [ - { - "name": "findOne", - "object": "collection", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": { - "_id": 1, - "x": 11 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "FindOne succeeds after NotPrimaryOrSecondary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 13436 - } - }, - "operations": [ - { - "name": "findOne", - "object": "collection", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": { - "_id": 1, - "x": 11 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "FindOne succeeds after PrimarySteppedDown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 189 - } - }, - "operations": [ - { - "name": "findOne", - "object": "collection", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": { - "_id": 1, - "x": 11 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "FindOne succeeds after ShutdownInProgress", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 91 - } - }, - "operations": [ - { - "name": "findOne", - "object": "collection", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": { - "_id": 1, - "x": 11 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "FindOne succeeds after HostNotFound", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 7 - } - }, - "operations": [ - { - "name": "findOne", - "object": "collection", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": { - "_id": 1, - "x": 11 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "FindOne succeeds after HostUnreachable", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 6 - } - }, - "operations": [ - { - "name": "findOne", - "object": "collection", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": { - "_id": 1, - "x": 11 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "FindOne succeeds after NetworkTimeout", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 89 - } - }, - "operations": [ - { - "name": "findOne", - "object": "collection", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": { - "_id": 1, - "x": 11 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "FindOne succeeds after SocketException", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 9001 - } - }, - "operations": [ - { - "name": "findOne", - "object": "collection", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": { - "_id": 1, - "x": 11 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "FindOne fails after two NotWritablePrimary errors", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "findOne", - "object": "collection", - "arguments": { - "filter": { - "_id": 1 - } - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "FindOne fails after NotWritablePrimary when retryReads is false", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "findOne", - "object": "collection", - "arguments": { - "filter": { - "_id": 1 - } - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/findOne-serverErrors.yml b/testdata/retryable-reads/legacy/findOne-serverErrors.yml deleted file mode 100644 index b6e7657408..0000000000 --- a/testdata/retryable-reads/legacy/findOne-serverErrors.yml +++ /dev/null @@ -1,154 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - {_id: 4, x: 44} - - {_id: 5, x: 55} - -tests: - - - description: "FindOne succeeds after InterruptedAtShutdown" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: { failCommands: [find], errorCode: 11600 } - operations: - - &retryable_operation_succeeds - <<: &retryable_operation - name: findOne - object: collection - arguments: - filter: {_id: 1} - result: {_id: 1, x: 11} - expectations: - - &retryable_command_started_event - command_started_event: - command: - find: *collection_name - filter: {_id: 1} - database_name: *database_name - - *retryable_command_started_event - - - description: "FindOne succeeds after InterruptedDueToReplStateChange" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 11602 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "FindOne succeeds after NotWritablePrimary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 10107 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "FindOne succeeds after NotPrimaryNoSecondaryOk" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 13435 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "FindOne succeeds after NotPrimaryOrSecondary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 13436 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "FindOne succeeds after PrimarySteppedDown" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 189 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "FindOne succeeds after ShutdownInProgress" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 91 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "FindOne succeeds after HostNotFound" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 7 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "FindOne succeeds after HostUnreachable" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 6 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "FindOne succeeds after NetworkTimeout" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 89 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "FindOne succeeds after SocketException" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 9001 } - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "FindOne fails after two NotWritablePrimary errors" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - data: { failCommands: [find], errorCode: 10107 } - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "FindOne fails after NotWritablePrimary when retryReads is false" - clientOptions: - retryReads: false - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 10107 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event diff --git a/testdata/retryable-reads/legacy/findOne.json b/testdata/retryable-reads/legacy/findOne.json deleted file mode 100644 index b9deb73d2a..0000000000 --- a/testdata/retryable-reads/legacy/findOne.json +++ /dev/null @@ -1,223 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 5, - "x": 55 - } - ], - "tests": [ - { - "description": "FindOne succeeds on first attempt", - "operations": [ - { - "name": "findOne", - "object": "collection", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": { - "_id": 1, - "x": 11 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "FindOne succeeds on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "findOne", - "object": "collection", - "arguments": { - "filter": { - "_id": 1 - } - }, - "result": { - "_id": 1, - "x": 11 - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "FindOne fails on first attempt", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "findOne", - "object": "collection", - "arguments": { - "filter": { - "_id": 1 - } - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "FindOne fails on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "find" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "findOne", - "object": "collection", - "arguments": { - "filter": { - "_id": 1 - } - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "coll", - "filter": { - "_id": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/findOne.yml b/testdata/retryable-reads/legacy/findOne.yml deleted file mode 100644 index 911314e98e..0000000000 --- a/testdata/retryable-reads/legacy/findOne.yml +++ /dev/null @@ -1,68 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: - - {_id: 1, x: 11} - - {_id: 2, x: 22} - - {_id: 3, x: 33} - - {_id: 4, x: 44} - - {_id: 5, x: 55} - -tests: - - - description: "FindOne succeeds on first attempt" - operations: - - &retryable_operation_succeeds - <<: &retryable_operation - name: findOne - object: collection - arguments: {filter: {_id: 1 }} - result: {_id: 1, x: 11} - expectations: - - &retryable_command_started_event - command_started_event: - command: - find: *collection_name - filter: {_id: 1} - database_name: *database_name - - - description: "FindOne succeeds on second attempt" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [find] - closeConnection: true - operations: [*retryable_operation_succeeds] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "FindOne fails on first attempt" - clientOptions: - retryReads: false - failPoint: *failCommand_failPoint - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - - description: "FindOne fails on second attempt" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - diff --git a/testdata/retryable-reads/legacy/gridfs-download-serverErrors.json b/testdata/retryable-reads/legacy/gridfs-download-serverErrors.json deleted file mode 100644 index cec3a5016a..0000000000 --- a/testdata/retryable-reads/legacy/gridfs-download-serverErrors.json +++ /dev/null @@ -1,925 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "bucket_name": "fs", - "data": { - "fs.files": [ - { - "_id": { - "$oid": "000000000000000000000001" - }, - "length": 1, - "chunkSize": 4, - "uploadDate": { - "$date": "1970-01-01T00:00:00.000Z" - }, - "filename": "abc", - "metadata": {} - } - ], - "fs.chunks": [ - { - "_id": { - "$oid": "000000000000000000000002" - }, - "files_id": { - "$oid": "000000000000000000000001" - }, - "n": 0, - "data": { - "$binary": { - "base64": "EQ==", - "subType": "00" - } - } - } - ] - }, - "tests": [ - { - "description": "Download succeeds after InterruptedAtShutdown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 11600 - } - }, - "operations": [ - { - "name": "download", - "object": "gridfsbucket", - "arguments": { - "id": { - "$oid": "000000000000000000000001" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Download succeeds after InterruptedDueToReplStateChange", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 11602 - } - }, - "operations": [ - { - "name": "download", - "object": "gridfsbucket", - "arguments": { - "id": { - "$oid": "000000000000000000000001" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Download succeeds after NotWritablePrimary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "download", - "object": "gridfsbucket", - "arguments": { - "id": { - "$oid": "000000000000000000000001" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Download succeeds after NotPrimaryNoSecondaryOk", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 13435 - } - }, - "operations": [ - { - "name": "download", - "object": "gridfsbucket", - "arguments": { - "id": { - "$oid": "000000000000000000000001" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Download succeeds after NotPrimaryOrSecondary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 13436 - } - }, - "operations": [ - { - "name": "download", - "object": "gridfsbucket", - "arguments": { - "id": { - "$oid": "000000000000000000000001" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Download succeeds after PrimarySteppedDown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 189 - } - }, - "operations": [ - { - "name": "download", - "object": "gridfsbucket", - "arguments": { - "id": { - "$oid": "000000000000000000000001" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Download succeeds after ShutdownInProgress", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 91 - } - }, - "operations": [ - { - "name": "download", - "object": "gridfsbucket", - "arguments": { - "id": { - "$oid": "000000000000000000000001" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Download succeeds after HostNotFound", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 7 - } - }, - "operations": [ - { - "name": "download", - "object": "gridfsbucket", - "arguments": { - "id": { - "$oid": "000000000000000000000001" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Download succeeds after HostUnreachable", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 6 - } - }, - "operations": [ - { - "name": "download", - "object": "gridfsbucket", - "arguments": { - "id": { - "$oid": "000000000000000000000001" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Download succeeds after NetworkTimeout", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 89 - } - }, - "operations": [ - { - "name": "download", - "object": "gridfsbucket", - "arguments": { - "id": { - "$oid": "000000000000000000000001" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Download succeeds after SocketException", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 9001 - } - }, - "operations": [ - { - "name": "download", - "object": "gridfsbucket", - "arguments": { - "id": { - "$oid": "000000000000000000000001" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Download fails after two NotWritablePrimary errors", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "download", - "object": "gridfsbucket", - "arguments": { - "id": { - "$oid": "000000000000000000000001" - } - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Download fails after NotWritablePrimary when retryReads is false", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "download", - "object": "gridfsbucket", - "arguments": { - "id": { - "$oid": "000000000000000000000001" - } - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/gridfs-download-serverErrors.yml b/testdata/retryable-reads/legacy/gridfs-download-serverErrors.yml deleted file mode 100644 index e120c162fd..0000000000 --- a/testdata/retryable-reads/legacy/gridfs-download-serverErrors.yml +++ /dev/null @@ -1,173 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -bucket_name: "fs" - -data: - fs.files: - - - _id: { $oid : "000000000000000000000001" } - length: 1 - chunkSize: 4 - uploadDate: { $date : "1970-01-01T00:00:00.000Z" } - filename: abc - metadata: {} - fs.chunks: - - { _id: { $oid: "000000000000000000000002" }, files_id: { $oid: "000000000000000000000001" }, n: 0, data: { $binary: { base64: "EQ==", subType: "00" } } } - -tests: - - - description: "Download succeeds after InterruptedAtShutdown" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: { failCommands: [find], errorCode: 11600 } - operations: - - &retryable_operation - name: download - object: gridfsbucket - arguments: { id: { "$oid" : "000000000000000000000001" } } - expectations: - - &retryable_command_started_event - command_started_event: - command: - find: fs.files - filter: { _id: {$oid : "000000000000000000000001" }} - database_name: *database_name - - *retryable_command_started_event - - &find_chunks_command_started_event - command_started_event: - command: - find: fs.chunks - filter: { files_id: {$oid : "000000000000000000000001" }} - sort: { n: 1 } - database_name: *database_name - - - description: "Download succeeds after InterruptedDueToReplStateChange" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 11602 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - *find_chunks_command_started_event - - - description: "Download succeeds after NotWritablePrimary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 10107 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - *find_chunks_command_started_event - - - description: "Download succeeds after NotPrimaryNoSecondaryOk" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 13435 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - *find_chunks_command_started_event - - - description: "Download succeeds after NotPrimaryOrSecondary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 13436 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - *find_chunks_command_started_event - - - description: "Download succeeds after PrimarySteppedDown" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 189 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - *find_chunks_command_started_event - - - description: "Download succeeds after ShutdownInProgress" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 91 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - *find_chunks_command_started_event - - - description: "Download succeeds after HostNotFound" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 7 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - *find_chunks_command_started_event - - - description: "Download succeeds after HostUnreachable" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 6 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - *find_chunks_command_started_event - - - description: "Download succeeds after NetworkTimeout" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 89 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - *find_chunks_command_started_event - - - description: "Download succeeds after SocketException" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 9001 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - *find_chunks_command_started_event - - - description: "Download fails after two NotWritablePrimary errors" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - data: { failCommands: [find], errorCode: 10107 } - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "Download fails after NotWritablePrimary when retryReads is false" - clientOptions: - retryReads: false - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 10107 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event diff --git a/testdata/retryable-reads/legacy/gridfs-download.json b/testdata/retryable-reads/legacy/gridfs-download.json deleted file mode 100644 index 4d0d5a17e4..0000000000 --- a/testdata/retryable-reads/legacy/gridfs-download.json +++ /dev/null @@ -1,270 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "bucket_name": "fs", - "data": { - "fs.files": [ - { - "_id": { - "$oid": "000000000000000000000001" - }, - "length": 1, - "chunkSize": 4, - "uploadDate": { - "$date": "1970-01-01T00:00:00.000Z" - }, - "filename": "abc", - "metadata": {} - } - ], - "fs.chunks": [ - { - "_id": { - "$oid": "000000000000000000000002" - }, - "files_id": { - "$oid": "000000000000000000000001" - }, - "n": 0, - "data": { - "$binary": { - "base64": "EQ==", - "subType": "00" - } - } - } - ] - }, - "tests": [ - { - "description": "Download succeeds on first attempt", - "operations": [ - { - "name": "download", - "object": "gridfsbucket", - "arguments": { - "id": { - "$oid": "000000000000000000000001" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Download succeeds on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "download", - "object": "gridfsbucket", - "arguments": { - "id": { - "$oid": "000000000000000000000001" - } - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Download fails on first attempt", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "download", - "object": "gridfsbucket", - "arguments": { - "id": { - "$oid": "000000000000000000000001" - } - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "Download fails on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "find" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "download", - "object": "gridfsbucket", - "arguments": { - "id": { - "$oid": "000000000000000000000001" - } - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "_id": { - "$oid": "000000000000000000000001" - } - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/gridfs-download.yml b/testdata/retryable-reads/legacy/gridfs-download.yml deleted file mode 100644 index a71c719d9a..0000000000 --- a/testdata/retryable-reads/legacy/gridfs-download.yml +++ /dev/null @@ -1,79 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -bucket_name: "fs" - -data: - fs.files: - - - _id: { $oid : "000000000000000000000001" } - length: 1 - chunkSize: 4 - uploadDate: { $date : "1970-01-01T00:00:00.000Z" } - filename: abc - metadata: {} - fs.chunks: - - { _id: { $oid: "000000000000000000000002" }, files_id: { $oid: "000000000000000000000001" }, n: 0, data: { $binary: { base64: "EQ==", subType: "00" } } } - -tests: - - - description: "Download succeeds on first attempt" - operations: - - &retryable_operation - name: download - object: gridfsbucket - arguments: { id: { "$oid" : "000000000000000000000001" } } - expectations: - - &retryable_command_started_event - command_started_event: - command: - find: fs.files - filter: { _id: {$oid : "000000000000000000000001" }} - database_name: *database_name - - &find_chunks_command_started_event - command_started_event: - command: - find: fs.chunks - filter: { files_id: {$oid : "000000000000000000000001" }} - sort: { n: 1 } - database_name: *database_name - - - description: "Download succeeds on second attempt" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [find] - closeConnection: true - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - *find_chunks_command_started_event - - - description: "Download fails on first attempt" - clientOptions: - retryReads: false - failPoint: *failCommand_failPoint - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - - description: "Download fails on second attempt" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - diff --git a/testdata/retryable-reads/legacy/gridfs-downloadByName-serverErrors.json b/testdata/retryable-reads/legacy/gridfs-downloadByName-serverErrors.json deleted file mode 100644 index a64230d38a..0000000000 --- a/testdata/retryable-reads/legacy/gridfs-downloadByName-serverErrors.json +++ /dev/null @@ -1,849 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "bucket_name": "fs", - "data": { - "fs.files": [ - { - "_id": { - "$oid": "000000000000000000000001" - }, - "length": 1, - "chunkSize": 4, - "uploadDate": { - "$date": "1970-01-01T00:00:00.000Z" - }, - "filename": "abc", - "metadata": {} - } - ], - "fs.chunks": [ - { - "_id": { - "$oid": "000000000000000000000002" - }, - "files_id": { - "$oid": "000000000000000000000001" - }, - "n": 0, - "data": { - "$binary": { - "base64": "EQ==", - "subType": "00" - } - } - } - ] - }, - "tests": [ - { - "description": "DownloadByName succeeds after InterruptedAtShutdown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 11600 - } - }, - "operations": [ - { - "name": "download_by_name", - "object": "gridfsbucket", - "arguments": { - "filename": "abc" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "DownloadByName succeeds after InterruptedDueToReplStateChange", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 11602 - } - }, - "operations": [ - { - "name": "download_by_name", - "object": "gridfsbucket", - "arguments": { - "filename": "abc" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "DownloadByName succeeds after NotWritablePrimary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "download_by_name", - "object": "gridfsbucket", - "arguments": { - "filename": "abc" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "DownloadByName succeeds after NotPrimaryNoSecondaryOk", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 13435 - } - }, - "operations": [ - { - "name": "download_by_name", - "object": "gridfsbucket", - "arguments": { - "filename": "abc" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "DownloadByName succeeds after NotPrimaryOrSecondary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 13436 - } - }, - "operations": [ - { - "name": "download_by_name", - "object": "gridfsbucket", - "arguments": { - "filename": "abc" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "DownloadByName succeeds after PrimarySteppedDown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 189 - } - }, - "operations": [ - { - "name": "download_by_name", - "object": "gridfsbucket", - "arguments": { - "filename": "abc" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "DownloadByName succeeds after ShutdownInProgress", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 91 - } - }, - "operations": [ - { - "name": "download_by_name", - "object": "gridfsbucket", - "arguments": { - "filename": "abc" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "DownloadByName succeeds after HostNotFound", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 7 - } - }, - "operations": [ - { - "name": "download_by_name", - "object": "gridfsbucket", - "arguments": { - "filename": "abc" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "DownloadByName succeeds after HostUnreachable", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 6 - } - }, - "operations": [ - { - "name": "download_by_name", - "object": "gridfsbucket", - "arguments": { - "filename": "abc" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "DownloadByName succeeds after NetworkTimeout", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 89 - } - }, - "operations": [ - { - "name": "download_by_name", - "object": "gridfsbucket", - "arguments": { - "filename": "abc" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "DownloadByName succeeds after SocketException", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 9001 - } - }, - "operations": [ - { - "name": "download_by_name", - "object": "gridfsbucket", - "arguments": { - "filename": "abc" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "DownloadByName fails after two NotWritablePrimary errors", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "download_by_name", - "object": "gridfsbucket", - "arguments": { - "filename": "abc" - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "DownloadByName fails after NotWritablePrimary when retryReads is false", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "download_by_name", - "object": "gridfsbucket", - "arguments": { - "filename": "abc" - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/gridfs-downloadByName-serverErrors.yml b/testdata/retryable-reads/legacy/gridfs-downloadByName-serverErrors.yml deleted file mode 100644 index 704492135e..0000000000 --- a/testdata/retryable-reads/legacy/gridfs-downloadByName-serverErrors.yml +++ /dev/null @@ -1,174 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -bucket_name: "fs" - -data: - fs.files: - - - _id: { $oid : "000000000000000000000001" } - length: 1 - chunkSize: 4 - uploadDate: { $date : "1970-01-01T00:00:00.000Z" } - filename: abc - metadata: {} - fs.chunks: - - { _id: { $oid: "000000000000000000000002" }, files_id: { $oid: "000000000000000000000001" }, n: 0, data: { $binary: { base64: "EQ==", subType: "00" } } } - -tests: - - - description: "DownloadByName succeeds after InterruptedAtShutdown" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: { failCommands: [find], errorCode: 11600 } - operations: - - &retryable_operation - name: download_by_name - object: gridfsbucket - arguments: - filename: abc - expectations: - - &retryable_command_started_event - command_started_event: - command: - find: fs.files - filter: { filename : "abc" } - database_name: *database_name - - *retryable_command_started_event - - &find_chunks_command_started_event - command_started_event: - command: - find: fs.chunks - filter: { files_id: { $oid : "000000000000000000000001" }} - sort: { n: 1 } - database_name: *database_name - - - description: "DownloadByName succeeds after InterruptedDueToReplStateChange" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 11602 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - *find_chunks_command_started_event - - - description: "DownloadByName succeeds after NotWritablePrimary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 10107 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - *find_chunks_command_started_event - - - description: "DownloadByName succeeds after NotPrimaryNoSecondaryOk" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 13435 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - *find_chunks_command_started_event - - - description: "DownloadByName succeeds after NotPrimaryOrSecondary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 13436 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - *find_chunks_command_started_event - - - description: "DownloadByName succeeds after PrimarySteppedDown" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 189 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - *find_chunks_command_started_event - - - description: "DownloadByName succeeds after ShutdownInProgress" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 91 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - *find_chunks_command_started_event - - - description: "DownloadByName succeeds after HostNotFound" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 7 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - *find_chunks_command_started_event - - - description: "DownloadByName succeeds after HostUnreachable" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 6 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - *find_chunks_command_started_event - - - description: "DownloadByName succeeds after NetworkTimeout" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 89 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - *find_chunks_command_started_event - - - description: "DownloadByName succeeds after SocketException" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 9001 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - *find_chunks_command_started_event - - - description: "DownloadByName fails after two NotWritablePrimary errors" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - data: { failCommands: [find], errorCode: 10107 } - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "DownloadByName fails after NotWritablePrimary when retryReads is false" - clientOptions: - retryReads: false - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [find], errorCode: 10107 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event diff --git a/testdata/retryable-reads/legacy/gridfs-downloadByName.json b/testdata/retryable-reads/legacy/gridfs-downloadByName.json deleted file mode 100644 index 48f2168cfc..0000000000 --- a/testdata/retryable-reads/legacy/gridfs-downloadByName.json +++ /dev/null @@ -1,250 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "bucket_name": "fs", - "data": { - "fs.files": [ - { - "_id": { - "$oid": "000000000000000000000001" - }, - "length": 1, - "chunkSize": 4, - "uploadDate": { - "$date": "1970-01-01T00:00:00.000Z" - }, - "filename": "abc", - "metadata": {} - } - ], - "fs.chunks": [ - { - "_id": { - "$oid": "000000000000000000000002" - }, - "files_id": { - "$oid": "000000000000000000000001" - }, - "n": 0, - "data": { - "$binary": { - "base64": "EQ==", - "subType": "00" - } - } - } - ] - }, - "tests": [ - { - "description": "DownloadByName succeeds on first attempt", - "operations": [ - { - "name": "download_by_name", - "object": "gridfsbucket", - "arguments": { - "filename": "abc" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "DownloadByName succeeds on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "download_by_name", - "object": "gridfsbucket", - "arguments": { - "filename": "abc" - } - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.chunks", - "filter": { - "files_id": { - "$oid": "000000000000000000000001" - } - }, - "sort": { - "n": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "DownloadByName fails on first attempt", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "download_by_name", - "object": "gridfsbucket", - "arguments": { - "filename": "abc" - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "DownloadByName fails on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "find" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "download_by_name", - "object": "gridfsbucket", - "arguments": { - "filename": "abc" - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "find": "fs.files", - "filter": { - "filename": "abc" - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/gridfs-downloadByName.yml b/testdata/retryable-reads/legacy/gridfs-downloadByName.yml deleted file mode 100644 index e5586954f0..0000000000 --- a/testdata/retryable-reads/legacy/gridfs-downloadByName.yml +++ /dev/null @@ -1,79 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -bucket_name: "fs" - -data: - fs.files: - - - _id: { $oid : "000000000000000000000001" } - length: 1 - chunkSize: 4 - uploadDate: { $date : "1970-01-01T00:00:00.000Z" } - filename: abc - metadata: {} - fs.chunks: - - { _id: { $oid: "000000000000000000000002" }, files_id: { $oid: "000000000000000000000001" }, n: 0, data: { $binary: { base64: "EQ==", subType: "00" } } } - -tests: - - - description: "DownloadByName succeeds on first attempt" - operations: - - &retryable_operation - name: download_by_name - object: gridfsbucket - arguments: { filename: "abc" } - expectations: - - &retryable_command_started_event - command_started_event: - command: - find: fs.files - filter: { filename : "abc" } - database_name: *database_name - - &find_chunks_command_started_event - command_started_event: - command: - find: fs.chunks - filter: { files_id: {$oid : "000000000000000000000001"} } - sort: { n: 1 } - database_name: *database_name - - - description: "DownloadByName succeeds on second attempt" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [find] - closeConnection: true - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - *find_chunks_command_started_event - - - description: "DownloadByName fails on first attempt" - clientOptions: - retryReads: false - failPoint: *failCommand_failPoint - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - - description: "DownloadByName fails on second attempt" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - diff --git a/testdata/retryable-reads/legacy/listCollectionNames-serverErrors.json b/testdata/retryable-reads/legacy/listCollectionNames-serverErrors.json deleted file mode 100644 index bbdce625ad..0000000000 --- a/testdata/retryable-reads/legacy/listCollectionNames-serverErrors.json +++ /dev/null @@ -1,502 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [], - "tests": [ - { - "description": "ListCollectionNames succeeds after InterruptedAtShutdown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 11600 - } - }, - "operations": [ - { - "name": "listCollectionNames", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionNames succeeds after InterruptedDueToReplStateChange", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 11602 - } - }, - "operations": [ - { - "name": "listCollectionNames", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionNames succeeds after NotWritablePrimary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "listCollectionNames", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionNames succeeds after NotPrimaryNoSecondaryOk", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 13435 - } - }, - "operations": [ - { - "name": "listCollectionNames", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionNames succeeds after NotPrimaryOrSecondary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 13436 - } - }, - "operations": [ - { - "name": "listCollectionNames", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionNames succeeds after PrimarySteppedDown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 189 - } - }, - "operations": [ - { - "name": "listCollectionNames", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionNames succeeds after ShutdownInProgress", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 91 - } - }, - "operations": [ - { - "name": "listCollectionNames", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionNames succeeds after HostNotFound", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 7 - } - }, - "operations": [ - { - "name": "listCollectionNames", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionNames succeeds after HostUnreachable", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 6 - } - }, - "operations": [ - { - "name": "listCollectionNames", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionNames succeeds after NetworkTimeout", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 89 - } - }, - "operations": [ - { - "name": "listCollectionNames", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionNames succeeds after SocketException", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 9001 - } - }, - "operations": [ - { - "name": "listCollectionNames", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionNames fails after two NotWritablePrimary errors", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "listCollectionNames", - "object": "database", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionNames fails after NotWritablePrimary when retryReads is false", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "listCollectionNames", - "object": "database", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/listCollectionNames-serverErrors.yml b/testdata/retryable-reads/legacy/listCollectionNames-serverErrors.yml deleted file mode 100644 index b99bddf827..0000000000 --- a/testdata/retryable-reads/legacy/listCollectionNames-serverErrors.yml +++ /dev/null @@ -1,143 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: [] - -tests: - - - description: "ListCollectionNames succeeds after InterruptedAtShutdown" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: { failCommands: [listCollections], errorCode: 11600 } - operations: - - &retryable_operation - name: listCollectionNames - object: database - expectations: - - &retryable_command_started_event - command_started_event: - command: - listCollections: 1 - - *retryable_command_started_event - - - description: "ListCollectionNames succeeds after InterruptedDueToReplStateChange" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 11602 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollectionNames succeeds after NotWritablePrimary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 10107 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollectionNames succeeds after NotPrimaryNoSecondaryOk" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 13435 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollectionNames succeeds after NotPrimaryOrSecondary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 13436 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollectionNames succeeds after PrimarySteppedDown" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 189 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollectionNames succeeds after ShutdownInProgress" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 91 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollectionNames succeeds after HostNotFound" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 7 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollectionNames succeeds after HostUnreachable" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 6 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollectionNames succeeds after NetworkTimeout" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 89 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollectionNames succeeds after SocketException" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 9001 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollectionNames fails after two NotWritablePrimary errors" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - data: { failCommands: [listCollections], errorCode: 10107 } - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollectionNames fails after NotWritablePrimary when retryReads is false" - clientOptions: - retryReads: false - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 10107 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event diff --git a/testdata/retryable-reads/legacy/listCollectionNames.json b/testdata/retryable-reads/legacy/listCollectionNames.json deleted file mode 100644 index 73d96a3cf7..0000000000 --- a/testdata/retryable-reads/legacy/listCollectionNames.json +++ /dev/null @@ -1,150 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [], - "tests": [ - { - "description": "ListCollectionNames succeeds on first attempt", - "operations": [ - { - "name": "listCollectionNames", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionNames succeeds on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "listCollectionNames", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionNames fails on first attempt", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "listCollectionNames", - "object": "database", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionNames fails on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "listCollectionNames", - "object": "database", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/listCollectionNames.yml b/testdata/retryable-reads/legacy/listCollectionNames.yml deleted file mode 100644 index 434adfbdd1..0000000000 --- a/testdata/retryable-reads/legacy/listCollectionNames.yml +++ /dev/null @@ -1,59 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: [] - -tests: - - - description: "ListCollectionNames succeeds on first attempt" - operations: - - &retryable_operation - name: listCollectionNames - object: database - expectations: - - &retryable_command_started_event - command_started_event: - command: - listCollections: 1 - - - description: "ListCollectionNames succeeds on second attempt" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: - - listCollections - closeConnection: true - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollectionNames fails on first attempt" - clientOptions: - retryReads: false - failPoint: *failCommand_failPoint - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - - description: "ListCollectionNames fails on second attempt" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - diff --git a/testdata/retryable-reads/legacy/listCollectionObjects-serverErrors.json b/testdata/retryable-reads/legacy/listCollectionObjects-serverErrors.json deleted file mode 100644 index ab469dfe30..0000000000 --- a/testdata/retryable-reads/legacy/listCollectionObjects-serverErrors.json +++ /dev/null @@ -1,502 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [], - "tests": [ - { - "description": "ListCollectionObjects succeeds after InterruptedAtShutdown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 11600 - } - }, - "operations": [ - { - "name": "listCollectionObjects", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionObjects succeeds after InterruptedDueToReplStateChange", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 11602 - } - }, - "operations": [ - { - "name": "listCollectionObjects", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionObjects succeeds after NotWritablePrimary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "listCollectionObjects", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionObjects succeeds after NotPrimaryNoSecondaryOk", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 13435 - } - }, - "operations": [ - { - "name": "listCollectionObjects", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionObjects succeeds after NotPrimaryOrSecondary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 13436 - } - }, - "operations": [ - { - "name": "listCollectionObjects", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionObjects succeeds after PrimarySteppedDown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 189 - } - }, - "operations": [ - { - "name": "listCollectionObjects", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionObjects succeeds after ShutdownInProgress", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 91 - } - }, - "operations": [ - { - "name": "listCollectionObjects", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionObjects succeeds after HostNotFound", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 7 - } - }, - "operations": [ - { - "name": "listCollectionObjects", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionObjects succeeds after HostUnreachable", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 6 - } - }, - "operations": [ - { - "name": "listCollectionObjects", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionObjects succeeds after NetworkTimeout", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 89 - } - }, - "operations": [ - { - "name": "listCollectionObjects", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionObjects succeeds after SocketException", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 9001 - } - }, - "operations": [ - { - "name": "listCollectionObjects", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionObjects fails after two NotWritablePrimary errors", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "listCollectionObjects", - "object": "database", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionObjects fails after NotWritablePrimary when retryReads is false", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "listCollectionObjects", - "object": "database", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/listCollectionObjects-serverErrors.yml b/testdata/retryable-reads/legacy/listCollectionObjects-serverErrors.yml deleted file mode 100644 index 0fcc2f795d..0000000000 --- a/testdata/retryable-reads/legacy/listCollectionObjects-serverErrors.yml +++ /dev/null @@ -1,144 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: [] - -tests: - - - description: "ListCollectionObjects succeeds after InterruptedAtShutdown" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: { failCommands: [listCollections], errorCode: 11600 } - operations: - - &retryable_operation - name: listCollectionObjects - object: database - expectations: - - &retryable_command_started_event - command_started_event: - command: - listCollections: 1 - - *retryable_command_started_event - - - description: "ListCollectionObjects succeeds after InterruptedDueToReplStateChange" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 11602 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollectionObjects succeeds after NotWritablePrimary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 10107 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollectionObjects succeeds after NotPrimaryNoSecondaryOk" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 13435 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollectionObjects succeeds after NotPrimaryOrSecondary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 13436 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollectionObjects succeeds after PrimarySteppedDown" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 189 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollectionObjects succeeds after ShutdownInProgress" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 91 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollectionObjects succeeds after HostNotFound" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 7 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollectionObjects succeeds after HostUnreachable" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 6 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollectionObjects succeeds after NetworkTimeout" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 89 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollectionObjects succeeds after SocketException" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 9001 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollectionObjects fails after two NotWritablePrimary errors" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - data: { failCommands: [listCollections], errorCode: 10107 } - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollectionObjects fails after NotWritablePrimary when retryReads is false" - clientOptions: - retryReads: false - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 10107 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - diff --git a/testdata/retryable-reads/legacy/listCollectionObjects.json b/testdata/retryable-reads/legacy/listCollectionObjects.json deleted file mode 100644 index 1fb0f18437..0000000000 --- a/testdata/retryable-reads/legacy/listCollectionObjects.json +++ /dev/null @@ -1,150 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [], - "tests": [ - { - "description": "ListCollectionObjects succeeds on first attempt", - "operations": [ - { - "name": "listCollectionObjects", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionObjects succeeds on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "listCollectionObjects", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionObjects fails on first attempt", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "listCollectionObjects", - "object": "database", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollectionObjects fails on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "listCollectionObjects", - "object": "database", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/listCollectionObjects.yml b/testdata/retryable-reads/legacy/listCollectionObjects.yml deleted file mode 100644 index 885c0489af..0000000000 --- a/testdata/retryable-reads/legacy/listCollectionObjects.yml +++ /dev/null @@ -1,59 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: [] - -tests: - - - description: "ListCollectionObjects succeeds on first attempt" - operations: - - &retryable_operation - name: listCollectionObjects - object: database - expectations: - - &retryable_command_started_event - command_started_event: - command: - listCollections: 1 - - - description: "ListCollectionObjects succeeds on second attempt" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: - - listCollections - closeConnection: true - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollectionObjects fails on first attempt" - clientOptions: - retryReads: false - failPoint: *failCommand_failPoint - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - - description: "ListCollectionObjects fails on second attempt" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - diff --git a/testdata/retryable-reads/legacy/listCollections-serverErrors.json b/testdata/retryable-reads/legacy/listCollections-serverErrors.json deleted file mode 100644 index def9ac4595..0000000000 --- a/testdata/retryable-reads/legacy/listCollections-serverErrors.json +++ /dev/null @@ -1,502 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [], - "tests": [ - { - "description": "ListCollections succeeds after InterruptedAtShutdown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 11600 - } - }, - "operations": [ - { - "name": "listCollections", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollections succeeds after InterruptedDueToReplStateChange", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 11602 - } - }, - "operations": [ - { - "name": "listCollections", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollections succeeds after NotWritablePrimary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "listCollections", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollections succeeds after NotPrimaryNoSecondaryOk", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 13435 - } - }, - "operations": [ - { - "name": "listCollections", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollections succeeds after NotPrimaryOrSecondary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 13436 - } - }, - "operations": [ - { - "name": "listCollections", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollections succeeds after PrimarySteppedDown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 189 - } - }, - "operations": [ - { - "name": "listCollections", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollections succeeds after ShutdownInProgress", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 91 - } - }, - "operations": [ - { - "name": "listCollections", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollections succeeds after HostNotFound", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 7 - } - }, - "operations": [ - { - "name": "listCollections", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollections succeeds after HostUnreachable", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 6 - } - }, - "operations": [ - { - "name": "listCollections", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollections succeeds after NetworkTimeout", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 89 - } - }, - "operations": [ - { - "name": "listCollections", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollections succeeds after SocketException", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 9001 - } - }, - "operations": [ - { - "name": "listCollections", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollections fails after two NotWritablePrimary errors", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "listCollections", - "object": "database", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollections fails after NotWritablePrimary when retryReads is false", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "listCollections", - "object": "database", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/listCollections-serverErrors.yml b/testdata/retryable-reads/legacy/listCollections-serverErrors.yml deleted file mode 100644 index 94a9495e52..0000000000 --- a/testdata/retryable-reads/legacy/listCollections-serverErrors.yml +++ /dev/null @@ -1,143 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: [] - -tests: - - - description: "ListCollections succeeds after InterruptedAtShutdown" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: { failCommands: [listCollections], errorCode: 11600 } - operations: - - &retryable_operation - name: listCollections - object: database - expectations: - - &retryable_command_started_event - command_started_event: - command: - listCollections: 1 - - *retryable_command_started_event - - - description: "ListCollections succeeds after InterruptedDueToReplStateChange" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 11602 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollections succeeds after NotWritablePrimary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 10107 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollections succeeds after NotPrimaryNoSecondaryOk" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 13435 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollections succeeds after NotPrimaryOrSecondary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 13436 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollections succeeds after PrimarySteppedDown" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 189 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollections succeeds after ShutdownInProgress" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 91 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollections succeeds after HostNotFound" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 7 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollections succeeds after HostUnreachable" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 6 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollections succeeds after NetworkTimeout" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 89 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollections succeeds after SocketException" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 9001 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollections fails after two NotWritablePrimary errors" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - data: { failCommands: [listCollections], errorCode: 10107 } - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollections fails after NotWritablePrimary when retryReads is false" - clientOptions: - retryReads: false - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listCollections], errorCode: 10107 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event diff --git a/testdata/retryable-reads/legacy/listCollections.json b/testdata/retryable-reads/legacy/listCollections.json deleted file mode 100644 index 2427883621..0000000000 --- a/testdata/retryable-reads/legacy/listCollections.json +++ /dev/null @@ -1,150 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [], - "tests": [ - { - "description": "ListCollections succeeds on first attempt", - "operations": [ - { - "name": "listCollections", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollections succeeds on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "listCollections", - "object": "database" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollections fails on first attempt", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "listCollections", - "object": "database", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - }, - { - "description": "ListCollections fails on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listCollections" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "listCollections", - "object": "database", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listCollections": 1 - } - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/listCollections.yml b/testdata/retryable-reads/legacy/listCollections.yml deleted file mode 100644 index 378ff924f4..0000000000 --- a/testdata/retryable-reads/legacy/listCollections.yml +++ /dev/null @@ -1,59 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: [] - -tests: - - - description: "ListCollections succeeds on first attempt" - operations: - - &retryable_operation - name: listCollections - object: database - expectations: - - &retryable_command_started_event - command_started_event: - command: - listCollections: 1 - - - description: "ListCollections succeeds on second attempt" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: - - listCollections - closeConnection: true - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListCollections fails on first attempt" - clientOptions: - retryReads: false - failPoint: *failCommand_failPoint - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - - description: "ListCollections fails on second attempt" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - diff --git a/testdata/retryable-reads/legacy/listDatabaseNames-serverErrors.json b/testdata/retryable-reads/legacy/listDatabaseNames-serverErrors.json deleted file mode 100644 index 1dd8e4415a..0000000000 --- a/testdata/retryable-reads/legacy/listDatabaseNames-serverErrors.json +++ /dev/null @@ -1,502 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [], - "tests": [ - { - "description": "ListDatabaseNames succeeds after InterruptedAtShutdown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 11600 - } - }, - "operations": [ - { - "name": "listDatabaseNames", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseNames succeeds after InterruptedDueToReplStateChange", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 11602 - } - }, - "operations": [ - { - "name": "listDatabaseNames", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseNames succeeds after NotWritablePrimary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "listDatabaseNames", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseNames succeeds after NotPrimaryNoSecondaryOk", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 13435 - } - }, - "operations": [ - { - "name": "listDatabaseNames", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseNames succeeds after NotPrimaryOrSecondary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 13436 - } - }, - "operations": [ - { - "name": "listDatabaseNames", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseNames succeeds after PrimarySteppedDown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 189 - } - }, - "operations": [ - { - "name": "listDatabaseNames", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseNames succeeds after ShutdownInProgress", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 91 - } - }, - "operations": [ - { - "name": "listDatabaseNames", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseNames succeeds after HostNotFound", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 7 - } - }, - "operations": [ - { - "name": "listDatabaseNames", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseNames succeeds after HostUnreachable", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 6 - } - }, - "operations": [ - { - "name": "listDatabaseNames", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseNames succeeds after NetworkTimeout", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 89 - } - }, - "operations": [ - { - "name": "listDatabaseNames", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseNames succeeds after SocketException", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 9001 - } - }, - "operations": [ - { - "name": "listDatabaseNames", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseNames fails after two NotWritablePrimary errors", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "listDatabaseNames", - "object": "client", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseNames fails after NotWritablePrimary when retryReads is false", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "listDatabaseNames", - "object": "client", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/listDatabaseNames-serverErrors.yml b/testdata/retryable-reads/legacy/listDatabaseNames-serverErrors.yml deleted file mode 100644 index ca6b150944..0000000000 --- a/testdata/retryable-reads/legacy/listDatabaseNames-serverErrors.yml +++ /dev/null @@ -1,143 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: [] - -tests: - - - description: "ListDatabaseNames succeeds after InterruptedAtShutdown" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: { failCommands: [listDatabases], errorCode: 11600 } - operations: - - &retryable_operation - name: listDatabaseNames - object: client - expectations: - - &retryable_command_started_event - command_started_event: - command: - listDatabases: 1 - - *retryable_command_started_event - - - description: "ListDatabaseNames succeeds after InterruptedDueToReplStateChange" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 11602 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabaseNames succeeds after NotWritablePrimary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 10107 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabaseNames succeeds after NotPrimaryNoSecondaryOk" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 13435 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabaseNames succeeds after NotPrimaryOrSecondary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 13436 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabaseNames succeeds after PrimarySteppedDown" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 189 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabaseNames succeeds after ShutdownInProgress" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 91 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabaseNames succeeds after HostNotFound" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 7 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabaseNames succeeds after HostUnreachable" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 6 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabaseNames succeeds after NetworkTimeout" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 89 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabaseNames succeeds after SocketException" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 9001 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabaseNames fails after two NotWritablePrimary errors" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - data: { failCommands: [listDatabases], errorCode: 10107 } - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabaseNames fails after NotWritablePrimary when retryReads is false" - clientOptions: - retryReads: false - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 10107 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event diff --git a/testdata/retryable-reads/legacy/listDatabaseNames.json b/testdata/retryable-reads/legacy/listDatabaseNames.json deleted file mode 100644 index b431f57016..0000000000 --- a/testdata/retryable-reads/legacy/listDatabaseNames.json +++ /dev/null @@ -1,150 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [], - "tests": [ - { - "description": "ListDatabaseNames succeeds on first attempt", - "operations": [ - { - "name": "listDatabaseNames", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseNames succeeds on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "listDatabaseNames", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseNames fails on first attempt", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "listDatabaseNames", - "object": "client", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseNames fails on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "listDatabaseNames", - "object": "client", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/listDatabaseNames.yml b/testdata/retryable-reads/legacy/listDatabaseNames.yml deleted file mode 100644 index 13e01a48ea..0000000000 --- a/testdata/retryable-reads/legacy/listDatabaseNames.yml +++ /dev/null @@ -1,59 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: [] - -tests: - - - description: "ListDatabaseNames succeeds on first attempt" - operations: - - &retryable_operation - name: listDatabaseNames - object: client - expectations: - - &retryable_command_started_event - command_started_event: - command: - listDatabases: 1 - - - description: "ListDatabaseNames succeeds on second attempt" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: - - listDatabases - closeConnection: true - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabaseNames fails on first attempt" - clientOptions: - retryReads: false - failPoint: *failCommand_failPoint - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - - description: "ListDatabaseNames fails on second attempt" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - diff --git a/testdata/retryable-reads/legacy/listDatabaseObjects-serverErrors.json b/testdata/retryable-reads/legacy/listDatabaseObjects-serverErrors.json deleted file mode 100644 index bc497bb088..0000000000 --- a/testdata/retryable-reads/legacy/listDatabaseObjects-serverErrors.json +++ /dev/null @@ -1,502 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [], - "tests": [ - { - "description": "ListDatabaseObjects succeeds after InterruptedAtShutdown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 11600 - } - }, - "operations": [ - { - "name": "listDatabaseObjects", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseObjects succeeds after InterruptedDueToReplStateChange", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 11602 - } - }, - "operations": [ - { - "name": "listDatabaseObjects", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseObjects succeeds after NotWritablePrimary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "listDatabaseObjects", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseObjects succeeds after NotPrimaryNoSecondaryOk", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 13435 - } - }, - "operations": [ - { - "name": "listDatabaseObjects", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseObjects succeeds after NotPrimaryOrSecondary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 13436 - } - }, - "operations": [ - { - "name": "listDatabaseObjects", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseObjects succeeds after PrimarySteppedDown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 189 - } - }, - "operations": [ - { - "name": "listDatabaseObjects", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseObjects succeeds after ShutdownInProgress", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 91 - } - }, - "operations": [ - { - "name": "listDatabaseObjects", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseObjects succeeds after HostNotFound", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 7 - } - }, - "operations": [ - { - "name": "listDatabaseObjects", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseObjects succeeds after HostUnreachable", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 6 - } - }, - "operations": [ - { - "name": "listDatabaseObjects", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseObjects succeeds after NetworkTimeout", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 89 - } - }, - "operations": [ - { - "name": "listDatabaseObjects", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseObjects succeeds after SocketException", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 9001 - } - }, - "operations": [ - { - "name": "listDatabaseObjects", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseObjects fails after two NotWritablePrimary errors", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "listDatabaseObjects", - "object": "client", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseObjects fails after NotWritablePrimary when retryReads is false", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "listDatabaseObjects", - "object": "client", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/listDatabaseObjects-serverErrors.yml b/testdata/retryable-reads/legacy/listDatabaseObjects-serverErrors.yml deleted file mode 100644 index acd5de34d4..0000000000 --- a/testdata/retryable-reads/legacy/listDatabaseObjects-serverErrors.yml +++ /dev/null @@ -1,144 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: [] - -tests: - - - description: "ListDatabaseObjects succeeds after InterruptedAtShutdown" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: { failCommands: [listDatabases], errorCode: 11600 } - operations: - - &retryable_operation - name: listDatabaseObjects - object: client - expectations: - - &retryable_command_started_event - command_started_event: - command: - listDatabases: 1 - - *retryable_command_started_event - - - description: "ListDatabaseObjects succeeds after InterruptedDueToReplStateChange" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 11602 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabaseObjects succeeds after NotWritablePrimary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 10107 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabaseObjects succeeds after NotPrimaryNoSecondaryOk" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 13435 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabaseObjects succeeds after NotPrimaryOrSecondary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 13436 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabaseObjects succeeds after PrimarySteppedDown" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 189 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabaseObjects succeeds after ShutdownInProgress" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 91 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabaseObjects succeeds after HostNotFound" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 7 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabaseObjects succeeds after HostUnreachable" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 6 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabaseObjects succeeds after NetworkTimeout" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 89 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabaseObjects succeeds after SocketException" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 9001 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabaseObjects fails after two NotWritablePrimary errors" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - data: { failCommands: [listDatabases], errorCode: 10107 } - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabaseObjects fails after NotWritablePrimary when retryReads is false" - clientOptions: - retryReads: false - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 10107 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - diff --git a/testdata/retryable-reads/legacy/listDatabaseObjects.json b/testdata/retryable-reads/legacy/listDatabaseObjects.json deleted file mode 100644 index 267fe921ca..0000000000 --- a/testdata/retryable-reads/legacy/listDatabaseObjects.json +++ /dev/null @@ -1,150 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [], - "tests": [ - { - "description": "ListDatabaseObjects succeeds on first attempt", - "operations": [ - { - "name": "listDatabaseObjects", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseObjects succeeds on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "listDatabaseObjects", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseObjects fails on first attempt", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "listDatabaseObjects", - "object": "client", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabaseObjects fails on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "listDatabaseObjects", - "object": "client", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/listDatabaseObjects.yml b/testdata/retryable-reads/legacy/listDatabaseObjects.yml deleted file mode 100644 index e4a31cfe21..0000000000 --- a/testdata/retryable-reads/legacy/listDatabaseObjects.yml +++ /dev/null @@ -1,59 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: [] - -tests: - - - description: "ListDatabaseObjects succeeds on first attempt" - operations: - - &retryable_operation - name: listDatabaseObjects - object: client - expectations: - - &retryable_command_started_event - command_started_event: - command: - listDatabases: 1 - - - description: "ListDatabaseObjects succeeds on second attempt" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: - - listDatabases - closeConnection: true - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabaseObjects fails on first attempt" - clientOptions: - retryReads: false - failPoint: *failCommand_failPoint - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - - description: "ListDatabaseObjects fails on second attempt" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - diff --git a/testdata/retryable-reads/legacy/listDatabases-serverErrors.json b/testdata/retryable-reads/legacy/listDatabases-serverErrors.json deleted file mode 100644 index ed7bcbc398..0000000000 --- a/testdata/retryable-reads/legacy/listDatabases-serverErrors.json +++ /dev/null @@ -1,502 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [], - "tests": [ - { - "description": "ListDatabases succeeds after InterruptedAtShutdown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 11600 - } - }, - "operations": [ - { - "name": "listDatabases", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabases succeeds after InterruptedDueToReplStateChange", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 11602 - } - }, - "operations": [ - { - "name": "listDatabases", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabases succeeds after NotWritablePrimary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "listDatabases", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabases succeeds after NotPrimaryNoSecondaryOk", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 13435 - } - }, - "operations": [ - { - "name": "listDatabases", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabases succeeds after NotPrimaryOrSecondary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 13436 - } - }, - "operations": [ - { - "name": "listDatabases", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabases succeeds after PrimarySteppedDown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 189 - } - }, - "operations": [ - { - "name": "listDatabases", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabases succeeds after ShutdownInProgress", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 91 - } - }, - "operations": [ - { - "name": "listDatabases", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabases succeeds after HostNotFound", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 7 - } - }, - "operations": [ - { - "name": "listDatabases", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabases succeeds after HostUnreachable", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 6 - } - }, - "operations": [ - { - "name": "listDatabases", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabases succeeds after NetworkTimeout", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 89 - } - }, - "operations": [ - { - "name": "listDatabases", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabases succeeds after SocketException", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 9001 - } - }, - "operations": [ - { - "name": "listDatabases", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabases fails after two NotWritablePrimary errors", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "listDatabases", - "object": "client", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabases fails after NotWritablePrimary when retryReads is false", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "listDatabases", - "object": "client", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/listDatabases-serverErrors.yml b/testdata/retryable-reads/legacy/listDatabases-serverErrors.yml deleted file mode 100644 index ac904701de..0000000000 --- a/testdata/retryable-reads/legacy/listDatabases-serverErrors.yml +++ /dev/null @@ -1,144 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: [] - -tests: - - - description: "ListDatabases succeeds after InterruptedAtShutdown" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: { failCommands: [listDatabases], errorCode: 11600 } - operations: - - &retryable_operation - name: listDatabases - object: client - expectations: - - &retryable_command_started_event - command_started_event: - command: - listDatabases: 1 - - *retryable_command_started_event - - - description: "ListDatabases succeeds after InterruptedDueToReplStateChange" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 11602 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabases succeeds after NotWritablePrimary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 10107 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabases succeeds after NotPrimaryNoSecondaryOk" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 13435 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabases succeeds after NotPrimaryOrSecondary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 13436 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabases succeeds after PrimarySteppedDown" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 189 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabases succeeds after ShutdownInProgress" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 91 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabases succeeds after HostNotFound" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 7 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabases succeeds after HostUnreachable" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 6 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabases succeeds after NetworkTimeout" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 89 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabases succeeds after SocketException" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 9001 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabases fails after two NotWritablePrimary errors" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - data: { failCommands: [listDatabases], errorCode: 10107 } - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabases fails after NotWritablePrimary when retryReads is false" - clientOptions: - retryReads: false - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listDatabases], errorCode: 10107 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - diff --git a/testdata/retryable-reads/legacy/listDatabases.json b/testdata/retryable-reads/legacy/listDatabases.json deleted file mode 100644 index 69ef9788f8..0000000000 --- a/testdata/retryable-reads/legacy/listDatabases.json +++ /dev/null @@ -1,150 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [], - "tests": [ - { - "description": "ListDatabases succeeds on first attempt", - "operations": [ - { - "name": "listDatabases", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabases succeeds on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "listDatabases", - "object": "client" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabases fails on first attempt", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "listDatabases", - "object": "client", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - }, - { - "description": "ListDatabases fails on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listDatabases" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "listDatabases", - "object": "client", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - }, - { - "command_started_event": { - "command": { - "listDatabases": 1 - } - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/listDatabases.yml b/testdata/retryable-reads/legacy/listDatabases.yml deleted file mode 100644 index 3eaed913ad..0000000000 --- a/testdata/retryable-reads/legacy/listDatabases.yml +++ /dev/null @@ -1,59 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: [] - -tests: - - - description: "ListDatabases succeeds on first attempt" - operations: - - &retryable_operation - name: listDatabases - object: client - expectations: - - &retryable_command_started_event - command_started_event: - command: - listDatabases: 1 - - - description: "ListDatabases succeeds on second attempt" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: - - listDatabases - closeConnection: true - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListDatabases fails on first attempt" - clientOptions: - retryReads: false - failPoint: *failCommand_failPoint - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - - description: "ListDatabases fails on second attempt" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - diff --git a/testdata/retryable-reads/legacy/listIndexNames-serverErrors.json b/testdata/retryable-reads/legacy/listIndexNames-serverErrors.json deleted file mode 100644 index 2d3265ec85..0000000000 --- a/testdata/retryable-reads/legacy/listIndexNames-serverErrors.json +++ /dev/null @@ -1,527 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [], - "tests": [ - { - "description": "ListIndexNames succeeds after InterruptedAtShutdown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 11600 - } - }, - "operations": [ - { - "name": "listIndexNames", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexNames succeeds after InterruptedDueToReplStateChange", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 11602 - } - }, - "operations": [ - { - "name": "listIndexNames", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexNames succeeds after NotWritablePrimary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "listIndexNames", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexNames succeeds after NotPrimaryNoSecondaryOk", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 13435 - } - }, - "operations": [ - { - "name": "listIndexNames", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexNames succeeds after NotPrimaryOrSecondary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 13436 - } - }, - "operations": [ - { - "name": "listIndexNames", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexNames succeeds after PrimarySteppedDown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 189 - } - }, - "operations": [ - { - "name": "listIndexNames", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexNames succeeds after ShutdownInProgress", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 91 - } - }, - "operations": [ - { - "name": "listIndexNames", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexNames succeeds after HostNotFound", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 7 - } - }, - "operations": [ - { - "name": "listIndexNames", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexNames succeeds after HostUnreachable", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 6 - } - }, - "operations": [ - { - "name": "listIndexNames", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexNames succeeds after NetworkTimeout", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 89 - } - }, - "operations": [ - { - "name": "listIndexNames", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexNames succeeds after SocketException", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 9001 - } - }, - "operations": [ - { - "name": "listIndexNames", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexNames fails after two NotWritablePrimary errors", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "listIndexNames", - "object": "collection", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexNames fails after NotWritablePrimary when retryReads is false", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "listIndexNames", - "object": "collection", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/listIndexNames-serverErrors.yml b/testdata/retryable-reads/legacy/listIndexNames-serverErrors.yml deleted file mode 100644 index 6fb7e30cbf..0000000000 --- a/testdata/retryable-reads/legacy/listIndexNames-serverErrors.yml +++ /dev/null @@ -1,144 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: [] - -tests: - - - description: "ListIndexNames succeeds after InterruptedAtShutdown" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: { failCommands: [listIndexes], errorCode: 11600 } - operations: - - &retryable_operation - name: listIndexNames - object: collection - expectations: - - &retryable_command_started_event - command_started_event: - command: - listIndexes: *collection_name - database_name: *database_name - - *retryable_command_started_event - - - description: "ListIndexNames succeeds after InterruptedDueToReplStateChange" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listIndexes], errorCode: 11602 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListIndexNames succeeds after NotWritablePrimary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listIndexes], errorCode: 10107 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListIndexNames succeeds after NotPrimaryNoSecondaryOk" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listIndexes], errorCode: 13435 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListIndexNames succeeds after NotPrimaryOrSecondary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listIndexes], errorCode: 13436 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListIndexNames succeeds after PrimarySteppedDown" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listIndexes], errorCode: 189 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListIndexNames succeeds after ShutdownInProgress" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listIndexes], errorCode: 91 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListIndexNames succeeds after HostNotFound" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listIndexes], errorCode: 7 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListIndexNames succeeds after HostUnreachable" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listIndexes], errorCode: 6 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListIndexNames succeeds after NetworkTimeout" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listIndexes], errorCode: 89 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListIndexNames succeeds after SocketException" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listIndexes], errorCode: 9001 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListIndexNames fails after two NotWritablePrimary errors" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - data: { failCommands: [listIndexes], errorCode: 10107 } - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListIndexNames fails after NotWritablePrimary when retryReads is false" - clientOptions: - retryReads: false - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listIndexes], errorCode: 10107 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event diff --git a/testdata/retryable-reads/legacy/listIndexNames.json b/testdata/retryable-reads/legacy/listIndexNames.json deleted file mode 100644 index fbdb420f8a..0000000000 --- a/testdata/retryable-reads/legacy/listIndexNames.json +++ /dev/null @@ -1,156 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [], - "tests": [ - { - "description": "ListIndexNames succeeds on first attempt", - "operations": [ - { - "name": "listIndexNames", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexNames succeeds on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "listIndexNames", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexNames fails on first attempt", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "listIndexNames", - "object": "collection", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexNames fails on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "listIndexNames", - "object": "collection", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/listIndexNames.yml b/testdata/retryable-reads/legacy/listIndexNames.yml deleted file mode 100644 index 3a73b51e15..0000000000 --- a/testdata/retryable-reads/legacy/listIndexNames.yml +++ /dev/null @@ -1,60 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: [] - -tests: - - - description: "ListIndexNames succeeds on first attempt" - operations: - - &retryable_operation - name: listIndexNames - object: collection - expectations: - - &retryable_command_started_event - command_started_event: - command: - listIndexes: *collection_name - database_name: *database_name - - - description: "ListIndexNames succeeds on second attempt" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: - - listIndexes - closeConnection: true - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListIndexNames fails on first attempt" - clientOptions: - retryReads: false - failPoint: *failCommand_failPoint - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - - description: "ListIndexNames fails on second attempt" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - diff --git a/testdata/retryable-reads/legacy/listIndexes-serverErrors.json b/testdata/retryable-reads/legacy/listIndexes-serverErrors.json deleted file mode 100644 index 25c5b0e448..0000000000 --- a/testdata/retryable-reads/legacy/listIndexes-serverErrors.json +++ /dev/null @@ -1,527 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [], - "tests": [ - { - "description": "ListIndexes succeeds after InterruptedAtShutdown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 11600 - } - }, - "operations": [ - { - "name": "listIndexes", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexes succeeds after InterruptedDueToReplStateChange", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 11602 - } - }, - "operations": [ - { - "name": "listIndexes", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexes succeeds after NotWritablePrimary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "listIndexes", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexes succeeds after NotPrimaryNoSecondaryOk", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 13435 - } - }, - "operations": [ - { - "name": "listIndexes", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexes succeeds after NotPrimaryOrSecondary", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 13436 - } - }, - "operations": [ - { - "name": "listIndexes", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexes succeeds after PrimarySteppedDown", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 189 - } - }, - "operations": [ - { - "name": "listIndexes", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexes succeeds after ShutdownInProgress", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 91 - } - }, - "operations": [ - { - "name": "listIndexes", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexes succeeds after HostNotFound", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 7 - } - }, - "operations": [ - { - "name": "listIndexes", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexes succeeds after HostUnreachable", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 6 - } - }, - "operations": [ - { - "name": "listIndexes", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexes succeeds after NetworkTimeout", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 89 - } - }, - "operations": [ - { - "name": "listIndexes", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexes succeeds after SocketException", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 9001 - } - }, - "operations": [ - { - "name": "listIndexes", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexes fails after two NotWritablePrimary errors", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "listIndexes", - "object": "collection", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexes fails after NotWritablePrimary when retryReads is false", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "errorCode": 10107 - } - }, - "operations": [ - { - "name": "listIndexes", - "object": "collection", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/listIndexes-serverErrors.yml b/testdata/retryable-reads/legacy/listIndexes-serverErrors.yml deleted file mode 100644 index 23f2768e9a..0000000000 --- a/testdata/retryable-reads/legacy/listIndexes-serverErrors.yml +++ /dev/null @@ -1,145 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: [] - -tests: - - - description: "ListIndexes succeeds after InterruptedAtShutdown" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: { failCommands: [listIndexes], errorCode: 11600 } - operations: - - &retryable_operation - name: listIndexes - object: collection - expectations: - - &retryable_command_started_event - command_started_event: - command: - listIndexes: *collection_name - database_name: *database_name - - *retryable_command_started_event - - - description: "ListIndexes succeeds after InterruptedDueToReplStateChange" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listIndexes], errorCode: 11602 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListIndexes succeeds after NotWritablePrimary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listIndexes], errorCode: 10107 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListIndexes succeeds after NotPrimaryNoSecondaryOk" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listIndexes], errorCode: 13435 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListIndexes succeeds after NotPrimaryOrSecondary" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listIndexes], errorCode: 13436 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListIndexes succeeds after PrimarySteppedDown" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listIndexes], errorCode: 189 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListIndexes succeeds after ShutdownInProgress" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listIndexes], errorCode: 91 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListIndexes succeeds after HostNotFound" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listIndexes], errorCode: 7 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListIndexes succeeds after HostUnreachable" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listIndexes], errorCode: 6 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListIndexes succeeds after NetworkTimeout" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listIndexes], errorCode: 89 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListIndexes succeeds after SocketException" - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listIndexes], errorCode: 9001 } - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListIndexes fails after two NotWritablePrimary errors" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - data: { failCommands: [listIndexes], errorCode: 10107 } - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListIndexes fails after NotWritablePrimary when retryReads is false" - clientOptions: - retryReads: false - failPoint: - <<: *failCommand_failPoint - data: { failCommands: [listIndexes], errorCode: 10107 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - diff --git a/testdata/retryable-reads/legacy/listIndexes.json b/testdata/retryable-reads/legacy/listIndexes.json deleted file mode 100644 index 5cb620ae45..0000000000 --- a/testdata/retryable-reads/legacy/listIndexes.json +++ /dev/null @@ -1,156 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [], - "tests": [ - { - "description": "ListIndexes succeeds on first attempt", - "operations": [ - { - "name": "listIndexes", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexes succeeds on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "listIndexes", - "object": "collection" - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexes fails on first attempt", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "listIndexes", - "object": "collection", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "ListIndexes fails on second attempt", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "listIndexes" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "listIndexes", - "object": "collection", - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - }, - { - "command_started_event": { - "command": { - "listIndexes": "coll" - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/listIndexes.yml b/testdata/retryable-reads/legacy/listIndexes.yml deleted file mode 100644 index 84ba7242a3..0000000000 --- a/testdata/retryable-reads/legacy/listIndexes.yml +++ /dev/null @@ -1,60 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: [] - -tests: - - - description: "ListIndexes succeeds on first attempt" - operations: - - &retryable_operation - name: listIndexes - object: collection - expectations: - - &retryable_command_started_event - command_started_event: - command: - listIndexes: *collection_name - database_name: *database_name - - - description: "ListIndexes succeeds on second attempt" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: - - listIndexes - closeConnection: true - operations: [*retryable_operation] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - - - description: "ListIndexes fails on first attempt" - clientOptions: - retryReads: false - failPoint: *failCommand_failPoint - operations: - - &retryable_operation_fails - <<: *retryable_operation - error: true - expectations: - - *retryable_command_started_event - - - description: "ListIndexes fails on second attempt" - failPoint: - <<: *failCommand_failPoint - mode: { times: 2 } - operations: [*retryable_operation_fails] - expectations: - - *retryable_command_started_event - - *retryable_command_started_event - diff --git a/testdata/retryable-reads/legacy/mapReduce.json b/testdata/retryable-reads/legacy/mapReduce.json deleted file mode 100644 index e76aa76cbb..0000000000 --- a/testdata/retryable-reads/legacy/mapReduce.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "runOn": [ - { - "minServerVersion": "4.0", - "topology": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topology": [ - "sharded", - "load-balanced" - ] - } - ], - "database_name": "retryable-reads-tests", - "collection_name": "coll", - "data": [ - { - "_id": 1, - "x": 0 - }, - { - "_id": 2, - "x": 1 - }, - { - "_id": 3, - "x": 2 - } - ], - "tests": [ - { - "description": "MapReduce succeeds with retry on", - "operations": [ - { - "name": "mapReduce", - "object": "collection", - "arguments": { - "map": { - "$code": "function inc() { return emit(0, this.x + 1) }" - }, - "reduce": { - "$code": "function sum(key, values) { return values.reduce((acc, x) => acc + x); }" - }, - "out": { - "inline": 1 - } - }, - "result": [ - { - "_id": 0, - "value": 6 - } - ] - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "mapReduce": "coll", - "map": { - "$code": "function inc() { return emit(0, this.x + 1) }" - }, - "reduce": { - "$code": "function sum(key, values) { return values.reduce((acc, x) => acc + x); }" - }, - "out": { - "inline": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "MapReduce fails with retry on", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "mapReduce" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "mapReduce", - "object": "collection", - "arguments": { - "map": { - "$code": "function inc() { return emit(0, this.x + 1) }" - }, - "reduce": { - "$code": "function sum(key, values) { return values.reduce((acc, x) => acc + x); }" - }, - "out": { - "inline": 1 - } - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "mapReduce": "coll", - "map": { - "$code": "function inc() { return emit(0, this.x + 1) }" - }, - "reduce": { - "$code": "function sum(key, values) { return values.reduce((acc, x) => acc + x); }" - }, - "out": { - "inline": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - }, - { - "description": "MapReduce fails with retry off", - "clientOptions": { - "retryReads": false - }, - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "mapReduce" - ], - "closeConnection": true - } - }, - "operations": [ - { - "name": "mapReduce", - "object": "collection", - "arguments": { - "map": { - "$code": "function inc() { return emit(0, this.x + 1) }" - }, - "reduce": { - "$code": "function sum(key, values) { return values.reduce((acc, x) => acc + x); }" - }, - "out": { - "inline": 1 - } - }, - "error": true - } - ], - "expectations": [ - { - "command_started_event": { - "command": { - "mapReduce": "coll", - "map": { - "$code": "function inc() { return emit(0, this.x + 1) }" - }, - "reduce": { - "$code": "function sum(key, values) { return values.reduce((acc, x) => acc + x); }" - }, - "out": { - "inline": 1 - } - }, - "database_name": "retryable-reads-tests" - } - } - ] - } - ] -} diff --git a/testdata/retryable-reads/legacy/mapReduce.yml b/testdata/retryable-reads/legacy/mapReduce.yml deleted file mode 100644 index 968d3d5037..0000000000 --- a/testdata/retryable-reads/legacy/mapReduce.yml +++ /dev/null @@ -1,60 +0,0 @@ -runOn: - - - minServerVersion: "4.0" - topology: ["single", "replicaset"] - - - minServerVersion: "4.1.7" - topology: ["sharded", "load-balanced"] - -database_name: &database_name "retryable-reads-tests" -collection_name: &collection_name "coll" - -data: - - {_id: 1, x: 0} - - {_id: 2, x: 1} - - {_id: 3, x: 2} - -tests: - - - description: "MapReduce succeeds with retry on" - operations: - - &operation_succeeds - <<: &operation - name: mapReduce - object: collection - arguments: - map: { $code: "function inc() { return emit(0, this.x + 1) }" } - reduce: { $code: "function sum(key, values) { return values.reduce((acc, x) => acc + x); }" } - out: { inline: 1 } - result: [ { "_id" : 0, "value" : 6 } ] - expectations: - - &command_started_event - command_started_event: - command: - mapReduce: *collection_name - map: { $code: "function inc() { return emit(0, this.x + 1) }" } - reduce: { $code: "function sum(key, values) { return values.reduce((acc, x) => acc + x); }" } - out: { inline: 1 } - database_name: *database_name - - - description: "MapReduce fails with retry on" - failPoint: &failCommand_failPoint - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [mapReduce] - closeConnection: true - operations: - - &operation_fails - <<: *operation - error: true - expectations: - - *command_started_event - - - description: "MapReduce fails with retry off" - clientOptions: - retryReads: false - failPoint: *failCommand_failPoint - operations: [*operation_fails] - expectations: - - *command_started_event diff --git a/testdata/retryable-reads/unified/readConcernMajorityNotAvailableYet.json b/testdata/retryable-reads/unified/readConcernMajorityNotAvailableYet.json deleted file mode 100644 index 8aa6a6b5e5..0000000000 --- a/testdata/retryable-reads/unified/readConcernMajorityNotAvailableYet.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "description": "ReadConcernMajorityNotAvailableYet is a retryable read", - "schemaVersion": "1.3", - "runOnRequirements": [ - { - "minServerVersion": "4.0", - "topologies": [ - "single", - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topologies": [ - "sharded", - "load-balanced" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "retryable-reads-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "readconcernmajoritynotavailableyet_test" - } - } - ], - "initialData": [ - { - "collectionName": "readconcernmajoritynotavailableyet_test", - "databaseName": "retryable-reads-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "tests": [ - { - "description": "Find succeeds on second attempt after ReadConcernMajorityNotAvailableYet", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 134 - } - } - } - }, - { - "name": "find", - "arguments": { - "filter": { - "_id": { - "$gt": 1 - } - } - }, - "object": "collection0", - "expectResult": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "readconcernmajoritynotavailableyet_test", - "filter": { - "_id": { - "$gt": 1 - } - } - }, - "commandName": "find", - "databaseName": "retryable-reads-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "find": "readconcernmajoritynotavailableyet_test", - "filter": { - "_id": { - "$gt": 1 - } - } - }, - "commandName": "find", - "databaseName": "retryable-reads-tests" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/retryable-reads/unified/readConcernMajorityNotAvailableYet.yml b/testdata/retryable-reads/unified/readConcernMajorityNotAvailableYet.yml deleted file mode 100644 index 707a62acd7..0000000000 --- a/testdata/retryable-reads/unified/readConcernMajorityNotAvailableYet.yml +++ /dev/null @@ -1,68 +0,0 @@ -description: "ReadConcernMajorityNotAvailableYet is a retryable read" - -schemaVersion: "1.3" - -runOnRequirements: - - minServerVersion: "4.0" - topologies: [single, replicaset] - - minServerVersion: "4.1.7" - topologies: [sharded, load-balanced] - -createEntities: - - client: - id: &client0 client0 - # Ensure the `configureFailpoint` and `find` commands are run on the same mongos - useMultipleMongoses: false - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name "retryable-reads-tests" - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name "readconcernmajoritynotavailableyet_test" - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -tests: - - description: "Find succeeds on second attempt after ReadConcernMajorityNotAvailableYet" - operations: - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ "find" ] - errorCode: 134 # ReadConcernMajorityNotAvailableYet - - name: find - arguments: - filter: { _id: { $gt: 1 } } - object: *collection0 - expectResult: - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - find: *collection0Name - filter: { _id: { $gt: 1 } } - commandName: find - databaseName: *database0Name - - commandStartedEvent: - command: - find: *collection0Name - filter: { _id: { $gt: 1 } } - commandName: find - databaseName: *database0Name diff --git a/testdata/retryable-writes/unified/bulkWrite-serverErrors.json b/testdata/retryable-writes/unified/bulkWrite-serverErrors.json deleted file mode 100644 index 0a063ab4d9..0000000000 --- a/testdata/retryable-writes/unified/bulkWrite-serverErrors.json +++ /dev/null @@ -1,285 +0,0 @@ -{ - "description": "retryable-writes bulkWrite serverErrors", - "schemaVersion": "1.3", - "runOnRequirements": [ - { - "minServerVersion": "4.0", - "topologies": [ - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topologies": [ - "sharded", - "load-balanced" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "retryable-writes-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll" - } - } - ], - "initialData": [ - { - "collectionName": "coll", - "databaseName": "retryable-writes-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ], - "tests": [ - { - "description": "BulkWrite succeeds after retryable writeConcernError in first batch", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "errorLabels": [ - "RetryableWriteError" - ], - "writeConcernError": { - "code": 91, - "errmsg": "Replication is being shut down" - } - } - } - } - }, - { - "name": "bulkWrite", - "object": "collection0", - "arguments": { - "requests": [ - { - "insertOne": { - "document": { - "_id": 3, - "x": 33 - } - } - }, - { - "deleteOne": { - "filter": { - "_id": 2 - } - } - } - ] - }, - "expectResult": { - "deletedCount": 1, - "insertedCount": 1, - "matchedCount": 0, - "modifiedCount": 0, - "upsertedCount": 0, - "insertedIds": { - "$$unsetOrMatches": { - "0": 3 - } - }, - "upsertedIds": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll", - "documents": [ - { - "_id": 3, - "x": 33 - } - ] - }, - "commandName": "insert", - "databaseName": "retryable-writes-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "insert": "coll", - "documents": [ - { - "_id": 3, - "x": 33 - } - ] - }, - "commandName": "insert", - "databaseName": "retryable-writes-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "delete": "coll", - "deletes": [ - { - "q": { - "_id": 2 - }, - "limit": 1 - } - ] - }, - "commandName": "delete", - "databaseName": "retryable-writes-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll", - "databaseName": "retryable-writes-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "BulkWrite fails with a RetryableWriteError label after two connection failures", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "update" - ], - "closeConnection": true - } - } - } - }, - { - "object": "collection0", - "name": "bulkWrite", - "arguments": { - "requests": [ - { - "deleteOne": { - "filter": { - "_id": 1 - } - } - }, - { - "insertOne": { - "document": { - "_id": 3, - "x": 33 - } - } - }, - { - "updateOne": { - "filter": { - "_id": 2 - }, - "update": { - "$inc": { - "x": 1 - } - } - } - } - ], - "ordered": true - }, - "expectError": { - "isError": true, - "errorLabelsContain": [ - "RetryableWriteError" - ] - } - } - ], - "outcome": [ - { - "collectionName": "coll", - "databaseName": "retryable-writes-tests", - "documents": [ - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - } - ] -} diff --git a/testdata/retryable-writes/unified/bulkWrite-serverErrors.yml b/testdata/retryable-writes/unified/bulkWrite-serverErrors.yml deleted file mode 100644 index a88a206123..0000000000 --- a/testdata/retryable-writes/unified/bulkWrite-serverErrors.yml +++ /dev/null @@ -1,136 +0,0 @@ -description: "retryable-writes bulkWrite serverErrors" - -schemaVersion: "1.3" - -runOnRequirements: - - minServerVersion: "4.0" - topologies: [ replicaset ] - - minServerVersion: "4.1.7" - topologies: [ sharded, load-balanced ] - -createEntities: - - client: - id: &client0 client0 - useMultipleMongoses: false - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &databaseName retryable-writes-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collectionName coll - -initialData: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - -tests: - - description: "BulkWrite succeeds after retryable writeConcernError in first batch" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ insert ] - errorLabels: [RetryableWriteError] # top-level error labels - writeConcernError: - code: 91 # ShutdownInProgress - errmsg: "Replication is being shut down" - - name: bulkWrite - object: *collection0 - arguments: - requests: - - insertOne: - document: { _id: 3, x: 33 } - - deleteOne: - filter: { _id: 2 } - expectResult: - deletedCount: 1 - insertedCount: 1 - matchedCount: 0 - modifiedCount: 0 - upsertedCount: 0 - insertedIds: { $$unsetOrMatches: { 0: 3 } } - upsertedIds: { } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collectionName - documents: [{ _id: 3, x: 33 }] - commandName: insert - databaseName: *databaseName - - commandStartedEvent: - command: - insert: *collectionName - documents: [{ _id: 3, x: 33 }] - commandName: insert - databaseName: *databaseName - - commandStartedEvent: - command: - delete: *collectionName - deletes: - - - q: { _id: 2 } - limit: 1 - commandName: delete - databaseName: *databaseName - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - - { _id: 3, x: 33 } # The write was still applied - - - description: 'BulkWrite fails with a RetryableWriteError label after two connection failures' - operations: - - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: [ update ] - closeConnection: true - - - object: *collection0 - name: bulkWrite - arguments: - requests: - - - deleteOne: - filter: { _id: 1 } - - - insertOne: - document: { _id: 3, x: 33 } - - - updateOne: - filter: { _id: 2 } - update: { $inc: { x: 1 } } - ordered: true - expectError: - isError: true - errorLabelsContain: - - RetryableWriteError - outcome: - - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } diff --git a/testdata/retryable-writes/unified/client-bulkWrite-clientErrors.json b/testdata/retryable-writes/unified/client-bulkWrite-clientErrors.json deleted file mode 100644 index d16e0c9c8d..0000000000 --- a/testdata/retryable-writes/unified/client-bulkWrite-clientErrors.json +++ /dev/null @@ -1,351 +0,0 @@ -{ - "description": "client bulkWrite retryable writes with client errors", - "schemaVersion": "1.21", - "runOnRequirements": [ - { - "minServerVersion": "8.0", - "topologies": [ - "replicaset", - "sharded", - "load-balanced" - ], - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ], - "useMultipleMongoses": false - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "retryable-writes-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "retryable-writes-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "_yamlAnchors": { - "namespace": "retryable-writes-tests.coll0" - }, - "tests": [ - { - "description": "client bulkWrite with one network error succeeds after retry", - "operations": [ - { - "object": "testRunner", - "name": "failPoint", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "bulkWrite" - ], - "closeConnection": true - } - } - } - }, - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "retryable-writes-tests.coll0", - "document": { - "_id": 4, - "x": 44 - } - } - } - ], - "verboseResults": true - }, - "expectResult": { - "insertedCount": 1, - "upsertedCount": 0, - "matchedCount": 0, - "modifiedCount": 0, - "deletedCount": 0, - "insertResults": { - "0": { - "insertedId": 4 - } - }, - "updateResults": {}, - "deleteResults": {} - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "ops": [ - { - "insert": 0, - "document": { - "_id": 4, - "x": 44 - } - } - ], - "nsInfo": [ - { - "ns": "retryable-writes-tests.coll0" - } - ], - "lsid": { - "$$exists": true - }, - "txnNumber": { - "$$exists": true - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "ops": [ - { - "insert": 0, - "document": { - "_id": 4, - "x": 44 - } - } - ], - "nsInfo": [ - { - "ns": "retryable-writes-tests.coll0" - } - ], - "lsid": { - "$$exists": true - }, - "txnNumber": { - "$$exists": true - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "retryable-writes-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ] - }, - { - "description": "client bulkWrite with two network errors fails after retry", - "operations": [ - { - "object": "testRunner", - "name": "failPoint", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "bulkWrite" - ], - "closeConnection": true - } - } - } - }, - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "retryable-writes-tests.coll0", - "document": { - "_id": 4, - "x": 44 - } - } - } - ], - "verboseResults": true - }, - "expectError": { - "isClientError": true, - "errorLabelsContain": [ - "RetryableWriteError" - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "ops": [ - { - "insert": 0, - "document": { - "_id": 4, - "x": 44 - } - } - ], - "nsInfo": [ - { - "ns": "retryable-writes-tests.coll0" - } - ], - "lsid": { - "$$exists": true - }, - "txnNumber": { - "$$exists": true - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "ops": [ - { - "insert": 0, - "document": { - "_id": 4, - "x": 44 - } - } - ], - "nsInfo": [ - { - "ns": "retryable-writes-tests.coll0" - } - ], - "lsid": { - "$$exists": true - }, - "txnNumber": { - "$$exists": true - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "retryable-writes-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - } - ] -} diff --git a/testdata/retryable-writes/unified/client-bulkWrite-clientErrors.yml b/testdata/retryable-writes/unified/client-bulkWrite-clientErrors.yml deleted file mode 100644 index e5214b90f8..0000000000 --- a/testdata/retryable-writes/unified/client-bulkWrite-clientErrors.yml +++ /dev/null @@ -1,173 +0,0 @@ -description: "client bulkWrite retryable writes with client errors" -schemaVersion: "1.21" -runOnRequirements: - - minServerVersion: "8.0" - topologies: - - replicaset - - sharded - - load-balanced - serverless: forbid - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - useMultipleMongoses: false - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name retryable-writes-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -_yamlAnchors: - namespace: &namespace "retryable-writes-tests.coll0" - -tests: - - description: "client bulkWrite with one network error succeeds after retry" - operations: - - object: testRunner - name: failPoint - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: - times: 1 - data: - failCommands: [ bulkWrite ] - closeConnection: true - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: { _id: 4, x: 44 } - verboseResults: true - expectResult: - insertedCount: 1 - upsertedCount: 0 - matchedCount: 0 - modifiedCount: 0 - deletedCount: 0 - insertResults: - 0: - insertedId: 4 - updateResults: {} - deleteResults: {} - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - ops: - - insert: 0 - document: { _id: 4, x: 44 } - nsInfo: - - ns: *namespace - # An implicit session is included with the transaction number: - lsid: { "$$exists": true } - txnNumber: { "$$exists": true } - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - ops: - - insert: 0 - document: { _id: 4, x: 44 } - nsInfo: - - ns: *namespace - # An implicit session is included with the transaction number: - lsid: { "$$exists": true } - txnNumber: { "$$exists": true } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - - { _id: 4, x: 44 } - - description: "client bulkWrite with two network errors fails after retry" - operations: - - object: testRunner - name: failPoint - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: - times: 2 - data: - failCommands: [ bulkWrite ] - closeConnection: true - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: { _id: 4, x: 44 } - verboseResults: true - expectError: - isClientError: true - errorLabelsContain: ["RetryableWriteError"] # Error label added by driver. - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - ops: - - insert: 0 - document: { _id: 4, x: 44 } - nsInfo: - - ns: *namespace - # An implicit session is included with the transaction number: - lsid: { "$$exists": true } - txnNumber: { "$$exists": true } - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - ops: - - insert: 0 - document: { _id: 4, x: 44 } - nsInfo: - - ns: *namespace - # An implicit session is included with the transaction number: - lsid: { "$$exists": true } - txnNumber: { "$$exists": true } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } diff --git a/testdata/retryable-writes/unified/client-bulkWrite-serverErrors.json b/testdata/retryable-writes/unified/client-bulkWrite-serverErrors.json deleted file mode 100644 index f58c82bcc7..0000000000 --- a/testdata/retryable-writes/unified/client-bulkWrite-serverErrors.json +++ /dev/null @@ -1,873 +0,0 @@ -{ - "description": "client bulkWrite retryable writes", - "schemaVersion": "1.21", - "runOnRequirements": [ - { - "minServerVersion": "8.0", - "topologies": [ - "replicaset", - "sharded", - "load-balanced" - ], - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ], - "useMultipleMongoses": false - } - }, - { - "client": { - "id": "clientRetryWritesFalse", - "uriOptions": { - "retryWrites": false - }, - "observeEvents": [ - "commandStartedEvent" - ], - "useMultipleMongoses": false - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "retryable-writes-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll0" - } - } - ], - "initialData": [ - { - "collectionName": "coll0", - "databaseName": "retryable-writes-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ], - "_yamlAnchors": { - "namespace": "retryable-writes-tests.coll0" - }, - "tests": [ - { - "description": "client bulkWrite with no multi: true operations succeeds after retryable top-level error", - "operations": [ - { - "object": "testRunner", - "name": "failPoint", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "bulkWrite" - ], - "errorCode": 189, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "retryable-writes-tests.coll0", - "document": { - "_id": 4, - "x": 44 - } - } - }, - { - "updateOne": { - "namespace": "retryable-writes-tests.coll0", - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - } - } - }, - { - "replaceOne": { - "namespace": "retryable-writes-tests.coll0", - "filter": { - "_id": 2 - }, - "replacement": { - "x": 222 - } - } - }, - { - "deleteOne": { - "namespace": "retryable-writes-tests.coll0", - "filter": { - "_id": 3 - } - } - } - ], - "verboseResults": true - }, - "expectResult": { - "insertedCount": 1, - "upsertedCount": 0, - "matchedCount": 2, - "modifiedCount": 2, - "deletedCount": 1, - "insertResults": { - "0": { - "insertedId": 4 - } - }, - "updateResults": { - "1": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedId": { - "$$exists": false - } - }, - "2": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedId": { - "$$exists": false - } - } - }, - "deleteResults": { - "3": { - "deletedCount": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "ops": [ - { - "insert": 0, - "document": { - "_id": 4, - "x": 44 - } - }, - { - "update": 0, - "filter": { - "_id": 1 - }, - "updateMods": { - "$inc": { - "x": 1 - } - }, - "multi": false - }, - { - "update": 0, - "filter": { - "_id": 2 - }, - "updateMods": { - "x": 222 - }, - "multi": false - }, - { - "delete": 0, - "filter": { - "_id": 3 - }, - "multi": false - } - ], - "nsInfo": [ - { - "ns": "retryable-writes-tests.coll0" - } - ], - "lsid": { - "$$exists": true - }, - "txnNumber": { - "$$exists": true - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "ops": [ - { - "insert": 0, - "document": { - "_id": 4, - "x": 44 - } - }, - { - "update": 0, - "filter": { - "_id": 1 - }, - "updateMods": { - "$inc": { - "x": 1 - } - }, - "multi": false - }, - { - "update": 0, - "filter": { - "_id": 2 - }, - "updateMods": { - "x": 222 - }, - "multi": false - }, - { - "delete": 0, - "filter": { - "_id": 3 - }, - "multi": false - } - ], - "nsInfo": [ - { - "ns": "retryable-writes-tests.coll0" - } - ], - "lsid": { - "$$exists": true - }, - "txnNumber": { - "$$exists": true - } - } - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll0", - "databaseName": "retryable-writes-tests", - "documents": [ - { - "_id": 1, - "x": 12 - }, - { - "_id": 2, - "x": 222 - }, - { - "_id": 4, - "x": 44 - } - ] - } - ] - }, - { - "description": "client bulkWrite with multi: true operations fails after retryable top-level error", - "operations": [ - { - "object": "testRunner", - "name": "failPoint", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "bulkWrite" - ], - "errorCode": 189, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "updateMany": { - "namespace": "retryable-writes-tests.coll0", - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - } - } - }, - { - "deleteMany": { - "namespace": "retryable-writes-tests.coll0", - "filter": { - "_id": 3 - } - } - } - ] - }, - "expectError": { - "errorCode": 189, - "errorLabelsContain": [ - "RetryableWriteError" - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": true, - "ordered": true, - "ops": [ - { - "update": 0, - "filter": { - "_id": 1 - }, - "updateMods": { - "$inc": { - "x": 1 - } - }, - "multi": true - }, - { - "delete": 0, - "filter": { - "_id": 3 - }, - "multi": true - } - ], - "nsInfo": [ - { - "ns": "retryable-writes-tests.coll0" - } - ] - } - } - } - ] - } - ] - }, - { - "description": "client bulkWrite with no multi: true operations succeeds after retryable writeConcernError", - "operations": [ - { - "object": "testRunner", - "name": "failPoint", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "bulkWrite" - ], - "errorLabels": [ - "RetryableWriteError" - ], - "writeConcernError": { - "code": 91, - "errmsg": "Replication is being shut down" - } - } - } - } - }, - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "retryable-writes-tests.coll0", - "document": { - "_id": 4, - "x": 44 - } - } - }, - { - "updateOne": { - "namespace": "retryable-writes-tests.coll0", - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - } - } - }, - { - "replaceOne": { - "namespace": "retryable-writes-tests.coll0", - "filter": { - "_id": 2 - }, - "replacement": { - "x": 222 - } - } - }, - { - "deleteOne": { - "namespace": "retryable-writes-tests.coll0", - "filter": { - "_id": 3 - } - } - } - ], - "verboseResults": true - }, - "expectResult": { - "insertedCount": 1, - "upsertedCount": 0, - "matchedCount": 2, - "modifiedCount": 2, - "deletedCount": 1, - "insertResults": { - "0": { - "insertedId": 4 - } - }, - "updateResults": { - "1": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedId": { - "$$exists": false - } - }, - "2": { - "matchedCount": 1, - "modifiedCount": 1, - "upsertedId": { - "$$exists": false - } - } - }, - "deleteResults": { - "3": { - "deletedCount": 1 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "ops": [ - { - "insert": 0, - "document": { - "_id": 4, - "x": 44 - } - }, - { - "update": 0, - "filter": { - "_id": 1 - }, - "updateMods": { - "$inc": { - "x": 1 - } - }, - "multi": false - }, - { - "update": 0, - "filter": { - "_id": 2 - }, - "updateMods": { - "x": 222 - }, - "multi": false - }, - { - "delete": 0, - "filter": { - "_id": 3 - }, - "multi": false - } - ], - "nsInfo": [ - { - "ns": "retryable-writes-tests.coll0" - } - ], - "lsid": { - "$$exists": true - }, - "txnNumber": { - "$$exists": true - } - } - } - }, - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": false, - "ordered": true, - "ops": [ - { - "insert": 0, - "document": { - "_id": 4, - "x": 44 - } - }, - { - "update": 0, - "filter": { - "_id": 1 - }, - "updateMods": { - "$inc": { - "x": 1 - } - }, - "multi": false - }, - { - "update": 0, - "filter": { - "_id": 2 - }, - "updateMods": { - "x": 222 - }, - "multi": false - }, - { - "delete": 0, - "filter": { - "_id": 3 - }, - "multi": false - } - ], - "nsInfo": [ - { - "ns": "retryable-writes-tests.coll0" - } - ], - "lsid": { - "$$exists": true - }, - "txnNumber": { - "$$exists": true - } - } - } - } - ] - } - ] - }, - { - "description": "client bulkWrite with multi: true operations fails after retryable writeConcernError", - "operations": [ - { - "object": "testRunner", - "name": "failPoint", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "bulkWrite" - ], - "errorLabels": [ - "RetryableWriteError" - ], - "writeConcernError": { - "code": 91, - "errmsg": "Replication is being shut down" - } - } - } - } - }, - { - "object": "client0", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "updateMany": { - "namespace": "retryable-writes-tests.coll0", - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - } - } - }, - { - "deleteMany": { - "namespace": "retryable-writes-tests.coll0", - "filter": { - "_id": 3 - } - } - } - ] - }, - "expectError": { - "writeConcernErrors": [ - { - "code": 91, - "message": "Replication is being shut down" - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": true, - "ordered": true, - "ops": [ - { - "update": 0, - "filter": { - "_id": 1 - }, - "updateMods": { - "$inc": { - "x": 1 - } - }, - "multi": true - }, - { - "delete": 0, - "filter": { - "_id": 3 - }, - "multi": true - } - ], - "nsInfo": [ - { - "ns": "retryable-writes-tests.coll0" - } - ] - } - } - } - ] - } - ] - }, - { - "description": "client bulkWrite with retryWrites: false does not retry", - "operations": [ - { - "object": "testRunner", - "name": "failPoint", - "arguments": { - "client": "clientRetryWritesFalse", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "bulkWrite" - ], - "errorCode": 189, - "errorLabels": [ - "RetryableWriteError" - ] - } - } - } - }, - { - "object": "clientRetryWritesFalse", - "name": "clientBulkWrite", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "retryable-writes-tests.coll0", - "document": { - "_id": 4, - "x": 44 - } - } - } - ] - }, - "expectError": { - "errorCode": 189, - "errorLabelsContain": [ - "RetryableWriteError" - ] - } - } - ], - "expectEvents": [ - { - "client": "clientRetryWritesFalse", - "events": [ - { - "commandStartedEvent": { - "commandName": "bulkWrite", - "databaseName": "admin", - "command": { - "bulkWrite": 1, - "errorsOnly": true, - "ordered": true, - "ops": [ - { - "insert": 0, - "document": { - "_id": 4, - "x": 44 - } - } - ], - "nsInfo": [ - { - "ns": "retryable-writes-tests.coll0" - } - ] - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/retryable-writes/unified/client-bulkWrite-serverErrors.yml b/testdata/retryable-writes/unified/client-bulkWrite-serverErrors.yml deleted file mode 100644 index 722e5cc8e0..0000000000 --- a/testdata/retryable-writes/unified/client-bulkWrite-serverErrors.yml +++ /dev/null @@ -1,413 +0,0 @@ -description: "client bulkWrite retryable writes" -schemaVersion: "1.21" -runOnRequirements: - - minServerVersion: "8.0" - topologies: - - replicaset - - sharded - - load-balanced - serverless: forbid - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent ] - useMultipleMongoses: false - - client: - id: &clientRetryWritesFalse clientRetryWritesFalse - uriOptions: - retryWrites: false - observeEvents: [ commandStartedEvent ] - useMultipleMongoses: false - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name retryable-writes-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name coll0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - -_yamlAnchors: - namespace: &namespace "retryable-writes-tests.coll0" - -tests: - - description: "client bulkWrite with no multi: true operations succeeds after retryable top-level error" - operations: - - object: testRunner - name: failPoint - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: - times: 1 - data: - failCommands: [ bulkWrite ] - errorCode: 189 # PrimarySteppedDown - errorLabels: [ RetryableWriteError ] - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: { _id: 4, x: 44 } - - updateOne: - namespace: *namespace - filter: { _id: 1 } - update: - $inc: { x: 1 } - - replaceOne: - namespace: *namespace - filter: { _id: 2 } - replacement: { x: 222 } - - deleteOne: - namespace: *namespace - filter: { _id: 3 } - verboseResults: true - expectResult: - insertedCount: 1 - upsertedCount: 0 - matchedCount: 2 - modifiedCount: 2 - deletedCount: 1 - insertResults: - 0: - insertedId: 4 - updateResults: - 1: - matchedCount: 1 - modifiedCount: 1 - upsertedId: { $$exists: false } - 2: - matchedCount: 1 - modifiedCount: 1 - upsertedId: { $$exists: false } - deleteResults: - 3: - deletedCount: 1 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - ops: - - insert: 0 - document: { _id: 4, x: 44 } - - update: 0 - filter: { _id: 1 } - updateMods: - $inc: { x: 1 } - multi: false - - update: 0 - filter: { _id: 2 } - updateMods: { x: 222 } - multi: false - - delete: 0 - filter: { _id: 3 } - multi: false - nsInfo: - - ns: *namespace - lsid: { $$exists: true } - txnNumber: { $$exists: true } - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - ops: - - insert: 0 - document: { _id: 4, x: 44 } - - update: 0 - filter: { _id: 1 } - updateMods: - $inc: { x: 1 } - multi: false - - update: 0 - filter: { _id: 2 } - updateMods: { x: 222 } - multi: false - - delete: 0 - filter: { _id: 3 } - multi: false - nsInfo: - - ns: *namespace - lsid: { $$exists: true } - txnNumber: { $$exists: true } - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 12 } - - { _id: 2, x: 222 } - - { _id: 4, x: 44 } - - description: "client bulkWrite with multi: true operations fails after retryable top-level error" - operations: - - object: testRunner - name: failPoint - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: - times: 1 - data: - failCommands: [ bulkWrite ] - errorCode: 189 # PrimarySteppedDown - errorLabels: [ RetryableWriteError ] - - object: *client0 - name: clientBulkWrite - arguments: - models: - - updateMany: - namespace: *namespace - filter: { _id: 1 } - update: - $inc: { x: 1 } - - deleteMany: - namespace: *namespace - filter: { _id: 3 } - expectError: - errorCode: 189 - errorLabelsContain: [ RetryableWriteError ] - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: true - ordered: true - ops: - - update: 0 - filter: { _id: 1 } - updateMods: - $inc: { x: 1 } - multi: true - - delete: 0 - filter: { _id: 3 } - multi: true - nsInfo: - - ns: *namespace - - description: "client bulkWrite with no multi: true operations succeeds after retryable writeConcernError" - operations: - - object: testRunner - name: failPoint - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: - times: 1 - data: - failCommands: [ bulkWrite ] - errorLabels: [ RetryableWriteError ] - writeConcernError: - code: 91 - errmsg: "Replication is being shut down" - - object: *client0 - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: { _id: 4, x: 44 } - - updateOne: - namespace: *namespace - filter: { _id: 1 } - update: - $inc: { x: 1 } - - replaceOne: - namespace: *namespace - filter: { _id: 2 } - replacement: { x: 222 } - - deleteOne: - namespace: *namespace - filter: { _id: 3 } - verboseResults: true - expectResult: - insertedCount: 1 - upsertedCount: 0 - matchedCount: 2 - modifiedCount: 2 - deletedCount: 1 - insertResults: - 0: - insertedId: 4 - updateResults: - 1: - matchedCount: 1 - modifiedCount: 1 - upsertedId: { $$exists: false } - 2: - matchedCount: 1 - modifiedCount: 1 - upsertedId: { $$exists: false } - deleteResults: - 3: - deletedCount: 1 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - ops: - - insert: 0 - document: { _id: 4, x: 44 } - - update: 0 - filter: { _id: 1 } - updateMods: - $inc: { x: 1 } - multi: false - - update: 0 - filter: { _id: 2 } - updateMods: { x: 222 } - multi: false - - delete: 0 - filter: { _id: 3 } - multi: false - nsInfo: - - ns: *namespace - lsid: { $$exists: true } - txnNumber: { $$exists: true } - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: false - ordered: true - ops: - - insert: 0 - document: { _id: 4, x: 44 } - - update: 0 - filter: { _id: 1 } - updateMods: - $inc: { x: 1 } - multi: false - - update: 0 - filter: { _id: 2 } - updateMods: { x: 222 } - multi: false - - delete: 0 - filter: { _id: 3 } - multi: false - nsInfo: - - ns: *namespace - lsid: { $$exists: true } - txnNumber: { $$exists: true } - - description: "client bulkWrite with multi: true operations fails after retryable writeConcernError" - operations: - - object: testRunner - name: failPoint - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: - times: 1 - data: - failCommands: [ bulkWrite ] - errorLabels: [ RetryableWriteError ] - writeConcernError: - code: 91 - errmsg: "Replication is being shut down" - - object: *client0 - name: clientBulkWrite - arguments: - models: - - updateMany: - namespace: *namespace - filter: { _id: 1 } - update: - $inc: { x: 1 } - - deleteMany: - namespace: *namespace - filter: { _id: 3 } - expectError: - writeConcernErrors: - - code: 91 - message: "Replication is being shut down" - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: true - ordered: true - ops: - - update: 0 - filter: { _id: 1 } - updateMods: - $inc: { x: 1 } - multi: true - - delete: 0 - filter: { _id: 3 } - multi: true - nsInfo: - - ns: *namespace - - description: "client bulkWrite with retryWrites: false does not retry" - operations: - - object: testRunner - name: failPoint - arguments: - client: *clientRetryWritesFalse - failPoint: - configureFailPoint: failCommand - mode: - times: 1 - data: - failCommands: [ bulkWrite ] - errorCode: 189 # PrimarySteppedDown - errorLabels: [ RetryableWriteError ] - - object: *clientRetryWritesFalse - name: clientBulkWrite - arguments: - models: - - insertOne: - namespace: *namespace - document: { _id: 4, x: 44 } - expectError: - errorCode: 189 - errorLabelsContain: [ RetryableWriteError ] - expectEvents: - - client: *clientRetryWritesFalse - events: - - commandStartedEvent: - commandName: bulkWrite - databaseName: admin - command: - bulkWrite: 1 - errorsOnly: true - ordered: true - ops: - - insert: 0 - document: { _id: 4, x: 44 } - nsInfo: - - ns: *namespace diff --git a/testdata/retryable-writes/unified/insertOne-noWritesPerformedError.yml b/testdata/retryable-writes/unified/insertOne-noWritesPerformedError.yml deleted file mode 100644 index 3295d153dd..0000000000 --- a/testdata/retryable-writes/unified/insertOne-noWritesPerformedError.yml +++ /dev/null @@ -1,54 +0,0 @@ -description: "retryable-writes insertOne noWritesPerformedErrors" - -schemaVersion: "1.0" - -runOnRequirements: - - minServerVersion: "6.0" - topologies: [ replicaset ] - -createEntities: - - client: - id: &client0 client0 - useMultipleMongoses: false - observeEvents: [ commandFailedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &databaseName retryable-writes-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collectionName no-writes-performed-collection - -tests: - - description: "InsertOne fails after NoWritesPerformed error" - operations: - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: - times: 2 - data: - failCommands: - - insert - errorCode: 64 - errorLabels: - - NoWritesPerformed - - RetryableWriteError - - name: insertOne - object: *collection0 - arguments: - document: - x: 1 - expectError: - errorCode: 64 - errorLabelsContain: - - NoWritesPerformed - - RetryableWriteError - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: [] diff --git a/testdata/retryable-writes/unified/insertOne-noWritesPerformedErrors.json b/testdata/retryable-writes/unified/insertOne-noWritesPerformedErrors.json deleted file mode 100644 index 3194e91c5c..0000000000 --- a/testdata/retryable-writes/unified/insertOne-noWritesPerformedErrors.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "description": "retryable-writes insertOne noWritesPerformedErrors", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "6.0", - "topologies": [ - "replicaset" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "useMultipleMongoses": false, - "observeEvents": [ - "commandFailedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "retryable-writes-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "no-writes-performed-collection" - } - } - ], - "tests": [ - { - "description": "InsertOne fails after NoWritesPerformed error", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "insert" - ], - "errorCode": 64, - "errorLabels": [ - "NoWritesPerformed", - "RetryableWriteError" - ] - } - } - } - }, - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "x": 1 - } - }, - "expectError": { - "errorCode": 64, - "errorLabelsContain": [ - "NoWritesPerformed", - "RetryableWriteError" - ] - } - } - ], - "outcome": [ - { - "collectionName": "no-writes-performed-collection", - "databaseName": "retryable-writes-tests", - "documents": [] - } - ] - } - ] -} diff --git a/testdata/retryable-writes/unified/insertOne-serverErrors.json b/testdata/retryable-writes/unified/insertOne-serverErrors.json deleted file mode 100644 index f404adcaf4..0000000000 --- a/testdata/retryable-writes/unified/insertOne-serverErrors.json +++ /dev/null @@ -1,865 +0,0 @@ -{ - "description": "retryable-writes insertOne serverErrors", - "schemaVersion": "1.9", - "runOnRequirements": [ - { - "minServerVersion": "4.0", - "topologies": [ - "replicaset" - ] - }, - { - "minServerVersion": "4.1.7", - "topologies": [ - "sharded", - "load-balanced" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "retryable-writes-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "coll" - } - } - ], - "initialData": [ - { - "collectionName": "coll", - "databaseName": "retryable-writes-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ], - "tests": [ - { - "description": "InsertOne succeeds after retryable writeConcernError", - "runOnRequirements": [ - { - "minServerVersion": "4.3.1" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "errorLabels": [ - "RetryableWriteError" - ], - "writeConcernError": { - "code": 91, - "errmsg": "Replication is being shut down" - } - } - } - } - }, - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 3, - "x": 33 - } - }, - "expectResult": { - "$$unsetOrMatches": { - "insertedId": { - "$$unsetOrMatches": 3 - } - } - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll", - "documents": [ - { - "_id": 3, - "x": 33 - } - ] - }, - "commandName": "insert", - "databaseName": "retryable-writes-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "insert": "coll", - "documents": [ - { - "_id": 3, - "x": 33 - } - ] - }, - "commandName": "insert", - "databaseName": "retryable-writes-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll", - "databaseName": "retryable-writes-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "RetryableWriteError label is added based on top-level code in pre-4.4 server response", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "maxServerVersion": "4.2.99", - "topologies": [ - "replicaset", - "sharded" - ] - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "insert" - ], - "errorCode": 189 - } - } - } - }, - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 3, - "x": 33 - } - }, - "expectError": { - "errorLabelsContain": [ - "RetryableWriteError" - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll", - "documents": [ - { - "_id": 3, - "x": 33 - } - ] - }, - "commandName": "insert", - "databaseName": "retryable-writes-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "insert": "coll", - "documents": [ - { - "_id": 3, - "x": 33 - } - ] - }, - "commandName": "insert", - "databaseName": "retryable-writes-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll", - "databaseName": "retryable-writes-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "RetryableWriteError label is added based on writeConcernError in pre-4.4 mongod response", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "maxServerVersion": "4.2.99", - "topologies": [ - "replicaset" - ] - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "insert" - ], - "writeConcernError": { - "code": 91, - "errmsg": "Replication is being shut down" - } - } - } - } - }, - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 3, - "x": 33 - } - }, - "expectError": { - "errorLabelsContain": [ - "RetryableWriteError" - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll", - "documents": [ - { - "_id": 3, - "x": 33 - } - ] - }, - "commandName": "insert", - "databaseName": "retryable-writes-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "insert": "coll", - "documents": [ - { - "_id": 3, - "x": 33 - } - ] - }, - "commandName": "insert", - "databaseName": "retryable-writes-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll", - "databaseName": "retryable-writes-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "RetryableWriteError label is not added based on writeConcernError in pre-4.4 mongos response", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "maxServerVersion": "4.2.99", - "topologies": [ - "sharded" - ] - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "writeConcernError": { - "code": 91, - "errmsg": "Replication is being shut down" - } - } - } - } - }, - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 3, - "x": 33 - } - }, - "expectError": { - "errorLabelsOmit": [ - "RetryableWriteError" - ] - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "coll", - "documents": [ - { - "_id": 3, - "x": 33 - } - ] - }, - "commandName": "insert", - "databaseName": "retryable-writes-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "coll", - "databaseName": "retryable-writes-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "InsertOne succeeds after connection failure", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "closeConnection": true - } - } - } - }, - { - "object": "collection0", - "name": "insertOne", - "arguments": { - "document": { - "_id": 3, - "x": 33 - } - }, - "expectResult": { - "$$unsetOrMatches": { - "insertedId": { - "$$unsetOrMatches": 3 - } - } - } - } - ], - "outcome": [ - { - "collectionName": "coll", - "databaseName": "retryable-writes-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "InsertOne fails after connection failure when retryWrites option is false", - "operations": [ - { - "object": "testRunner", - "name": "createEntities", - "arguments": { - "entities": [ - { - "client": { - "id": "client1", - "useMultipleMongoses": false, - "uriOptions": { - "retryWrites": false - } - } - }, - { - "database": { - "id": "database1", - "client": "client1", - "databaseName": "retryable-writes-tests" - } - }, - { - "collection": { - "id": "collection1", - "database": "database1", - "collectionName": "coll" - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client1", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "closeConnection": true - } - } - } - }, - { - "object": "collection1", - "name": "insertOne", - "arguments": { - "document": { - "_id": 3, - "x": 33 - } - }, - "expectError": { - "isError": true, - "errorLabelsOmit": [ - "RetryableWriteError" - ] - } - } - ], - "outcome": [ - { - "collectionName": "coll", - "databaseName": "retryable-writes-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "InsertOne fails after Interrupted", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "errorCode": 11601, - "closeConnection": false - } - } - } - }, - { - "object": "collection0", - "name": "insertOne", - "arguments": { - "document": { - "_id": 3, - "x": 33 - } - }, - "expectError": { - "isError": true, - "errorLabelsOmit": [ - "RetryableWriteError" - ] - } - } - ], - "outcome": [ - { - "collectionName": "coll", - "databaseName": "retryable-writes-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - }, - { - "description": "InsertOne fails after WriteConcernError Interrupted", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "writeConcernError": { - "code": 11601, - "errmsg": "operation was interrupted" - } - } - } - } - }, - { - "object": "collection0", - "name": "insertOne", - "arguments": { - "document": { - "_id": 3, - "x": 33 - } - }, - "expectError": { - "isError": true, - "errorLabelsOmit": [ - "RetryableWriteError" - ] - } - } - ], - "outcome": [ - { - "collectionName": "coll", - "databaseName": "retryable-writes-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "InsertOne fails after WriteConcernError WriteConcernFailed", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "writeConcernError": { - "code": 64, - "codeName": "WriteConcernFailed", - "errmsg": "waiting for replication timed out", - "errInfo": { - "wtimeout": true - } - } - } - } - } - }, - { - "object": "collection0", - "name": "insertOne", - "arguments": { - "document": { - "_id": 3, - "x": 33 - } - }, - "expectError": { - "isError": true, - "errorLabelsOmit": [ - "RetryableWriteError" - ] - } - } - ], - "outcome": [ - { - "collectionName": "coll", - "databaseName": "retryable-writes-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - } - ] - } - ] - }, - { - "description": "InsertOne fails with a RetryableWriteError label after two connection failures", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "insert" - ], - "closeConnection": true - } - } - } - }, - { - "object": "collection0", - "name": "insertOne", - "arguments": { - "document": { - "_id": 3, - "x": 33 - } - }, - "expectError": { - "isError": true, - "errorLabelsContain": [ - "RetryableWriteError" - ] - } - } - ], - "outcome": [ - { - "collectionName": "coll", - "databaseName": "retryable-writes-tests", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - ] - } - ] -} diff --git a/testdata/retryable-writes/unified/insertOne-serverErrors.yml b/testdata/retryable-writes/unified/insertOne-serverErrors.yml deleted file mode 100644 index 95fa71ec79..0000000000 --- a/testdata/retryable-writes/unified/insertOne-serverErrors.yml +++ /dev/null @@ -1,406 +0,0 @@ -description: "retryable-writes insertOne serverErrors" - -schemaVersion: "1.9" - -runOnRequirements: - - minServerVersion: "4.0" - topologies: [ replicaset ] - - minServerVersion: "4.1.7" - topologies: [ sharded, load-balanced ] - -createEntities: - - client: - id: &client0 client0 - useMultipleMongoses: false - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &databaseName retryable-writes-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collectionName coll - -initialData: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - -tests: - - description: "InsertOne succeeds after retryable writeConcernError" - runOnRequirements: - - minServerVersion: "4.3.1" # failCommand errorLabels option - operations: - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ insert ] - errorLabels: [RetryableWriteError] # top-level error labels - writeConcernError: - code: 91 # ShutdownInProgress - errmsg: "Replication is being shut down" - - name: insertOne - object: *collection0 - arguments: - document: { _id: 3, x: 33 } - expectResult: - $$unsetOrMatches: { insertedId: { $$unsetOrMatches: 3 } } - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collectionName - documents: [{ _id: 3, x: 33 }] - commandName: insert - databaseName: *databaseName - - commandStartedEvent: - command: - insert: *collectionName - documents: [{ _id: 3, x: 33 }] - commandName: insert - databaseName: *databaseName - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } # The write was still applied - - - description: "RetryableWriteError label is added based on top-level code in pre-4.4 server response" - runOnRequirements: - - minServerVersion: "4.2" - maxServerVersion: "4.2.99" - topologies: [ replicaset, sharded ] - operations: - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - # Trigger the fail point twice to allow asserting the error label in - # the retry attempt's response. - mode: { times: 2 } - data: - failCommands: [ "insert" ] - errorCode: 189 # PrimarySteppedDown - - name: insertOne - object: *collection0 - arguments: - document: { _id: 3, x: 33 } - expectError: - errorLabelsContain: [ "RetryableWriteError" ] - expectEvents: - - client: *client0 - events: - - commandStartedEvent: &insertCommandStartedEvent - command: - insert: *collectionName - documents: [{ _id: 3, x: 33 }] - commandName: insert - databaseName: *databaseName - - commandStartedEvent: *insertCommandStartedEvent - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - - description: "RetryableWriteError label is added based on writeConcernError in pre-4.4 mongod response" - runOnRequirements: - - minServerVersion: "4.2" - maxServerVersion: "4.2.99" - topologies: [ replicaset ] - operations: - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - # Trigger the fail point twice to allow asserting the error label in - # the retry attempt's response. - mode: { times: 2 } - data: - failCommands: [ "insert" ] - writeConcernError: - code: 91 # ShutdownInProgress - errmsg: "Replication is being shut down" - - name: insertOne - object: *collection0 - arguments: - document: { _id: 3, x: 33 } - expectError: - errorLabelsContain: [ "RetryableWriteError" ] - expectEvents: - - client: *client0 - events: - - commandStartedEvent: *insertCommandStartedEvent - - commandStartedEvent: *insertCommandStartedEvent - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - # writeConcernError doesn't prevent the server from applying the write - - { _id: 3, x: 33 } - - - description: "RetryableWriteError label is not added based on writeConcernError in pre-4.4 mongos response" - runOnRequirements: - - minServerVersion: "4.2" - maxServerVersion: "4.2.99" - topologies: [ sharded ] - operations: - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - # Trigger the fail point only once since a RetryableWriteError label - # will not be added and the write will not be retried. - mode: { times: 1 } - data: - failCommands: [ "insert" ] - writeConcernError: - code: 91 # ShutdownInProgress - errmsg: "Replication is being shut down" - - name: insertOne - object: *collection0 - arguments: - document: { _id: 3, x: 33 } - expectError: - errorLabelsOmit: [ "RetryableWriteError" ] - expectEvents: - - client: *client0 - events: - - commandStartedEvent: *insertCommandStartedEvent - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - # writeConcernError doesn't prevent the server from applying the write - - { _id: 3, x: 33 } - - - description: 'InsertOne succeeds after connection failure' - operations: - - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ insert ] - closeConnection: true - - - object: *collection0 - name: insertOne - arguments: - document: { _id: 3, x: 33 } - expectResult: - $$unsetOrMatches: { insertedId: { $$unsetOrMatches: 3 } } - outcome: - - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - - - description: 'InsertOne fails after connection failure when retryWrites option is false' - operations: - - - object: testRunner - name: createEntities - arguments: - entities: - - client: - id: &client1 client1 - useMultipleMongoses: false - uriOptions: - retryWrites: false - - database: - id: &database1 database1 - client: *client1 - databaseName: *databaseName - - collection: - id: &collection1 collection1 - database: *database1 - collectionName: *collectionName - - - name: failPoint - object: testRunner - arguments: - client: *client1 - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ insert ] - closeConnection: true - - - object: *collection1 - name: insertOne - arguments: - document: { _id: 3, x: 33 } - expectError: - isError: true - # If retryWrites is false, the driver should not add the - # RetryableWriteError label to the error. - errorLabelsOmit: - - RetryableWriteError - outcome: - - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - - description: 'InsertOne fails after Interrupted' - operations: - - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ insert ] - errorCode: 11601 - closeConnection: false - - - object: *collection0 - name: insertOne - arguments: - document: { _id: 3, x: 33 } - expectError: - isError: true - errorLabelsOmit: - - RetryableWriteError - outcome: - - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - - description: 'InsertOne fails after WriteConcernError Interrupted' - operations: - - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ insert ] - writeConcernError: - code: 11601 - errmsg: 'operation was interrupted' - - - object: *collection0 - name: insertOne - arguments: - document: { _id: 3, x: 33 } - expectError: - isError: true - errorLabelsOmit: - - RetryableWriteError - outcome: - - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } # The write was still applied. - - - description: 'InsertOne fails after WriteConcernError WriteConcernFailed' - operations: - - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ insert ] - writeConcernError: - code: 64 - codeName: WriteConcernFailed - errmsg: 'waiting for replication timed out' - errInfo: - wtimeout: true - - - object: *collection0 - name: insertOne - arguments: - document: { _id: 3, x: 33 } - expectError: - isError: true - errorLabelsOmit: - - RetryableWriteError - outcome: - - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } # The write was still applied. - - - description: 'InsertOne fails with a RetryableWriteError label after two connection failures' - operations: - - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: { times: 2 } - data: - failCommands: [ insert ] - closeConnection: true - - - object: *collection0 - name: insertOne - arguments: - document: { _id: 3, x: 33 } - expectError: - isError: true - errorLabelsContain: - - RetryableWriteError - outcome: - - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } diff --git a/testdata/run-command/runCommand.json b/testdata/run-command/runCommand.json deleted file mode 100644 index fde9de92e6..0000000000 --- a/testdata/run-command/runCommand.json +++ /dev/null @@ -1,634 +0,0 @@ -{ - "description": "runCommand", - "schemaVersion": "1.3", - "createEntities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "db", - "client": "client", - "databaseName": "db" - } - }, - { - "collection": { - "id": "collection", - "database": "db", - "collectionName": "collection" - } - }, - { - "database": { - "id": "dbWithRC", - "client": "client", - "databaseName": "dbWithRC", - "databaseOptions": { - "readConcern": { - "level": "local" - } - } - } - }, - { - "database": { - "id": "dbWithWC", - "client": "client", - "databaseName": "dbWithWC", - "databaseOptions": { - "writeConcern": { - "w": 0 - } - } - } - }, - { - "session": { - "id": "session", - "client": "client" - } - }, - { - "client": { - "id": "clientWithStableApi", - "observeEvents": [ - "commandStartedEvent" - ], - "serverApi": { - "version": "1", - "strict": true - } - } - }, - { - "database": { - "id": "dbWithStableApi", - "client": "clientWithStableApi", - "databaseName": "dbWithStableApi" - } - } - ], - "initialData": [ - { - "collectionName": "collection", - "databaseName": "db", - "documents": [] - } - ], - "tests": [ - { - "description": "always attaches $db and implicit lsid to given command and omits default readPreference", - "operations": [ - { - "name": "runCommand", - "object": "db", - "arguments": { - "commandName": "ping", - "command": { - "ping": 1 - } - }, - "expectResult": { - "ok": 1 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "ping": 1, - "$db": "db", - "lsid": { - "$$exists": true - }, - "$readPreference": { - "$$exists": false - } - }, - "commandName": "ping" - } - } - ] - } - ] - }, - { - "description": "always gossips the $clusterTime on the sent command", - "runOnRequirements": [ - { - "topologies": [ - "replicaset", - "sharded" - ] - } - ], - "operations": [ - { - "name": "runCommand", - "object": "db", - "arguments": { - "commandName": "ping", - "command": { - "ping": 1 - } - }, - "expectResult": { - "ok": 1 - } - }, - { - "name": "runCommand", - "object": "db", - "arguments": { - "commandName": "ping", - "command": { - "ping": 1 - } - }, - "expectResult": { - "ok": 1 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "commandName": "ping" - } - }, - { - "commandStartedEvent": { - "command": { - "ping": 1, - "$clusterTime": { - "$$exists": true - } - }, - "commandName": "ping" - } - } - ] - } - ] - }, - { - "description": "attaches the provided session lsid to given command", - "operations": [ - { - "name": "runCommand", - "object": "db", - "arguments": { - "commandName": "ping", - "command": { - "ping": 1 - }, - "session": "session" - }, - "expectResult": { - "ok": 1 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "ping": 1, - "lsid": { - "$$sessionLsid": "session" - }, - "$db": "db" - }, - "commandName": "ping" - } - } - ] - } - ] - }, - { - "description": "attaches the provided $readPreference to given command", - "runOnRequirements": [ - { - "topologies": [ - "replicaset", - "load-balanced", - "sharded" - ] - } - ], - "operations": [ - { - "name": "runCommand", - "object": "db", - "arguments": { - "commandName": "ping", - "command": { - "ping": 1 - }, - "readPreference": { - "mode": "nearest" - } - }, - "expectResult": { - "ok": 1 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "ping": 1, - "$readPreference": { - "mode": "nearest" - }, - "$db": "db" - }, - "commandName": "ping" - } - } - ] - } - ] - }, - { - "description": "does not attach $readPreference to given command on standalone", - "runOnRequirements": [ - { - "topologies": [ - "single" - ] - } - ], - "operations": [ - { - "name": "runCommand", - "object": "db", - "arguments": { - "commandName": "ping", - "command": { - "ping": 1 - }, - "readPreference": { - "mode": "nearest" - } - }, - "expectResult": { - "ok": 1 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "ping": 1, - "$readPreference": { - "$$exists": false - }, - "$db": "db" - }, - "commandName": "ping" - } - } - ] - } - ] - }, - { - "description": "does not attach primary $readPreference to given command", - "operations": [ - { - "name": "runCommand", - "object": "db", - "arguments": { - "commandName": "ping", - "command": { - "ping": 1 - }, - "readPreference": { - "mode": "primary" - } - }, - "expectResult": { - "ok": 1 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "ping": 1, - "$readPreference": { - "$$exists": false - }, - "$db": "db" - }, - "commandName": "ping" - } - } - ] - } - ] - }, - { - "description": "does not inherit readConcern specified at the db level", - "operations": [ - { - "name": "runCommand", - "object": "dbWithRC", - "arguments": { - "commandName": "aggregate", - "command": { - "aggregate": "collection", - "pipeline": [], - "cursor": {} - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection", - "readConcern": { - "$$exists": false - }, - "$db": "dbWithRC" - }, - "commandName": "aggregate" - } - } - ] - } - ] - }, - { - "description": "does not inherit writeConcern specified at the db level", - "operations": [ - { - "name": "runCommand", - "object": "dbWithWC", - "arguments": { - "commandName": "insert", - "command": { - "insert": "collection", - "documents": [ - { - "foo": "bar" - } - ], - "ordered": true - } - }, - "expectResult": { - "ok": 1 - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "collection", - "writeConcern": { - "$$exists": false - }, - "$db": "dbWithWC" - }, - "commandName": "insert" - } - } - ] - } - ] - }, - { - "description": "does not retry retryable errors on given command", - "runOnRequirements": [ - { - "minServerVersion": "4.2" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "ping" - ], - "closeConnection": true - } - } - } - }, - { - "name": "runCommand", - "object": "db", - "arguments": { - "commandName": "ping", - "command": { - "ping": 1 - } - }, - "expectError": { - "isClientError": true - } - } - ] - }, - { - "description": "attaches transaction fields to given command", - "runOnRequirements": [ - { - "minServerVersion": "4.0", - "topologies": [ - "replicaset" - ] - }, - { - "minServerVersion": "4.2", - "topologies": [ - "sharded", - "load-balanced" - ] - } - ], - "operations": [ - { - "name": "withTransaction", - "object": "session", - "arguments": { - "callback": [ - { - "name": "runCommand", - "object": "db", - "arguments": { - "session": "session", - "commandName": "insert", - "command": { - "insert": "collection", - "documents": [ - { - "foo": "transaction" - } - ], - "ordered": true - } - }, - "expectResult": { - "$$unsetOrMatches": { - "insertedId": { - "$$unsetOrMatches": 1 - } - } - } - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "collection", - "documents": [ - { - "foo": "transaction" - } - ], - "ordered": true, - "lsid": { - "$$sessionLsid": "session" - }, - "txnNumber": 1, - "startTransaction": true, - "autocommit": false, - "readConcern": { - "$$exists": false - }, - "writeConcern": { - "$$exists": false - } - }, - "commandName": "insert", - "databaseName": "db" - } - }, - { - "commandStartedEvent": { - "command": { - "commitTransaction": 1, - "lsid": { - "$$sessionLsid": "session" - }, - "txnNumber": 1, - "autocommit": false, - "writeConcern": { - "$$exists": false - }, - "readConcern": { - "$$exists": false - } - }, - "commandName": "commitTransaction", - "databaseName": "admin" - } - } - ] - } - ] - }, - { - "description": "attaches apiVersion fields to given command when stableApi is configured on the client", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "runCommand", - "object": "dbWithStableApi", - "arguments": { - "commandName": "ping", - "command": { - "ping": 1 - } - }, - "expectResult": { - "ok": 1 - } - } - ], - "expectEvents": [ - { - "client": "clientWithStableApi", - "events": [ - { - "commandStartedEvent": { - "command": { - "ping": 1, - "$db": "dbWithStableApi", - "apiVersion": "1", - "apiStrict": true, - "apiDeprecationErrors": { - "$$unsetOrMatches": false - } - }, - "commandName": "ping" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/run-command/runCommand.yml b/testdata/run-command/runCommand.yml deleted file mode 100644 index bc55d79205..0000000000 --- a/testdata/run-command/runCommand.yml +++ /dev/null @@ -1,319 +0,0 @@ -description: runCommand - -schemaVersion: "1.3" - -createEntities: - - client: - id: &client client - useMultipleMongoses: false - observeEvents: [commandStartedEvent] - - database: - id: &db db - client: *client - databaseName: *db - - collection: - id: &collection collection - database: *db - collectionName: *collection - - database: - id: &dbWithRC dbWithRC - client: *client - databaseName: *dbWithRC - databaseOptions: - readConcern: { level: 'local' } - - database: - id: &dbWithWC dbWithWC - client: *client - databaseName: *dbWithWC - databaseOptions: - writeConcern: { w: 0 } - - session: - id: &session session - client: *client - # Stable API test - - client: - id: &clientWithStableApi clientWithStableApi - observeEvents: [commandStartedEvent] - serverApi: - version: "1" - strict: true - - database: - id: &dbWithStableApi dbWithStableApi - client: *clientWithStableApi - databaseName: *dbWithStableApi - -initialData: -- collectionName: *collection - databaseName: *db - documents: [] - -tests: - - description: always attaches $db and implicit lsid to given command and omits default readPreference - operations: - - name: runCommand - object: *db - arguments: - commandName: ping - command: { ping: 1 } - expectResult: { ok: 1 } - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - ping: 1 - $db: *db - lsid: { $$exists: true } - $readPreference: { $$exists: false } - commandName: ping - - - description: always gossips the $clusterTime on the sent command - runOnRequirements: - # Only replicasets and sharded clusters have a $clusterTime - - topologies: [ replicaset, sharded ] - operations: - # We have to run one command to obtain a clusterTime to gossip - - name: runCommand - object: *db - arguments: - commandName: ping - command: { ping: 1 } - expectResult: { ok: 1 } - - name: runCommand - object: *db - arguments: - commandName: ping - command: { ping: 1 } - expectResult: { ok: 1 } - expectEvents: - - client: *client - events: - - commandStartedEvent: - commandName: ping - # Only check the shape of the second ping which should have the $clusterTime received from the first operation - - commandStartedEvent: - command: - ping: 1 - $clusterTime: { $$exists: true } - commandName: ping - - - description: attaches the provided session lsid to given command - operations: - - name: runCommand - object: *db - arguments: - commandName: ping - command: { ping: 1 } - session: *session - expectResult: { ok: 1 } - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - ping: 1 - lsid: { $$sessionLsid: *session } - $db: *db - commandName: ping - - - description: attaches the provided $readPreference to given command - runOnRequirements: - # Exclude single topology, which is most likely a standalone server - - topologies: [ replicaset, load-balanced, sharded ] - operations: - - name: runCommand - object: *db - arguments: - commandName: ping - command: { ping: 1 } - readPreference: &readPreference { mode: 'nearest' } - expectResult: { ok: 1 } - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - ping: 1 - $readPreference: *readPreference - $db: *db - commandName: ping - - - description: does not attach $readPreference to given command on standalone - runOnRequirements: - # This test assumes that the single topology contains a standalone server; - # however, it is possible for a single topology to contain a direct - # connection to another server type. - # See: https://github.com/mongodb/specifications/blob/master/source/server-selection/server-selection.md#topology-type-single - - topologies: [ single ] - operations: - - name: runCommand - object: *db - arguments: - commandName: ping - command: { ping: 1 } - readPreference: { mode: 'nearest' } - expectResult: { ok: 1 } - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - ping: 1 - $readPreference: { $$exists: false } - $db: *db - commandName: ping - - - description: does not attach primary $readPreference to given command - operations: - - name: runCommand - object: *db - arguments: - commandName: ping - command: { ping: 1 } - readPreference: { mode: 'primary' } - expectResult: { ok: 1 } - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - ping: 1 - $readPreference: { $$exists: false } - $db: *db - commandName: ping - - - description: does not inherit readConcern specified at the db level - operations: - - name: runCommand - object: *dbWithRC - # Test with a command that supports a readConcern option. - # expectResult is intentionally omitted because some drivers - # may automatically convert command responses into cursors. - arguments: - commandName: aggregate - command: { aggregate: *collection, pipeline: [], cursor: {} } - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - aggregate: *collection - readConcern: { $$exists: false } - $db: *dbWithRC - commandName: aggregate - - - description: does not inherit writeConcern specified at the db level - operations: - - name: runCommand - object: *dbWithWC - arguments: - commandName: insert - command: - insert: *collection - documents: [ { foo: 'bar' } ] - ordered: true - expectResult: { ok: 1 } - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - insert: *collection - writeConcern: { $$exists: false } - $db: *dbWithWC - commandName: insert - - - description: does not retry retryable errors on given command - runOnRequirements: - - minServerVersion: "4.2" - operations: - - name: failPoint - object: testRunner - arguments: - client: *client - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ping] - closeConnection: true - - name: runCommand - object: *db - arguments: - commandName: ping - command: { ping: 1 } - expectError: - isClientError: true - - - description: attaches transaction fields to given command - runOnRequirements: - - minServerVersion: "4.0" - topologies: [ replicaset ] - - minServerVersion: "4.2" - topologies: [ sharded, load-balanced ] - operations: - - name: withTransaction - object: *session - arguments: - callback: - - name: runCommand - object: *db - arguments: - session: *session - commandName: insert - command: - insert: *collection - documents: [ { foo: 'transaction' } ] - ordered: true - expectResult: { $$unsetOrMatches: { insertedId: { $$unsetOrMatches: 1 } } } - expectEvents: - - client: *client - events: - - commandStartedEvent: - command: - insert: *collection - documents: [ { foo: 'transaction' } ] - ordered: true - lsid: { $$sessionLsid: *session } - txnNumber: 1 - startTransaction: true - autocommit: false - # omitted fields - readConcern: { $$exists: false } - writeConcern: { $$exists: false } - commandName: insert - databaseName: *db - - commandStartedEvent: - command: - commitTransaction: 1 - lsid: { $$sessionLsid: *session } - txnNumber: 1 - autocommit: false - # omitted fields - writeConcern: { $$exists: false } - readConcern: { $$exists: false } - commandName: commitTransaction - databaseName: admin - - - description: attaches apiVersion fields to given command when stableApi is configured on the client - runOnRequirements: - - minServerVersion: "5.0" - operations: - - name: runCommand - object: *dbWithStableApi - arguments: - commandName: ping - command: - ping: 1 - expectResult: { ok: 1 } - expectEvents: - - client: *clientWithStableApi - events: - - commandStartedEvent: - command: - ping: 1 - $db: *dbWithStableApi - apiVersion: "1" - apiStrict: true - apiDeprecationErrors: { $$unsetOrMatches: false } - commandName: ping diff --git a/testdata/run-command/runCursorCommand.json b/testdata/run-command/runCursorCommand.json deleted file mode 100644 index 4f1ec8a01a..0000000000 --- a/testdata/run-command/runCursorCommand.json +++ /dev/null @@ -1,877 +0,0 @@ -{ - "description": "runCursorCommand", - "schemaVersion": "1.9", - "createEntities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent", - "connectionReadyEvent", - "connectionCheckedOutEvent", - "connectionCheckedInEvent" - ] - } - }, - { - "session": { - "id": "session", - "client": "client" - } - }, - { - "database": { - "id": "db", - "client": "client", - "databaseName": "db" - } - }, - { - "collection": { - "id": "collection", - "database": "db", - "collectionName": "collection" - } - } - ], - "initialData": [ - { - "collectionName": "collection", - "databaseName": "db", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 5, - "x": 55 - } - ] - } - ], - "tests": [ - { - "description": "successfully executes checkMetadataConsistency cursor creating command", - "runOnRequirements": [ - { - "minServerVersion": "7.0", - "topologies": [ - "sharded" - ] - } - ], - "operations": [ - { - "name": "runCursorCommand", - "object": "db", - "arguments": { - "commandName": "checkMetadataConsistency", - "command": { - "checkMetadataConsistency": 1 - } - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "command": { - "checkMetadataConsistency": 1, - "$db": "db", - "lsid": { - "$$exists": true - } - }, - "commandName": "checkMetadataConsistency" - } - } - ] - } - ] - }, - { - "description": "errors if the command response is not a cursor", - "operations": [ - { - "name": "createCommandCursor", - "object": "db", - "arguments": { - "commandName": "ping", - "command": { - "ping": 1 - } - }, - "expectError": { - "isClientError": true - } - } - ] - }, - { - "description": "creates an implicit session that is reused across getMores", - "operations": [ - { - "name": "runCursorCommand", - "object": "db", - "arguments": { - "commandName": "find", - "command": { - "find": "collection", - "batchSize": 2 - } - }, - "expectResult": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 5, - "x": 55 - } - ] - }, - { - "name": "assertSameLsidOnLastTwoCommands", - "object": "testRunner", - "arguments": { - "client": "client" - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "collection", - "batchSize": 2, - "$db": "db", - "lsid": { - "$$exists": true - } - }, - "commandName": "find" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "collection", - "$db": "db", - "lsid": { - "$$exists": true - } - }, - "commandName": "getMore" - } - } - ] - } - ] - }, - { - "description": "accepts an explicit session that is reused across getMores", - "operations": [ - { - "name": "runCursorCommand", - "object": "db", - "arguments": { - "commandName": "find", - "session": "session", - "command": { - "find": "collection", - "batchSize": 2 - } - }, - "expectResult": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 5, - "x": 55 - } - ] - }, - { - "name": "assertSameLsidOnLastTwoCommands", - "object": "testRunner", - "arguments": { - "client": "client" - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "collection", - "batchSize": 2, - "$db": "db", - "lsid": { - "$$sessionLsid": "session" - } - }, - "commandName": "find" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "collection", - "$db": "db", - "lsid": { - "$$sessionLsid": "session" - } - }, - "commandName": "getMore" - } - } - ] - } - ] - }, - { - "description": "returns pinned connections to the pool when the cursor is exhausted", - "runOnRequirements": [ - { - "topologies": [ - "load-balanced" - ] - } - ], - "operations": [ - { - "name": "createCommandCursor", - "object": "db", - "arguments": { - "commandName": "find", - "batchSize": 2, - "session": "session", - "command": { - "find": "collection", - "batchSize": 2 - } - }, - "saveResultAsEntity": "cursor" - }, - { - "name": "assertNumberConnectionsCheckedOut", - "object": "testRunner", - "arguments": { - "client": "client", - "connections": 1 - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "cursor", - "expectResult": { - "_id": 1, - "x": 11 - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "cursor", - "expectResult": { - "_id": 2, - "x": 22 - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "cursor", - "expectResult": { - "_id": 3, - "x": 33 - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "cursor", - "expectResult": { - "_id": 4, - "x": 44 - } - }, - { - "name": "iterateUntilDocumentOrError", - "object": "cursor", - "expectResult": { - "_id": 5, - "x": 55 - } - }, - { - "name": "assertNumberConnectionsCheckedOut", - "object": "testRunner", - "arguments": { - "client": "client", - "connections": 0 - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "collection", - "batchSize": 2, - "$db": "db", - "lsid": { - "$$sessionLsid": "session" - } - }, - "commandName": "find" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "collection", - "$db": "db", - "lsid": { - "$$sessionLsid": "session" - } - }, - "commandName": "getMore" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "collection", - "$db": "db", - "lsid": { - "$$sessionLsid": "session" - } - }, - "commandName": "getMore" - } - } - ] - }, - { - "client": "client", - "eventType": "cmap", - "events": [ - { - "connectionReadyEvent": {} - }, - { - "connectionCheckedOutEvent": {} - }, - { - "connectionCheckedInEvent": {} - } - ] - } - ] - }, - { - "description": "returns pinned connections to the pool when the cursor is closed", - "runOnRequirements": [ - { - "topologies": [ - "load-balanced" - ] - } - ], - "operations": [ - { - "name": "createCommandCursor", - "object": "db", - "arguments": { - "commandName": "find", - "command": { - "find": "collection", - "batchSize": 2 - } - }, - "saveResultAsEntity": "cursor" - }, - { - "name": "assertNumberConnectionsCheckedOut", - "object": "testRunner", - "arguments": { - "client": "client", - "connections": 1 - } - }, - { - "name": "close", - "object": "cursor" - }, - { - "name": "assertNumberConnectionsCheckedOut", - "object": "testRunner", - "arguments": { - "client": "client", - "connections": 0 - } - } - ] - }, - { - "description": "supports configuring getMore batchSize", - "operations": [ - { - "name": "runCursorCommand", - "object": "db", - "arguments": { - "commandName": "find", - "batchSize": 5, - "command": { - "find": "collection", - "batchSize": 1 - } - }, - "expectResult": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 5, - "x": 55 - } - ] - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "collection", - "batchSize": 1, - "$db": "db", - "lsid": { - "$$exists": true - } - }, - "commandName": "find" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "collection", - "batchSize": 5, - "$db": "db", - "lsid": { - "$$exists": true - } - }, - "commandName": "getMore" - } - } - ] - } - ] - }, - { - "description": "supports configuring getMore maxTimeMS", - "operations": [ - { - "name": "runCursorCommand", - "object": "db", - "arguments": { - "commandName": "find", - "maxTimeMS": 300, - "command": { - "find": "collection", - "maxTimeMS": 200, - "batchSize": 1 - } - }, - "ignoreResultAndError": true - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "ignoreExtraEvents": true, - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "collection", - "maxTimeMS": 200, - "batchSize": 1, - "$db": "db", - "lsid": { - "$$exists": true - } - }, - "commandName": "find" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "collection", - "$db": "db", - "maxTimeMS": 300, - "lsid": { - "$$exists": true - } - }, - "commandName": "getMore" - } - } - ] - } - ] - }, - { - "description": "supports configuring getMore comment", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "runCursorCommand", - "object": "db", - "arguments": { - "commandName": "find", - "comment": { - "hello": "getMore" - }, - "command": { - "find": "collection", - "batchSize": 1, - "comment": { - "hello": "find" - } - } - }, - "expectResult": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - }, - { - "_id": 3, - "x": 33 - }, - { - "_id": 4, - "x": 44 - }, - { - "_id": 5, - "x": 55 - } - ] - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "collection", - "batchSize": 1, - "comment": { - "hello": "find" - }, - "$db": "db", - "lsid": { - "$$exists": true - } - }, - "commandName": "find" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "collection", - "comment": { - "hello": "getMore" - }, - "$db": "db", - "lsid": { - "$$exists": true - } - }, - "commandName": "getMore" - } - } - ] - } - ] - }, - { - "description": "does not close the cursor when receiving an empty batch", - "runOnRequirements": [ - { - "serverless": "forbid" - } - ], - "operations": [ - { - "name": "dropCollection", - "object": "db", - "arguments": { - "collection": "cappedCollection" - } - }, - { - "name": "createCollection", - "object": "db", - "arguments": { - "collection": "cappedCollection", - "capped": true, - "size": 4096, - "max": 3 - }, - "saveResultAsEntity": "cappedCollection" - }, - { - "name": "insertMany", - "object": "cappedCollection", - "arguments": { - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 22 - } - ] - } - }, - { - "name": "createCommandCursor", - "object": "db", - "arguments": { - "cursorType": "tailable", - "commandName": "find", - "batchSize": 2, - "command": { - "find": "cappedCollection", - "tailable": true - } - }, - "saveResultAsEntity": "cursor" - }, - { - "name": "iterateOnce", - "object": "cursor" - }, - { - "name": "iterateOnce", - "object": "cursor" - }, - { - "name": "iterateOnce", - "object": "cursor" - }, - { - "name": "close", - "object": "cursor" - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "command": { - "drop": "cappedCollection" - }, - "commandName": "drop" - } - }, - { - "commandStartedEvent": { - "command": { - "create": "cappedCollection" - }, - "commandName": "create" - } - }, - { - "commandStartedEvent": { - "command": { - "insert": "cappedCollection" - }, - "commandName": "insert" - } - }, - { - "commandStartedEvent": { - "command": { - "find": "cappedCollection", - "$db": "db", - "lsid": { - "$$exists": true - } - }, - "commandName": "find" - } - }, - { - "commandStartedEvent": { - "command": { - "getMore": { - "$$type": [ - "int", - "long" - ] - }, - "collection": "cappedCollection", - "$db": "db", - "lsid": { - "$$exists": true - } - }, - "commandName": "getMore" - } - }, - { - "commandStartedEvent": { - "command": { - "killCursors": "cappedCollection", - "cursors": { - "$$type": "array" - } - }, - "commandName": "killCursors" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/run-command/runCursorCommand.yml b/testdata/run-command/runCursorCommand.yml deleted file mode 100644 index 1f9bf532c3..0000000000 --- a/testdata/run-command/runCursorCommand.yml +++ /dev/null @@ -1,391 +0,0 @@ -description: runCursorCommand - -schemaVersion: '1.9' - -createEntities: - - client: - id: &client client - useMultipleMongoses: false - observeEvents: [commandStartedEvent, connectionReadyEvent, connectionCheckedOutEvent, connectionCheckedInEvent] - - session: - id: &session session - client: *client - - database: - id: &db db - client: *client - databaseName: *db - - collection: - id: &collection collection - database: *db - collectionName: *collection - -initialData: - - collectionName: collection - databaseName: *db - documents: &documents - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - { _id: 3, x: 33 } - - { _id: 4, x: 44 } - - { _id: 5, x: 55 } - -tests: - # This is what this API was invented to do. - - description: successfully executes checkMetadataConsistency cursor creating command - runOnRequirements: - - minServerVersion: '7.0' - topologies: [sharded] - operations: - - name: runCursorCommand - object: *db - arguments: - commandName: checkMetadataConsistency - command: { checkMetadataConsistency: 1 } - expectEvents: - - client: *client - eventType: command - events: - - commandStartedEvent: - command: - checkMetadataConsistency: 1 - $db: *db - lsid: { $$exists: true } - commandName: checkMetadataConsistency - - - description: errors if the command response is not a cursor - operations: - - name: createCommandCursor - object: *db - arguments: - commandName: ping - command: { ping: 1 } - expectError: - isClientError: true - - - # Driver Sessions - - description: creates an implicit session that is reused across getMores - operations: - - name: runCursorCommand - object: *db - arguments: - commandName: find - command: { find: *collection, batchSize: 2 } - expectResult: *documents - - name: assertSameLsidOnLastTwoCommands - object: testRunner - arguments: - client: *client - expectEvents: - - client: *client - eventType: command - events: - - commandStartedEvent: - command: - find: *collection - batchSize: 2 - $db: *db - lsid: { $$exists: true } - commandName: find - - commandStartedEvent: - command: - getMore: { $$type: [int, long] } - collection: *collection - $db: *db - lsid: { $$exists: true } - commandName: getMore - - - description: accepts an explicit session that is reused across getMores - operations: - - name: runCursorCommand - object: *db - arguments: - commandName: find - session: *session - command: { find: *collection, batchSize: 2 } - expectResult: *documents - - name: assertSameLsidOnLastTwoCommands - object: testRunner - arguments: - client: *client - expectEvents: - - client: *client - eventType: command - events: - - commandStartedEvent: - command: - find: *collection - batchSize: 2 - $db: *db - lsid: { $$sessionLsid: *session } - commandName: find - - commandStartedEvent: - command: - getMore: { $$type: [int, long] } - collection: *collection - $db: *db - lsid: { $$sessionLsid: *session } - commandName: getMore - - # Load Balancers - - description: returns pinned connections to the pool when the cursor is exhausted - runOnRequirements: - - topologies: [ load-balanced ] - operations: - - name: createCommandCursor - object: *db - arguments: - commandName: find - batchSize: 2 - session: *session - command: { find: *collection, batchSize: 2 } - saveResultAsEntity: &cursor cursor - - name: assertNumberConnectionsCheckedOut - object: testRunner - arguments: - client: *client - connections: 1 - - name: iterateUntilDocumentOrError - object: *cursor - expectResult: { _id: 1, x: 11 } - - name: iterateUntilDocumentOrError - object: *cursor - expectResult: { _id: 2, x: 22 } - - name: iterateUntilDocumentOrError - object: *cursor - expectResult: { _id: 3, x: 33 } - - name: iterateUntilDocumentOrError - object: *cursor - expectResult: { _id: 4, x: 44 } - - name: iterateUntilDocumentOrError - object: *cursor - expectResult: { _id: 5, x: 55 } - - name: assertNumberConnectionsCheckedOut - object: testRunner - arguments: - client: *client - connections: 0 - expectEvents: - - client: *client - eventType: command - events: - - commandStartedEvent: - command: - find: *collection - batchSize: 2 - $db: *db - lsid: { $$sessionLsid: *session } - commandName: find # 2 documents - - commandStartedEvent: - command: - getMore: { $$type: [int, long] } - collection: *collection - $db: *db - lsid: { $$sessionLsid: *session } - commandName: getMore # 2 documents - - commandStartedEvent: - command: - getMore: { $$type: [int, long] } - collection: *collection - $db: *db - lsid: { $$sessionLsid: *session } - commandName: getMore # 1 document - # Total documents: 5 - - client: *client - eventType: cmap - events: - - connectionReadyEvent: {} - - connectionCheckedOutEvent: {} - - connectionCheckedInEvent: {} - - - description: returns pinned connections to the pool when the cursor is closed - runOnRequirements: - - topologies: [ load-balanced ] - operations: - - name: createCommandCursor - object: *db - arguments: - commandName: find - command: { find: *collection, batchSize: 2 } - saveResultAsEntity: *cursor - - name: assertNumberConnectionsCheckedOut - object: testRunner - arguments: - client: *client - connections: 1 - - name: close - object: *cursor - - name: assertNumberConnectionsCheckedOut - object: testRunner - arguments: - client: *client - connections: 0 - - # Iterating the Cursor / Executing GetMores - - description: supports configuring getMore batchSize - operations: - - name: runCursorCommand - object: *db - arguments: - commandName: find - batchSize: 5 - command: { find: *collection, batchSize: 1 } - expectResult: *documents - expectEvents: - - client: *client - eventType: command - events: - - commandStartedEvent: - command: - find: *collection - batchSize: 1 - $db: *db - lsid: { $$exists: true } - commandName: find - - commandStartedEvent: - command: - getMore: { $$type: [int, long] } - collection: *collection - batchSize: 5 - $db: *db - lsid: { $$exists: true } - commandName: getMore - - - description: supports configuring getMore maxTimeMS - operations: - - name: runCursorCommand - object: *db - arguments: - commandName: find - maxTimeMS: 300 - command: { find: *collection, maxTimeMS: 200, batchSize: 1 } - ignoreResultAndError: true - expectEvents: - - client: *client - eventType: command - # The getMore should receive an error here because we do not have the right kind of cursor - # So drivers should run a killCursors, but neither the error nor the killCursors command is relevant to this test - ignoreExtraEvents: true - events: - - commandStartedEvent: - command: - find: *collection - maxTimeMS: 200 - batchSize: 1 - $db: *db - lsid: { $$exists: true } - commandName: find - - commandStartedEvent: - command: - getMore: { $$type: [int, long] } - collection: *collection - $db: *db - maxTimeMS: 300 - lsid: { $$exists: true } - commandName: getMore - - - description: supports configuring getMore comment - runOnRequirements: - - minServerVersion: '4.4' - operations: - - name: runCursorCommand - object: *db - arguments: - commandName: find - comment: { hello: 'getMore' } - command: { find: *collection, batchSize: 1, comment: { hello: 'find' } } - expectResult: *documents - expectEvents: - - client: *client - eventType: command - events: - - commandStartedEvent: - command: - find: *collection - batchSize: 1 - comment: { hello: 'find' } - $db: *db - lsid: { $$exists: true } - commandName: find - - commandStartedEvent: - command: - getMore: { $$type: [int, long] } - collection: *collection - comment: { hello: 'getMore' } - $db: *db - lsid: { $$exists: true } - commandName: getMore - - # Tailable cursor - - description: does not close the cursor when receiving an empty batch - runOnRequirements: - - serverless: forbid - operations: - - name: dropCollection - object: *db - arguments: - collection: &cappedCollection cappedCollection - - name: createCollection - object: *db - arguments: - collection: *cappedCollection - capped: true - size: 4096 - max: 3 - saveResultAsEntity: *cappedCollection - - name: insertMany - object: *cappedCollection - arguments: - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 22 } - - name: createCommandCursor - object: *db - arguments: - cursorType: tailable - commandName: find - batchSize: 2 - command: { find: *cappedCollection, tailable: true } - saveResultAsEntity: &cursor cursor - - name: iterateOnce - object: *cursor - - name: iterateOnce - object: *cursor - - name: iterateOnce - object: *cursor - - name: close - object: *cursor - expectEvents: - - client: *client - eventType: command - events: - - commandStartedEvent: - command: - drop: *cappedCollection - commandName: drop - - commandStartedEvent: - command: - create: *cappedCollection - commandName: create - - commandStartedEvent: - command: - insert: *cappedCollection - commandName: insert - - commandStartedEvent: - command: - find: *cappedCollection - $db: *db - lsid: { $$exists: true } - commandName: find - - commandStartedEvent: - command: - getMore: { $$type: [int, long] } - collection: *cappedCollection - $db: *db - lsid: { $$exists: true } - commandName: getMore - - commandStartedEvent: - command: - killCursors: *cappedCollection - cursors: { $$type: array } - commandName: killCursors diff --git a/testdata/server-discovery-and-monitoring/errors/error_handling_handshake.json b/testdata/server-discovery-and-monitoring/errors/error_handling_handshake.json deleted file mode 100644 index 56ca7d1132..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/error_handling_handshake.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "description": "Network timeouts before and after the handshake completes", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore network timeout application error (afterHandshakeCompletes)", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "timeout" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Mark server unknown on network timeout application error (beforeHandshakeCompletes)", - "applicationErrors": [ - { - "address": "a:27017", - "when": "beforeHandshakeCompletes", - "maxWireVersion": 9, - "type": "timeout" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/error_handling_handshake.yml b/testdata/server-discovery-and-monitoring/errors/error_handling_handshake.yml deleted file mode 100644 index 8482ea704c..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/error_handling_handshake.yml +++ /dev/null @@ -1,55 +0,0 @@ -description: Network timeouts before and after the handshake completes -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore network timeout application error (afterHandshakeCompletes) - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: timeout - outcome: *outcome - -- description: Mark server unknown on network timeout application error (beforeHandshakeCompletes) - applicationErrors: - - address: a:27017 - when: beforeHandshakeCompletes - maxWireVersion: 9 - type: timeout - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/generate-error-tests.py b/testdata/server-discovery-and-monitoring/errors/generate-error-tests.py deleted file mode 100644 index c9323857ad..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/generate-error-tests.py +++ /dev/null @@ -1,172 +0,0 @@ -import itertools -import os -import subprocess -import sys - -# Require Python 3.7+ for ordered dictionaries so that the order of the -# generated tests remain the same. -if sys.version_info[:2] < (3, 7): - print('ERROR: This script requires Python >= 3.7, not:') - print(sys.version) - print('Usage: python3 %s' % (sys.argv[0])) - exit(1) - - -dirname = os.path.dirname -DIR = dirname(os.path.realpath(__file__)) -SOURCE = dirname(dirname(dirname(DIR))) - - -def template(filename): - fullpath = os.path.join(DIR, filename) - with open(fullpath, 'r') as f: - return f.read() - - -def write_test(filename, data): - fullpath = os.path.join(DIR, filename + '.yml') - with open(fullpath, 'w') as f: - f.write(data) - - print(f"Generated {fullpath}") - - -# Maps from error_name to (error_code,) -ERR_CODES = { - 'InterruptedAtShutdown': (11600,), - 'InterruptedDueToReplStateChange': (11602,), - 'NotPrimaryOrSecondary': (13436,), - 'PrimarySteppedDown': (189,), - 'ShutdownInProgress': (91,), - 'NotWritablePrimary': (10107,), - 'NotPrimaryNoSecondaryOk': (13435,), - 'LegacyNotPrimary': (10058,), -} - - -def create_stale_tests(): - tmp = template('stale-topologyVersion.yml.template') - for error_name in ERR_CODES: - test_name = f'stale-topologyVersion-{error_name}' - error_code, = ERR_CODES[error_name] - data = tmp.format(**locals()) - write_test(test_name, data) - -TV_GREATER = ''' - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2"''' -TV_GREATER_FINAL = ''' - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2"''' -TV_CHANGED = ''' - topologyVersion: - processId: - "$oid": '000000000000000000000002' - counter: - "$numberLong": "1"''' -TV_CHANGED_FINAL = ''' - processId: - "$oid": '000000000000000000000002' - counter: - "$numberLong": "1"''' - -# Maps non-stale error description to: -# (error_topology_version, final_topology_version) -NON_STALE_CASES = { - 'topologyVersion missing': ('', ' null'), - 'topologyVersion greater': (TV_GREATER, TV_GREATER_FINAL), - 'topologyVersion proccessId changed': (TV_CHANGED, TV_CHANGED_FINAL), -} - - -def create_non_stale_tests(): - tmp = template('non-stale-topologyVersion.yml.template') - for error_name, description in itertools.product( - ERR_CODES, NON_STALE_CASES): - test_name = f'non-stale-{description.replace(" ", "-")}-{error_name}' - error_code, = ERR_CODES[error_name] - error_topology_version, final_topology_version = NON_STALE_CASES[description] - # On 4.2+, only ShutdownInProgress and InterruptedAtShutdown will - # clear the pool. - if error_name in ("ShutdownInProgress", "InterruptedAtShutdown"): - final_pool_generation = 1 - else: - final_pool_generation = 0 - - data = tmp.format(**locals()) - write_test(test_name, data) - - -WHEN = ['beforeHandshakeCompletes', 'afterHandshakeCompletes'] -STALE_GENERATION_COMMAND_ERROR = ''' - type: command - response: - ok: 0 - errmsg: {error_name} - code: {error_code} - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2"''' -STALE_GENERATION_NETWORK_ERROR = ''' - type: {network_error_type}''' - - -def create_stale_generation_tests(): - tmp = template('stale-generation.yml.template') - # Stale command errors - for error_name, when in itertools.product(ERR_CODES, WHEN): - test_name = f'stale-generation-{when}-{error_name}' - error_code, = ERR_CODES[error_name] - stale_error = STALE_GENERATION_COMMAND_ERROR.format(**locals()) - data = tmp.format(**locals()) - write_test(test_name, data) - # Stale network errors - for network_error_type, when in itertools.product( - ['network', 'timeout'], WHEN): - error_name = network_error_type - test_name = f'stale-generation-{when}-{network_error_type}' - stale_error = STALE_GENERATION_NETWORK_ERROR.format(**locals()) - data = tmp.format(**locals()) - write_test(test_name, data) - - -def create_pre_42_tests(): - tmp = template('pre-42.yml.template') - # All "not writable primary"/"node is recovering" clear the pool on <4.2 - for error_name in ERR_CODES: - test_name = f'pre-42-{error_name}' - error_code, = ERR_CODES[error_name] - data = tmp.format(**locals()) - write_test(test_name, data) - - -def create_post_42_tests(): - tmp = template('post-42.yml.template') - for error_name in ERR_CODES: - test_name = f'post-42-{error_name}' - error_code, = ERR_CODES[error_name] - # On 4.2+, only ShutdownInProgress and InterruptedAtShutdown will - # clear the pool. - if error_name in ("ShutdownInProgress", "InterruptedAtShutdown"): - final_pool_generation = 1 - else: - final_pool_generation = 0 - data = tmp.format(**locals()) - write_test(test_name, data) - - -create_stale_tests() -create_non_stale_tests() -create_stale_generation_tests() -create_pre_42_tests() -create_post_42_tests() - -print('Running make') -subprocess.run(f'cd {SOURCE} && make', shell=True, check=True) diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-network-error.json b/testdata/server-discovery-and-monitoring/errors/non-stale-network-error.json deleted file mode 100644 index c22a47dc8a..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-network-error.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "description": "Non-stale network error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale network error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-network-error.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-network-error.yml deleted file mode 100644 index 3d29debefe..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-network-error.yml +++ /dev/null @@ -1,47 +0,0 @@ -description: Non-stale network error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale network error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-network-timeout-error.json b/testdata/server-discovery-and-monitoring/errors/non-stale-network-timeout-error.json deleted file mode 100644 index 03dc5b66c9..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-network-timeout-error.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "description": "Non-stale network timeout error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale network timeout error does not mark server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "timeout" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-network-timeout-error.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-network-timeout-error.yml deleted file mode 100644 index 0c27f52d2e..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-network-timeout-error.yml +++ /dev/null @@ -1,38 +0,0 @@ -description: Non-stale network timeout error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale network timeout error does not mark server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: timeout - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-InterruptedAtShutdown.json b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-InterruptedAtShutdown.json deleted file mode 100644 index 777e703a3c..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-InterruptedAtShutdown.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "description": "Non-stale topologyVersion greater InterruptedAtShutdown error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale topologyVersion greater InterruptedAtShutdown error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "InterruptedAtShutdown", - "code": 11600, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-InterruptedAtShutdown.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-InterruptedAtShutdown.yml deleted file mode 100644 index 9672debceb..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-InterruptedAtShutdown.yml +++ /dev/null @@ -1,61 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Non-stale topologyVersion greater InterruptedAtShutdown error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale topologyVersion greater InterruptedAtShutdown error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: InterruptedAtShutdown - code: 11600 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-InterruptedDueToReplStateChange.json b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-InterruptedDueToReplStateChange.json deleted file mode 100644 index c4aa7fb71b..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-InterruptedDueToReplStateChange.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "description": "Non-stale topologyVersion greater InterruptedDueToReplStateChange error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale topologyVersion greater InterruptedDueToReplStateChange error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "InterruptedDueToReplStateChange", - "code": 11602, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-InterruptedDueToReplStateChange.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-InterruptedDueToReplStateChange.yml deleted file mode 100644 index 87162a1595..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-InterruptedDueToReplStateChange.yml +++ /dev/null @@ -1,61 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Non-stale topologyVersion greater InterruptedDueToReplStateChange error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale topologyVersion greater InterruptedDueToReplStateChange error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: InterruptedDueToReplStateChange - code: 11602 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - pool: - generation: 0 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-LegacyNotPrimary.json b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-LegacyNotPrimary.json deleted file mode 100644 index 2a9bc8a5cf..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-LegacyNotPrimary.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "description": "Non-stale topologyVersion greater LegacyNotPrimary error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale topologyVersion greater LegacyNotPrimary error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "LegacyNotPrimary", - "code": 10058, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-LegacyNotPrimary.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-LegacyNotPrimary.yml deleted file mode 100644 index ca25a16512..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-LegacyNotPrimary.yml +++ /dev/null @@ -1,61 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Non-stale topologyVersion greater LegacyNotPrimary error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale topologyVersion greater LegacyNotPrimary error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: LegacyNotPrimary - code: 10058 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - pool: - generation: 0 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-NotPrimaryNoSecondaryOk.json b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-NotPrimaryNoSecondaryOk.json deleted file mode 100644 index 638aa306cb..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-NotPrimaryNoSecondaryOk.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "description": "Non-stale topologyVersion greater NotPrimaryNoSecondaryOk error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale topologyVersion greater NotPrimaryNoSecondaryOk error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotPrimaryNoSecondaryOk", - "code": 13435, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-NotPrimaryNoSecondaryOk.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-NotPrimaryNoSecondaryOk.yml deleted file mode 100644 index b5dfc46978..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-NotPrimaryNoSecondaryOk.yml +++ /dev/null @@ -1,61 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Non-stale topologyVersion greater NotPrimaryNoSecondaryOk error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale topologyVersion greater NotPrimaryNoSecondaryOk error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: NotPrimaryNoSecondaryOk - code: 13435 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - pool: - generation: 0 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-NotPrimaryOrSecondary.json b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-NotPrimaryOrSecondary.json deleted file mode 100644 index f327954a9d..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-NotPrimaryOrSecondary.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "description": "Non-stale topologyVersion greater NotPrimaryOrSecondary error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale topologyVersion greater NotPrimaryOrSecondary error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotPrimaryOrSecondary", - "code": 13436, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-NotPrimaryOrSecondary.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-NotPrimaryOrSecondary.yml deleted file mode 100644 index 8583704c90..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-NotPrimaryOrSecondary.yml +++ /dev/null @@ -1,61 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Non-stale topologyVersion greater NotPrimaryOrSecondary error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale topologyVersion greater NotPrimaryOrSecondary error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: NotPrimaryOrSecondary - code: 13436 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - pool: - generation: 0 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-NotWritablePrimary.json b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-NotWritablePrimary.json deleted file mode 100644 index 0ac02fb19b..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-NotWritablePrimary.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "description": "Non-stale topologyVersion greater NotWritablePrimary error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale topologyVersion greater NotWritablePrimary error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotWritablePrimary", - "code": 10107, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-NotWritablePrimary.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-NotWritablePrimary.yml deleted file mode 100644 index 6770de0519..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-NotWritablePrimary.yml +++ /dev/null @@ -1,61 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Non-stale topologyVersion greater NotWritablePrimary error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale topologyVersion greater NotWritablePrimary error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: NotWritablePrimary - code: 10107 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - pool: - generation: 0 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-PrimarySteppedDown.json b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-PrimarySteppedDown.json deleted file mode 100644 index daf2a7e8e1..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-PrimarySteppedDown.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "description": "Non-stale topologyVersion greater PrimarySteppedDown error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale topologyVersion greater PrimarySteppedDown error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "PrimarySteppedDown", - "code": 189, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-PrimarySteppedDown.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-PrimarySteppedDown.yml deleted file mode 100644 index a302307d97..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-PrimarySteppedDown.yml +++ /dev/null @@ -1,61 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Non-stale topologyVersion greater PrimarySteppedDown error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale topologyVersion greater PrimarySteppedDown error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: PrimarySteppedDown - code: 189 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - pool: - generation: 0 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-ShutdownInProgress.json b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-ShutdownInProgress.json deleted file mode 100644 index a7d9e1fe24..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-ShutdownInProgress.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "description": "Non-stale topologyVersion greater ShutdownInProgress error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale topologyVersion greater ShutdownInProgress error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "ShutdownInProgress", - "code": 91, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-ShutdownInProgress.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-ShutdownInProgress.yml deleted file mode 100644 index 2d7a0c7d27..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-greater-ShutdownInProgress.yml +++ /dev/null @@ -1,61 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Non-stale topologyVersion greater ShutdownInProgress error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale topologyVersion greater ShutdownInProgress error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: ShutdownInProgress - code: 91 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-InterruptedAtShutdown.json b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-InterruptedAtShutdown.json deleted file mode 100644 index 2c59e785ab..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-InterruptedAtShutdown.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "description": "Non-stale topologyVersion missing InterruptedAtShutdown error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale topologyVersion missing InterruptedAtShutdown error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "InterruptedAtShutdown", - "code": 11600 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-InterruptedAtShutdown.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-InterruptedAtShutdown.yml deleted file mode 100644 index 74e59d2056..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-InterruptedAtShutdown.yml +++ /dev/null @@ -1,52 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Non-stale topologyVersion missing InterruptedAtShutdown error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale topologyVersion missing InterruptedAtShutdown error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: InterruptedAtShutdown - code: 11600 - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-InterruptedDueToReplStateChange.json b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-InterruptedDueToReplStateChange.json deleted file mode 100644 index f2cb834e83..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-InterruptedDueToReplStateChange.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "description": "Non-stale topologyVersion missing InterruptedDueToReplStateChange error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale topologyVersion missing InterruptedDueToReplStateChange error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "InterruptedDueToReplStateChange", - "code": 11602 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-InterruptedDueToReplStateChange.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-InterruptedDueToReplStateChange.yml deleted file mode 100644 index 3eab8ad40f..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-InterruptedDueToReplStateChange.yml +++ /dev/null @@ -1,52 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Non-stale topologyVersion missing InterruptedDueToReplStateChange error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale topologyVersion missing InterruptedDueToReplStateChange error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: InterruptedDueToReplStateChange - code: 11602 - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-LegacyNotPrimary.json b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-LegacyNotPrimary.json deleted file mode 100644 index 095128d615..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-LegacyNotPrimary.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "description": "Non-stale topologyVersion missing LegacyNotPrimary error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale topologyVersion missing LegacyNotPrimary error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "LegacyNotPrimary", - "code": 10058 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-LegacyNotPrimary.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-LegacyNotPrimary.yml deleted file mode 100644 index a7d0113357..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-LegacyNotPrimary.yml +++ /dev/null @@ -1,52 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Non-stale topologyVersion missing LegacyNotPrimary error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale topologyVersion missing LegacyNotPrimary error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: LegacyNotPrimary - code: 10058 - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-NotPrimaryNoSecondaryOk.json b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-NotPrimaryNoSecondaryOk.json deleted file mode 100644 index 3d7312d4a5..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-NotPrimaryNoSecondaryOk.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "description": "Non-stale topologyVersion missing NotPrimaryNoSecondaryOk error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale topologyVersion missing NotPrimaryNoSecondaryOk error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotPrimaryNoSecondaryOk", - "code": 13435 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-NotPrimaryNoSecondaryOk.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-NotPrimaryNoSecondaryOk.yml deleted file mode 100644 index 0f43246070..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-NotPrimaryNoSecondaryOk.yml +++ /dev/null @@ -1,52 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Non-stale topologyVersion missing NotPrimaryNoSecondaryOk error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale topologyVersion missing NotPrimaryNoSecondaryOk error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: NotPrimaryNoSecondaryOk - code: 13435 - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-NotPrimaryOrSecondary.json b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-NotPrimaryOrSecondary.json deleted file mode 100644 index a457ba3072..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-NotPrimaryOrSecondary.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "description": "Non-stale topologyVersion missing NotPrimaryOrSecondary error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale topologyVersion missing NotPrimaryOrSecondary error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotPrimaryOrSecondary", - "code": 13436 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-NotPrimaryOrSecondary.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-NotPrimaryOrSecondary.yml deleted file mode 100644 index fcc72bf794..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-NotPrimaryOrSecondary.yml +++ /dev/null @@ -1,52 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Non-stale topologyVersion missing NotPrimaryOrSecondary error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale topologyVersion missing NotPrimaryOrSecondary error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: NotPrimaryOrSecondary - code: 13436 - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-NotWritablePrimary.json b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-NotWritablePrimary.json deleted file mode 100644 index b7427a3f3d..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-NotWritablePrimary.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "description": "Non-stale topologyVersion missing NotWritablePrimary error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale topologyVersion missing NotWritablePrimary error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotWritablePrimary", - "code": 10107 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-NotWritablePrimary.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-NotWritablePrimary.yml deleted file mode 100644 index 4a9ef427fb..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-NotWritablePrimary.yml +++ /dev/null @@ -1,52 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Non-stale topologyVersion missing NotWritablePrimary error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale topologyVersion missing NotWritablePrimary error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: NotWritablePrimary - code: 10107 - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-PrimarySteppedDown.json b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-PrimarySteppedDown.json deleted file mode 100644 index 8146a60d6e..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-PrimarySteppedDown.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "description": "Non-stale topologyVersion missing PrimarySteppedDown error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale topologyVersion missing PrimarySteppedDown error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "PrimarySteppedDown", - "code": 189 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-PrimarySteppedDown.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-PrimarySteppedDown.yml deleted file mode 100644 index 8ca1251a2d..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-PrimarySteppedDown.yml +++ /dev/null @@ -1,52 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Non-stale topologyVersion missing PrimarySteppedDown error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale topologyVersion missing PrimarySteppedDown error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: PrimarySteppedDown - code: 189 - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-ShutdownInProgress.json b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-ShutdownInProgress.json deleted file mode 100644 index c7597007d7..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-ShutdownInProgress.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "description": "Non-stale topologyVersion missing ShutdownInProgress error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale topologyVersion missing ShutdownInProgress error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "ShutdownInProgress", - "code": 91 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-ShutdownInProgress.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-ShutdownInProgress.yml deleted file mode 100644 index cd8857008d..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-missing-ShutdownInProgress.yml +++ /dev/null @@ -1,52 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Non-stale topologyVersion missing ShutdownInProgress error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale topologyVersion missing ShutdownInProgress error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: ShutdownInProgress - code: 91 - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-InterruptedAtShutdown.json b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-InterruptedAtShutdown.json deleted file mode 100644 index 8448c60599..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-InterruptedAtShutdown.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "description": "Non-stale topologyVersion proccessId changed InterruptedAtShutdown error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale topologyVersion proccessId changed InterruptedAtShutdown error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "InterruptedAtShutdown", - "code": 11600, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000002" - }, - "counter": { - "$numberLong": "1" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000002" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-InterruptedAtShutdown.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-InterruptedAtShutdown.yml deleted file mode 100644 index 126ed23b44..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-InterruptedAtShutdown.yml +++ /dev/null @@ -1,61 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Non-stale topologyVersion proccessId changed InterruptedAtShutdown error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale topologyVersion proccessId changed InterruptedAtShutdown error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: InterruptedAtShutdown - code: 11600 - topologyVersion: - processId: - "$oid": '000000000000000000000002' - counter: - "$numberLong": "1" - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: - processId: - "$oid": '000000000000000000000002' - counter: - "$numberLong": "1" - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-InterruptedDueToReplStateChange.json b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-InterruptedDueToReplStateChange.json deleted file mode 100644 index 9d601c4ede..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-InterruptedDueToReplStateChange.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "description": "Non-stale topologyVersion proccessId changed InterruptedDueToReplStateChange error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale topologyVersion proccessId changed InterruptedDueToReplStateChange error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "InterruptedDueToReplStateChange", - "code": 11602, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000002" - }, - "counter": { - "$numberLong": "1" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000002" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-InterruptedDueToReplStateChange.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-InterruptedDueToReplStateChange.yml deleted file mode 100644 index bcb69479d1..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-InterruptedDueToReplStateChange.yml +++ /dev/null @@ -1,61 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Non-stale topologyVersion proccessId changed InterruptedDueToReplStateChange error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale topologyVersion proccessId changed InterruptedDueToReplStateChange error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: InterruptedDueToReplStateChange - code: 11602 - topologyVersion: - processId: - "$oid": '000000000000000000000002' - counter: - "$numberLong": "1" - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: - processId: - "$oid": '000000000000000000000002' - counter: - "$numberLong": "1" - pool: - generation: 0 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-LegacyNotPrimary.json b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-LegacyNotPrimary.json deleted file mode 100644 index 8be833f104..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-LegacyNotPrimary.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "description": "Non-stale topologyVersion proccessId changed LegacyNotPrimary error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale topologyVersion proccessId changed LegacyNotPrimary error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "LegacyNotPrimary", - "code": 10058, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000002" - }, - "counter": { - "$numberLong": "1" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000002" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-LegacyNotPrimary.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-LegacyNotPrimary.yml deleted file mode 100644 index 172240cb78..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-LegacyNotPrimary.yml +++ /dev/null @@ -1,61 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Non-stale topologyVersion proccessId changed LegacyNotPrimary error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale topologyVersion proccessId changed LegacyNotPrimary error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: LegacyNotPrimary - code: 10058 - topologyVersion: - processId: - "$oid": '000000000000000000000002' - counter: - "$numberLong": "1" - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: - processId: - "$oid": '000000000000000000000002' - counter: - "$numberLong": "1" - pool: - generation: 0 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryNoSecondaryOk.json b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryNoSecondaryOk.json deleted file mode 100644 index f2f94c0d00..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryNoSecondaryOk.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "description": "Non-stale topologyVersion proccessId changed NotPrimaryNoSecondaryOk error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale topologyVersion proccessId changed NotPrimaryNoSecondaryOk error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotPrimaryNoSecondaryOk", - "code": 13435, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000002" - }, - "counter": { - "$numberLong": "1" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000002" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryNoSecondaryOk.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryNoSecondaryOk.yml deleted file mode 100644 index b915fb97f3..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryNoSecondaryOk.yml +++ /dev/null @@ -1,61 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Non-stale topologyVersion proccessId changed NotPrimaryNoSecondaryOk error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale topologyVersion proccessId changed NotPrimaryNoSecondaryOk error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: NotPrimaryNoSecondaryOk - code: 13435 - topologyVersion: - processId: - "$oid": '000000000000000000000002' - counter: - "$numberLong": "1" - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: - processId: - "$oid": '000000000000000000000002' - counter: - "$numberLong": "1" - pool: - generation: 0 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryOrSecondary.json b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryOrSecondary.json deleted file mode 100644 index 6d3b397566..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryOrSecondary.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "description": "Non-stale topologyVersion proccessId changed NotPrimaryOrSecondary error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale topologyVersion proccessId changed NotPrimaryOrSecondary error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotPrimaryOrSecondary", - "code": 13436, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000002" - }, - "counter": { - "$numberLong": "1" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000002" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryOrSecondary.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryOrSecondary.yml deleted file mode 100644 index dc104488cd..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryOrSecondary.yml +++ /dev/null @@ -1,61 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Non-stale topologyVersion proccessId changed NotPrimaryOrSecondary error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale topologyVersion proccessId changed NotPrimaryOrSecondary error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: NotPrimaryOrSecondary - code: 13436 - topologyVersion: - processId: - "$oid": '000000000000000000000002' - counter: - "$numberLong": "1" - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: - processId: - "$oid": '000000000000000000000002' - counter: - "$numberLong": "1" - pool: - generation: 0 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-NotWritablePrimary.json b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-NotWritablePrimary.json deleted file mode 100644 index 332ddf5ec1..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-NotWritablePrimary.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "description": "Non-stale topologyVersion proccessId changed NotWritablePrimary error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale topologyVersion proccessId changed NotWritablePrimary error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotWritablePrimary", - "code": 10107, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000002" - }, - "counter": { - "$numberLong": "1" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000002" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-NotWritablePrimary.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-NotWritablePrimary.yml deleted file mode 100644 index 5146636b65..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-NotWritablePrimary.yml +++ /dev/null @@ -1,61 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Non-stale topologyVersion proccessId changed NotWritablePrimary error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale topologyVersion proccessId changed NotWritablePrimary error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: NotWritablePrimary - code: 10107 - topologyVersion: - processId: - "$oid": '000000000000000000000002' - counter: - "$numberLong": "1" - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: - processId: - "$oid": '000000000000000000000002' - counter: - "$numberLong": "1" - pool: - generation: 0 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-PrimarySteppedDown.json b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-PrimarySteppedDown.json deleted file mode 100644 index c22a537f58..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-PrimarySteppedDown.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "description": "Non-stale topologyVersion proccessId changed PrimarySteppedDown error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale topologyVersion proccessId changed PrimarySteppedDown error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "PrimarySteppedDown", - "code": 189, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000002" - }, - "counter": { - "$numberLong": "1" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000002" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-PrimarySteppedDown.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-PrimarySteppedDown.yml deleted file mode 100644 index 0c997a2a3e..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-PrimarySteppedDown.yml +++ /dev/null @@ -1,61 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Non-stale topologyVersion proccessId changed PrimarySteppedDown error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale topologyVersion proccessId changed PrimarySteppedDown error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: PrimarySteppedDown - code: 189 - topologyVersion: - processId: - "$oid": '000000000000000000000002' - counter: - "$numberLong": "1" - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: - processId: - "$oid": '000000000000000000000002' - counter: - "$numberLong": "1" - pool: - generation: 0 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-ShutdownInProgress.json b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-ShutdownInProgress.json deleted file mode 100644 index eaaab79273..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-ShutdownInProgress.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "description": "Non-stale topologyVersion proccessId changed ShutdownInProgress error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale topologyVersion proccessId changed ShutdownInProgress error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "ShutdownInProgress", - "code": 91, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000002" - }, - "counter": { - "$numberLong": "1" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000002" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-ShutdownInProgress.yml b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-ShutdownInProgress.yml deleted file mode 100644 index 973c56460b..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion-proccessId-changed-ShutdownInProgress.yml +++ /dev/null @@ -1,61 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Non-stale topologyVersion proccessId changed ShutdownInProgress error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale topologyVersion proccessId changed ShutdownInProgress error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: ShutdownInProgress - code: 91 - topologyVersion: - processId: - "$oid": '000000000000000000000002' - counter: - "$numberLong": "1" - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: - processId: - "$oid": '000000000000000000000002' - counter: - "$numberLong": "1" - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion.yml.template b/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion.yml.template deleted file mode 100644 index 83cff68e27..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/non-stale-topologyVersion.yml.template +++ /dev/null @@ -1,52 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Non-stale {description} {error_name} error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Non-stale {description} {error_name} error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: {error_name} - code: {error_code}{error_topology_version} - outcome: - servers: - a:27017: - type: Unknown - topologyVersion:{final_topology_version} - pool: - generation: {final_pool_generation} - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/post-42-InterruptedAtShutdown.json b/testdata/server-discovery-and-monitoring/errors/post-42-InterruptedAtShutdown.json deleted file mode 100644 index 40c4ed6c80..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/post-42-InterruptedAtShutdown.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "description": "Post-4.2 InterruptedAtShutdown error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 8 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Post-4.2 InterruptedAtShutdown error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 8, - "type": "command", - "response": { - "ok": 0, - "errmsg": "InterruptedAtShutdown", - "code": 11600 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/post-42-InterruptedAtShutdown.yml b/testdata/server-discovery-and-monitoring/errors/post-42-InterruptedAtShutdown.yml deleted file mode 100644 index 73a0f0d285..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/post-42-InterruptedAtShutdown.yml +++ /dev/null @@ -1,47 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Post-4.2 InterruptedAtShutdown error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 8 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Post-4.2 InterruptedAtShutdown error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 8 - type: command - response: - ok: 0 - errmsg: InterruptedAtShutdown - code: 11600 - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/post-42-InterruptedDueToReplStateChange.json b/testdata/server-discovery-and-monitoring/errors/post-42-InterruptedDueToReplStateChange.json deleted file mode 100644 index 5c489f5ecb..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/post-42-InterruptedDueToReplStateChange.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "description": "Post-4.2 InterruptedDueToReplStateChange error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 8 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Post-4.2 InterruptedDueToReplStateChange error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 8, - "type": "command", - "response": { - "ok": 0, - "errmsg": "InterruptedDueToReplStateChange", - "code": 11602 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/post-42-InterruptedDueToReplStateChange.yml b/testdata/server-discovery-and-monitoring/errors/post-42-InterruptedDueToReplStateChange.yml deleted file mode 100644 index ad333e311e..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/post-42-InterruptedDueToReplStateChange.yml +++ /dev/null @@ -1,47 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Post-4.2 InterruptedDueToReplStateChange error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 8 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Post-4.2 InterruptedDueToReplStateChange error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 8 - type: command - response: - ok: 0 - errmsg: InterruptedDueToReplStateChange - code: 11602 - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/post-42-LegacyNotPrimary.json b/testdata/server-discovery-and-monitoring/errors/post-42-LegacyNotPrimary.json deleted file mode 100644 index f0851b299e..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/post-42-LegacyNotPrimary.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "description": "Post-4.2 LegacyNotPrimary error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 8 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Post-4.2 LegacyNotPrimary error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 8, - "type": "command", - "response": { - "ok": 0, - "errmsg": "LegacyNotPrimary", - "code": 10058 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/post-42-LegacyNotPrimary.yml b/testdata/server-discovery-and-monitoring/errors/post-42-LegacyNotPrimary.yml deleted file mode 100644 index 9c7723bbf3..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/post-42-LegacyNotPrimary.yml +++ /dev/null @@ -1,47 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Post-4.2 LegacyNotPrimary error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 8 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Post-4.2 LegacyNotPrimary error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 8 - type: command - response: - ok: 0 - errmsg: LegacyNotPrimary - code: 10058 - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/post-42-NotPrimaryNoSecondaryOk.json b/testdata/server-discovery-and-monitoring/errors/post-42-NotPrimaryNoSecondaryOk.json deleted file mode 100644 index a675f0ca54..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/post-42-NotPrimaryNoSecondaryOk.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "description": "Post-4.2 NotPrimaryNoSecondaryOk error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 8 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Post-4.2 NotPrimaryNoSecondaryOk error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 8, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotPrimaryNoSecondaryOk", - "code": 13435 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/post-42-NotPrimaryNoSecondaryOk.yml b/testdata/server-discovery-and-monitoring/errors/post-42-NotPrimaryNoSecondaryOk.yml deleted file mode 100644 index 49304d6d63..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/post-42-NotPrimaryNoSecondaryOk.yml +++ /dev/null @@ -1,47 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Post-4.2 NotPrimaryNoSecondaryOk error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 8 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Post-4.2 NotPrimaryNoSecondaryOk error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 8 - type: command - response: - ok: 0 - errmsg: NotPrimaryNoSecondaryOk - code: 13435 - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/post-42-NotPrimaryOrSecondary.json b/testdata/server-discovery-and-monitoring/errors/post-42-NotPrimaryOrSecondary.json deleted file mode 100644 index ea9bf1d16b..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/post-42-NotPrimaryOrSecondary.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "description": "Post-4.2 NotPrimaryOrSecondary error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 8 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Post-4.2 NotPrimaryOrSecondary error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 8, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotPrimaryOrSecondary", - "code": 13436 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/post-42-NotPrimaryOrSecondary.yml b/testdata/server-discovery-and-monitoring/errors/post-42-NotPrimaryOrSecondary.yml deleted file mode 100644 index 9174b31057..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/post-42-NotPrimaryOrSecondary.yml +++ /dev/null @@ -1,47 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Post-4.2 NotPrimaryOrSecondary error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 8 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Post-4.2 NotPrimaryOrSecondary error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 8 - type: command - response: - ok: 0 - errmsg: NotPrimaryOrSecondary - code: 13436 - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/post-42-NotWritablePrimary.json b/testdata/server-discovery-and-monitoring/errors/post-42-NotWritablePrimary.json deleted file mode 100644 index 10211fca70..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/post-42-NotWritablePrimary.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "description": "Post-4.2 NotWritablePrimary error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 8 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Post-4.2 NotWritablePrimary error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 8, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotWritablePrimary", - "code": 10107 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/post-42-NotWritablePrimary.yml b/testdata/server-discovery-and-monitoring/errors/post-42-NotWritablePrimary.yml deleted file mode 100644 index 886b1f5b5b..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/post-42-NotWritablePrimary.yml +++ /dev/null @@ -1,47 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Post-4.2 NotWritablePrimary error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 8 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Post-4.2 NotWritablePrimary error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 8 - type: command - response: - ok: 0 - errmsg: NotWritablePrimary - code: 10107 - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/post-42-PrimarySteppedDown.json b/testdata/server-discovery-and-monitoring/errors/post-42-PrimarySteppedDown.json deleted file mode 100644 index fa98d0bf06..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/post-42-PrimarySteppedDown.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "description": "Post-4.2 PrimarySteppedDown error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 8 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Post-4.2 PrimarySteppedDown error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 8, - "type": "command", - "response": { - "ok": 0, - "errmsg": "PrimarySteppedDown", - "code": 189 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/post-42-PrimarySteppedDown.yml b/testdata/server-discovery-and-monitoring/errors/post-42-PrimarySteppedDown.yml deleted file mode 100644 index 6a42267996..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/post-42-PrimarySteppedDown.yml +++ /dev/null @@ -1,47 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Post-4.2 PrimarySteppedDown error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 8 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Post-4.2 PrimarySteppedDown error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 8 - type: command - response: - ok: 0 - errmsg: PrimarySteppedDown - code: 189 - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/post-42-ShutdownInProgress.json b/testdata/server-discovery-and-monitoring/errors/post-42-ShutdownInProgress.json deleted file mode 100644 index cd587205b6..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/post-42-ShutdownInProgress.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "description": "Post-4.2 ShutdownInProgress error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 8 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Post-4.2 ShutdownInProgress error marks server Unknown", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 8, - "type": "command", - "response": { - "ok": 0, - "errmsg": "ShutdownInProgress", - "code": 91 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/post-42-ShutdownInProgress.yml b/testdata/server-discovery-and-monitoring/errors/post-42-ShutdownInProgress.yml deleted file mode 100644 index 2ad90d9864..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/post-42-ShutdownInProgress.yml +++ /dev/null @@ -1,47 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Post-4.2 ShutdownInProgress error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 8 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Post-4.2 ShutdownInProgress error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 8 - type: command - response: - ok: 0 - errmsg: ShutdownInProgress - code: 91 - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/post-42.yml.template b/testdata/server-discovery-and-monitoring/errors/post-42.yml.template deleted file mode 100644 index 8ca3c79ba4..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/post-42.yml.template +++ /dev/null @@ -1,47 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Post-4.2 {error_name} error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 8 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Post-4.2 {error_name} error marks server Unknown - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 8 - type: command - response: - ok: 0 - errmsg: {error_name} - code: {error_code} - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: {final_pool_generation} - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/pre-42-InterruptedAtShutdown.json b/testdata/server-discovery-and-monitoring/errors/pre-42-InterruptedAtShutdown.json deleted file mode 100644 index 9f6ea212e5..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/pre-42-InterruptedAtShutdown.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "description": "Pre-4.2 InterruptedAtShutdown error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 7 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Pre-4.2 InterruptedAtShutdown error marks server Unknown and clears the pool", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 7, - "type": "command", - "response": { - "ok": 0, - "errmsg": "InterruptedAtShutdown", - "code": 11600 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/pre-42-InterruptedAtShutdown.yml b/testdata/server-discovery-and-monitoring/errors/pre-42-InterruptedAtShutdown.yml deleted file mode 100644 index 4996e9f25f..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/pre-42-InterruptedAtShutdown.yml +++ /dev/null @@ -1,47 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Pre-4.2 InterruptedAtShutdown error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 7 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Pre-4.2 InterruptedAtShutdown error marks server Unknown and clears the pool - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 7 - type: command - response: - ok: 0 - errmsg: InterruptedAtShutdown - code: 11600 - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/pre-42-InterruptedDueToReplStateChange.json b/testdata/server-discovery-and-monitoring/errors/pre-42-InterruptedDueToReplStateChange.json deleted file mode 100644 index 7e5f235713..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/pre-42-InterruptedDueToReplStateChange.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "description": "Pre-4.2 InterruptedDueToReplStateChange error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 7 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Pre-4.2 InterruptedDueToReplStateChange error marks server Unknown and clears the pool", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 7, - "type": "command", - "response": { - "ok": 0, - "errmsg": "InterruptedDueToReplStateChange", - "code": 11602 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/pre-42-InterruptedDueToReplStateChange.yml b/testdata/server-discovery-and-monitoring/errors/pre-42-InterruptedDueToReplStateChange.yml deleted file mode 100644 index ada5f1ff73..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/pre-42-InterruptedDueToReplStateChange.yml +++ /dev/null @@ -1,47 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Pre-4.2 InterruptedDueToReplStateChange error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 7 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Pre-4.2 InterruptedDueToReplStateChange error marks server Unknown and clears the pool - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 7 - type: command - response: - ok: 0 - errmsg: InterruptedDueToReplStateChange - code: 11602 - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/pre-42-LegacyNotPrimary.json b/testdata/server-discovery-and-monitoring/errors/pre-42-LegacyNotPrimary.json deleted file mode 100644 index 1635f1a856..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/pre-42-LegacyNotPrimary.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "description": "Pre-4.2 LegacyNotPrimary error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 7 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Pre-4.2 LegacyNotPrimary error marks server Unknown and clears the pool", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 7, - "type": "command", - "response": { - "ok": 0, - "errmsg": "LegacyNotPrimary", - "code": 10058 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/pre-42-LegacyNotPrimary.yml b/testdata/server-discovery-and-monitoring/errors/pre-42-LegacyNotPrimary.yml deleted file mode 100644 index e2b37b4f5f..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/pre-42-LegacyNotPrimary.yml +++ /dev/null @@ -1,47 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Pre-4.2 LegacyNotPrimary error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 7 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Pre-4.2 LegacyNotPrimary error marks server Unknown and clears the pool - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 7 - type: command - response: - ok: 0 - errmsg: LegacyNotPrimary - code: 10058 - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/pre-42-NotPrimaryNoSecondaryOk.json b/testdata/server-discovery-and-monitoring/errors/pre-42-NotPrimaryNoSecondaryOk.json deleted file mode 100644 index 0e70ede02c..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/pre-42-NotPrimaryNoSecondaryOk.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "description": "Pre-4.2 NotPrimaryNoSecondaryOk error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 7 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Pre-4.2 NotPrimaryNoSecondaryOk error marks server Unknown and clears the pool", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 7, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotPrimaryNoSecondaryOk", - "code": 13435 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/pre-42-NotPrimaryNoSecondaryOk.yml b/testdata/server-discovery-and-monitoring/errors/pre-42-NotPrimaryNoSecondaryOk.yml deleted file mode 100644 index 867b7d3dc1..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/pre-42-NotPrimaryNoSecondaryOk.yml +++ /dev/null @@ -1,47 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Pre-4.2 NotPrimaryNoSecondaryOk error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 7 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Pre-4.2 NotPrimaryNoSecondaryOk error marks server Unknown and clears the pool - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 7 - type: command - response: - ok: 0 - errmsg: NotPrimaryNoSecondaryOk - code: 13435 - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/pre-42-NotPrimaryOrSecondary.json b/testdata/server-discovery-and-monitoring/errors/pre-42-NotPrimaryOrSecondary.json deleted file mode 100644 index 3fefb21663..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/pre-42-NotPrimaryOrSecondary.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "description": "Pre-4.2 NotPrimaryOrSecondary error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 7 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Pre-4.2 NotPrimaryOrSecondary error marks server Unknown and clears the pool", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 7, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotPrimaryOrSecondary", - "code": 13436 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/pre-42-NotPrimaryOrSecondary.yml b/testdata/server-discovery-and-monitoring/errors/pre-42-NotPrimaryOrSecondary.yml deleted file mode 100644 index 705e2339c0..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/pre-42-NotPrimaryOrSecondary.yml +++ /dev/null @@ -1,47 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Pre-4.2 NotPrimaryOrSecondary error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 7 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Pre-4.2 NotPrimaryOrSecondary error marks server Unknown and clears the pool - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 7 - type: command - response: - ok: 0 - errmsg: NotPrimaryOrSecondary - code: 13436 - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/pre-42-NotWritablePrimary.json b/testdata/server-discovery-and-monitoring/errors/pre-42-NotWritablePrimary.json deleted file mode 100644 index d010da0a5b..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/pre-42-NotWritablePrimary.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "description": "Pre-4.2 NotWritablePrimary error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 7 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Pre-4.2 NotWritablePrimary error marks server Unknown and clears the pool", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 7, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotWritablePrimary", - "code": 10107 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/pre-42-NotWritablePrimary.yml b/testdata/server-discovery-and-monitoring/errors/pre-42-NotWritablePrimary.yml deleted file mode 100644 index 29669ff336..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/pre-42-NotWritablePrimary.yml +++ /dev/null @@ -1,47 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Pre-4.2 NotWritablePrimary error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 7 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Pre-4.2 NotWritablePrimary error marks server Unknown and clears the pool - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 7 - type: command - response: - ok: 0 - errmsg: NotWritablePrimary - code: 10107 - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/pre-42-PrimarySteppedDown.json b/testdata/server-discovery-and-monitoring/errors/pre-42-PrimarySteppedDown.json deleted file mode 100644 index 02956d201d..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/pre-42-PrimarySteppedDown.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "description": "Pre-4.2 PrimarySteppedDown error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 7 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Pre-4.2 PrimarySteppedDown error marks server Unknown and clears the pool", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 7, - "type": "command", - "response": { - "ok": 0, - "errmsg": "PrimarySteppedDown", - "code": 189 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/pre-42-PrimarySteppedDown.yml b/testdata/server-discovery-and-monitoring/errors/pre-42-PrimarySteppedDown.yml deleted file mode 100644 index 9176ee25c3..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/pre-42-PrimarySteppedDown.yml +++ /dev/null @@ -1,47 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Pre-4.2 PrimarySteppedDown error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 7 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Pre-4.2 PrimarySteppedDown error marks server Unknown and clears the pool - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 7 - type: command - response: - ok: 0 - errmsg: PrimarySteppedDown - code: 189 - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/pre-42-ShutdownInProgress.json b/testdata/server-discovery-and-monitoring/errors/pre-42-ShutdownInProgress.json deleted file mode 100644 index fc3a5aa6fe..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/pre-42-ShutdownInProgress.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "description": "Pre-4.2 ShutdownInProgress error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 7 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": null, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Pre-4.2 ShutdownInProgress error marks server Unknown and clears the pool", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 7, - "type": "command", - "response": { - "ok": 0, - "errmsg": "ShutdownInProgress", - "code": 91 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/pre-42-ShutdownInProgress.yml b/testdata/server-discovery-and-monitoring/errors/pre-42-ShutdownInProgress.yml deleted file mode 100644 index 5c64050e59..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/pre-42-ShutdownInProgress.yml +++ /dev/null @@ -1,47 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Pre-4.2 ShutdownInProgress error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 7 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Pre-4.2 ShutdownInProgress error marks server Unknown and clears the pool - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 7 - type: command - response: - ok: 0 - errmsg: ShutdownInProgress - code: 91 - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/pre-42.yml.template b/testdata/server-discovery-and-monitoring/errors/pre-42.yml.template deleted file mode 100644 index 7449f68c16..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/pre-42.yml.template +++ /dev/null @@ -1,47 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Pre-4.2 {error_name} error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 7 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: null - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Pre-4.2 {error_name} error marks server Unknown and clears the pool - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 7 - type: command - response: - ok: 0 - errmsg: {error_name} - code: {error_code} - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs diff --git a/testdata/server-discovery-and-monitoring/errors/prefer-error-code.json b/testdata/server-discovery-and-monitoring/errors/prefer-error-code.json deleted file mode 100644 index eb00b69613..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/prefer-error-code.json +++ /dev/null @@ -1,131 +0,0 @@ -{ - "description": "Do not check errmsg when code exists", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "errmsg \"not master\" gets ignored when error code exists", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "not master", - "code": 1 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "errmsg \"node is recovering\" gets ignored when error code exists", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "node is recovering", - "code": 1 - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/prefer-error-code.yml b/testdata/server-discovery-and-monitoring/errors/prefer-error-code.yml deleted file mode 100644 index 6bd98386bb..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/prefer-error-code.yml +++ /dev/null @@ -1,54 +0,0 @@ -description: Do not check errmsg when code exists -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: errmsg "not master" gets ignored when error code exists - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: "not master" # NOTE: This needs to be "not master" and not "not writable primary". - code: 1 # Not a "not writable primary" error code. - outcome: *outcome - -- description: errmsg "node is recovering" gets ignored when error code exists - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: "node is recovering" - code: 1 # Not a "node is recovering" error code. - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-InterruptedAtShutdown.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-InterruptedAtShutdown.json deleted file mode 100644 index 2f7c7fd13b..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-InterruptedAtShutdown.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "description": "Stale generation InterruptedAtShutdown error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale InterruptedAtShutdown error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "InterruptedAtShutdown", - "code": 11600, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-InterruptedAtShutdown.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-InterruptedAtShutdown.yml deleted file mode 100644 index 37dddcead5..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-InterruptedAtShutdown.yml +++ /dev/null @@ -1,91 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation InterruptedAtShutdown error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale InterruptedAtShutdown error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: InterruptedAtShutdown - code: 11600 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '2' - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-InterruptedDueToReplStateChange.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-InterruptedDueToReplStateChange.json deleted file mode 100644 index b0b51ef676..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-InterruptedDueToReplStateChange.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "description": "Stale generation InterruptedDueToReplStateChange error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale InterruptedDueToReplStateChange error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "InterruptedDueToReplStateChange", - "code": 11602, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-InterruptedDueToReplStateChange.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-InterruptedDueToReplStateChange.yml deleted file mode 100644 index f83532e2c5..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-InterruptedDueToReplStateChange.yml +++ /dev/null @@ -1,91 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation InterruptedDueToReplStateChange error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale InterruptedDueToReplStateChange error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: InterruptedDueToReplStateChange - code: 11602 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '2' - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-NotPrimaryNoSecondaryOk.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-NotPrimaryNoSecondaryOk.json deleted file mode 100644 index b68e23b7a7..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-NotPrimaryNoSecondaryOk.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "description": "Stale generation NotPrimaryNoSecondaryOk error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale NotPrimaryNoSecondaryOk error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotPrimaryNoSecondaryOk", - "code": 13435, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-NotPrimaryNoSecondaryOk.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-NotPrimaryNoSecondaryOk.yml deleted file mode 100644 index 43c7f57742..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-NotPrimaryNoSecondaryOk.yml +++ /dev/null @@ -1,91 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation NotPrimaryNoSecondaryOk error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale NotPrimaryNoSecondaryOk error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: NotPrimaryNoSecondaryOk - code: 13435 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '2' - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-NotPrimaryOrSecondary.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-NotPrimaryOrSecondary.json deleted file mode 100644 index d9b3562654..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-NotPrimaryOrSecondary.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "description": "Stale generation NotPrimaryOrSecondary error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale NotPrimaryOrSecondary error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotPrimaryOrSecondary", - "code": 13436, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-NotPrimaryOrSecondary.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-NotPrimaryOrSecondary.yml deleted file mode 100644 index 1dc6a2319e..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-NotPrimaryOrSecondary.yml +++ /dev/null @@ -1,91 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation NotPrimaryOrSecondary error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale NotPrimaryOrSecondary error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: NotPrimaryOrSecondary - code: 13436 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '2' - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-NotWritablePrimary.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-NotWritablePrimary.json deleted file mode 100644 index 90889356dd..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-NotWritablePrimary.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "description": "Stale generation NotWritablePrimary error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale NotWritablePrimary error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotWritablePrimary", - "code": 10107, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-NotWritablePrimary.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-NotWritablePrimary.yml deleted file mode 100644 index 488eaab4a5..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-NotWritablePrimary.yml +++ /dev/null @@ -1,91 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation NotWritablePrimary error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale NotWritablePrimary error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: NotWritablePrimary - code: 10107 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '2' - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-PrimarySteppedDown.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-PrimarySteppedDown.json deleted file mode 100644 index 0a707a1c07..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-PrimarySteppedDown.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "description": "Stale generation PrimarySteppedDown error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale PrimarySteppedDown error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "PrimarySteppedDown", - "code": 189, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-PrimarySteppedDown.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-PrimarySteppedDown.yml deleted file mode 100644 index 2b45081087..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-PrimarySteppedDown.yml +++ /dev/null @@ -1,91 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation PrimarySteppedDown error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale PrimarySteppedDown error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: PrimarySteppedDown - code: 189 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '2' - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-ShutdownInProgress.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-ShutdownInProgress.json deleted file mode 100644 index 5da3413d5b..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-ShutdownInProgress.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "description": "Stale generation ShutdownInProgress error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale ShutdownInProgress error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "ShutdownInProgress", - "code": 91, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-ShutdownInProgress.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-ShutdownInProgress.yml deleted file mode 100644 index b9bd8212d9..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-ShutdownInProgress.yml +++ /dev/null @@ -1,91 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation ShutdownInProgress error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale ShutdownInProgress error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: ShutdownInProgress - code: 91 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '2' - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-InterruptedAtShutdown.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-InterruptedAtShutdown.json deleted file mode 100644 index d29310fb61..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-InterruptedAtShutdown.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "description": "Stale generation InterruptedAtShutdown error afterHandshakeCompletes", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale InterruptedAtShutdown error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "InterruptedAtShutdown", - "code": 11600, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-InterruptedAtShutdown.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-InterruptedAtShutdown.yml deleted file mode 100644 index 48dd257af9..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-InterruptedAtShutdown.yml +++ /dev/null @@ -1,91 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation InterruptedAtShutdown error afterHandshakeCompletes -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale InterruptedAtShutdown error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: InterruptedAtShutdown - code: 11600 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-InterruptedDueToReplStateChange.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-InterruptedDueToReplStateChange.json deleted file mode 100644 index 376bb93770..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-InterruptedDueToReplStateChange.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "description": "Stale generation InterruptedDueToReplStateChange error afterHandshakeCompletes", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale InterruptedDueToReplStateChange error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "InterruptedDueToReplStateChange", - "code": 11602, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-InterruptedDueToReplStateChange.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-InterruptedDueToReplStateChange.yml deleted file mode 100644 index 5e7ddeaa36..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-InterruptedDueToReplStateChange.yml +++ /dev/null @@ -1,91 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation InterruptedDueToReplStateChange error afterHandshakeCompletes -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale InterruptedDueToReplStateChange error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: InterruptedDueToReplStateChange - code: 11602 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-LegacyNotPrimary.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-LegacyNotPrimary.json deleted file mode 100644 index 990fc45e4e..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-LegacyNotPrimary.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "description": "Stale generation LegacyNotPrimary error afterHandshakeCompletes", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale LegacyNotPrimary error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "LegacyNotPrimary", - "code": 10058, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-LegacyNotPrimary.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-LegacyNotPrimary.yml deleted file mode 100644 index 8701f366ab..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-LegacyNotPrimary.yml +++ /dev/null @@ -1,91 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation LegacyNotPrimary error afterHandshakeCompletes -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale LegacyNotPrimary error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: LegacyNotPrimary - code: 10058 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-NotPrimaryNoSecondaryOk.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-NotPrimaryNoSecondaryOk.json deleted file mode 100644 index 1744a82f77..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-NotPrimaryNoSecondaryOk.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "description": "Stale generation NotPrimaryNoSecondaryOk error afterHandshakeCompletes", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale NotPrimaryNoSecondaryOk error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotPrimaryNoSecondaryOk", - "code": 13435, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-NotPrimaryNoSecondaryOk.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-NotPrimaryNoSecondaryOk.yml deleted file mode 100644 index 70673e9fe6..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-NotPrimaryNoSecondaryOk.yml +++ /dev/null @@ -1,91 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation NotPrimaryNoSecondaryOk error afterHandshakeCompletes -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale NotPrimaryNoSecondaryOk error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: NotPrimaryNoSecondaryOk - code: 13435 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-NotPrimaryOrSecondary.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-NotPrimaryOrSecondary.json deleted file mode 100644 index 57ca1cf158..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-NotPrimaryOrSecondary.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "description": "Stale generation NotPrimaryOrSecondary error afterHandshakeCompletes", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale NotPrimaryOrSecondary error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotPrimaryOrSecondary", - "code": 13436, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-NotPrimaryOrSecondary.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-NotPrimaryOrSecondary.yml deleted file mode 100644 index 4b036edd0d..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-NotPrimaryOrSecondary.yml +++ /dev/null @@ -1,91 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation NotPrimaryOrSecondary error afterHandshakeCompletes -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale NotPrimaryOrSecondary error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: NotPrimaryOrSecondary - code: 13436 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-NotWritablePrimary.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-NotWritablePrimary.json deleted file mode 100644 index 995453c82b..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-NotWritablePrimary.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "description": "Stale generation NotWritablePrimary error afterHandshakeCompletes", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale NotWritablePrimary error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotWritablePrimary", - "code": 10107, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-NotWritablePrimary.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-NotWritablePrimary.yml deleted file mode 100644 index f9199ef48f..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-NotWritablePrimary.yml +++ /dev/null @@ -1,91 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation NotWritablePrimary error afterHandshakeCompletes -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale NotWritablePrimary error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: NotWritablePrimary - code: 10107 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-PrimarySteppedDown.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-PrimarySteppedDown.json deleted file mode 100644 index bf4c85d24f..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-PrimarySteppedDown.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "description": "Stale generation PrimarySteppedDown error afterHandshakeCompletes", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale PrimarySteppedDown error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "PrimarySteppedDown", - "code": 189, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-PrimarySteppedDown.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-PrimarySteppedDown.yml deleted file mode 100644 index 032993e749..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-PrimarySteppedDown.yml +++ /dev/null @@ -1,91 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation PrimarySteppedDown error afterHandshakeCompletes -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale PrimarySteppedDown error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: PrimarySteppedDown - code: 189 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-ShutdownInProgress.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-ShutdownInProgress.json deleted file mode 100644 index 9374900e06..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-ShutdownInProgress.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "description": "Stale generation ShutdownInProgress error afterHandshakeCompletes", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale ShutdownInProgress error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "ShutdownInProgress", - "code": 91, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-ShutdownInProgress.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-ShutdownInProgress.yml deleted file mode 100644 index 23659f729b..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-ShutdownInProgress.yml +++ /dev/null @@ -1,91 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation ShutdownInProgress error afterHandshakeCompletes -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale ShutdownInProgress error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: ShutdownInProgress - code: 91 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-network.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-network.json deleted file mode 100644 index f5d01b6540..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-network.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "description": "Stale generation network error afterHandshakeCompletes", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale network error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-network.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-network.yml deleted file mode 100644 index 98cb9a44e1..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-network.yml +++ /dev/null @@ -1,82 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation network error afterHandshakeCompletes -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale network error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-timeout.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-timeout.json deleted file mode 100644 index fa84343b0b..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-timeout.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "description": "Stale generation timeout error afterHandshakeCompletes", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale timeout error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "timeout" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-timeout.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-timeout.yml deleted file mode 100644 index 37b8f71d8d..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-afterHandshakeCompletes-timeout.yml +++ /dev/null @@ -1,82 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation timeout error afterHandshakeCompletes -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale timeout error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: timeout - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-InterruptedAtShutdown.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-InterruptedAtShutdown.json deleted file mode 100644 index 72fac9a86e..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-InterruptedAtShutdown.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "description": "Stale generation InterruptedAtShutdown error beforeHandshakeCompletes", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale InterruptedAtShutdown error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "beforeHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "InterruptedAtShutdown", - "code": 11600, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-InterruptedAtShutdown.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-InterruptedAtShutdown.yml deleted file mode 100644 index c699c53ab1..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-InterruptedAtShutdown.yml +++ /dev/null @@ -1,91 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation InterruptedAtShutdown error beforeHandshakeCompletes -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale InterruptedAtShutdown error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: beforeHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: InterruptedAtShutdown - code: 11600 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-InterruptedDueToReplStateChange.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-InterruptedDueToReplStateChange.json deleted file mode 100644 index 3c713592a3..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-InterruptedDueToReplStateChange.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "description": "Stale generation InterruptedDueToReplStateChange error beforeHandshakeCompletes", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale InterruptedDueToReplStateChange error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "beforeHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "InterruptedDueToReplStateChange", - "code": 11602, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-InterruptedDueToReplStateChange.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-InterruptedDueToReplStateChange.yml deleted file mode 100644 index a9826eb01a..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-InterruptedDueToReplStateChange.yml +++ /dev/null @@ -1,91 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation InterruptedDueToReplStateChange error beforeHandshakeCompletes -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale InterruptedDueToReplStateChange error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: beforeHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: InterruptedDueToReplStateChange - code: 11602 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-LegacyNotPrimary.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-LegacyNotPrimary.json deleted file mode 100644 index 257b6ec6fb..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-LegacyNotPrimary.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "description": "Stale generation LegacyNotPrimary error beforeHandshakeCompletes", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale LegacyNotPrimary error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "beforeHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "LegacyNotPrimary", - "code": 10058, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-LegacyNotPrimary.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-LegacyNotPrimary.yml deleted file mode 100644 index f26d4d963f..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-LegacyNotPrimary.yml +++ /dev/null @@ -1,91 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation LegacyNotPrimary error beforeHandshakeCompletes -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale LegacyNotPrimary error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: beforeHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: LegacyNotPrimary - code: 10058 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryNoSecondaryOk.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryNoSecondaryOk.json deleted file mode 100644 index dcb5716f44..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryNoSecondaryOk.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "description": "Stale generation NotPrimaryNoSecondaryOk error beforeHandshakeCompletes", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale NotPrimaryNoSecondaryOk error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "beforeHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotPrimaryNoSecondaryOk", - "code": 13435, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryNoSecondaryOk.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryNoSecondaryOk.yml deleted file mode 100644 index 27187bae63..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryNoSecondaryOk.yml +++ /dev/null @@ -1,91 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation NotPrimaryNoSecondaryOk error beforeHandshakeCompletes -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale NotPrimaryNoSecondaryOk error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: beforeHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: NotPrimaryNoSecondaryOk - code: 13435 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryOrSecondary.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryOrSecondary.json deleted file mode 100644 index 58cefafae9..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryOrSecondary.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "description": "Stale generation NotPrimaryOrSecondary error beforeHandshakeCompletes", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale NotPrimaryOrSecondary error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "beforeHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotPrimaryOrSecondary", - "code": 13436, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryOrSecondary.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryOrSecondary.yml deleted file mode 100644 index 1b56fd2ab7..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryOrSecondary.yml +++ /dev/null @@ -1,91 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation NotPrimaryOrSecondary error beforeHandshakeCompletes -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale NotPrimaryOrSecondary error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: beforeHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: NotPrimaryOrSecondary - code: 13436 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-NotWritablePrimary.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-NotWritablePrimary.json deleted file mode 100644 index c92b01e054..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-NotWritablePrimary.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "description": "Stale generation NotWritablePrimary error beforeHandshakeCompletes", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale NotWritablePrimary error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "beforeHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotWritablePrimary", - "code": 10107, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-NotWritablePrimary.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-NotWritablePrimary.yml deleted file mode 100644 index 725dc172de..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-NotWritablePrimary.yml +++ /dev/null @@ -1,91 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation NotWritablePrimary error beforeHandshakeCompletes -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale NotWritablePrimary error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: beforeHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: NotWritablePrimary - code: 10107 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-PrimarySteppedDown.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-PrimarySteppedDown.json deleted file mode 100644 index 62759b6ad9..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-PrimarySteppedDown.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "description": "Stale generation PrimarySteppedDown error beforeHandshakeCompletes", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale PrimarySteppedDown error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "beforeHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "PrimarySteppedDown", - "code": 189, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-PrimarySteppedDown.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-PrimarySteppedDown.yml deleted file mode 100644 index cac86fa7ee..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-PrimarySteppedDown.yml +++ /dev/null @@ -1,91 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation PrimarySteppedDown error beforeHandshakeCompletes -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale PrimarySteppedDown error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: beforeHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: PrimarySteppedDown - code: 189 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-ShutdownInProgress.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-ShutdownInProgress.json deleted file mode 100644 index 4661632c4f..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-ShutdownInProgress.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "description": "Stale generation ShutdownInProgress error beforeHandshakeCompletes", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale ShutdownInProgress error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "beforeHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "ShutdownInProgress", - "code": 91, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-ShutdownInProgress.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-ShutdownInProgress.yml deleted file mode 100644 index dd3ca671b3..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-ShutdownInProgress.yml +++ /dev/null @@ -1,91 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation ShutdownInProgress error beforeHandshakeCompletes -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale ShutdownInProgress error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: beforeHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: ShutdownInProgress - code: 91 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": "2" - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-network.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-network.json deleted file mode 100644 index 15b044fc73..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-network.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "description": "Stale generation network error beforeHandshakeCompletes", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale network error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "beforeHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-network.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-network.yml deleted file mode 100644 index b678534826..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-network.yml +++ /dev/null @@ -1,82 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation network error beforeHandshakeCompletes -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale network error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: beforeHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-timeout.json b/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-timeout.json deleted file mode 100644 index acbb9e581e..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-timeout.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "description": "Stale generation timeout error beforeHandshakeCompletes", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Non-stale application network error", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "network" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Primary A is rediscovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale timeout error (stale generation)", - "applicationErrors": [ - { - "address": "a:27017", - "generation": 0, - "when": "beforeHandshakeCompletes", - "maxWireVersion": 9, - "type": "timeout" - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 1 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-timeout.yml b/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-timeout.yml deleted file mode 100644 index d1ba24ba3b..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation-beforeHandshakeCompletes-timeout.yml +++ /dev/null @@ -1,82 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation timeout error beforeHandshakeCompletes -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale timeout error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: beforeHandshakeCompletes - maxWireVersion: 9 - type: timeout - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-generation.yml.template b/testdata/server-discovery-and-monitoring/errors/stale-generation.yml.template deleted file mode 100644 index 1519796575..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-generation.yml.template +++ /dev/null @@ -1,81 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale generation {error_name} error {when} -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -# Process a network error which increments the pool generation. -- description: Non-stale application network error - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: network - outcome: - servers: - a:27017: - type: Unknown - topologyVersion: null - pool: - generation: 1 - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Primary A is rediscovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: *topologyVersion_1_1 - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 1 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale {error_name} error (stale generation) - applicationErrors: - - address: a:27017 - generation: 0 - when: {when} - maxWireVersion: 9{stale_error} - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-InterruptedAtShutdown.json b/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-InterruptedAtShutdown.json deleted file mode 100644 index f2207a04d5..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-InterruptedAtShutdown.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "description": "Stale topologyVersion InterruptedAtShutdown error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale InterruptedAtShutdown error (topologyVersion less)", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "InterruptedAtShutdown", - "code": 11600, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "0" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale InterruptedAtShutdown error (topologyVersion equal)", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "InterruptedAtShutdown", - "code": 11600, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-InterruptedAtShutdown.yml b/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-InterruptedAtShutdown.yml deleted file mode 100644 index 483c48044d..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-InterruptedAtShutdown.yml +++ /dev/null @@ -1,65 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale topologyVersion InterruptedAtShutdown error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale InterruptedAtShutdown error (topologyVersion less) - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: InterruptedAtShutdown - code: 11600 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '0' - outcome: *outcome - -- description: Ignore stale InterruptedAtShutdown error (topologyVersion equal) - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: InterruptedAtShutdown - code: 11600 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-InterruptedDueToReplStateChange.json b/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-InterruptedDueToReplStateChange.json deleted file mode 100644 index 4387451ce6..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-InterruptedDueToReplStateChange.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "description": "Stale topologyVersion InterruptedDueToReplStateChange error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale InterruptedDueToReplStateChange error (topologyVersion less)", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "InterruptedDueToReplStateChange", - "code": 11602, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "0" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale InterruptedDueToReplStateChange error (topologyVersion equal)", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "InterruptedDueToReplStateChange", - "code": 11602, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-InterruptedDueToReplStateChange.yml b/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-InterruptedDueToReplStateChange.yml deleted file mode 100644 index 5bed83e3da..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-InterruptedDueToReplStateChange.yml +++ /dev/null @@ -1,65 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale topologyVersion InterruptedDueToReplStateChange error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale InterruptedDueToReplStateChange error (topologyVersion less) - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: InterruptedDueToReplStateChange - code: 11602 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '0' - outcome: *outcome - -- description: Ignore stale InterruptedDueToReplStateChange error (topologyVersion equal) - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: InterruptedDueToReplStateChange - code: 11602 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-LegacyNotPrimary.json b/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-LegacyNotPrimary.json deleted file mode 100644 index 8c0cf00f22..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-LegacyNotPrimary.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "description": "Stale topologyVersion LegacyNotPrimary error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale LegacyNotPrimary error (topologyVersion less)", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "LegacyNotPrimary", - "code": 10058, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "0" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale LegacyNotPrimary error (topologyVersion equal)", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "LegacyNotPrimary", - "code": 10058, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-LegacyNotPrimary.yml b/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-LegacyNotPrimary.yml deleted file mode 100644 index 483087a238..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-LegacyNotPrimary.yml +++ /dev/null @@ -1,65 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale topologyVersion LegacyNotPrimary error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale LegacyNotPrimary error (topologyVersion less) - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: LegacyNotPrimary - code: 10058 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '0' - outcome: *outcome - -- description: Ignore stale LegacyNotPrimary error (topologyVersion equal) - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: LegacyNotPrimary - code: 10058 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-NotPrimaryNoSecondaryOk.json b/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-NotPrimaryNoSecondaryOk.json deleted file mode 100644 index 99a828326c..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-NotPrimaryNoSecondaryOk.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "description": "Stale topologyVersion NotPrimaryNoSecondaryOk error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale NotPrimaryNoSecondaryOk error (topologyVersion less)", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotPrimaryNoSecondaryOk", - "code": 13435, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "0" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale NotPrimaryNoSecondaryOk error (topologyVersion equal)", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotPrimaryNoSecondaryOk", - "code": 13435, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-NotPrimaryNoSecondaryOk.yml b/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-NotPrimaryNoSecondaryOk.yml deleted file mode 100644 index 823bf3ee8e..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-NotPrimaryNoSecondaryOk.yml +++ /dev/null @@ -1,65 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale topologyVersion NotPrimaryNoSecondaryOk error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale NotPrimaryNoSecondaryOk error (topologyVersion less) - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: NotPrimaryNoSecondaryOk - code: 13435 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '0' - outcome: *outcome - -- description: Ignore stale NotPrimaryNoSecondaryOk error (topologyVersion equal) - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: NotPrimaryNoSecondaryOk - code: 13435 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-NotPrimaryOrSecondary.json b/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-NotPrimaryOrSecondary.json deleted file mode 100644 index ba2ea87106..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-NotPrimaryOrSecondary.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "description": "Stale topologyVersion NotPrimaryOrSecondary error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale NotPrimaryOrSecondary error (topologyVersion less)", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotPrimaryOrSecondary", - "code": 13436, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "0" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale NotPrimaryOrSecondary error (topologyVersion equal)", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotPrimaryOrSecondary", - "code": 13436, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-NotPrimaryOrSecondary.yml b/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-NotPrimaryOrSecondary.yml deleted file mode 100644 index acee1ec566..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-NotPrimaryOrSecondary.yml +++ /dev/null @@ -1,65 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale topologyVersion NotPrimaryOrSecondary error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale NotPrimaryOrSecondary error (topologyVersion less) - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: NotPrimaryOrSecondary - code: 13436 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '0' - outcome: *outcome - -- description: Ignore stale NotPrimaryOrSecondary error (topologyVersion equal) - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: NotPrimaryOrSecondary - code: 13436 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-NotWritablePrimary.json b/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-NotWritablePrimary.json deleted file mode 100644 index 8edd317a73..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-NotWritablePrimary.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "description": "Stale topologyVersion NotWritablePrimary error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale NotWritablePrimary error (topologyVersion less)", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotWritablePrimary", - "code": 10107, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "0" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale NotWritablePrimary error (topologyVersion equal)", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "NotWritablePrimary", - "code": 10107, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-NotWritablePrimary.yml b/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-NotWritablePrimary.yml deleted file mode 100644 index 8e126b0cb0..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-NotWritablePrimary.yml +++ /dev/null @@ -1,65 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale topologyVersion NotWritablePrimary error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale NotWritablePrimary error (topologyVersion less) - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: NotWritablePrimary - code: 10107 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '0' - outcome: *outcome - -- description: Ignore stale NotWritablePrimary error (topologyVersion equal) - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: NotWritablePrimary - code: 10107 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-PrimarySteppedDown.json b/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-PrimarySteppedDown.json deleted file mode 100644 index da8e4755eb..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-PrimarySteppedDown.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "description": "Stale topologyVersion PrimarySteppedDown error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale PrimarySteppedDown error (topologyVersion less)", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "PrimarySteppedDown", - "code": 189, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "0" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale PrimarySteppedDown error (topologyVersion equal)", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "PrimarySteppedDown", - "code": 189, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-PrimarySteppedDown.yml b/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-PrimarySteppedDown.yml deleted file mode 100644 index c5e8a403b1..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-PrimarySteppedDown.yml +++ /dev/null @@ -1,65 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale topologyVersion PrimarySteppedDown error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale PrimarySteppedDown error (topologyVersion less) - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: PrimarySteppedDown - code: 189 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '0' - outcome: *outcome - -- description: Ignore stale PrimarySteppedDown error (topologyVersion equal) - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: PrimarySteppedDown - code: 189 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-ShutdownInProgress.json b/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-ShutdownInProgress.json deleted file mode 100644 index aa252e1dc4..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-ShutdownInProgress.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "description": "Stale topologyVersion ShutdownInProgress error", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale ShutdownInProgress error (topologyVersion less)", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "ShutdownInProgress", - "code": 91, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "0" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore stale ShutdownInProgress error (topologyVersion equal)", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 0, - "errmsg": "ShutdownInProgress", - "code": 91, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-ShutdownInProgress.yml b/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-ShutdownInProgress.yml deleted file mode 100644 index 6ad7677cf0..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion-ShutdownInProgress.yml +++ /dev/null @@ -1,65 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale topologyVersion ShutdownInProgress error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale ShutdownInProgress error (topologyVersion less) - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: ShutdownInProgress - code: 91 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '0' - outcome: *outcome - -- description: Ignore stale ShutdownInProgress error (topologyVersion equal) - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: ShutdownInProgress - code: 91 - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion.yml.template b/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion.yml.template deleted file mode 100644 index f69d440da0..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/stale-topologyVersion.yml.template +++ /dev/null @@ -1,65 +0,0 @@ -# Autogenerated tests for SDAM error handling, see generate-error-tests.py -description: Stale topologyVersion {error_name} error -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore stale {error_name} error (topologyVersion less) - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: {error_name} - code: {error_code} - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '0' - outcome: *outcome - -- description: Ignore stale {error_name} error (topologyVersion equal) - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 0 - errmsg: {error_name} - code: {error_code} - topologyVersion: - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/errors/write_errors_ignored.json b/testdata/server-discovery-and-monitoring/errors/write_errors_ignored.json deleted file mode 100644 index b588807e08..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/write_errors_ignored.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "description": "writeErrors field is ignored", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "description": "Primary A is discovered", - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "description": "Ignore command error with writeErrors field", - "applicationErrors": [ - { - "address": "a:27017", - "when": "afterHandshakeCompletes", - "maxWireVersion": 9, - "type": "command", - "response": { - "ok": 1, - "writeErrors": [ - { - "errmsg": "NotPrimaryNoSecondaryOk", - "code": 13435, - "index": 0 - } - ] - } - } - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - }, - "pool": { - "generation": 0 - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/errors/write_errors_ignored.yml b/testdata/server-discovery-and-monitoring/errors/write_errors_ignored.yml deleted file mode 100644 index 85f59d97d4..0000000000 --- a/testdata/server-discovery-and-monitoring/errors/write_errors_ignored.yml +++ /dev/null @@ -1,42 +0,0 @@ -description: writeErrors field is ignored -uri: mongodb://a/?replicaSet=rs -phases: -- description: Primary A is discovered - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 9 - topologyVersion: &topologyVersion_1_1 - processId: - "$oid": '000000000000000000000001' - counter: - "$numberLong": '1' - outcome: &outcome - servers: - a:27017: - type: RSPrimary - setName: rs - topologyVersion: *topologyVersion_1_1 - pool: - generation: 0 - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - -- description: Ignore command error with writeErrors field - applicationErrors: - - address: a:27017 - when: afterHandshakeCompletes - maxWireVersion: 9 - type: command - response: - ok: 1 - writeErrors: - - { errmsg: NotPrimaryNoSecondaryOk, code: 13435, index: 0 } - outcome: *outcome diff --git a/testdata/server-discovery-and-monitoring/load-balanced/discover_load_balancer.json b/testdata/server-discovery-and-monitoring/load-balanced/discover_load_balancer.json deleted file mode 100644 index d2e34478e6..0000000000 --- a/testdata/server-discovery-and-monitoring/load-balanced/discover_load_balancer.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "description": "Load balancer can be discovered and only has the address property set", - "uri": "mongodb://a/?loadBalanced=true", - "phases": [ - { - "outcome": { - "servers": { - "a:27017": { - "type": "LoadBalancer", - "setName": null, - "setVersion": null, - "electionId": null, - "logicalSessionTimeoutMinutes": null, - "minWireVersion": null, - "maxWireVersion": null, - "topologyVersion": null - } - }, - "topologyType": "LoadBalanced", - "setName": null, - "logicalSessionTimeoutMinutes": null, - "maxSetVersion": null, - "maxElectionId": null, - "compatible": true - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/load-balanced/discover_load_balancer.yml b/testdata/server-discovery-and-monitoring/load-balanced/discover_load_balancer.yml deleted file mode 100644 index 20083d98be..0000000000 --- a/testdata/server-discovery-and-monitoring/load-balanced/discover_load_balancer.yml +++ /dev/null @@ -1,25 +0,0 @@ -description: "Load balancer can be discovered and only has the address property set" - -uri: "mongodb://a/?loadBalanced=true" - -phases: - - # There should be no monitoring in LoadBalanced mode, so no responses are necessary to get the topology into the - # correct state. - - outcome: - servers: - a:27017: - type: LoadBalancer - setName: null - setVersion: null - electionId: null - logicalSessionTimeoutMinutes: null - minWireVersion: null - maxWireVersion: null - topologyVersion: null - topologyType: LoadBalanced - setName: null - logicalSessionTimeoutMinutes: null - maxSetVersion: null - maxElectionId: null - compatible: true diff --git a/testdata/server-discovery-and-monitoring/monitoring/discovered_standalone.json b/testdata/server-discovery-and-monitoring/monitoring/discovered_standalone.json deleted file mode 100644 index 097203694e..0000000000 --- a/testdata/server-discovery-and-monitoring/monitoring/discovered_standalone.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "description": "Monitoring a discovered standalone connection", - "uri": "mongodb://a:27017/?directConnection=false", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "events": [ - { - "topology_opening_event": { - "topologyId": "42" - } - }, - { - "topology_description_changed_event": { - "topologyId": "42", - "previousDescription": { - "topologyType": "Unknown", - "servers": [] - }, - "newDescription": { - "topologyType": "Unknown", - "servers": [ - { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - } - ] - } - } - }, - { - "server_opening_event": { - "topologyId": "42", - "address": "a:27017" - } - }, - { - "server_description_changed_event": { - "topologyId": "42", - "address": "a:27017", - "previousDescription": { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - }, - "newDescription": { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Standalone" - } - } - }, - { - "topology_description_changed_event": { - "topologyId": "42", - "previousDescription": { - "topologyType": "Unknown", - "servers": [ - { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - } - ] - }, - "newDescription": { - "topologyType": "Single", - "servers": [ - { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Standalone" - } - ] - } - } - } - ] - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/monitoring/discovered_standalone.yml b/testdata/server-discovery-and-monitoring/monitoring/discovered_standalone.yml deleted file mode 100644 index 1de96154cc..0000000000 --- a/testdata/server-discovery-and-monitoring/monitoring/discovered_standalone.yml +++ /dev/null @@ -1,70 +0,0 @@ -description: "Monitoring a discovered standalone connection" -uri: "mongodb://a:27017/?directConnection=false" -phases: - - - responses: - - - - "a:27017" - - { ok: 1, helloOk: true, isWritablePrimary: true, minWireVersion: 0, maxWireVersion: 21 } - - outcome: - events: - - - topology_opening_event: - topologyId: "42" - - - topology_description_changed_event: - topologyId: "42" - previousDescription: - topologyType: "Unknown" - servers: [] - newDescription: - topologyType: "Unknown" - servers: - - - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - - - server_opening_event: - topologyId: "42" - address: "a:27017" - - - server_description_changed_event: - topologyId: "42" - address: "a:27017" - previousDescription: - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - newDescription: - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Standalone" - - - topology_description_changed_event: - topologyId: "42" - previousDescription: - topologyType: "Unknown" - servers: - - - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - newDescription: - topologyType: "Single" - servers: - - - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Standalone" diff --git a/testdata/server-discovery-and-monitoring/monitoring/load_balancer.json b/testdata/server-discovery-and-monitoring/monitoring/load_balancer.json deleted file mode 100644 index 09b1537193..0000000000 --- a/testdata/server-discovery-and-monitoring/monitoring/load_balancer.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "description": "Monitoring a load balancer", - "uri": "mongodb://a:27017/?loadBalanced=true", - "phases": [ - { - "outcome": { - "events": [ - { - "topology_opening_event": { - "topologyId": "42" - } - }, - { - "topology_description_changed_event": { - "topologyId": "42", - "previousDescription": { - "topologyType": "Unknown", - "servers": [] - }, - "newDescription": { - "topologyType": "LoadBalanced", - "servers": [ - { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - } - ] - } - } - }, - { - "server_opening_event": { - "topologyId": "42", - "address": "a:27017" - } - }, - { - "server_description_changed_event": { - "topologyId": "42", - "address": "a:27017", - "previousDescription": { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - }, - "newDescription": { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "LoadBalancer" - } - } - }, - { - "topology_description_changed_event": { - "topologyId": "42", - "previousDescription": { - "topologyType": "LoadBalanced", - "servers": [ - { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - } - ] - }, - "newDescription": { - "topologyType": "LoadBalanced", - "servers": [ - { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "LoadBalancer" - } - ] - } - } - } - ] - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/monitoring/load_balancer.yml b/testdata/server-discovery-and-monitoring/monitoring/load_balancer.yml deleted file mode 100644 index b4eec2d2c6..0000000000 --- a/testdata/server-discovery-and-monitoring/monitoring/load_balancer.yml +++ /dev/null @@ -1,65 +0,0 @@ -description: "Monitoring a load balancer" -uri: "mongodb://a:27017/?loadBalanced=true" -phases: - - - outcome: - events: - - - topology_opening_event: - topologyId: "42" - - - topology_description_changed_event: - topologyId: "42" - previousDescription: - topologyType: "Unknown" - servers: [] - newDescription: - topologyType: "LoadBalanced" - servers: - - - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - - - server_opening_event: - topologyId: "42" - address: "a:27017" - - - server_description_changed_event: - topologyId: "42" - address: "a:27017" - previousDescription: - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - newDescription: - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "LoadBalancer" - - - topology_description_changed_event: - topologyId: "42" - previousDescription: - topologyType: "LoadBalanced" - servers: - - - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - newDescription: - topologyType: "LoadBalanced" - servers: - - - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "LoadBalancer" diff --git a/testdata/server-discovery-and-monitoring/monitoring/replica_set_with_no_primary.json b/testdata/server-discovery-and-monitoring/monitoring/replica_set_with_no_primary.json deleted file mode 100644 index 41d048729d..0000000000 --- a/testdata/server-discovery-and-monitoring/monitoring/replica_set_with_no_primary.json +++ /dev/null @@ -1,151 +0,0 @@ -{ - "description": "Monitoring a topology that is a replica set with no primary connected", - "uri": "mongodb://a,b", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "setName": "rs", - "setVersion": 1, - "primary": "b:27017", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "events": [ - { - "topology_opening_event": { - "topologyId": "42" - } - }, - { - "topology_description_changed_event": { - "topologyId": "42", - "previousDescription": { - "topologyType": "Unknown", - "servers": [] - }, - "newDescription": { - "topologyType": "Unknown", - "servers": [ - { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - }, - { - "address": "b:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - } - ] - } - } - }, - { - "server_opening_event": { - "topologyId": "42", - "address": "a:27017" - } - }, - { - "server_opening_event": { - "topologyId": "42", - "address": "b:27017" - } - }, - { - "server_description_changed_event": { - "topologyId": "42", - "address": "a:27017", - "previousDescription": { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - }, - "newDescription": { - "address": "a:27017", - "arbiters": [], - "hosts": [ - "a:27017", - "b:27017" - ], - "passives": [], - "primary": "b:27017", - "setName": "rs", - "type": "RSSecondary" - } - } - }, - { - "topology_description_changed_event": { - "topologyId": "42", - "previousDescription": { - "topologyType": "Unknown", - "servers": [ - { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - }, - { - "address": "b:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - } - ] - }, - "newDescription": { - "topologyType": "ReplicaSetNoPrimary", - "setName": "rs", - "servers": [ - { - "address": "a:27017", - "arbiters": [], - "hosts": [ - "a:27017", - "b:27017" - ], - "passives": [], - "primary": "b:27017", - "setName": "rs", - "type": "RSSecondary" - }, - { - "address": "b:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "PossiblePrimary" - } - ] - } - } - } - ] - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/monitoring/replica_set_with_no_primary.yml b/testdata/server-discovery-and-monitoring/monitoring/replica_set_with_no_primary.yml deleted file mode 100644 index e5ca9cd90d..0000000000 --- a/testdata/server-discovery-and-monitoring/monitoring/replica_set_with_no_primary.yml +++ /dev/null @@ -1,112 +0,0 @@ -description: "Monitoring a topology that is a replica set with no primary connected" -uri: "mongodb://a,b" -phases: - - - responses: - - - - "a:27017" - - - ok: 1 - helloOk: true - isWritablePrimary: false - secondary: true - setName: "rs" - setVersion: 1 - primary: "b:27017" - hosts: - - "a:27017" - - "b:27017" - minWireVersion: 0 - maxWireVersion: 21 - outcome: - events: - - - topology_opening_event: - topologyId: "42" - - - topology_description_changed_event: - topologyId: "42" - previousDescription: - topologyType: "Unknown" - servers: [] - newDescription: - topologyType: "Unknown" - servers: - - - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - - - address: "b:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - - - server_opening_event: - topologyId: "42" - address: "a:27017" - - - server_opening_event: - topologyId: "42" - address: "b:27017" - - - server_description_changed_event: - topologyId: "42" - address: "a:27017" - previousDescription: - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - newDescription: - address: "a:27017" - arbiters: [] - hosts: - - "a:27017" - - "b:27017" - passives: [] - primary: "b:27017" - setName: "rs" - type: "RSSecondary" - - - topology_description_changed_event: - topologyId: "42" - previousDescription: - topologyType: "Unknown" - servers: - - - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - - - address: "b:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - newDescription: - topologyType: "ReplicaSetNoPrimary" - setName: "rs" - servers: - - - address: "a:27017" - arbiters: [] - hosts: - - "a:27017" - - "b:27017" - passives: [] - primary: "b:27017" - setName: "rs" - type: "RSSecondary" - - - address: "b:27017" - arbiters: [] - hosts: [] - passives: [] - type: "PossiblePrimary" diff --git a/testdata/server-discovery-and-monitoring/monitoring/replica_set_with_primary.json b/testdata/server-discovery-and-monitoring/monitoring/replica_set_with_primary.json deleted file mode 100644 index 3ccc127d1d..0000000000 --- a/testdata/server-discovery-and-monitoring/monitoring/replica_set_with_primary.json +++ /dev/null @@ -1,150 +0,0 @@ -{ - "description": "Monitoring a topology that is a replica set with a primary connected", - "uri": "mongodb://a,b", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "setVersion": 1, - "primary": "a:27017", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "events": [ - { - "topology_opening_event": { - "topologyId": "42" - } - }, - { - "topology_description_changed_event": { - "topologyId": "42", - "previousDescription": { - "topologyType": "Unknown", - "servers": [] - }, - "newDescription": { - "topologyType": "Unknown", - "servers": [ - { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - }, - { - "address": "b:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - } - ] - } - } - }, - { - "server_opening_event": { - "topologyId": "42", - "address": "a:27017" - } - }, - { - "server_opening_event": { - "topologyId": "42", - "address": "b:27017" - } - }, - { - "server_description_changed_event": { - "topologyId": "42", - "address": "a:27017", - "previousDescription": { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - }, - "newDescription": { - "address": "a:27017", - "arbiters": [], - "hosts": [ - "a:27017", - "b:27017" - ], - "passives": [], - "primary": "a:27017", - "setName": "rs", - "type": "RSPrimary" - } - } - }, - { - "topology_description_changed_event": { - "topologyId": "42", - "previousDescription": { - "topologyType": "Unknown", - "servers": [ - { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - }, - { - "address": "b:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - } - ] - }, - "newDescription": { - "topologyType": "ReplicaSetWithPrimary", - "setName": "rs", - "servers": [ - { - "address": "a:27017", - "arbiters": [], - "hosts": [ - "a:27017", - "b:27017" - ], - "passives": [], - "primary": "a:27017", - "setName": "rs", - "type": "RSPrimary" - }, - { - "address": "b:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - } - ] - } - } - } - ] - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/monitoring/replica_set_with_primary.yml b/testdata/server-discovery-and-monitoring/monitoring/replica_set_with_primary.yml deleted file mode 100644 index 256895bb28..0000000000 --- a/testdata/server-discovery-and-monitoring/monitoring/replica_set_with_primary.yml +++ /dev/null @@ -1,111 +0,0 @@ -description: "Monitoring a topology that is a replica set with a primary connected" -uri: "mongodb://a,b" -phases: - - - responses: - - - - "a:27017" - - - ok: 1 - helloOk: true - isWritablePrimary: true - setName: "rs" - setVersion: 1 - primary: "a:27017" - hosts: - - "a:27017" - - "b:27017" - minWireVersion: 0 - maxWireVersion: 21 - outcome: - events: - - - topology_opening_event: - topologyId: "42" - - - topology_description_changed_event: - topologyId: "42" - previousDescription: - topologyType: "Unknown" - servers: [] - newDescription: - topologyType: "Unknown" - servers: - - - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - - - address: "b:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - - - server_opening_event: - topologyId: "42" - address: "a:27017" - - - server_opening_event: - topologyId: "42" - address: "b:27017" - - - server_description_changed_event: - topologyId: "42" - address: "a:27017" - previousDescription: - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - newDescription: - address: "a:27017" - arbiters: [] - hosts: - - "a:27017" - - "b:27017" - passives: [] - primary: "a:27017" - setName: "rs" - type: "RSPrimary" - - - topology_description_changed_event: - topologyId: "42" - previousDescription: - topologyType: "Unknown" - servers: - - - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - - - address: "b:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - newDescription: - topologyType: "ReplicaSetWithPrimary" - setName: "rs" - servers: - - - address: "a:27017" - arbiters: [] - hosts: - - "a:27017" - - "b:27017" - passives: [] - primary: "a:27017" - setName: "rs" - type: "RSPrimary" - - - address: "b:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" diff --git a/testdata/server-discovery-and-monitoring/monitoring/replica_set_with_removal.json b/testdata/server-discovery-and-monitoring/monitoring/replica_set_with_removal.json deleted file mode 100644 index dc6fbe7e7d..0000000000 --- a/testdata/server-discovery-and-monitoring/monitoring/replica_set_with_removal.json +++ /dev/null @@ -1,161 +0,0 @@ -{ - "description": "Monitoring a replica set with non member", - "uri": "mongodb://a,b/", - "phases": [ - { - "responses": [], - "outcome": { - "events": [ - { - "topology_opening_event": { - "topologyId": "42" - } - }, - { - "topology_description_changed_event": { - "topologyId": "42", - "previousDescription": { - "topologyType": "Unknown", - "servers": [] - }, - "newDescription": { - "topologyType": "Unknown", - "servers": [ - { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - }, - { - "address": "b:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - } - ] - } - } - }, - { - "server_opening_event": { - "topologyId": "42", - "address": "a:27017" - } - }, - { - "server_opening_event": { - "topologyId": "42", - "address": "b:27017" - } - } - ] - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "setVersion": 1, - "primary": "a:27017", - "hosts": [ - "a:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ], - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true - } - ] - ], - "outcome": { - "events": [ - { - "server_description_changed_event": { - "topologyId": "42", - "address": "a:27017", - "previousDescription": { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - }, - "newDescription": { - "address": "a:27017", - "arbiters": [], - "hosts": [ - "a:27017" - ], - "passives": [], - "primary": "a:27017", - "setName": "rs", - "type": "RSPrimary" - } - } - }, - { - "server_closed_event": { - "topologyId": "42", - "address": "b:27017" - } - }, - { - "topology_description_changed_event": { - "topologyId": "42", - "previousDescription": { - "topologyType": "Unknown", - "servers": [ - { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - }, - { - "address": "b:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - } - ] - }, - "newDescription": { - "topologyType": "ReplicaSetWithPrimary", - "setName": "rs", - "servers": [ - { - "address": "a:27017", - "arbiters": [], - "hosts": [ - "a:27017" - ], - "passives": [], - "primary": "a:27017", - "setName": "rs", - "type": "RSPrimary" - } - ] - } - } - } - ] - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/monitoring/replica_set_with_removal.yml b/testdata/server-discovery-and-monitoring/monitoring/replica_set_with_removal.yml deleted file mode 100644 index 25c006861a..0000000000 --- a/testdata/server-discovery-and-monitoring/monitoring/replica_set_with_removal.yml +++ /dev/null @@ -1,111 +0,0 @@ -description: "Monitoring a replica set with non member" -uri: "mongodb://a,b/" -phases: - - - responses: [] - outcome: - events: - - - topology_opening_event: - topologyId: "42" - - - topology_description_changed_event: - topologyId: "42" - previousDescription: - topologyType: "Unknown" - servers: [] - newDescription: - topologyType: "Unknown" - servers: - - - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - - - address: "b:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - - - server_opening_event: - topologyId: "42" - address: "a:27017" - - - server_opening_event: - topologyId: "42" - address: "b:27017" - - - responses: - - - - "a:27017" - - { - ok: 1, - helloOk: true, - isWritablePrimary: true, - setName: "rs", - setVersion: 1.0, - primary: "a:27017", - hosts: [ "a:27017" ], - minWireVersion: 0, - maxWireVersion: 21 - } - - - - "b:27017" - - { ok: 1, helloOk: true, isWritablePrimary: true } - outcome: - events: - - - server_description_changed_event: - topologyId: "42" - address: "a:27017" - previousDescription: - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - newDescription: - address: "a:27017" - arbiters: [] - hosts: [ "a:27017" ] - passives: [] - primary: "a:27017" - setName: "rs" - type: "RSPrimary" - - - server_closed_event: - topologyId: "42" - address: "b:27017" - - - topology_description_changed_event: - topologyId: "42" - previousDescription: - topologyType: "Unknown" - servers: - - - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - - - address: "b:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - newDescription: - topologyType: "ReplicaSetWithPrimary" - setName: "rs" - servers: - - - address: "a:27017" - arbiters: [] - hosts: [ "a:27017" ] - passives: [] - primary: "a:27017" - setName: "rs" - type: "RSPrimary" diff --git a/testdata/server-discovery-and-monitoring/monitoring/required_replica_set.json b/testdata/server-discovery-and-monitoring/monitoring/required_replica_set.json deleted file mode 100644 index 1f4e5c1d71..0000000000 --- a/testdata/server-discovery-and-monitoring/monitoring/required_replica_set.json +++ /dev/null @@ -1,152 +0,0 @@ -{ - "description": "Monitoring a topology that is required to be a replica set", - "uri": "mongodb://a,b/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "setVersion": 1, - "primary": "a:27017", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "events": [ - { - "topology_opening_event": { - "topologyId": "42" - } - }, - { - "topology_description_changed_event": { - "topologyId": "42", - "previousDescription": { - "topologyType": "Unknown", - "servers": [] - }, - "newDescription": { - "topologyType": "ReplicaSetNoPrimary", - "setName": "rs", - "servers": [ - { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - }, - { - "address": "b:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - } - ] - } - } - }, - { - "server_opening_event": { - "topologyId": "42", - "address": "a:27017" - } - }, - { - "server_opening_event": { - "topologyId": "42", - "address": "b:27017" - } - }, - { - "server_description_changed_event": { - "topologyId": "42", - "address": "a:27017", - "previousDescription": { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - }, - "newDescription": { - "address": "a:27017", - "arbiters": [], - "hosts": [ - "a:27017", - "b:27017" - ], - "passives": [], - "primary": "a:27017", - "setName": "rs", - "type": "RSPrimary" - } - } - }, - { - "topology_description_changed_event": { - "topologyId": "42", - "previousDescription": { - "topologyType": "ReplicaSetNoPrimary", - "setName": "rs", - "servers": [ - { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - }, - { - "address": "b:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - } - ] - }, - "newDescription": { - "topologyType": "ReplicaSetWithPrimary", - "setName": "rs", - "servers": [ - { - "address": "a:27017", - "arbiters": [], - "hosts": [ - "a:27017", - "b:27017" - ], - "passives": [], - "primary": "a:27017", - "setName": "rs", - "type": "RSPrimary" - }, - { - "address": "b:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - } - ] - } - } - } - ] - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/monitoring/required_replica_set.yml b/testdata/server-discovery-and-monitoring/monitoring/required_replica_set.yml deleted file mode 100644 index 69d0500de1..0000000000 --- a/testdata/server-discovery-and-monitoring/monitoring/required_replica_set.yml +++ /dev/null @@ -1,108 +0,0 @@ -description: "Monitoring a topology that is required to be a replica set" -uri: "mongodb://a,b/?replicaSet=rs" -phases: - - - responses: - - - - "a:27017" - - { - ok: 1, - helloOk: true, - isWritablePrimary: true, - setName: "rs", - setVersion: 1.0, - primary: "a:27017", - hosts: [ "a:27017", "b:27017" ], - minWireVersion: 0, - maxWireVersion: 21 - } - outcome: - events: - - - topology_opening_event: - topologyId: "42" - - - topology_description_changed_event: - topologyId: "42" - previousDescription: - topologyType: "Unknown" - servers: [] - newDescription: - topologyType: "ReplicaSetNoPrimary" - setName: "rs" - servers: - - - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - - - address: "b:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - - - server_opening_event: - topologyId: "42" - address: "a:27017" - - - server_opening_event: - topologyId: "42" - address: "b:27017" - - - server_description_changed_event: - topologyId: "42" - address: "a:27017" - previousDescription: - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - newDescription: - address: "a:27017" - arbiters: [] - hosts: [ "a:27017", "b:27017" ] - passives: [] - primary: "a:27017" - setName: "rs" - type: "RSPrimary" - - - topology_description_changed_event: - topologyId: "42" - previousDescription: - topologyType: "ReplicaSetNoPrimary" - setName: "rs" - servers: - - - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - - - address: "b:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - newDescription: - topologyType: "ReplicaSetWithPrimary" - setName: "rs" - servers: - - - address: "a:27017" - arbiters: [] - hosts: [ "a:27017", "b:27017" ] - passives: [] - primary: "a:27017" - setName: "rs" - type: "RSPrimary" - - - address: "b:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" diff --git a/testdata/server-discovery-and-monitoring/monitoring/standalone.json b/testdata/server-discovery-and-monitoring/monitoring/standalone.json deleted file mode 100644 index f375a383ca..0000000000 --- a/testdata/server-discovery-and-monitoring/monitoring/standalone.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "description": "Monitoring a direct connection", - "uri": "mongodb://a:27017/?directConnection=true", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "events": [ - { - "topology_opening_event": { - "topologyId": "42" - } - }, - { - "topology_description_changed_event": { - "topologyId": "42", - "previousDescription": { - "topologyType": "Unknown", - "servers": [] - }, - "newDescription": { - "topologyType": "Single", - "servers": [ - { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - } - ] - } - } - }, - { - "server_opening_event": { - "topologyId": "42", - "address": "a:27017" - } - }, - { - "server_description_changed_event": { - "topologyId": "42", - "address": "a:27017", - "previousDescription": { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - }, - "newDescription": { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Standalone" - } - } - }, - { - "topology_description_changed_event": { - "topologyId": "42", - "previousDescription": { - "topologyType": "Single", - "servers": [ - { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - } - ] - }, - "newDescription": { - "topologyType": "Single", - "servers": [ - { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Standalone" - } - ] - } - } - } - ] - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/monitoring/standalone.yml b/testdata/server-discovery-and-monitoring/monitoring/standalone.yml deleted file mode 100644 index 0c3ed64601..0000000000 --- a/testdata/server-discovery-and-monitoring/monitoring/standalone.yml +++ /dev/null @@ -1,70 +0,0 @@ -description: "Monitoring a direct connection" -uri: "mongodb://a:27017/?directConnection=true" -phases: - - - responses: - - - - "a:27017" - - { ok: 1, helloOk: true, isWritablePrimary: true, minWireVersion: 0, maxWireVersion: 21 } - - outcome: - events: - - - topology_opening_event: - topologyId: "42" - - - topology_description_changed_event: - topologyId: "42" - previousDescription: - topologyType: "Unknown" - servers: [] - newDescription: - topologyType: "Single" - servers: - - - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - - - server_opening_event: - topologyId: "42" - address: "a:27017" - - - server_description_changed_event: - topologyId: "42" - address: "a:27017" - previousDescription: - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - newDescription: - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Standalone" - - - topology_description_changed_event: - topologyId: "42" - previousDescription: - topologyType: "Single" - servers: - - - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - newDescription: - topologyType: "Single" - servers: - - - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Standalone" diff --git a/testdata/server-discovery-and-monitoring/monitoring/standalone_suppress_equal_description_changes.json b/testdata/server-discovery-and-monitoring/monitoring/standalone_suppress_equal_description_changes.json deleted file mode 100644 index 4d046ff8ed..0000000000 --- a/testdata/server-discovery-and-monitoring/monitoring/standalone_suppress_equal_description_changes.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "description": "Monitoring a direct connection - suppress update events for equal server descriptions", - "uri": "mongodb://a:27017/?directConnection=true", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ], - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "events": [ - { - "topology_opening_event": { - "topologyId": "42" - } - }, - { - "topology_description_changed_event": { - "topologyId": "42", - "previousDescription": { - "topologyType": "Unknown", - "servers": [] - }, - "newDescription": { - "topologyType": "Single", - "servers": [ - { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - } - ] - } - } - }, - { - "server_opening_event": { - "topologyId": "42", - "address": "a:27017" - } - }, - { - "server_description_changed_event": { - "topologyId": "42", - "address": "a:27017", - "previousDescription": { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - }, - "newDescription": { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Standalone" - } - } - }, - { - "topology_description_changed_event": { - "topologyId": "42", - "previousDescription": { - "topologyType": "Single", - "servers": [ - { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Unknown" - } - ] - }, - "newDescription": { - "topologyType": "Single", - "servers": [ - { - "address": "a:27017", - "arbiters": [], - "hosts": [], - "passives": [], - "type": "Standalone" - } - ] - } - } - } - ] - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/monitoring/standalone_suppress_equal_description_changes.yml b/testdata/server-discovery-and-monitoring/monitoring/standalone_suppress_equal_description_changes.yml deleted file mode 100644 index 255ec2dd43..0000000000 --- a/testdata/server-discovery-and-monitoring/monitoring/standalone_suppress_equal_description_changes.yml +++ /dev/null @@ -1,73 +0,0 @@ -description: "Monitoring a direct connection - suppress update events for equal server descriptions" -uri: "mongodb://a:27017/?directConnection=true" -phases: - - - responses: - - - - "a:27017" - - { ok: 1, helloOk: true, isWritablePrimary: true, minWireVersion: 0, maxWireVersion: 21 } - - - - "a:27017" - - { ok: 1, helloOk: true, isWritablePrimary: true, minWireVersion: 0, maxWireVersion: 21 } - - outcome: - events: - - - topology_opening_event: - topologyId: "42" - - - topology_description_changed_event: - topologyId: "42" - previousDescription: - topologyType: "Unknown" - servers: [] - newDescription: - topologyType: "Single" - servers: - - - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - - - server_opening_event: - topologyId: "42" - address: "a:27017" - - - server_description_changed_event: - topologyId: "42" - address: "a:27017" - previousDescription: - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - newDescription: - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Standalone" - - - topology_description_changed_event: - topologyId: "42" - previousDescription: - topologyType: "Single" - servers: - - - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Unknown" - newDescription: - topologyType: "Single" - servers: - - - address: "a:27017" - arbiters: [] - hosts: [] - passives: [] - type: "Standalone" diff --git a/testdata/server-discovery-and-monitoring/rs/compatible.json b/testdata/server-discovery-and-monitoring/rs/compatible.json deleted file mode 100644 index dfd5d57dfa..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/compatible.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "description": "Replica set member with large maxWireVersion", - "uri": "mongodb://a,b/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ], - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 1000 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "RSSecondary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "setName": "rs", - "logicalSessionTimeoutMinutes": null, - "compatible": true - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/compatible.yml b/testdata/server-discovery-and-monitoring/rs/compatible.yml deleted file mode 100644 index ce17d7e302..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/compatible.yml +++ /dev/null @@ -1,45 +0,0 @@ -description: "Replica set member with large maxWireVersion" - -uri: "mongodb://a,b/?replicaSet=rs" - -phases: [ - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - setName: "rs", - hosts: ["a:27017", "b:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }], - ["b:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - setName: "rs", - hosts: ["a:27017", "b:27017"], - minWireVersion: 0, - maxWireVersion: 1000 - }] - ], - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs" - }, - "b:27017": { - type: "RSSecondary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - setName: "rs", - logicalSessionTimeoutMinutes: null, - compatible: true - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/compatible_unknown.json b/testdata/server-discovery-and-monitoring/rs/compatible_unknown.json deleted file mode 100644 index 95e03ea958..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/compatible_unknown.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "description": "Replica set member and an unknown server", - "uri": "mongodb://a,b/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "Unknown" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "setName": "rs", - "logicalSessionTimeoutMinutes": null, - "compatible": true - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/compatible_unknown.yml b/testdata/server-discovery-and-monitoring/rs/compatible_unknown.yml deleted file mode 100644 index ed97ab31ac..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/compatible_unknown.yml +++ /dev/null @@ -1,34 +0,0 @@ -description: "Replica set member and an unknown server" - -uri: "mongodb://a,b/?replicaSet=rs" - -phases: [ - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - setName: "rs", - hosts: ["a:27017", "b:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }], - ], - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs" - }, - "b:27017": { - type: "Unknown", - } - }, - topologyType: "ReplicaSetWithPrimary", - setName: "rs", - logicalSessionTimeoutMinutes: null, - compatible: true - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/discover_arbiters.json b/testdata/server-discovery-and-monitoring/rs/discover_arbiters.json deleted file mode 100644 index 803462b156..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_arbiters.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "description": "Discover arbiters with directConnection URI option", - "uri": "mongodb://a/?directConnection=false", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "arbiters": [ - "b:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/discover_arbiters.yml b/testdata/server-discovery-and-monitoring/rs/discover_arbiters.yml deleted file mode 100644 index 5334bc8241..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_arbiters.yml +++ /dev/null @@ -1,44 +0,0 @@ -description: "Discover arbiters with directConnection URI option" - -uri: "mongodb://a/?directConnection=false" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017"], - arbiters: ["b:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - }, - - "b:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/discover_arbiters_replicaset.json b/testdata/server-discovery-and-monitoring/rs/discover_arbiters_replicaset.json deleted file mode 100644 index e58d7c7fb4..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_arbiters_replicaset.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "description": "Discover arbiters with replicaSet URI option", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "arbiters": [ - "b:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/discover_arbiters_replicaset.yml b/testdata/server-discovery-and-monitoring/rs/discover_arbiters_replicaset.yml deleted file mode 100644 index 882dbb0f89..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_arbiters_replicaset.yml +++ /dev/null @@ -1,44 +0,0 @@ -description: "Discover arbiters with replicaSet URI option" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017"], - arbiters: ["b:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - }, - - "b:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/discover_ghost.json b/testdata/server-discovery-and-monitoring/rs/discover_ghost.json deleted file mode 100644 index 3b7fc836ec..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_ghost.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "description": "Discover ghost with directConnection URI option", - "uri": "mongodb://b/?directConnection=false", - "phases": [ - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "isreplicaset": true, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "b:27017": { - "type": "RSGhost", - "setName": null - } - }, - "topologyType": "Unknown", - "logicalSessionTimeoutMinutes": null, - "setName": null - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/discover_ghost.yml b/testdata/server-discovery-and-monitoring/rs/discover_ghost.yml deleted file mode 100644 index 7a9cbd5559..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_ghost.yml +++ /dev/null @@ -1,36 +0,0 @@ -description: "Discover ghost with directConnection URI option" - -uri: "mongodb://b/?directConnection=false" - -phases: [ - - { - responses: [ - - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - isreplicaset: true, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "b:27017": { - - type: "RSGhost", - setName: - } - }, - topologyType: "Unknown", - logicalSessionTimeoutMinutes: null, - setName: - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/discover_ghost_replicaset.json b/testdata/server-discovery-and-monitoring/rs/discover_ghost_replicaset.json deleted file mode 100644 index 1a8457983b..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_ghost_replicaset.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "description": "Discover ghost with replicaSet URI option", - "uri": "mongodb://a,b/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "isreplicaset": true, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null - }, - "b:27017": { - "type": "RSGhost", - "setName": null - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/discover_ghost_replicaset.yml b/testdata/server-discovery-and-monitoring/rs/discover_ghost_replicaset.yml deleted file mode 100644 index 61ba1eab56..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_ghost_replicaset.yml +++ /dev/null @@ -1,42 +0,0 @@ -description: "Discover ghost with replicaSet URI option" - -uri: "mongodb://a,b/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - isreplicaset: true, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "Unknown", - setName: - }, - - "b:27017": { - - type: "RSGhost", - setName: - } - }, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/discover_hidden.json b/testdata/server-discovery-and-monitoring/rs/discover_hidden.json deleted file mode 100644 index 10bd51edeb..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_hidden.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "description": "Discover hidden with directConnection URI option", - "uri": "mongodb://a/?directConnection=false", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "hidden": true, - "hosts": [ - "c:27017", - "d:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSOther", - "setName": "rs" - }, - "c:27017": { - "type": "Unknown", - "setName": null - }, - "d:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/discover_hidden.yml b/testdata/server-discovery-and-monitoring/rs/discover_hidden.yml deleted file mode 100644 index f483255802..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_hidden.yml +++ /dev/null @@ -1,51 +0,0 @@ -description: "Discover hidden with directConnection URI option" - -uri: "mongodb://a/?directConnection=false" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - hidden: true, - hosts: ["c:27017", "d:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }], - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSOther", - setName: "rs" - }, - - "c:27017": { - - type: "Unknown", - setName: - }, - - "d:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/discover_hidden_replicaset.json b/testdata/server-discovery-and-monitoring/rs/discover_hidden_replicaset.json deleted file mode 100644 index 63cf558675..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_hidden_replicaset.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "description": "Discover hidden with replicaSet URI option", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "hidden": true, - "hosts": [ - "c:27017", - "d:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSOther", - "setName": "rs" - }, - "c:27017": { - "type": "Unknown", - "setName": null - }, - "d:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/discover_hidden_replicaset.yml b/testdata/server-discovery-and-monitoring/rs/discover_hidden_replicaset.yml deleted file mode 100644 index 8d496544d2..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_hidden_replicaset.yml +++ /dev/null @@ -1,51 +0,0 @@ -description: "Discover hidden with replicaSet URI option" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - hidden: true, - hosts: ["c:27017", "d:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }], - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSOther", - setName: "rs" - }, - - "c:27017": { - - type: "Unknown", - setName: - }, - - "d:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/discover_passives.json b/testdata/server-discovery-and-monitoring/rs/discover_passives.json deleted file mode 100644 index 0a292c675c..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_passives.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "description": "Discover passives with directConnection URI option", - "uri": "mongodb://a/?directConnection=false", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "passives": [ - "b:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "passive": true, - "hosts": [ - "a:27017" - ], - "passives": [ - "b:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "RSSecondary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/discover_passives.yml b/testdata/server-discovery-and-monitoring/rs/discover_passives.yml deleted file mode 100644 index 25419733cf..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_passives.yml +++ /dev/null @@ -1,83 +0,0 @@ -description: "Discover passives with directConnection URI option" - -uri: "mongodb://a/?directConnection=false" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017"], - passives: ["b:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - }, - - "b:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - }, - { - responses: [ - - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - passive: true, - hosts: ["a:27017"], - passives: ["b:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - }, - - "b:27017": { - - type: "RSSecondary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/discover_passives_replicaset.json b/testdata/server-discovery-and-monitoring/rs/discover_passives_replicaset.json deleted file mode 100644 index c48fd47625..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_passives_replicaset.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "description": "Discover passives with replicaSet URI option", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "passives": [ - "b:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "passive": true, - "hosts": [ - "a:27017" - ], - "passives": [ - "b:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "RSSecondary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/discover_passives_replicaset.yml b/testdata/server-discovery-and-monitoring/rs/discover_passives_replicaset.yml deleted file mode 100644 index d981280a2f..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_passives_replicaset.yml +++ /dev/null @@ -1,83 +0,0 @@ -description: "Discover passives with replicaSet URI option" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017"], - passives: ["b:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - }, - - "b:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - }, - { - responses: [ - - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - passive: true, - hosts: ["a:27017"], - passives: ["b:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - }, - - "b:27017": { - - type: "RSSecondary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/discover_primary.json b/testdata/server-discovery-and-monitoring/rs/discover_primary.json deleted file mode 100644 index 04e7a4984c..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_primary.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "description": "Discover primary with directConnection URI option", - "uri": "mongodb://a/?directConnection=false", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/discover_primary.yml b/testdata/server-discovery-and-monitoring/rs/discover_primary.yml deleted file mode 100644 index 3c11e3e4f2..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_primary.yml +++ /dev/null @@ -1,43 +0,0 @@ -description: "Discover primary with directConnection URI option" - -uri: "mongodb://a/?directConnection=false" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - setName: "rs", - hosts: ["a:27017", "b:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - }, - - "b:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/discover_primary_replicaset.json b/testdata/server-discovery-and-monitoring/rs/discover_primary_replicaset.json deleted file mode 100644 index 3cdcfdcee2..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_primary_replicaset.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "description": "Discover primary with replicaSet URI option", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/discover_primary_replicaset.yml b/testdata/server-discovery-and-monitoring/rs/discover_primary_replicaset.yml deleted file mode 100644 index 47831fa60a..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_primary_replicaset.yml +++ /dev/null @@ -1,43 +0,0 @@ -description: "Discover primary with replicaSet URI option" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - setName: "rs", - hosts: ["a:27017", "b:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - }, - - "b:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/discover_rsother.json b/testdata/server-discovery-and-monitoring/rs/discover_rsother.json deleted file mode 100644 index 9c3b8d8b7d..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_rsother.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "description": "Discover RSOther with directConnection URI option", - "uri": "mongodb://b/?directConnection=false", - "phases": [ - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": false, - "hosts": [ - "c:27017", - "d:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "b:27017": { - "type": "RSOther", - "setName": "rs" - }, - "c:27017": { - "type": "Unknown", - "setName": null - }, - "d:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/discover_rsother.yml b/testdata/server-discovery-and-monitoring/rs/discover_rsother.yml deleted file mode 100644 index 11c65863f4..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_rsother.yml +++ /dev/null @@ -1,50 +0,0 @@ -description: "Discover RSOther with directConnection URI option" - -uri: "mongodb://b/?directConnection=false" - -phases: [ - - { - responses: [ - - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: false, - hosts: ["c:27017", "d:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "b:27017": { - - type: "RSOther", - setName: "rs" - }, - - "c:27017": { - - type: "Unknown", - setName: - }, - - "d:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/discover_rsother_replicaset.json b/testdata/server-discovery-and-monitoring/rs/discover_rsother_replicaset.json deleted file mode 100644 index 3da9efb066..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_rsother_replicaset.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "description": "Discover RSOther with replicaSet URI option", - "uri": "mongodb://a,b/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "hidden": true, - "hosts": [ - "c:27017", - "d:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ], - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": false, - "hosts": [ - "c:27017", - "d:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSOther", - "setName": "rs" - }, - "b:27017": { - "type": "RSOther", - "setName": "rs" - }, - "c:27017": { - "type": "Unknown", - "setName": null - }, - "d:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/discover_rsother_replicaset.yml b/testdata/server-discovery-and-monitoring/rs/discover_rsother_replicaset.yml deleted file mode 100644 index c25d33ab2b..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_rsother_replicaset.yml +++ /dev/null @@ -1,68 +0,0 @@ -description: "Discover RSOther with replicaSet URI option" - -uri: "mongodb://a,b/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - hidden: true, - hosts: ["c:27017", "d:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }], - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: false, - hosts: ["c:27017", "d:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSOther", - setName: "rs" - }, - - "b:27017": { - - type: "RSOther", - setName: "rs" - }, - - "c:27017": { - - type: "Unknown", - setName: - }, - - "d:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/discover_secondary.json b/testdata/server-discovery-and-monitoring/rs/discover_secondary.json deleted file mode 100644 index 64a1ce31e3..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_secondary.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "description": "Discover secondary with directConnection URI option", - "uri": "mongodb://b/?directConnection=false", - "phases": [ - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null - }, - "b:27017": { - "type": "RSSecondary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/discover_secondary.yml b/testdata/server-discovery-and-monitoring/rs/discover_secondary.yml deleted file mode 100644 index 83af822eda..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_secondary.yml +++ /dev/null @@ -1,44 +0,0 @@ -description: "Discover secondary with directConnection URI option" - -uri: "mongodb://b/?directConnection=false" - -phases: [ - - { - responses: [ - - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - setName: "rs", - hosts: ["a:27017", "b:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "Unknown", - setName: - }, - - "b:27017": { - - type: "RSSecondary", - setName: "rs" - } - }, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/discover_secondary_replicaset.json b/testdata/server-discovery-and-monitoring/rs/discover_secondary_replicaset.json deleted file mode 100644 index d230f976a2..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_secondary_replicaset.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "description": "Discover secondary with replicaSet URI option", - "uri": "mongodb://b/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null - }, - "b:27017": { - "type": "RSSecondary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/discover_secondary_replicaset.yml b/testdata/server-discovery-and-monitoring/rs/discover_secondary_replicaset.yml deleted file mode 100644 index 71229387cc..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discover_secondary_replicaset.yml +++ /dev/null @@ -1,44 +0,0 @@ -description: "Discover secondary with replicaSet URI option" - -uri: "mongodb://b/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - setName: "rs", - hosts: ["a:27017", "b:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "Unknown", - setName: - }, - - "b:27017": { - - type: "RSSecondary", - setName: "rs" - } - }, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/discovery.json b/testdata/server-discovery-and-monitoring/rs/discovery.json deleted file mode 100644 index e9deaa7587..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discovery.json +++ /dev/null @@ -1,179 +0,0 @@ -{ - "description": "Replica set discovery", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017", - "c:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSSecondary", - "setName": "rs" - }, - "b:27017": { - "type": "Unknown", - "setName": null - }, - "c:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "setName": "rs", - "primary": "d:27017", - "hosts": [ - "b:27017", - "c:27017", - "d:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSSecondary", - "setName": "rs" - }, - "b:27017": { - "type": "RSSecondary", - "setName": "rs" - }, - "c:27017": { - "type": "Unknown", - "setName": null - }, - "d:27017": { - "type": "PossiblePrimary", - "setName": null - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "d:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "hosts": [ - "b:27017", - "c:27017", - "d:27017", - "e:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "b:27017": { - "type": "RSSecondary", - "setName": "rs" - }, - "c:27017": { - "type": "Unknown", - "setName": null - }, - "d:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "e:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "c:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017", - "c:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "b:27017": { - "type": "RSSecondary", - "setName": "rs" - }, - "c:27017": { - "type": "RSSecondary", - "setName": "rs" - }, - "d:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "e:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/discovery.yml b/testdata/server-discovery-and-monitoring/rs/discovery.yml deleted file mode 100644 index 19be04897b..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/discovery.yml +++ /dev/null @@ -1,207 +0,0 @@ -description: "Replica set discovery" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - # At first, a, b, and c are secondaries. - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - setName: "rs", - hosts: ["a:27017", "b:27017", "c:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSSecondary", - setName: "rs" - }, - - "b:27017": { - - type: "Unknown", - setName: - }, - - "c:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - }, - - # Admin removes a, adds a high-priority member d which becomes primary. - { - responses: [ - - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - setName: "rs", - primary: "d:27017", - hosts: ["b:27017", "c:27017", "d:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSSecondary", - setName: "rs" - }, - - "b:27017": { - - type: "RSSecondary", - setName: "rs" - }, - - "c:27017": { - - type: "Unknown", - setName: - }, - - "d:27017": { - - type: "PossiblePrimary", - setName: - } - }, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - }, - - # Primary responds. - { - responses: [ - - ["d:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - setName: "rs", - hosts: ["b:27017", "c:27017", "d:27017", "e:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - # e is new. - servers: { - - "b:27017": { - - type: "RSSecondary", - setName: "rs" - }, - - "c:27017": { - - type: "Unknown", - setName: - }, - - "d:27017": { - - type: "RSPrimary", - setName: "rs" - }, - - "e:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - }, - - # Stale response from c. - { - responses: [ - - ["c:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - setName: "rs", - hosts: ["a:27017", "b:27017", "c:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - # We don't add a back. - # We don't remove e. - servers: { - - "b:27017": { - - type: "RSSecondary", - setName: "rs" - }, - - "c:27017": { - - type: "RSSecondary", - setName: "rs" - }, - - "d:27017": { - - type: "RSPrimary", - setName: "rs" - }, - - "e:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/electionId_precedence_setVersion.json b/testdata/server-discovery-and-monitoring/rs/electionId_precedence_setVersion.json deleted file mode 100644 index 2fcea2bf66..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/electionId_precedence_setVersion.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "description": "ElectionId is considered higher precedence than setVersion", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000001" - }, - "minWireVersion": 0, - "maxWireVersion": 17 - } - ], - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 2, - "electionId": { - "$oid": "000000000000000000000001" - }, - "minWireVersion": 0, - "maxWireVersion": 17 - } - ], - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000002" - }, - "minWireVersion": 0, - "maxWireVersion": 17 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000002" - } - }, - "b:27017": { - "type": "Unknown", - "setName": null, - "setVersion": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1, - "maxElectionId": { - "$oid": "000000000000000000000002" - } - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/electionId_precedence_setVersion.yml b/testdata/server-discovery-and-monitoring/rs/electionId_precedence_setVersion.yml deleted file mode 100644 index 4b9563fcfd..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/electionId_precedence_setVersion.yml +++ /dev/null @@ -1,62 +0,0 @@ -description: ElectionId is considered higher precedence than setVersion -uri: "mongodb://a/?replicaSet=rs" -phases: - - responses: - - - "a:27017" - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - "a:27017" - - "b:27017" - setName: rs - setVersion: 1 - electionId: - $oid: "000000000000000000000001" - minWireVersion: 0 - maxWireVersion: 17 - - - "b:27017" - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - "a:27017" - - "b:27017" - setName: rs - setVersion: 2 # Even though "B" reports the newer setVersion, "A" will report the newer electionId which should allow it to remain the primary - electionId: - $oid: "000000000000000000000001" - minWireVersion: 0 - maxWireVersion: 17 - - - "a:27017" - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - "a:27017" - - "b:27017" - setName: rs - setVersion: 1 - electionId: - $oid: "000000000000000000000002" - minWireVersion: 0 - maxWireVersion: 17 - outcome: - servers: - "a:27017": - type: RSPrimary - setName: rs - setVersion: 1 - electionId: - $oid: "000000000000000000000002" - "b:27017": - type: Unknown - setName: null - setVersion: null - electionId: null - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - maxSetVersion: 1 - maxElectionId: - $oid: "000000000000000000000002" diff --git a/testdata/server-discovery-and-monitoring/rs/equal_electionids.json b/testdata/server-discovery-and-monitoring/rs/equal_electionids.json deleted file mode 100644 index f1deedf9f4..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/equal_electionids.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "description": "New primary with equal electionId", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000001" - }, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ], - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000001" - }, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null, - "setVersion": null, - "electionId": null - }, - "b:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000001" - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1, - "maxElectionId": { - "$oid": "000000000000000000000001" - } - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/equal_electionids.yml b/testdata/server-discovery-and-monitoring/rs/equal_electionids.yml deleted file mode 100644 index 17e8aa2c11..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/equal_electionids.yml +++ /dev/null @@ -1,57 +0,0 @@ -description: "New primary with equal electionId" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - # A and B claim to be primaries, with equal electionIds. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000001"}, - minWireVersion: 0, - maxWireVersion: 21 - }], - ["b:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000001"}, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - # No choice but to believe the latter response. - outcome: { - servers: { - "a:27017": { - type: "Unknown", - setName: , - setVersion: , - electionId: - }, - "b:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000001"} - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 1, - maxElectionId: {"$oid": "000000000000000000000001"}, - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/hosts_differ_from_seeds.json b/testdata/server-discovery-and-monitoring/rs/hosts_differ_from_seeds.json deleted file mode 100644 index 085e81e266..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/hosts_differ_from_seeds.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "description": "Host list differs from seeds", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "hosts": [ - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "b:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/hosts_differ_from_seeds.yml b/testdata/server-discovery-and-monitoring/rs/hosts_differ_from_seeds.yml deleted file mode 100644 index 2ecd27ec7c..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/hosts_differ_from_seeds.yml +++ /dev/null @@ -1,37 +0,0 @@ -description: "Host list differs from seeds" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - setName: "rs", - hosts: ["b:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "b:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/incompatible_arbiter.json b/testdata/server-discovery-and-monitoring/rs/incompatible_arbiter.json deleted file mode 100644 index bda18d9f6f..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/incompatible_arbiter.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "description": "Incompatible arbiter", - "uri": "mongodb://a,b/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ], - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "arbiterOnly": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 1 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "RSArbiter", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "setName": "rs", - "logicalSessionTimeoutMinutes": null, - "compatible": false - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/incompatible_arbiter.yml b/testdata/server-discovery-and-monitoring/rs/incompatible_arbiter.yml deleted file mode 100644 index 2e46ff2951..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/incompatible_arbiter.yml +++ /dev/null @@ -1,36 +0,0 @@ -description: "Incompatible arbiter" - -uri: "mongodb://a,b/?replicaSet=rs" - -phases: - - responses: - - - - "a:27017" - - ok: 1 - helloOk: true - isWritablePrimary: true - setName: "rs" - hosts: ["a:27017", "b:27017"] - minWireVersion: 0 - maxWireVersion: 21 - - - - "b:27017" - - ok: 1 - helloOk: true - arbiterOnly: true - setName: "rs" - hosts: ["a:27017", "b:27017"] - minWireVersion: 0 - maxWireVersion: 1 - outcome: - servers: - "a:27017": - type: "RSPrimary" - setName: "rs" - "b:27017": - type: "RSArbiter" - setName: "rs" - topologyType: "ReplicaSetWithPrimary" - setName: "rs" - logicalSessionTimeoutMinutes: ~ - compatible: false diff --git a/testdata/server-discovery-and-monitoring/rs/incompatible_ghost.json b/testdata/server-discovery-and-monitoring/rs/incompatible_ghost.json deleted file mode 100644 index 9d82e31682..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/incompatible_ghost.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "description": "Incompatible ghost", - "uri": "mongodb://a,b/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ], - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isreplicaset": true, - "minWireVersion": 0, - "maxWireVersion": 1 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "RSGhost", - "setName": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "setName": "rs", - "logicalSessionTimeoutMinutes": null, - "compatible": false - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/incompatible_ghost.yml b/testdata/server-discovery-and-monitoring/rs/incompatible_ghost.yml deleted file mode 100644 index c99badf4a3..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/incompatible_ghost.yml +++ /dev/null @@ -1,34 +0,0 @@ -description: "Incompatible ghost" - -uri: "mongodb://a,b/?replicaSet=rs" - -phases: - - responses: - - - - "a:27017" - - ok: 1 - helloOk: true - isWritablePrimary: true - setName: "rs" - hosts: ["a:27017", "b:27017"] - minWireVersion: 0 - maxWireVersion: 21 - - - - "b:27017" - - ok: 1 - helloOk: true - isreplicaset: true - minWireVersion: 0 - maxWireVersion: 1 - outcome: - servers: - "a:27017": - type: "RSPrimary" - setName: "rs" - "b:27017": - type: "RSGhost" - setName: - topologyType: "ReplicaSetWithPrimary" - setName: "rs" - logicalSessionTimeoutMinutes: ~ - compatible: false diff --git a/testdata/server-discovery-and-monitoring/rs/incompatible_other.json b/testdata/server-discovery-and-monitoring/rs/incompatible_other.json deleted file mode 100644 index 149ba01142..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/incompatible_other.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "description": "Incompatible other", - "uri": "mongodb://a,b/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ], - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "hidden": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 1 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "RSOther", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "setName": "rs", - "logicalSessionTimeoutMinutes": null, - "compatible": false - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/incompatible_other.yml b/testdata/server-discovery-and-monitoring/rs/incompatible_other.yml deleted file mode 100644 index 16452e7b02..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/incompatible_other.yml +++ /dev/null @@ -1,36 +0,0 @@ -description: "Incompatible other" - -uri: "mongodb://a,b/?replicaSet=rs" - -phases: - - responses: - - - - "a:27017" - - ok: 1 - helloOk: true - isWritablePrimary: true - setName: "rs" - hosts: ["a:27017", "b:27017"] - minWireVersion: 0 - maxWireVersion: 21 - - - - "b:27017" - - ok: 1 - helloOk: true - hidden: true - setName: "rs" - hosts: ["a:27017", "b:27017"] - minWireVersion: 0 - maxWireVersion: 1 - outcome: - servers: - "a:27017": - type: "RSPrimary" - setName: "rs" - "b:27017": - type: "RSOther" - setName: "rs" - topologyType: "ReplicaSetWithPrimary" - setName: "rs" - logicalSessionTimeoutMinutes: ~ - compatible: false diff --git a/testdata/server-discovery-and-monitoring/rs/ls_timeout.json b/testdata/server-discovery-and-monitoring/rs/ls_timeout.json deleted file mode 100644 index c68790ddfd..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/ls_timeout.json +++ /dev/null @@ -1,279 +0,0 @@ -{ - "description": "Parse logicalSessionTimeoutMinutes from replica set", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017", - "c:27017", - "d:27017", - "e:27017" - ], - "setName": "rs", - "logicalSessionTimeoutMinutes": 3, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "Unknown" - }, - "c:27017": { - "type": "Unknown" - }, - "d:27017": { - "type": "Unknown" - }, - "e:27017": { - "type": "Unknown" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": 3, - "setName": "rs" - } - }, - { - "responses": [ - [ - "d:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "isreplicaset": true, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "Unknown" - }, - "c:27017": { - "type": "Unknown" - }, - "d:27017": { - "type": "RSGhost" - }, - "e:27017": { - "type": "Unknown" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": 3, - "setName": "rs" - } - }, - { - "responses": [ - [ - "e:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "hosts": [ - "a:27017", - "b:27017", - "c:27017", - "d:27017", - "e:27017" - ], - "setName": "rs", - "arbiterOnly": true, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "Unknown" - }, - "c:27017": { - "type": "Unknown" - }, - "d:27017": { - "type": "RSGhost" - }, - "e:27017": { - "type": "RSArbiter", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": 3, - "setName": "rs" - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "hosts": [ - "a:27017", - "b:27017", - "c:27017", - "d:27017", - "e:27017" - ], - "setName": "rs", - "logicalSessionTimeoutMinutes": 2, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "RSSecondary", - "setName": "rs" - }, - "c:27017": { - "type": "Unknown" - }, - "d:27017": { - "type": "RSGhost" - }, - "e:27017": { - "type": "RSArbiter", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": 2, - "setName": "rs" - } - }, - { - "responses": [ - [ - "c:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "setName": "rs", - "hidden": true, - "logicalSessionTimeoutMinutes": 1, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "RSSecondary", - "setName": "rs" - }, - "c:27017": { - "type": "RSOther", - "setName": "rs" - }, - "d:27017": { - "type": "RSGhost" - }, - "e:27017": { - "type": "RSArbiter", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": 2, - "setName": "rs" - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "hosts": [ - "a:27017", - "b:27017", - "c:27017", - "d:27017", - "e:27017" - ], - "setName": "rs", - "logicalSessionTimeoutMinutes": null, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "RSSecondary", - "setName": "rs" - }, - "c:27017": { - "type": "RSOther", - "setName": "rs" - }, - "d:27017": { - "type": "RSGhost" - }, - "e:27017": { - "type": "RSArbiter", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/ls_timeout.yml b/testdata/server-discovery-and-monitoring/rs/ls_timeout.yml deleted file mode 100644 index 2cea00e99e..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/ls_timeout.yml +++ /dev/null @@ -1,249 +0,0 @@ -description: "Parse logicalSessionTimeoutMinutes from replica set" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - # An RSPrimary responds with a non-null logicalSessionTimeoutMinutes - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017", "c:27017", "d:27017", "e:27017"], - setName: "rs", - logicalSessionTimeoutMinutes: 3, - minWireVersion: 0, - maxWireVersion: 21 - }], - ], - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs" - }, - "b:27017": { - type: "Unknown", - }, - "c:27017": { - type: "Unknown", - }, - "d:27017": { - type: "Unknown", - }, - "e:27017": { - type: "Unknown", - } - - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: 3, - setName: "rs", - } - }, - # An RSGhost responds without a logicalSessionTimeoutMinutes - { - responses: [ - ["d:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: false, - isreplicaset: true, - minWireVersion: 0, - maxWireVersion: 21 - }], - ], - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs" - }, - "b:27017": { - type: "Unknown", - }, - "c:27017": { - type: "Unknown", - }, - "d:27017": { - type: "RSGhost", - }, - "e:27017": { - type: "Unknown", - } - - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: 3, - setName: "rs", - } - }, - # An RSArbiter responds without a logicalSessionTimeoutMinutes - { - responses: [ - ["e:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: false, - hosts: ["a:27017", "b:27017", "c:27017", "d:27017", "e:27017"], - setName: "rs", - arbiterOnly: true, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs" - }, - "b:27017": { - type: "Unknown", - }, - "c:27017": { - type: "Unknown", - }, - "d:27017": { - type: "RSGhost", - }, - "e:27017": { - type: "RSArbiter", - setName: "rs" - } - - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: 3, - setName: "rs", - } - }, - # An RSSecondary responds with a lower logicalSessionTimeoutMinutes - { - responses: [ - ["b:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - hosts: ["a:27017", "b:27017", "c:27017", "d:27017", "e:27017"], - setName: "rs", - logicalSessionTimeoutMinutes: 2, - minWireVersion: 0, - maxWireVersion: 21 - }], - ], - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs" - }, - "b:27017": { - type: "RSSecondary", - setName: "rs" - }, - "c:27017": { - type: "Unknown", - }, - "d:27017": { - type: "RSGhost", - }, - "e:27017": { - type: "RSArbiter", - setName: "rs" - } - - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: 2, - setName: "rs", - } - }, - # An RSOther responds with an even lower logicalSessionTimeoutMinutes, which is ignored - { - responses: [ - ["c:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: false, - setName: "rs", - hidden: true, - logicalSessionTimeoutMinutes: 1, - minWireVersion: 0, - maxWireVersion: 21 - }], - ], - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs" - }, - "b:27017": { - type: "RSSecondary", - setName: "rs" - }, - "c:27017": { - type: "RSOther", - setName: "rs" - }, - "d:27017": { - type: "RSGhost", - }, - "e:27017": { - type: "RSArbiter", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: 2, - setName: "rs", - } - }, - # Now the RSSecondary responds with no logicalSessionTimeoutMinutes - { - responses: [ - ["b:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - hosts: ["a:27017", "b:27017", "c:27017", "d:27017", "e:27017"], - setName: "rs", - logicalSessionTimeoutMinutes: null, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - # Sessions aren't supported now - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs" - }, - "b:27017": { - type: "RSSecondary", - setName: "rs" - }, - "c:27017": { - type: "RSOther", - setName: "rs" - }, - "d:27017": { - type: "RSGhost", - }, - "e:27017": { - type: "RSArbiter", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/member_reconfig.json b/testdata/server-discovery-and-monitoring/rs/member_reconfig.json deleted file mode 100644 index a05fed0efb..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/member_reconfig.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "description": "Member removed by reconfig", - "uri": "mongodb://a,b/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "hosts": [ - "a:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/member_reconfig.yml b/testdata/server-discovery-and-monitoring/rs/member_reconfig.yml deleted file mode 100644 index a43a88d53f..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/member_reconfig.yml +++ /dev/null @@ -1,74 +0,0 @@ -description: "Member removed by reconfig" - -uri: "mongodb://a,b/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - setName: "rs", - hosts: ["a:27017", "b:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - }, - - "b:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - }, - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - setName: "rs", - hosts: ["a:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/member_standalone.json b/testdata/server-discovery-and-monitoring/rs/member_standalone.json deleted file mode 100644 index db100db9f3..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/member_standalone.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "description": "Member brought up as standalone", - "uri": "mongodb://a,b", - "phases": [ - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "Unknown", - "logicalSessionTimeoutMinutes": null, - "setName": null - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "hosts": [ - "a:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/member_standalone.yml b/testdata/server-discovery-and-monitoring/rs/member_standalone.yml deleted file mode 100644 index 1be000ea4e..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/member_standalone.yml +++ /dev/null @@ -1,66 +0,0 @@ -description: "Member brought up as standalone" - -uri: "mongodb://a,b" - -phases: [ - - { - responses: [ - - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "Unknown", - logicalSessionTimeoutMinutes: null, - setName: - } - }, - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - setName: "rs", - hosts: ["a:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/new_primary.json b/testdata/server-discovery-and-monitoring/rs/new_primary.json deleted file mode 100644 index 1a84c69c91..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/new_primary.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "description": "New primary", - "uri": "mongodb://a,b/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null - }, - "b:27017": { - "type": "RSPrimary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/new_primary.yml b/testdata/server-discovery-and-monitoring/rs/new_primary.yml deleted file mode 100644 index f2485a1863..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/new_primary.yml +++ /dev/null @@ -1,80 +0,0 @@ -description: "New primary" - -uri: "mongodb://a,b/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - setName: "rs", - hosts: ["a:27017", "b:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - }, - - "b:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - }, - - { - responses: [ - - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - setName: "rs", - hosts: ["a:27017", "b:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "Unknown", - setName: - }, - - "b:27017": { - - type: "RSPrimary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/new_primary_new_electionid.json b/testdata/server-discovery-and-monitoring/rs/new_primary_new_electionid.json deleted file mode 100644 index 509720d445..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/new_primary_new_electionid.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "description": "New primary with greater setVersion and electionId", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000001" - }, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000001" - } - }, - "b:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1, - "maxElectionId": { - "$oid": "000000000000000000000001" - } - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000002" - }, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - }, - "b:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000002" - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1, - "maxElectionId": { - "$oid": "000000000000000000000002" - } - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000001" - }, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - }, - "b:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000002" - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1, - "maxElectionId": { - "$oid": "000000000000000000000002" - } - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/new_primary_new_electionid.yml b/testdata/server-discovery-and-monitoring/rs/new_primary_new_electionid.yml deleted file mode 100644 index 5641cfda95..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/new_primary_new_electionid.yml +++ /dev/null @@ -1,119 +0,0 @@ -description: "New primary with greater setVersion and electionId" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - # Primary A is discovered and tells us about B. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000001"}, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000001"} - }, - "b:27017": { - type: "Unknown", - setName: , - electionId: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 1, - maxElectionId: {"$oid": "000000000000000000000001"}, - } - }, - - # B is elected. - { - responses: [ - ["b:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000002"}, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "Unknown", - setName: , - electionId: - }, - "b:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000002"} - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 1, - maxElectionId: {"$oid": "000000000000000000000002"}, - } - }, - - # A still claims to be primary but it's ignored. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000001"}, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - outcome: { - servers: { - "a:27017": { - type: "Unknown", - setName: , - electionId: - }, - "b:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000002"} - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 1, - maxElectionId: {"$oid": "000000000000000000000002"}, - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/new_primary_new_setversion.json b/testdata/server-discovery-and-monitoring/rs/new_primary_new_setversion.json deleted file mode 100644 index 96533c61ee..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/new_primary_new_setversion.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "description": "New primary with greater setVersion", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000001" - }, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000001" - } - }, - "b:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1, - "maxElectionId": { - "$oid": "000000000000000000000001" - } - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 2, - "electionId": { - "$oid": "000000000000000000000001" - }, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - }, - "b:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 2, - "electionId": { - "$oid": "000000000000000000000001" - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 2, - "maxElectionId": { - "$oid": "000000000000000000000001" - } - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000001" - }, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - }, - "b:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 2, - "electionId": { - "$oid": "000000000000000000000001" - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 2, - "maxElectionId": { - "$oid": "000000000000000000000001" - } - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/new_primary_new_setversion.yml b/testdata/server-discovery-and-monitoring/rs/new_primary_new_setversion.yml deleted file mode 100644 index f269797112..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/new_primary_new_setversion.yml +++ /dev/null @@ -1,119 +0,0 @@ -description: "New primary with greater setVersion" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - # Primary A is discovered and tells us about B. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000001"}, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000001"} - }, - "b:27017": { - type: "Unknown", - setName: , - electionId: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 1, - maxElectionId: {"$oid": "000000000000000000000001"}, - } - }, - - # RS is reconfigured and B is elected. - { - responses: [ - ["b:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 2, - electionId: {"$oid": "000000000000000000000001"}, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "Unknown", - setName: , - electionId: - }, - "b:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 2, - electionId: {"$oid": "000000000000000000000001"} - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 2, - maxElectionId: {"$oid": "000000000000000000000001"}, - } - }, - - # A still claims to be primary but it's ignored. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000001"}, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - outcome: { - servers: { - "a:27017": { - type: "Unknown", - setName: , - electionId: - }, - "b:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 2, - electionId: {"$oid": "000000000000000000000001"} - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 2, - maxElectionId: {"$oid": "000000000000000000000001"}, - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/new_primary_wrong_set_name.json b/testdata/server-discovery-and-monitoring/rs/new_primary_wrong_set_name.json deleted file mode 100644 index 774b3a5736..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/new_primary_wrong_set_name.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "description": "New primary with wrong setName", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "wrong", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/new_primary_wrong_set_name.yml b/testdata/server-discovery-and-monitoring/rs/new_primary_wrong_set_name.yml deleted file mode 100644 index dc6df9cd8b..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/new_primary_wrong_set_name.yml +++ /dev/null @@ -1,77 +0,0 @@ -description: "New primary with wrong setName" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - # Primary is discovered normally, and tells us about server B. - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - }, - - "b:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - }, - - # B is actually the primary of another replica set. It's removed, and - # topologyType remains ReplicaSetWithPrimary. - { - responses: [ - - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017"], - setName: "wrong", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/non_rs_member.json b/testdata/server-discovery-and-monitoring/rs/non_rs_member.json deleted file mode 100644 index 6bf10bd628..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/non_rs_member.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "description": "Non replicaSet member responds", - "uri": "mongodb://a,b/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/non_rs_member.yml b/testdata/server-discovery-and-monitoring/rs/non_rs_member.yml deleted file mode 100644 index 4e2f0b1be2..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/non_rs_member.yml +++ /dev/null @@ -1,33 +0,0 @@ -description: "Non replicaSet member responds" - -uri: "mongodb://a,b/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["b:27017", { - ok: 1, - helloOk: true, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/normalize_case.json b/testdata/server-discovery-and-monitoring/rs/normalize_case.json deleted file mode 100644 index 62915495e0..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/normalize_case.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "description": "Replica set case normalization", - "uri": "mongodb://A/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "hosts": [ - "A:27017" - ], - "passives": [ - "B:27017" - ], - "arbiters": [ - "C:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "Unknown", - "setName": null - }, - "c:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/normalize_case.yml b/testdata/server-discovery-and-monitoring/rs/normalize_case.yml deleted file mode 100644 index a543ab72af..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/normalize_case.yml +++ /dev/null @@ -1,52 +0,0 @@ -description: "Replica set case normalization" - -uri: "mongodb://A/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - setName: "rs", - hosts: ["A:27017"], - passives: ["B:27017"], - arbiters: ["C:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - }, - - "b:27017": { - - type: "Unknown", - setName: - }, - - "c:27017": { - - type: "Unknown", - setName: - } - - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/normalize_case_me.json b/testdata/server-discovery-and-monitoring/rs/normalize_case_me.json deleted file mode 100644 index 0d9ba6213e..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/normalize_case_me.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "description": "Replica set mixed case normalization", - "uri": "mongodb://A/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "me": "A:27017", - "hosts": [ - "A:27017" - ], - "passives": [ - "B:27017" - ], - "arbiters": [ - "C:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "Unknown", - "setName": null - }, - "c:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "setName": "rs", - "me": "B:27017", - "hosts": [ - "A:27017" - ], - "passives": [ - "B:27017" - ], - "arbiters": [ - "C:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "RSSecondary", - "setName": "rs" - }, - "c:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/normalize_case_me.yml b/testdata/server-discovery-and-monitoring/rs/normalize_case_me.yml deleted file mode 100644 index 03ac43f314..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/normalize_case_me.yml +++ /dev/null @@ -1,102 +0,0 @@ -description: "Replica set mixed case normalization" - -uri: "mongodb://A/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - setName: "rs", - me: "A:27017", - hosts: ["A:27017"], - passives: ["B:27017"], - arbiters: ["C:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - }, - - "b:27017": { - - type: "Unknown", - setName: - }, - - "c:27017": { - - type: "Unknown", - setName: - } - - }, - - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - }, - { - responses: [ - - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - setName: "rs", - me: "B:27017", - hosts: ["A:27017"], - passives: ["B:27017"], - arbiters: ["C:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - }, - - "b:27017": { - - type: "RSSecondary", - setName: "rs" - }, - - "c:27017": { - - type: "Unknown", - setName: - } - - }, - - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/null_election_id-pre-6.0.json b/testdata/server-discovery-and-monitoring/rs/null_election_id-pre-6.0.json deleted file mode 100644 index 9e7ccc6e7f..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/null_election_id-pre-6.0.json +++ /dev/null @@ -1,203 +0,0 @@ -{ - "description": "Pre 6.0 Primaries with and without electionIds", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017", - "c:27017" - ], - "setVersion": 1, - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 7 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": null - }, - "b:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - }, - "c:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1 - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017", - "c:27017" - ], - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000002" - }, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - }, - "b:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000002" - } - }, - "c:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1, - "maxElectionId": { - "$oid": "000000000000000000000002" - } - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017", - "c:27017" - ], - "setVersion": 1, - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 7 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": null - }, - "b:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - }, - "c:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1, - "maxElectionId": { - "$oid": "000000000000000000000002" - } - } - }, - { - "responses": [ - [ - "c:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017", - "c:27017" - ], - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000001" - }, - "minWireVersion": 0, - "maxWireVersion": 7 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": null - }, - "b:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - }, - "c:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1, - "maxElectionId": { - "$oid": "000000000000000000000002" - } - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/null_election_id-pre-6.0.yml b/testdata/server-discovery-and-monitoring/rs/null_election_id-pre-6.0.yml deleted file mode 100644 index 63f9699f22..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/null_election_id-pre-6.0.yml +++ /dev/null @@ -1,175 +0,0 @@ -description: "Pre 6.0 Primaries with and without electionIds" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - # Primary A has no electionId. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017", "c:27017"], - setVersion: 1, - setName: "rs", - minWireVersion: 0, - maxWireVersion: 7 - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 1, - electionId: - }, - "b:27017": { - type: "Unknown", - setName: , - electionId: - }, - "c:27017": { - type: "Unknown", - setName: , - electionId: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 1, - } - }, - - # B is elected, it has an electionId. - { - responses: [ - ["b:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017", "c:27017"], - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000002"}, - minWireVersion: 0, - maxWireVersion: 7 - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "Unknown", - setName: , - electionId: - }, - "b:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000002"} - }, - "c:27017": { - type: "Unknown", - setName: , - electionId: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 1, - maxElectionId: {"$oid": "000000000000000000000002"}, - } - }, - - # A still claims to be primary, no electionId, we have to trust it. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017", "c:27017"], - setVersion: 1, - setName: "rs", - minWireVersion: 0, - maxWireVersion: 7 - }] - ], - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 1, - electionId: - }, - "b:27017": { - type: "Unknown", - setName: , - electionId: - }, - "c:27017": { - type: "Unknown", - setName: , - electionId: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 1, - maxElectionId: {"$oid": "000000000000000000000002"}, - } - }, - - # But we remember B's electionId, so when we finally hear from C - # claiming it is primary, we ignore it due to its outdated electionId - { - responses: [ - ["c:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017", "c:27017"], - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000001"}, - minWireVersion: 0, - maxWireVersion: 7 - }] - ], - outcome: { - servers: { - # Still primary. - "a:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 1, - electionId: - }, - "b:27017": { - type: "Unknown", - setName: , - electionId: - }, - "c:27017": { - type: "Unknown", - setName: , - electionId: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 1, - maxElectionId: {"$oid": "000000000000000000000002"}, - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/null_election_id.json b/testdata/server-discovery-and-monitoring/rs/null_election_id.json deleted file mode 100644 index 8a99a78475..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/null_election_id.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "description": "Primaries with and without electionIds", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017", - "c:27017" - ], - "setVersion": 1, - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 17 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": null - }, - "b:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - }, - "c:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1 - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017", - "c:27017" - ], - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000002" - }, - "minWireVersion": 0, - "maxWireVersion": 17 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - }, - "b:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000002" - } - }, - "c:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1, - "maxElectionId": { - "$oid": "000000000000000000000002" - } - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017", - "c:27017" - ], - "setVersion": 1, - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 17 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null, - "setVersion": null, - "electionId": null - }, - "b:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000002" - } - }, - "c:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1, - "maxElectionId": { - "$oid": "000000000000000000000002" - } - } - }, - { - "responses": [ - [ - "c:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017", - "c:27017" - ], - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000001" - }, - "minWireVersion": 0, - "maxWireVersion": 17 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null, - "setVersion": null, - "electionId": null - }, - "b:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000002" - } - }, - "c:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1, - "maxElectionId": { - "$oid": "000000000000000000000002" - } - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/null_election_id.yml b/testdata/server-discovery-and-monitoring/rs/null_election_id.yml deleted file mode 100644 index 54c1af272a..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/null_election_id.yml +++ /dev/null @@ -1,177 +0,0 @@ -description: "Primaries with and without electionIds" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - # Primary A has no electionId. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017", "c:27017"], - setVersion: 1, - setName: "rs", - minWireVersion: 0, - maxWireVersion: 17 - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 1, - electionId: - }, - "b:27017": { - type: "Unknown", - setName: , - electionId: - }, - "c:27017": { - type: "Unknown", - setName: , - electionId: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 1, - } - }, - - # B is elected, it has an electionId. - { - responses: [ - ["b:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017", "c:27017"], - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000002"}, - minWireVersion: 0, - maxWireVersion: 17 - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "Unknown", - setName: , - electionId: - }, - "b:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000002"} - }, - "c:27017": { - type: "Unknown", - setName: , - electionId: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 1, - maxElectionId: {"$oid": "000000000000000000000002"}, - } - }, - - # A still claims to be primary, no electionId, we don't trust it. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017", "c:27017"], - setVersion: 1, - setName: "rs", - minWireVersion: 0, - maxWireVersion: 17 - }] - ], - outcome: { - servers: { - # A ignored for missing electionId - "a:27017": { - type: "Unknown", - setName: , - setVersion: , - electionId: - }, - "b:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 1, - electionId: { "$oid": "000000000000000000000002" } - }, - "c:27017": { - type: "Unknown", - setName: , - electionId: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 1, - maxElectionId: {"$oid": "000000000000000000000002"}, - } - }, - - # But we remember B's electionId, so when we finally hear from C - # claiming it is primary, we ignore it due to its outdated electionId - { - responses: [ - ["c:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017", "c:27017"], - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000001"}, - minWireVersion: 0, - maxWireVersion: 17 - }] - ], - outcome: { - servers: { - "a:27017": { - type: "Unknown", - setName: , - setVersion: , - electionId: - }, - "b:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 1, - electionId: { "$oid": "000000000000000000000002" } - }, - "c:27017": { - type: "Unknown", - setName: , - electionId: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 1, - maxElectionId: {"$oid": "000000000000000000000002"}, - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/primary_becomes_ghost.json b/testdata/server-discovery-and-monitoring/rs/primary_becomes_ghost.json deleted file mode 100644 index e34280e88c..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_becomes_ghost.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "description": "Primary becomes ghost", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "isreplicaset": true, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSGhost", - "setName": null - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/primary_becomes_ghost.yml b/testdata/server-discovery-and-monitoring/rs/primary_becomes_ghost.yml deleted file mode 100644 index ee0158db0d..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_becomes_ghost.yml +++ /dev/null @@ -1,65 +0,0 @@ -description: "Primary becomes ghost" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - }, - - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: false, - isreplicaset: true, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSGhost", - setName: - } - }, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/primary_becomes_mongos.json b/testdata/server-discovery-and-monitoring/rs/primary_becomes_mongos.json deleted file mode 100644 index 79510d9399..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_becomes_mongos.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "description": "Primary becomes mongos", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "msg": "isdbgrid", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": {}, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/primary_becomes_mongos.yml b/testdata/server-discovery-and-monitoring/rs/primary_becomes_mongos.yml deleted file mode 100644 index 251f155277..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_becomes_mongos.yml +++ /dev/null @@ -1,58 +0,0 @@ -description: "Primary becomes mongos" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - }, - - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - msg: "isdbgrid", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: {}, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/primary_becomes_standalone.json b/testdata/server-discovery-and-monitoring/rs/primary_becomes_standalone.json deleted file mode 100644 index abcc1e2d01..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_becomes_standalone.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "description": "Primary becomes standalone", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": {}, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/primary_becomes_standalone.yml b/testdata/server-discovery-and-monitoring/rs/primary_becomes_standalone.yml deleted file mode 100644 index 9f6a0817bf..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_becomes_standalone.yml +++ /dev/null @@ -1,55 +0,0 @@ -description: "Primary becomes standalone" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - }, - - { - responses: [ - ["a:27017", { - ok: 1, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: {}, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/primary_changes_set_name.json b/testdata/server-discovery-and-monitoring/rs/primary_changes_set_name.json deleted file mode 100644 index 3b564d2c93..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_changes_set_name.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "description": "Primary changes setName", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "wrong", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": {}, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/primary_changes_set_name.yml b/testdata/server-discovery-and-monitoring/rs/primary_changes_set_name.yml deleted file mode 100644 index e49aa24911..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_changes_set_name.yml +++ /dev/null @@ -1,63 +0,0 @@ -description: "Primary changes setName" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - # Primary is discovered normally. - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - }, - - # Primary changes its setName. Remove it and change the topologyType. - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017"], - setName: "wrong", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: {}, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/primary_disconnect.json b/testdata/server-discovery-and-monitoring/rs/primary_disconnect.json deleted file mode 100644 index 73a01a82a9..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_disconnect.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "description": "Disconnected from primary", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "a:27017", - {} - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/primary_disconnect.yml b/testdata/server-discovery-and-monitoring/rs/primary_disconnect.yml deleted file mode 100644 index 84c88daa67..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_disconnect.yml +++ /dev/null @@ -1,59 +0,0 @@ -description: "Disconnected from primary" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - }, - - { - responses: [ - - ["a:27017", {}] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/primary_disconnect_electionid.json b/testdata/server-discovery-and-monitoring/rs/primary_disconnect_electionid.json deleted file mode 100644 index 5a91188ea8..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_disconnect_electionid.json +++ /dev/null @@ -1,235 +0,0 @@ -{ - "description": "Disconnected from primary, reject primary with stale electionId", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000001" - }, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ], - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000002" - }, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - }, - "b:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000002" - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1, - "maxElectionId": { - "$oid": "000000000000000000000002" - } - } - }, - { - "responses": [ - [ - "b:27017", - {} - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - }, - "b:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1, - "maxElectionId": { - "$oid": "000000000000000000000002" - } - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000001" - }, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - }, - "b:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1, - "maxElectionId": { - "$oid": "000000000000000000000002" - } - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000003" - }, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000003" - } - }, - "b:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1, - "maxElectionId": { - "$oid": "000000000000000000000003" - } - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000003" - } - }, - "b:27017": { - "type": "RSSecondary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1, - "maxElectionId": { - "$oid": "000000000000000000000003" - } - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/primary_disconnect_electionid.yml b/testdata/server-discovery-and-monitoring/rs/primary_disconnect_electionid.yml deleted file mode 100644 index 391ec31213..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_disconnect_electionid.yml +++ /dev/null @@ -1,189 +0,0 @@ -description: "Disconnected from primary, reject primary with stale electionId" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - # A is elected, then B. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000001"}, - minWireVersion: 0, - maxWireVersion: 21 - }], - ["b:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000002"}, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "Unknown", - setName: , - electionId: - }, - "b:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000002"} - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 1, - maxElectionId: {"$oid": "000000000000000000000002"}, - } - }, - - # Disconnected from B. - { - responses: [ - ["b:27017", {}] - ], - outcome: { - servers: { - "a:27017": { - type: "Unknown", - setName: , - electionId: - }, - "b:27017": { - type: "Unknown", - setName: , - electionId: - } - }, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 1, - maxElectionId: {"$oid": "000000000000000000000002"}, - } - }, - - # A still claims to be primary but it's ignored. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000001"}, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - outcome: { - servers: { - "a:27017": { - type: "Unknown", - setName: , - electionId: - }, - "b:27017": { - type: "Unknown", - setName: , - electionId: - } - }, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 1, - maxElectionId: {"$oid": "000000000000000000000002"}, - } - }, - - # Now A is re-elected. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000003"}, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000003"} - }, - "b:27017": { - type: "Unknown", - setName: , - electionId: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 1, - maxElectionId: {"$oid": "000000000000000000000003"}, - } - }, - - # B comes back as secondary. - { - responses: [ - ["b:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000003"} - }, - "b:27017": { - type: "RSSecondary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 1, - maxElectionId: {"$oid": "000000000000000000000003"}, - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/primary_disconnect_setversion.json b/testdata/server-discovery-and-monitoring/rs/primary_disconnect_setversion.json deleted file mode 100644 index f7417ad77b..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_disconnect_setversion.json +++ /dev/null @@ -1,235 +0,0 @@ -{ - "description": "Disconnected from primary, reject primary with stale setVersion", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000001" - }, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ], - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 2, - "electionId": { - "$oid": "000000000000000000000001" - }, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - }, - "b:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 2, - "electionId": { - "$oid": "000000000000000000000001" - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 2, - "maxElectionId": { - "$oid": "000000000000000000000001" - } - } - }, - { - "responses": [ - [ - "b:27017", - {} - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - }, - "b:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 2, - "maxElectionId": { - "$oid": "000000000000000000000001" - } - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000001" - }, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - }, - "b:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 2, - "maxElectionId": { - "$oid": "000000000000000000000001" - } - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 2, - "electionId": { - "$oid": "000000000000000000000002" - }, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 2, - "electionId": { - "$oid": "000000000000000000000002" - } - }, - "b:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 2, - "maxElectionId": { - "$oid": "000000000000000000000002" - } - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 2, - "electionId": { - "$oid": "000000000000000000000002" - } - }, - "b:27017": { - "type": "RSSecondary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 2, - "maxElectionId": { - "$oid": "000000000000000000000002" - } - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/primary_disconnect_setversion.yml b/testdata/server-discovery-and-monitoring/rs/primary_disconnect_setversion.yml deleted file mode 100644 index 57eeb573e4..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_disconnect_setversion.yml +++ /dev/null @@ -1,189 +0,0 @@ -description: "Disconnected from primary, reject primary with stale setVersion" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - # A is elected, then B after a reconfig. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000001"}, - minWireVersion: 0, - maxWireVersion: 21 - }], - ["b:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 2, - electionId: {"$oid": "000000000000000000000001"}, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "Unknown", - setName: , - electionId: - }, - "b:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 2, - electionId: {"$oid": "000000000000000000000001"} - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 2, - maxElectionId: {"$oid": "000000000000000000000001"}, - } - }, - - # Disconnected from B. - { - responses: [ - ["b:27017", {}] - ], - outcome: { - servers: { - "a:27017": { - type: "Unknown", - setName: , - electionId: - }, - "b:27017": { - type: "Unknown", - setName: , - electionId: - } - }, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 2, - maxElectionId: {"$oid": "000000000000000000000001"}, - } - }, - - # A still claims to be primary but it's ignored. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000001"}, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - outcome: { - servers: { - "a:27017": { - type: "Unknown", - setName: , - electionId: - }, - "b:27017": { - type: "Unknown", - setName: , - electionId: - } - }, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 2, - maxElectionId: {"$oid": "000000000000000000000001"}, - } - }, - - # Now A is re-elected. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 2, - electionId: {"$oid": "000000000000000000000002"}, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 2, - electionId: {"$oid": "000000000000000000000002"} - }, - "b:27017": { - type: "Unknown", - setName: , - electionId: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 2, - maxElectionId: {"$oid": "000000000000000000000002"}, - } - }, - - # B comes back as secondary. - { - responses: [ - ["b:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 2, - electionId: {"$oid": "000000000000000000000002"} - }, - "b:27017": { - type: "RSSecondary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 2, - maxElectionId: {"$oid": "000000000000000000000002"}, - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/primary_hint_from_secondary_with_mismatched_me.json b/testdata/server-discovery-and-monitoring/rs/primary_hint_from_secondary_with_mismatched_me.json deleted file mode 100644 index 1ca72225a2..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_hint_from_secondary_with_mismatched_me.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "description": "Secondary with mismatched 'me' tells us who the primary is", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "me": "c:27017", - "hosts": [ - "b:27017" - ], - "setName": "rs", - "primary": "b:27017", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "b:27017": { - "type": "PossiblePrimary", - "setName": null - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "me": "b:27017", - "hosts": [ - "b:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "b:27017": { - "type": "RSPrimary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/primary_hint_from_secondary_with_mismatched_me.yml b/testdata/server-discovery-and-monitoring/rs/primary_hint_from_secondary_with_mismatched_me.yml deleted file mode 100644 index cebbe7d083..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_hint_from_secondary_with_mismatched_me.yml +++ /dev/null @@ -1,64 +0,0 @@ -description: "Secondary with mismatched 'me' tells us who the primary is" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - # A is a secondary with mismatched "me". Remove A, add PossiblePrimary B. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - me: "c:27017", - hosts: ["b:27017"], - setName: "rs", - primary: "b:27017", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - servers: { - "b:27017": { - type: "PossiblePrimary", - setName: - } - }, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - } - }, - - # Discover B is primary. - { - responses: [ - ["b:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - me: "b:27017", - hosts: ["b:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - servers: { - "b:27017": { - type: "RSPrimary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/primary_mismatched_me.json b/testdata/server-discovery-and-monitoring/rs/primary_mismatched_me.json deleted file mode 100644 index 6bb6226f8a..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_mismatched_me.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "description": "Primary mismatched me", - "phases": [ - { - "outcome": { - "servers": { - "a:27017": { - "setName": null, - "type": "Unknown" - }, - "b:27017": { - "setName": null, - "type": "Unknown" - } - }, - "setName": "rs", - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null - }, - "responses": [ - [ - "localhost:27017", - { - "me": "a:27017", - "hosts": [ - "a:27017", - "b:27017" - ], - "helloOk": true, - "isWritablePrimary": true, - "ok": 1, - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ] - } - ], - "uri": "mongodb://localhost:27017/?replicaSet=rs" -} diff --git a/testdata/server-discovery-and-monitoring/rs/primary_mismatched_me.yml b/testdata/server-discovery-and-monitoring/rs/primary_mismatched_me.yml deleted file mode 100644 index 25ca1722e0..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_mismatched_me.yml +++ /dev/null @@ -1,27 +0,0 @@ -description: Primary mismatched me -phases: - - outcome: - servers: - 'a:27017': - setName: null - type: Unknown - 'b:27017': - setName: null - type: Unknown - setName: rs - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - responses: - - - 'localhost:27017' - - me: 'a:27017' - hosts: - - 'a:27017' - - 'b:27017' - helloOk: true - isWritablePrimary: true - ok: 1 - setName: rs - minWireVersion: 0 - maxWireVersion: 21 -uri: 'mongodb://localhost:27017/?replicaSet=rs' - diff --git a/testdata/server-discovery-and-monitoring/rs/primary_mismatched_me_not_removed.json b/testdata/server-discovery-and-monitoring/rs/primary_mismatched_me_not_removed.json deleted file mode 100644 index 4c40093659..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_mismatched_me_not_removed.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "description": "Primary mismatched me is not removed", - "uri": "mongodb://localhost:27017,localhost:27018/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "localhost:27017", - { - "ok": 1, - "hosts": [ - "localhost:27017", - "localhost:27018" - ], - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "primary": "localhost:27017", - "me": "a:27017", - "minWireVersion": 0, - "maxWireVersion": 7 - } - ] - ], - "outcome": { - "servers": { - "localhost:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "localhost:27018": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "localhost:27018", - { - "ok": 1, - "hosts": [ - "localhost:27017", - "localhost:27018" - ], - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "setName": "rs", - "primary": "localhost:27017", - "me": "localhost:27018", - "minWireVersion": 0, - "maxWireVersion": 7 - } - ] - ], - "outcome": { - "servers": { - "localhost:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "localhost:27018": { - "type": "RSSecondary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/primary_mismatched_me_not_removed.yml b/testdata/server-discovery-and-monitoring/rs/primary_mismatched_me_not_removed.yml deleted file mode 100644 index 5b7e92e603..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_mismatched_me_not_removed.yml +++ /dev/null @@ -1,75 +0,0 @@ -description: Primary mismatched me is not removed -uri: mongodb://localhost:27017,localhost:27018/?replicaSet=rs - -phases: [ - { - responses: [ - ["localhost:27017", { - ok: 1, - hosts: [ - "localhost:27017", - "localhost:27018" - ], - helloOk: true, - isWritablePrimary: true, - setName: "rs", - primary: "localhost:27017", - # me does not match the primary responder's address, but the server - # is still added because we don't me mismatch check the primary and all - # servers from a primary isWritablePrimary are added to the working server set - me: "a:27017", - minWireVersion: 0, - maxWireVersion: 7 - }] - ], - outcome: { - servers: { - "localhost:27017": { - type: "RSPrimary", - setName: "rs" - }, - "localhost:27018": { - type: "Unknown", - setName: null - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - }, - { - responses: [ - ["localhost:27018", { - ok: 1, - hosts: [ - "localhost:27017", - "localhost:27018" - ], - helloOk: true, - isWritablePrimary: false, - secondary: true, - setName: "rs", - primary: "localhost:27017", - me: "localhost:27018", - minWireVersion: 0, - maxWireVersion: 7 - }] - ], - outcome: { - servers: { - "localhost:27017": { - type: "RSPrimary", - setName: "rs" - }, - "localhost:27018": { - type: "RSSecondary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/primary_reports_new_member.json b/testdata/server-discovery-and-monitoring/rs/primary_reports_new_member.json deleted file mode 100644 index ed28c48c87..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_reports_new_member.json +++ /dev/null @@ -1,155 +0,0 @@ -{ - "description": "Primary reports a new member", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSSecondary", - "setName": "rs" - }, - "b:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSSecondary", - "setName": "rs" - }, - "b:27017": { - "type": "RSPrimary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017", - "c:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSSecondary", - "setName": "rs" - }, - "b:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "c:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "c:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "setName": "rs", - "primary": "b:27017", - "hosts": [ - "a:27017", - "b:27017", - "c:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSSecondary", - "setName": "rs" - }, - "b:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "c:27017": { - "type": "RSSecondary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/primary_reports_new_member.yml b/testdata/server-discovery-and-monitoring/rs/primary_reports_new_member.yml deleted file mode 100644 index aa2878d637..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_reports_new_member.yml +++ /dev/null @@ -1,175 +0,0 @@ -description: "Primary reports a new member" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - # At first, a is a secondary. - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - setName: "rs", - hosts: ["a:27017", "b:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSSecondary", - setName: "rs" - }, - - "b:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - }, - - # b is the primary. - { - responses: [ - - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - setName: "rs", - hosts: ["a:27017", "b:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSSecondary", - setName: "rs" - }, - - "b:27017": { - - type: "RSPrimary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - }, - - # Admin adds a secondary member c. - { - responses: [ - - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - setName: "rs", - hosts: ["a:27017", "b:27017", "c:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - # c is new. - servers: { - - "a:27017": { - - type: "RSSecondary", - setName: "rs" - }, - - "b:27017": { - - type: "RSPrimary", - setName: "rs" - }, - - "c:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - }, - - # c becomes secondary. - { - responses: [ - - ["c:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - setName: "rs", - primary: "b:27017", - hosts: ["a:27017", "b:27017", "c:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - # c is a secondary. - servers: { - - "a:27017": { - - type: "RSSecondary", - setName: "rs" - }, - - "b:27017": { - - type: "RSPrimary", - setName: "rs" - }, - - "c:27017": { - - type: "RSSecondary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/primary_to_no_primary_mismatched_me.json b/testdata/server-discovery-and-monitoring/rs/primary_to_no_primary_mismatched_me.json deleted file mode 100644 index 798a648d19..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_to_no_primary_mismatched_me.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "description": "Primary to no primary with mismatched me", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "me": "a:27017", - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "c:27017", - "d:27017" - ], - "me": "c:27017", - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "c:27017": { - "type": "Unknown", - "setName": null - }, - "d:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/primary_to_no_primary_mismatched_me.yml b/testdata/server-discovery-and-monitoring/rs/primary_to_no_primary_mismatched_me.yml deleted file mode 100644 index e8bdb00f0f..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_to_no_primary_mismatched_me.yml +++ /dev/null @@ -1,81 +0,0 @@ -description: "Primary to no primary with mismatched me" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - me: "a:27017", - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - }, - - "b:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - }, - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["c:27017", "d:27017"], - me : "c:27017", - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "c:27017": { - - type: "Unknown", - setName: - }, - - "d:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/primary_wrong_set_name.json b/testdata/server-discovery-and-monitoring/rs/primary_wrong_set_name.json deleted file mode 100644 index 1366e38996..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_wrong_set_name.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "description": "Primary wrong setName", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "wrong", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": {}, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/primary_wrong_set_name.yml b/testdata/server-discovery-and-monitoring/rs/primary_wrong_set_name.yml deleted file mode 100644 index 3e463333e6..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/primary_wrong_set_name.yml +++ /dev/null @@ -1,30 +0,0 @@ -description: "Primary wrong setName" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017"], - setName: "wrong", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: {}, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/repeated.json b/testdata/server-discovery-and-monitoring/rs/repeated.json deleted file mode 100644 index 3ce0948ab8..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/repeated.json +++ /dev/null @@ -1,144 +0,0 @@ -{ - "description": "Repeated isWritablePrimary response must be processed", - "uri": "mongodb://a,b/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "hidden": true, - "hosts": [ - "a:27017", - "c:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSOther", - "setName": "rs" - }, - "b:27017": { - "type": "Unknown" - }, - "c:27017": { - "type": "Unknown" - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "c:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSOther", - "setName": "rs" - }, - "b:27017": { - "type": "Unknown" - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "hidden": true, - "hosts": [ - "a:27017", - "c:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSOther", - "setName": "rs" - }, - "b:27017": { - "type": "Unknown" - }, - "c:27017": { - "type": "Unknown" - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "c:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "c:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSOther", - "setName": "rs" - }, - "c:27017": { - "type": "RSPrimary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/repeated.yml b/testdata/server-discovery-and-monitoring/rs/repeated.yml deleted file mode 100644 index b9e14ed982..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/repeated.yml +++ /dev/null @@ -1,105 +0,0 @@ -description: Repeated isWritablePrimary response must be processed - -uri: "mongodb://a,b/?replicaSet=rs" - -phases: - # Phase 1 - a says it's not primary and suggests c may be the primary - - responses: - - - - "a:27017" - - ok: 1 - helloOk: true - isWritablePrimary: false - secondary: true - hidden: true - hosts: ["a:27017", "c:27017"] - setName: "rs" - minWireVersion: 0 - maxWireVersion: 21 - outcome: - servers: - "a:27017": - type: "RSOther" - setName: "rs" - - "b:27017": - type: Unknown - - "c:27017": - type: Unknown - topologyType: "ReplicaSetNoPrimary" - logicalSessionTimeoutMinutes: ~ - setName: "rs" - - # Phase 2 - c says it's a standalone, is removed - - responses: - - - - "c:27017" - - ok: 1 - helloOk: true - isWritablePrimary: true - minWireVersion: 0 - maxWireVersion: 21 - outcome: - servers: - "a:27017": - type: "RSOther" - setName: "rs" - - "b:27017": - type: Unknown - topologyType: "ReplicaSetNoPrimary" - logicalSessionTimeoutMinutes: ~ - setName: "rs" - - # Phase 3 - response from a is repeated, and must be processed; c added again - - responses: - - - - "a:27017" - - ok: 1 - helloOk: true - isWritablePrimary: false - secondary: true - hidden: true - hosts: ["a:27017", "c:27017"] - setName: "rs" - minWireVersion: 0 - maxWireVersion: 21 - outcome: - servers: - "a:27017": - type: "RSOther" - setName: "rs" - - "b:27017": - type: Unknown - - "c:27017": - type: Unknown - topologyType: "ReplicaSetNoPrimary" - logicalSessionTimeoutMinutes: ~ - setName: "rs" - - # Phase 4 - c is now a primary - - responses: - - - - "c:27017" - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: ["a:27017", "c:27017"] - setName: "rs" - minWireVersion: 0 - maxWireVersion: 21 - outcome: - servers: - "a:27017": - type: "RSOther" - setName: "rs" - - "c:27017": - type: RSPrimary - setName: rs - topologyType: "ReplicaSetWithPrimary" - logicalSessionTimeoutMinutes: ~ - setName: "rs" diff --git a/testdata/server-discovery-and-monitoring/rs/replicaset_rsnp.json b/testdata/server-discovery-and-monitoring/rs/replicaset_rsnp.json deleted file mode 100644 index 1cd732b82f..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/replicaset_rsnp.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "description": "replicaSet URI option causes starting topology to be RSNP", - "uri": "mongodb://a/?replicaSet=rs&directConnection=false", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": {}, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/replicaset_rsnp.yml b/testdata/server-discovery-and-monitoring/rs/replicaset_rsnp.yml deleted file mode 100644 index 6bdf8cbe2d..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/replicaset_rsnp.yml +++ /dev/null @@ -1,21 +0,0 @@ -description: replicaSet URI option causes starting topology to be RSNP - -uri: "mongodb://a/?replicaSet=rs&directConnection=false" - -phases: - # We are connecting to a standalone - - responses: - - - - "a:27017" - - ok: 1 - helloOk: true - isWritablePrimary: true - minWireVersion: 0 - maxWireVersion: 21 - outcome: - # Server is removed because it's a standalone and the driver - # started in RSNP topology - servers: {} - topologyType: "ReplicaSetNoPrimary" - logicalSessionTimeoutMinutes: ~ - setName: "rs" diff --git a/testdata/server-discovery-and-monitoring/rs/response_from_removed.json b/testdata/server-discovery-and-monitoring/rs/response_from_removed.json deleted file mode 100644 index fa46a14ceb..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/response_from_removed.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "description": "Response from removed server", - "uri": "mongodb://a,b/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "hosts": [ - "a:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/response_from_removed.yml b/testdata/server-discovery-and-monitoring/rs/response_from_removed.yml deleted file mode 100644 index fc9961ce36..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/response_from_removed.yml +++ /dev/null @@ -1,69 +0,0 @@ -description: "Response from removed server" - -uri: "mongodb://a,b/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - setName: "rs", - hosts: ["a:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - }, - - { - responses: [ - - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - setName: "rs", - hosts: ["a:27017", "b:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/sec_not_auth.json b/testdata/server-discovery-and-monitoring/rs/sec_not_auth.json deleted file mode 100644 index ccbe7a08af..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/sec_not_auth.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "description": "Secondary's host list is not authoritative", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ], - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "setName": "rs", - "hosts": [ - "b:27017", - "c:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "RSSecondary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/sec_not_auth.yml b/testdata/server-discovery-and-monitoring/rs/sec_not_auth.yml deleted file mode 100644 index 507eb9d292..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/sec_not_auth.yml +++ /dev/null @@ -1,55 +0,0 @@ -description: "Secondary's host list is not authoritative" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - setName: "rs", - hosts: ["a:27017", "b:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }], - - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - setName: "rs", - hosts: ["b:27017", "c:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - }, - - "b:27017": { - - type: "RSSecondary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/secondary_ignore_ok_0-pre-6.0.json b/testdata/server-discovery-and-monitoring/rs/secondary_ignore_ok_0-pre-6.0.json deleted file mode 100644 index f27060533c..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/secondary_ignore_ok_0-pre-6.0.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "description": "Pre 6.0 New primary", - "uri": "mongodb://a,b/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ], - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "RSSecondary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 0, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/secondary_ignore_ok_0-pre-6.0.yml b/testdata/server-discovery-and-monitoring/rs/secondary_ignore_ok_0-pre-6.0.yml deleted file mode 100644 index b63c43f227..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/secondary_ignore_ok_0-pre-6.0.yml +++ /dev/null @@ -1,87 +0,0 @@ -description: "Pre 6.0 New primary" - -uri: "mongodb://a,b/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - setName: "rs", - hosts: ["a:27017", "b:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }], - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - setName: "rs", - hosts: ["a:27017", "b:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - }, - - "b:27017": { - - type: "RSSecondary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - }, - - { - responses: [ - - ["b:27017", { - - ok: 0, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - "a:27017": { - - type: "RSPrimary", - setName: "rs" - }, - - "b:27017": { - - type: "Unknown", - setName: - } - - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/secondary_ignore_ok_0.json b/testdata/server-discovery-and-monitoring/rs/secondary_ignore_ok_0.json deleted file mode 100644 index 9ffff58ef0..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/secondary_ignore_ok_0.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "description": "Secondary ignored when ok is zero", - "uri": "mongodb://a,b/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ], - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "RSSecondary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 0, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/secondary_ignore_ok_0.yml b/testdata/server-discovery-and-monitoring/rs/secondary_ignore_ok_0.yml deleted file mode 100644 index 796e7f668e..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/secondary_ignore_ok_0.yml +++ /dev/null @@ -1,87 +0,0 @@ -description: "Secondary ignored when ok is zero" - -uri: "mongodb://a,b/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - setName: "rs", - hosts: ["a:27017", "b:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }], - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - setName: "rs", - hosts: ["a:27017", "b:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - }, - - "b:27017": { - - type: "RSSecondary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - }, - - { - responses: [ - - ["b:27017", { - - ok: 0, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - "a:27017": { - - type: "RSPrimary", - setName: "rs" - }, - - "b:27017": { - - type: "Unknown", - setName: - } - - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/secondary_mismatched_me.json b/testdata/server-discovery-and-monitoring/rs/secondary_mismatched_me.json deleted file mode 100644 index 790e4bfca8..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/secondary_mismatched_me.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "description": "Secondary mismatched me", - "uri": "mongodb://localhost:27017/?replicaSet=rs", - "phases": [ - { - "outcome": { - "servers": { - "a:27017": { - "setName": null, - "type": "Unknown" - }, - "b:27017": { - "setName": null, - "type": "Unknown" - } - }, - "setName": "rs", - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null - }, - "responses": [ - [ - "localhost:27017", - { - "me": "a:27017", - "hosts": [ - "a:27017", - "b:27017" - ], - "helloOk": true, - "isWritablePrimary": false, - "ok": 1, - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/secondary_mismatched_me.yml b/testdata/server-discovery-and-monitoring/rs/secondary_mismatched_me.yml deleted file mode 100644 index d359609d83..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/secondary_mismatched_me.yml +++ /dev/null @@ -1,28 +0,0 @@ -description: Secondary mismatched me - -uri: 'mongodb://localhost:27017/?replicaSet=rs' - -phases: - - outcome: - servers: - 'a:27017': - setName: null - type: Unknown - 'b:27017': - setName: null - type: Unknown - setName: rs - topologyType: ReplicaSetNoPrimary - logicalSessionTimeoutMinutes: null - responses: - - - 'localhost:27017' - - me: 'a:27017' - hosts: - - 'a:27017' - - 'b:27017' - helloOk: true - isWritablePrimary: false - ok: 1 - setName: rs - minWireVersion: 0 - maxWireVersion: 21 diff --git a/testdata/server-discovery-and-monitoring/rs/secondary_wrong_set_name.json b/testdata/server-discovery-and-monitoring/rs/secondary_wrong_set_name.json deleted file mode 100644 index 1f86b50543..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/secondary_wrong_set_name.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "description": "Secondary wrong setName", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "hosts": [ - "a:27017" - ], - "setName": "wrong", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": {}, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/secondary_wrong_set_name.yml b/testdata/server-discovery-and-monitoring/rs/secondary_wrong_set_name.yml deleted file mode 100644 index 60823815f0..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/secondary_wrong_set_name.yml +++ /dev/null @@ -1,31 +0,0 @@ -description: "Secondary wrong setName" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - hosts: ["a:27017"], - setName: "wrong", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: {}, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/secondary_wrong_set_name_with_primary.json b/testdata/server-discovery-and-monitoring/rs/secondary_wrong_set_name_with_primary.json deleted file mode 100644 index 6b89914151..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/secondary_wrong_set_name_with_primary.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "description": "Secondary wrong setName with primary", - "uri": "mongodb://a,b/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "wrong", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/secondary_wrong_set_name_with_primary.yml b/testdata/server-discovery-and-monitoring/rs/secondary_wrong_set_name_with_primary.yml deleted file mode 100644 index 8d1990363c..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/secondary_wrong_set_name_with_primary.yml +++ /dev/null @@ -1,75 +0,0 @@ -description: "Secondary wrong setName with primary" - -uri: "mongodb://a,b/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - }, - - "b:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - }, - - { - responses: [ - - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - hosts: ["a:27017", "b:27017"], - setName: "wrong", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/set_version_can_rollback.json b/testdata/server-discovery-and-monitoring/rs/set_version_can_rollback.json deleted file mode 100644 index 1cc608a344..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/set_version_can_rollback.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "description": "Set version rolls back after new primary with higher election Id", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 2, - "electionId": { - "$oid": "000000000000000000000001" - }, - "minWireVersion": 0, - "maxWireVersion": 17 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 2, - "electionId": { - "$oid": "000000000000000000000001" - } - }, - "b:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 2, - "maxElectionId": { - "$oid": "000000000000000000000001" - } - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000002" - }, - "minWireVersion": 0, - "maxWireVersion": 17 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - }, - "b:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000002" - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1, - "maxElectionId": { - "$oid": "000000000000000000000002" - } - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 2, - "electionId": { - "$oid": "000000000000000000000001" - }, - "minWireVersion": 0, - "maxWireVersion": 17 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - }, - "b:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000002" - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1, - "maxElectionId": { - "$oid": "000000000000000000000002" - } - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/set_version_can_rollback.yml b/testdata/server-discovery-and-monitoring/rs/set_version_can_rollback.yml deleted file mode 100644 index c30a8660ec..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/set_version_can_rollback.yml +++ /dev/null @@ -1,101 +0,0 @@ -description: Set version rolls back after new primary with higher election Id -uri: mongodb://a/?replicaSet=rs -phases: - - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - - b:27017 - setName: rs - setVersion: 2 - electionId: - $oid: '000000000000000000000001' - minWireVersion: 0 - maxWireVersion: 17 - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - setVersion: 2 - electionId: - $oid: '000000000000000000000001' - b:27017: - type: Unknown - setName: null - electionId: null - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - maxSetVersion: 2 - maxElectionId: - $oid: '000000000000000000000001' - - # Response from new primary with newer election Id - responses: - - - b:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - - b:27017 - setName: rs - setVersion: 1 - electionId: - $oid: '000000000000000000000002' - minWireVersion: 0 - maxWireVersion: 17 - outcome: - servers: - a:27017: - type: Unknown - setName: null - electionId: null - b:27017: - type: RSPrimary - setName: rs - setVersion: 1 - electionId: - $oid: '000000000000000000000002' - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - maxSetVersion: 1 - maxElectionId: - $oid: '000000000000000000000002' - - # Response from stale primary - responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - - b:27017 - setName: rs - setVersion: 2 - electionId: - $oid: '000000000000000000000001' - minWireVersion: 0 - maxWireVersion: 17 - outcome: - servers: - a:27017: - type: Unknown - setName: null - electionId: null - b:27017: - type: RSPrimary - setName: rs - setVersion: 1 - electionId: - $oid: '000000000000000000000002' - topologyType: ReplicaSetWithPrimary - logicalSessionTimeoutMinutes: null - setName: rs - maxSetVersion: 1 - maxElectionId: - $oid: '000000000000000000000002' diff --git a/testdata/server-discovery-and-monitoring/rs/setversion_equal_max_without_electionid.json b/testdata/server-discovery-and-monitoring/rs/setversion_equal_max_without_electionid.json deleted file mode 100644 index 3669511c5a..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/setversion_equal_max_without_electionid.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "description": "setVersion version that is equal is treated the same as greater than if there is no electionId", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 1, - "minWireVersion": 0, - "maxWireVersion": 17 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": null - }, - "b:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1 - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 1, - "minWireVersion": 0, - "maxWireVersion": 17 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - }, - "b:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1 - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/setversion_equal_max_without_electionid.yml b/testdata/server-discovery-and-monitoring/rs/setversion_equal_max_without_electionid.yml deleted file mode 100644 index 3733a12e56..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/setversion_equal_max_without_electionid.yml +++ /dev/null @@ -1,78 +0,0 @@ -description: "setVersion version that is equal is treated the same as greater than if there is no electionId" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - # Primary A is discovered and tells us about B. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 1, - minWireVersion: 0, - maxWireVersion: 17 - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 1, - electionId: - }, - "b:27017": { - type: "Unknown", - setName: , - electionId: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 1, - } - }, - - # B is elected, its setVersion is older so it is stale - { - responses: [ - ["b:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 1, - minWireVersion: 0, - maxWireVersion: 17 - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "Unknown", - setName: , - electionId: - }, - "b:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 1, - electionId: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 1, # Max is still 1, there wasn't an actual larger setVersion seen - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/setversion_greaterthan_max_without_electionid.json b/testdata/server-discovery-and-monitoring/rs/setversion_greaterthan_max_without_electionid.json deleted file mode 100644 index 97870d71d5..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/setversion_greaterthan_max_without_electionid.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "description": "setVersion that is greater than maxSetVersion is used if there is no electionId", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 1, - "minWireVersion": 0, - "maxWireVersion": 17 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": null - }, - "b:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1 - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 2, - "minWireVersion": 0, - "maxWireVersion": 17 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - }, - "b:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 2, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 2 - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/setversion_greaterthan_max_without_electionid.yml b/testdata/server-discovery-and-monitoring/rs/setversion_greaterthan_max_without_electionid.yml deleted file mode 100644 index 3252e0f611..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/setversion_greaterthan_max_without_electionid.yml +++ /dev/null @@ -1,79 +0,0 @@ -description: "setVersion that is greater than maxSetVersion is used if there is no electionId" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - # Primary A is discovered and tells us about B. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 1, - minWireVersion: 0, - maxWireVersion: 17 - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 1, - electionId: - }, - "b:27017": { - type: "Unknown", - setName: , - electionId: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 1, - } - }, - - # B is elected, its setVersion is greater than our current maxSetVersion - # B is primary, A is marked Unknown - { - responses: [ - ["b:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 2, - minWireVersion: 0, - maxWireVersion: 17 - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "Unknown", - setName: , - electionId: - }, - "b:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 2, - electionId: - }, - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 2, - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/setversion_without_electionid-pre-6.0.json b/testdata/server-discovery-and-monitoring/rs/setversion_without_electionid-pre-6.0.json deleted file mode 100644 index e62c6963ed..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/setversion_without_electionid-pre-6.0.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "description": "Pre 6.0 setVersion is ignored if there is no electionId", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 2, - "minWireVersion": 0, - "maxWireVersion": 7 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 2, - "electionId": null - }, - "b:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 2 - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 1, - "minWireVersion": 0, - "maxWireVersion": 7 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - }, - "b:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 2 - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/setversion_without_electionid-pre-6.0.yml b/testdata/server-discovery-and-monitoring/rs/setversion_without_electionid-pre-6.0.yml deleted file mode 100644 index 0fe6819aa7..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/setversion_without_electionid-pre-6.0.yml +++ /dev/null @@ -1,79 +0,0 @@ -description: "Pre 6.0 setVersion is ignored if there is no electionId" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - # Primary A is discovered and tells us about B. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 2, - minWireVersion: 0, - maxWireVersion: 7 - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 2 , - electionId: - }, - "b:27017": { - type: "Unknown", - setName: , - electionId: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 2, - } - }, - - # B is elected, its setVersion is older but we believe it anyway, because - # setVersion is only used in conjunction with electionId. - { - responses: [ - ["b:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 1, - minWireVersion: 0, - maxWireVersion: 7 - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "Unknown", - setName: , - electionId: - }, - "b:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 1, - electionId: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 2, - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/setversion_without_electionid.json b/testdata/server-discovery-and-monitoring/rs/setversion_without_electionid.json deleted file mode 100644 index 256fafe108..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/setversion_without_electionid.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "description": "setVersion that is less than maxSetVersion is ignored if there is no electionId", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 2, - "minWireVersion": 0, - "maxWireVersion": 17 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 2, - "electionId": null - }, - "b:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 2 - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 1, - "minWireVersion": 0, - "maxWireVersion": 17 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 2, - "electionId": null - }, - "b:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 2 - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/setversion_without_electionid.yml b/testdata/server-discovery-and-monitoring/rs/setversion_without_electionid.yml deleted file mode 100644 index 04992929a1..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/setversion_without_electionid.yml +++ /dev/null @@ -1,78 +0,0 @@ -description: "setVersion that is less than maxSetVersion is ignored if there is no electionId" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - # Primary A is discovered and tells us about B. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 2, - minWireVersion: 0, - maxWireVersion: 17 - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 2 , - electionId: - }, - "b:27017": { - type: "Unknown", - setName: , - electionId: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 2, - } - }, - - # B is elected, its setVersion is older so it is stale - { - responses: [ - ["b:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 1, - minWireVersion: 0, - maxWireVersion: 17 - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 2 , - electionId: - }, - "b:27017": { - type: "Unknown", - setName: , - electionId: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 2, - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/stepdown_change_set_name.json b/testdata/server-discovery-and-monitoring/rs/stepdown_change_set_name.json deleted file mode 100644 index 6de995518d..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/stepdown_change_set_name.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "description": "Primary becomes a secondary with wrong setName", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "hosts": [ - "a:27017" - ], - "setName": "wrong", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": {}, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/stepdown_change_set_name.yml b/testdata/server-discovery-and-monitoring/rs/stepdown_change_set_name.yml deleted file mode 100644 index 2e1c1a551e..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/stepdown_change_set_name.yml +++ /dev/null @@ -1,65 +0,0 @@ -description: "Primary becomes a secondary with wrong setName" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - # Primary is discovered normally. - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - }, - - # Primary changes its setName and becomes secondary. - # Remove it and change the topologyType. - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - hosts: ["a:27017"], - setName: "wrong", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: {}, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/too_new.json b/testdata/server-discovery-and-monitoring/rs/too_new.json deleted file mode 100644 index 696246f8e1..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/too_new.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "description": "Replica set member with large minWireVersion", - "uri": "mongodb://a,b/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ], - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 999, - "maxWireVersion": 1000 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "RSSecondary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "setName": "rs", - "logicalSessionTimeoutMinutes": null, - "compatible": false - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/too_new.yml b/testdata/server-discovery-and-monitoring/rs/too_new.yml deleted file mode 100644 index 121286554e..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/too_new.yml +++ /dev/null @@ -1,45 +0,0 @@ -description: "Replica set member with large minWireVersion" - -uri: "mongodb://a,b/?replicaSet=rs" - -phases: [ - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - setName: "rs", - hosts: ["a:27017", "b:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }], - ["b:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - setName: "rs", - hosts: ["a:27017", "b:27017"], - minWireVersion: 999, - maxWireVersion: 1000 - }] - ], - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs" - }, - "b:27017": { - type: "RSSecondary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - setName: "rs", - logicalSessionTimeoutMinutes: null, - compatible: false - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/too_old.json b/testdata/server-discovery-and-monitoring/rs/too_old.json deleted file mode 100644 index 8100a663f5..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/too_old.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "description": "Replica set member with default maxWireVersion of 0", - "uri": "mongodb://a,b/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ], - "minWireVersion": 0, - "maxWireVersion": 21 - } - ], - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "setName": "rs", - "hosts": [ - "a:27017", - "b:27017" - ] - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - }, - "b:27017": { - "type": "RSSecondary", - "setName": "rs" - } - }, - "topologyType": "ReplicaSetWithPrimary", - "setName": "rs", - "logicalSessionTimeoutMinutes": null, - "compatible": false - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/too_old.yml b/testdata/server-discovery-and-monitoring/rs/too_old.yml deleted file mode 100644 index 1fe611fbb9..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/too_old.yml +++ /dev/null @@ -1,41 +0,0 @@ -description: "Replica set member with default maxWireVersion of 0" -uri: "mongodb://a,b/?replicaSet=rs" -phases: [ - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - setName: "rs", - hosts: ["a:27017", "b:27017"], - minWireVersion: 0, - maxWireVersion: 21 - }], - ["b:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - setName: "rs", - hosts: ["a:27017", "b:27017"] - }] - ], - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs" - }, - "b:27017": { - type: "RSSecondary", - setName: "rs" - } - }, - topologyType: "ReplicaSetWithPrimary", - setName: "rs", - logicalSessionTimeoutMinutes: null, - compatible: false - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/topology_version_equal.json b/testdata/server-discovery-and-monitoring/rs/topology_version_equal.json deleted file mode 100644 index d3baa13479..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/topology_version_equal.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "description": "Primary with equal topologyVersion", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - }, - "b:27017": { - "type": "Unknown", - "topologyVersion": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/topology_version_equal.yml b/testdata/server-discovery-and-monitoring/rs/topology_version_equal.yml deleted file mode 100644 index 3ce3bb6050..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/topology_version_equal.yml +++ /dev/null @@ -1,68 +0,0 @@ -description: "Primary with equal topologyVersion" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - # Primary A is discovered - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 9, - topologyVersion: {'processId': {"$oid": "000000000000000000000001"}, "counter": {"$numberLong": "1"}} - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - topologyVersion: {'processId': {"$oid": "000000000000000000000001"}, "counter": {"$numberLong": "1"}} - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - } - }, - - # A responds with an equal topologyVersion, we should process the response. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 9, - topologyVersion: {'processId': {"$oid": "000000000000000000000001"}, "counter": {"$numberLong": "1"}} - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - topologyVersion: {'processId': {"$oid": "000000000000000000000001"}, "counter": {"$numberLong": "1"}} - }, - "b:27017": { - type: "Unknown", - topologyVersion: null - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/topology_version_greater.json b/testdata/server-discovery-and-monitoring/rs/topology_version_greater.json deleted file mode 100644 index f296ccee62..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/topology_version_greater.json +++ /dev/null @@ -1,259 +0,0 @@ -{ - "description": "Primary with newer topologyVersion", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "2" - } - } - }, - "b:27017": { - "type": "Unknown", - "topologyVersion": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "c:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000002" - }, - "counter": { - "$numberLong": "0" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000002" - }, - "counter": { - "$numberLong": "0" - } - } - }, - "c:27017": { - "type": "Unknown", - "topologyVersion": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "d:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": null - }, - "d:27017": { - "type": "Unknown", - "topologyVersion": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "e:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000003" - }, - "counter": { - "$numberLong": "0" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000003" - }, - "counter": { - "$numberLong": "0" - } - } - }, - "e:27017": { - "type": "Unknown", - "topologyVersion": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "a:27017", - {} - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "topologyVersion": null - }, - "e:27017": { - "type": "Unknown", - "topologyVersion": null - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/topology_version_greater.yml b/testdata/server-discovery-and-monitoring/rs/topology_version_greater.yml deleted file mode 100644 index 89603d604d..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/topology_version_greater.yml +++ /dev/null @@ -1,194 +0,0 @@ -description: "Primary with newer topologyVersion" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - # Primary A is discovered - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 9, - topologyVersion: {'processId': {"$oid": "000000000000000000000001"}, "counter": {"$numberLong": "1"}} - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - topologyVersion: {'processId': {"$oid": "000000000000000000000001"}, "counter": {"$numberLong": "1"}} - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - } - }, - - # A responds with a greater topologyVersion counter, we should process the response. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 9, - topologyVersion: {'processId': {"$oid": "000000000000000000000001"}, "counter": {"$numberLong": "2"}} - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - topologyVersion: {'processId': {"$oid": "000000000000000000000001"}, "counter": {"$numberLong": "2"}} - }, - "b:27017": { - - type: "Unknown", - topologyVersion: null - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - } - }, - - # A responds with a different topologyVersion processId, we should process the response. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "c:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 9, - topologyVersion: {'processId': {"$oid": "000000000000000000000002"}, "counter": {"$numberLong": "0"}} - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - topologyVersion: {'processId': {"$oid": "000000000000000000000002"}, "counter": {"$numberLong": "0"}} - }, - "c:27017": { - - type: "Unknown", - topologyVersion: null - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - } - }, - - # A responds without a topologyVersion, we should process the response. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "d:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 9 - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - topologyVersion: null - }, - "d:27017": { - - type: "Unknown", - topologyVersion: null - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - } - }, - - # A responds with a topologyVersion again, we should process the response. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "e:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 9, - topologyVersion: {'processId': {"$oid": "000000000000000000000003"}, "counter": {"$numberLong": "0"}} - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - topologyVersion: {'processId': {"$oid": "000000000000000000000003"}, "counter": {"$numberLong": "0"}} - }, - "e:27017": { - - type: "Unknown", - topologyVersion: null - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - } - }, - - # A responds with a network error, we should process the response. - { - responses: [ - ["a:27017", {}] - ], - - outcome: { - servers: { - "a:27017": { - type: "Unknown", - topologyVersion: null - }, - "e:27017": { - - type: "Unknown", - topologyVersion: null - } - }, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/topology_version_less.json b/testdata/server-discovery-and-monitoring/rs/topology_version_less.json deleted file mode 100644 index 435337ff25..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/topology_version_less.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "description": "Primary with older topologyVersion", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 9, - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "0" - } - } - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "topologyVersion": { - "processId": { - "$oid": "000000000000000000000001" - }, - "counter": { - "$numberLong": "1" - } - } - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/topology_version_less.yml b/testdata/server-discovery-and-monitoring/rs/topology_version_less.yml deleted file mode 100644 index 1c23e7849e..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/topology_version_less.yml +++ /dev/null @@ -1,64 +0,0 @@ -description: "Primary with older topologyVersion" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - # Primary A is discovered - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 9, - topologyVersion: {'processId': {"$oid": "000000000000000000000001"}, "counter": {"$numberLong": "1"}} - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - topologyVersion: {'processId': {"$oid": "000000000000000000000001"}, "counter": {"$numberLong": "1"}} - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - } - }, - - # A responds with an older topologyVersion, we should ignore the response. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 9, - topologyVersion: {'processId': {"$oid": "000000000000000000000001"}, "counter": {"$numberLong": "0"}} - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - topologyVersion: {'processId': {"$oid": "000000000000000000000001"}, "counter": {"$numberLong": "1"}} - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/unexpected_mongos.json b/testdata/server-discovery-and-monitoring/rs/unexpected_mongos.json deleted file mode 100644 index c6ffb321ca..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/unexpected_mongos.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "description": "Unexpected mongos", - "uri": "mongodb://b/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "msg": "isdbgrid", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": {}, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/unexpected_mongos.yml b/testdata/server-discovery-and-monitoring/rs/unexpected_mongos.yml deleted file mode 100644 index a9c5a24ee6..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/unexpected_mongos.yml +++ /dev/null @@ -1,29 +0,0 @@ -description: "Unexpected mongos" - -uri: "mongodb://b/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - msg: "isdbgrid", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: {}, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/use_setversion_without_electionid-pre-6.0.json b/testdata/server-discovery-and-monitoring/rs/use_setversion_without_electionid-pre-6.0.json deleted file mode 100644 index 2f9b567b85..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/use_setversion_without_electionid-pre-6.0.json +++ /dev/null @@ -1,138 +0,0 @@ -{ - "description": "Pre 6.0 Record max setVersion, even from primary without electionId", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000001" - }, - "minWireVersion": 0, - "maxWireVersion": 7 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000001" - } - }, - "b:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1, - "maxElectionId": { - "$oid": "000000000000000000000001" - } - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 2, - "minWireVersion": 0, - "maxWireVersion": 7 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - }, - "b:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 2 - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 2, - "maxElectionId": { - "$oid": "000000000000000000000001" - } - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000002" - }, - "minWireVersion": 0, - "maxWireVersion": 7 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - }, - "b:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 2 - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 2, - "maxElectionId": { - "$oid": "000000000000000000000001" - } - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/use_setversion_without_electionid-pre-6.0.yml b/testdata/server-discovery-and-monitoring/rs/use_setversion_without_electionid-pre-6.0.yml deleted file mode 100644 index 24d6accbe0..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/use_setversion_without_electionid-pre-6.0.yml +++ /dev/null @@ -1,117 +0,0 @@ -description: "Pre 6.0 Record max setVersion, even from primary without electionId" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - # Primary A has setVersion and electionId, tells us about B. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000001"}, - minWireVersion: 0, - maxWireVersion: 7 - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000001"} - }, - "b:27017": { - type: "Unknown", - setName: , - electionId: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 1, - maxElectionId: {"$oid": "000000000000000000000001"}, - } - }, - - # Reconfig the set and elect B, it has a new setVersion but no electionId. - { - responses: [ - ["b:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 2, - minWireVersion: 0, - maxWireVersion: 7 - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "Unknown", - setName: , - electionId: - }, - "b:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 2 - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 2, - maxElectionId: {"$oid": "000000000000000000000001"}, - } - }, - - # Delayed response from A, reporting its reelection. Its setVersion shows - # the election preceded B's so we ignore it. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000002"}, - minWireVersion: 0, - maxWireVersion: 7 - }] - ], - outcome: { - servers: { - "a:27017": { - type: "Unknown", - setName: , - electionId: - }, - "b:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 2 - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 2, - maxElectionId: {"$oid": "000000000000000000000001"}, - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/use_setversion_without_electionid.json b/testdata/server-discovery-and-monitoring/rs/use_setversion_without_electionid.json deleted file mode 100644 index 551f3e12c2..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/use_setversion_without_electionid.json +++ /dev/null @@ -1,144 +0,0 @@ -{ - "description": "Record max setVersion, even from primary without electionId", - "uri": "mongodb://a/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000001" - }, - "minWireVersion": 0, - "maxWireVersion": 17 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000001" - } - }, - "b:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1, - "maxElectionId": { - "$oid": "000000000000000000000001" - } - } - }, - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 2, - "minWireVersion": 0, - "maxWireVersion": 17 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000001" - } - }, - "b:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1, - "maxElectionId": { - "$oid": "000000000000000000000001" - } - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000002" - }, - "minWireVersion": 0, - "maxWireVersion": 17 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs", - "setVersion": 1, - "electionId": { - "$oid": "000000000000000000000002" - } - }, - "b:27017": { - "type": "Unknown", - "setName": null, - "electionId": null - } - }, - "topologyType": "ReplicaSetWithPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs", - "maxSetVersion": 1, - "maxElectionId": { - "$oid": "000000000000000000000002" - } - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/use_setversion_without_electionid.yml b/testdata/server-discovery-and-monitoring/rs/use_setversion_without_electionid.yml deleted file mode 100644 index 68c88bc503..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/use_setversion_without_electionid.yml +++ /dev/null @@ -1,119 +0,0 @@ -description: "Record max setVersion, even from primary without electionId" - -uri: "mongodb://a/?replicaSet=rs" - -phases: [ - - # Primary A has electionId and setVersion, tells us about B. - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000001"}, - minWireVersion: 0, - maxWireVersion: 17 - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000001"} - }, - "b:27017": { - type: "Unknown", - setName: , - electionId: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 1, - maxElectionId: {"$oid": "000000000000000000000001"}, - } - }, - - # Reconfig, B reports as primary, B is missing the electionId but reports setVersion - { - responses: [ - ["b:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 2, - minWireVersion: 0, - maxWireVersion: 17 - }] - ], - - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 1, - electionId: { "$oid": "000000000000000000000001" } - }, - "b:27017": { - type: "Unknown", - setName: , - electionId: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 1, - maxElectionId: {"$oid": "000000000000000000000001"}, - } - }, - - # A reports as primary, A has been reelection (electionId greater than our recorded maxElectionId). - # A's setVersion is less than our maxSetVersion, but electionId takes precedence so B's primary claim is ignored - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000002"}, - minWireVersion: 0, - maxWireVersion: 17 - }] - ], - outcome: { - servers: { - "a:27017": { - type: "RSPrimary", - setName: "rs", - setVersion: 1, - electionId: {"$oid": "000000000000000000000002"} - }, - "b:27017":{ - type: "Unknown", - setName: , - electionId: - } - }, - topologyType: "ReplicaSetWithPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs", - maxSetVersion: 1, - maxElectionId: {"$oid": "000000000000000000000002"}, - } - } -] diff --git a/testdata/server-discovery-and-monitoring/rs/wrong_set_name.json b/testdata/server-discovery-and-monitoring/rs/wrong_set_name.json deleted file mode 100644 index d0764d24dc..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/wrong_set_name.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "description": "Wrong setName", - "uri": "mongodb://a,b/?replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "hosts": [ - "b:27017", - "c:27017" - ], - "setName": "wrong", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "ReplicaSetNoPrimary", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/rs/wrong_set_name.yml b/testdata/server-discovery-and-monitoring/rs/wrong_set_name.yml deleted file mode 100644 index e7d3ace92d..0000000000 --- a/testdata/server-discovery-and-monitoring/rs/wrong_set_name.yml +++ /dev/null @@ -1,38 +0,0 @@ -description: "Wrong setName" - -uri: "mongodb://a,b/?replicaSet=rs" - -phases: [ - - { - responses: [ - - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - hosts: ["b:27017", "c:27017"], - setName: "wrong", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "ReplicaSetNoPrimary", - logicalSessionTimeoutMinutes: null, - setName: "rs" - } - } -] diff --git a/testdata/server-discovery-and-monitoring/sharded/compatible.json b/testdata/server-discovery-and-monitoring/sharded/compatible.json deleted file mode 100644 index ceb0ec24c4..0000000000 --- a/testdata/server-discovery-and-monitoring/sharded/compatible.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "description": "Multiple mongoses with large maxWireVersion", - "uri": "mongodb://a,b", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "msg": "isdbgrid", - "minWireVersion": 0, - "maxWireVersion": 1000 - } - ], - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "msg": "isdbgrid", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Mongos", - "setName": null - }, - "b:27017": { - "type": "Mongos", - "setName": null - } - }, - "topologyType": "Sharded", - "logicalSessionTimeoutMinutes": null, - "setName": null, - "compatible": true - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/sharded/compatible.yml b/testdata/server-discovery-and-monitoring/sharded/compatible.yml deleted file mode 100644 index 20519089f5..0000000000 --- a/testdata/server-discovery-and-monitoring/sharded/compatible.yml +++ /dev/null @@ -1,40 +0,0 @@ -description: "Multiple mongoses with large maxWireVersion" -uri: "mongodb://a,b" -phases: [ - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - msg: "isdbgrid", - minWireVersion: 0, - maxWireVersion: 1000 - }], - ["b:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - msg: "isdbgrid", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - outcome: { - servers: { - "a:27017": { - type: "Mongos", - setName: - }, - "b:27017": { - type: "Mongos", - setName: - } - }, - topologyType: "Sharded", - logicalSessionTimeoutMinutes: null, - setName: , - compatible: true - } - } -] diff --git a/testdata/server-discovery-and-monitoring/sharded/discover_single_mongos.json b/testdata/server-discovery-and-monitoring/sharded/discover_single_mongos.json deleted file mode 100644 index bf7e57521c..0000000000 --- a/testdata/server-discovery-and-monitoring/sharded/discover_single_mongos.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "description": "Discover single mongos", - "uri": "mongodb://a/?directConnection=false", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "msg": "isdbgrid", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Mongos", - "setName": null - } - }, - "topologyType": "Sharded", - "setName": null - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/sharded/discover_single_mongos.yml b/testdata/server-discovery-and-monitoring/sharded/discover_single_mongos.yml deleted file mode 100644 index 1e8adc6c5c..0000000000 --- a/testdata/server-discovery-and-monitoring/sharded/discover_single_mongos.yml +++ /dev/null @@ -1,24 +0,0 @@ -description: "Discover single mongos" - -uri: "mongodb://a/?directConnection=false" - -phases: - - - responses: - - - - "a:27017" - - - ok: 1 - helloOk: true - isWritablePrimary: true - msg: "isdbgrid" - minWireVersion: 0 - maxWireVersion: 21 - - outcome: - servers: - "a:27017": - type: "Mongos" - setName: - topologyType: "Sharded" - setName: diff --git a/testdata/server-discovery-and-monitoring/sharded/ls_timeout_mongos.json b/testdata/server-discovery-and-monitoring/sharded/ls_timeout_mongos.json deleted file mode 100644 index 3da0f84ca2..0000000000 --- a/testdata/server-discovery-and-monitoring/sharded/ls_timeout_mongos.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "description": "Parse logicalSessionTimeoutMinutes from mongoses", - "uri": "mongodb://a,b", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "msg": "isdbgrid", - "logicalSessionTimeoutMinutes": 1, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ], - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "msg": "isdbgrid", - "logicalSessionTimeoutMinutes": 2, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Mongos", - "setName": null - }, - "b:27017": { - "type": "Mongos", - "setName": null - } - }, - "topologyType": "Sharded", - "logicalSessionTimeoutMinutes": 1, - "setName": null - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "msg": "isdbgrid", - "logicalSessionTimeoutMinutes": 1, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ], - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "msg": "isdbgrid", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Mongos", - "setName": null - }, - "b:27017": { - "type": "Mongos", - "setName": null - } - }, - "topologyType": "Sharded", - "logicalSessionTimeoutMinutes": null, - "setName": null - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/sharded/ls_timeout_mongos.yml b/testdata/server-discovery-and-monitoring/sharded/ls_timeout_mongos.yml deleted file mode 100644 index 62ae97f057..0000000000 --- a/testdata/server-discovery-and-monitoring/sharded/ls_timeout_mongos.yml +++ /dev/null @@ -1,101 +0,0 @@ -description: "Parse logicalSessionTimeoutMinutes from mongoses" - -uri: "mongodb://a,b" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - msg: "isdbgrid", - logicalSessionTimeoutMinutes: 1, - minWireVersion: 0, - maxWireVersion: 21 - }], - - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - msg: "isdbgrid", - logicalSessionTimeoutMinutes: 2, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "Mongos", - setName: - }, - - "b:27017": { - - type: "Mongos", - setName: - } - }, - topologyType: "Sharded", - logicalSessionTimeoutMinutes: 1, # Minimum of the two - setName: - } - }, - # Now an isWritablePrimary response with no logicalSessionTimeoutMinutes - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - msg: "isdbgrid", - logicalSessionTimeoutMinutes: 1, - minWireVersion: 0, - maxWireVersion: 21 - }], - - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - msg: "isdbgrid", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "Mongos", - setName: - }, - - "b:27017": { - - type: "Mongos", - setName: - } - }, - topologyType: "Sharded", - logicalSessionTimeoutMinutes: null, # Sessions not supported now - setName: - } - } -] diff --git a/testdata/server-discovery-and-monitoring/sharded/mongos_disconnect.json b/testdata/server-discovery-and-monitoring/sharded/mongos_disconnect.json deleted file mode 100644 index 29b3351869..0000000000 --- a/testdata/server-discovery-and-monitoring/sharded/mongos_disconnect.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "description": "Mongos disconnect", - "uri": "mongodb://a,b", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "msg": "isdbgrid", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ], - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "msg": "isdbgrid", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Mongos", - "setName": null - }, - "b:27017": { - "type": "Mongos", - "setName": null - } - }, - "topologyType": "Sharded", - "logicalSessionTimeoutMinutes": null, - "setName": null - } - }, - { - "responses": [ - [ - "a:27017", - {} - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null - }, - "b:27017": { - "type": "Mongos", - "setName": null - } - }, - "topologyType": "Sharded", - "logicalSessionTimeoutMinutes": null, - "setName": null - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "msg": "isdbgrid", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Mongos", - "setName": null - }, - "b:27017": { - "type": "Mongos", - "setName": null - } - }, - "topologyType": "Sharded", - "logicalSessionTimeoutMinutes": null, - "setName": null - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/sharded/mongos_disconnect.yml b/testdata/server-discovery-and-monitoring/sharded/mongos_disconnect.yml deleted file mode 100644 index c384b3be11..0000000000 --- a/testdata/server-discovery-and-monitoring/sharded/mongos_disconnect.yml +++ /dev/null @@ -1,113 +0,0 @@ -description: "Mongos disconnect" - -uri: "mongodb://a,b" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - msg: "isdbgrid", - minWireVersion: 0, - maxWireVersion: 21 - }], - - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - msg: "isdbgrid", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "Mongos", - setName: - }, - - "b:27017": { - - type: "Mongos", - setName: - } - }, - topologyType: "Sharded", - logicalSessionTimeoutMinutes: null, - setName: - } - }, - { - responses: [ - ["a:27017", {}], # Hangup. - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "Unknown", - setName: - }, - - "b:27017": { - - type: "Mongos", - setName: - } - }, - topologyType: "Sharded", - logicalSessionTimeoutMinutes: null, - setName: - } - }, - { - responses: [ - # Back in action. - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - msg: "isdbgrid", - minWireVersion: 0, - maxWireVersion: 21 - }], - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "Mongos", - setName: - }, - - "b:27017": { - - type: "Mongos", - setName: - } - }, - topologyType: "Sharded", - logicalSessionTimeoutMinutes: null, - setName: - } - } -] diff --git a/testdata/server-discovery-and-monitoring/sharded/multiple_mongoses.json b/testdata/server-discovery-and-monitoring/sharded/multiple_mongoses.json deleted file mode 100644 index ae0c2d9cde..0000000000 --- a/testdata/server-discovery-and-monitoring/sharded/multiple_mongoses.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "description": "Multiple mongoses", - "uri": "mongodb://a,b", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "msg": "isdbgrid", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ], - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "msg": "isdbgrid", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Mongos", - "setName": null - }, - "b:27017": { - "type": "Mongos", - "setName": null - } - }, - "topologyType": "Sharded", - "logicalSessionTimeoutMinutes": null, - "setName": null - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/sharded/multiple_mongoses.yml b/testdata/server-discovery-and-monitoring/sharded/multiple_mongoses.yml deleted file mode 100644 index 6311605a89..0000000000 --- a/testdata/server-discovery-and-monitoring/sharded/multiple_mongoses.yml +++ /dev/null @@ -1,52 +0,0 @@ -description: "Multiple mongoses" - -uri: "mongodb://a,b" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - msg: "isdbgrid", - minWireVersion: 0, - maxWireVersion: 21 - }], - - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - msg: "isdbgrid", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "Mongos", - setName: - }, - - "b:27017": { - - type: "Mongos", - setName: - } - }, - topologyType: "Sharded", - logicalSessionTimeoutMinutes: null, - setName: - } - } -] diff --git a/testdata/server-discovery-and-monitoring/sharded/non_mongos_removed.json b/testdata/server-discovery-and-monitoring/sharded/non_mongos_removed.json deleted file mode 100644 index 4698f576d5..0000000000 --- a/testdata/server-discovery-and-monitoring/sharded/non_mongos_removed.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "description": "Non-Mongos server in sharded cluster", - "uri": "mongodb://a,b", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "msg": "isdbgrid", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ], - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "b:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Mongos", - "setName": null - } - }, - "topologyType": "Sharded", - "logicalSessionTimeoutMinutes": null, - "setName": null - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/sharded/non_mongos_removed.yml b/testdata/server-discovery-and-monitoring/sharded/non_mongos_removed.yml deleted file mode 100644 index aa604f1100..0000000000 --- a/testdata/server-discovery-and-monitoring/sharded/non_mongos_removed.yml +++ /dev/null @@ -1,47 +0,0 @@ -description: "Non-Mongos server in sharded cluster" - -uri: "mongodb://a,b" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - msg: "isdbgrid", - minWireVersion: 0, - maxWireVersion: 21 - }], - - ["b:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["b:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "Mongos", - setName: - } - }, - topologyType: "Sharded", - logicalSessionTimeoutMinutes: null, - setName: - } - } -] diff --git a/testdata/server-discovery-and-monitoring/sharded/normalize_uri_case.json b/testdata/server-discovery-and-monitoring/sharded/normalize_uri_case.json deleted file mode 100644 index 4aa7cb08b6..0000000000 --- a/testdata/server-discovery-and-monitoring/sharded/normalize_uri_case.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "description": "Normalize URI case", - "uri": "mongodb://A,B", - "phases": [ - { - "responses": [], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null - }, - "b:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "Unknown", - "logicalSessionTimeoutMinutes": null, - "setName": null - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/sharded/normalize_uri_case.yml b/testdata/server-discovery-and-monitoring/sharded/normalize_uri_case.yml deleted file mode 100644 index 9a144b3907..0000000000 --- a/testdata/server-discovery-and-monitoring/sharded/normalize_uri_case.yml +++ /dev/null @@ -1,32 +0,0 @@ -description: "Normalize URI case" - -uri: "mongodb://A,B" - -phases: [ - - { - responses: [ - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "Unknown", - setName: - }, - - "b:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "Unknown", - logicalSessionTimeoutMinutes: null, - setName: - } - } -] diff --git a/testdata/server-discovery-and-monitoring/sharded/too_new.json b/testdata/server-discovery-and-monitoring/sharded/too_new.json deleted file mode 100644 index 4b997d2163..0000000000 --- a/testdata/server-discovery-and-monitoring/sharded/too_new.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "description": "Multiple mongoses with large minWireVersion", - "uri": "mongodb://a,b", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "msg": "isdbgrid", - "minWireVersion": 999, - "maxWireVersion": 1000 - } - ], - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "msg": "isdbgrid" - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Mongos", - "setName": null - }, - "b:27017": { - "type": "Mongos", - "setName": null - } - }, - "topologyType": "Sharded", - "logicalSessionTimeoutMinutes": null, - "setName": null, - "compatible": false - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/sharded/too_new.yml b/testdata/server-discovery-and-monitoring/sharded/too_new.yml deleted file mode 100644 index 7d59cb4305..0000000000 --- a/testdata/server-discovery-and-monitoring/sharded/too_new.yml +++ /dev/null @@ -1,38 +0,0 @@ -description: "Multiple mongoses with large minWireVersion" -uri: "mongodb://a,b" -phases: [ - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - msg: "isdbgrid", - minWireVersion: 999, - maxWireVersion: 1000 - }], - ["b:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - msg: "isdbgrid" - }] - ], - outcome: { - servers: { - "a:27017": { - type: "Mongos", - setName: - }, - "b:27017": { - type: "Mongos", - setName: - } - }, - topologyType: "Sharded", - logicalSessionTimeoutMinutes: null, - setName: , - compatible: false - } - } -] diff --git a/testdata/server-discovery-and-monitoring/sharded/too_old.json b/testdata/server-discovery-and-monitoring/sharded/too_old.json deleted file mode 100644 index b918715ada..0000000000 --- a/testdata/server-discovery-and-monitoring/sharded/too_old.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "description": "Multiple mongoses with default maxWireVersion of 0", - "uri": "mongodb://a,b", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "msg": "isdbgrid", - "minWireVersion": 2, - "maxWireVersion": 21 - } - ], - [ - "b:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "msg": "isdbgrid" - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Mongos", - "setName": null - }, - "b:27017": { - "type": "Mongos", - "setName": null - } - }, - "topologyType": "Sharded", - "logicalSessionTimeoutMinutes": null, - "setName": null, - "compatible": false - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/sharded/too_old.yml b/testdata/server-discovery-and-monitoring/sharded/too_old.yml deleted file mode 100644 index a709934c2f..0000000000 --- a/testdata/server-discovery-and-monitoring/sharded/too_old.yml +++ /dev/null @@ -1,38 +0,0 @@ -description: "Multiple mongoses with default maxWireVersion of 0" -uri: "mongodb://a,b" -phases: [ - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - msg: "isdbgrid", - minWireVersion: 2, - maxWireVersion: 21 - }], - ["b:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - msg: "isdbgrid" - }] - ], - outcome: { - servers: { - "a:27017": { - type: "Mongos", - setName: - }, - "b:27017": { - type: "Mongos", - setName: - } - }, - topologyType: "Sharded", - logicalSessionTimeoutMinutes: null, - setName: , - compatible: false - } - } -] diff --git a/testdata/server-discovery-and-monitoring/single/compatible.json b/testdata/server-discovery-and-monitoring/single/compatible.json deleted file mode 100644 index 493d9b748e..0000000000 --- a/testdata/server-discovery-and-monitoring/single/compatible.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "description": "Standalone with large maxWireVersion", - "uri": "mongodb://a", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Standalone", - "setName": null - } - }, - "topologyType": "Single", - "logicalSessionTimeoutMinutes": null, - "setName": null, - "compatible": true - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/single/compatible.yml b/testdata/server-discovery-and-monitoring/single/compatible.yml deleted file mode 100644 index e183c7127d..0000000000 --- a/testdata/server-discovery-and-monitoring/single/compatible.yml +++ /dev/null @@ -1,27 +0,0 @@ -description: "Standalone with large maxWireVersion" -uri: "mongodb://a" -phases: [ - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - outcome: { - servers: { - "a:27017": { - type: "Standalone", - setName: - } - }, - topologyType: "Single", - logicalSessionTimeoutMinutes: null, - setName: , - compatible: true - } - } -] diff --git a/testdata/server-discovery-and-monitoring/single/direct_connection_external_ip.json b/testdata/server-discovery-and-monitoring/single/direct_connection_external_ip.json deleted file mode 100644 index 1461b4c469..0000000000 --- a/testdata/server-discovery-and-monitoring/single/direct_connection_external_ip.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "description": "Direct connection to RSPrimary via external IP", - "uri": "mongodb://a/?directConnection=true", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "b:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - } - }, - "topologyType": "Single", - "logicalSessionTimeoutMinutes": null, - "setName": null - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/single/direct_connection_external_ip.yml b/testdata/server-discovery-and-monitoring/single/direct_connection_external_ip.yml deleted file mode 100644 index 0cb73c50e2..0000000000 --- a/testdata/server-discovery-and-monitoring/single/direct_connection_external_ip.yml +++ /dev/null @@ -1,37 +0,0 @@ -description: "Direct connection to RSPrimary via external IP" - -uri: "mongodb://a/?directConnection=true" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["b:27017"], # Internal IP. - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - } - }, - topologyType: "Single", - logicalSessionTimeoutMinutes: null, - setName: - } - } -] diff --git a/testdata/server-discovery-and-monitoring/single/direct_connection_mongos.json b/testdata/server-discovery-and-monitoring/single/direct_connection_mongos.json deleted file mode 100644 index 72be020862..0000000000 --- a/testdata/server-discovery-and-monitoring/single/direct_connection_mongos.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "description": "Direct connection to mongos", - "uri": "mongodb://a/?directConnection=true", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "msg": "isdbgrid", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Mongos", - "setName": null - } - }, - "topologyType": "Single", - "logicalSessionTimeoutMinutes": null, - "setName": null - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/single/direct_connection_mongos.yml b/testdata/server-discovery-and-monitoring/single/direct_connection_mongos.yml deleted file mode 100644 index e81c9aef9b..0000000000 --- a/testdata/server-discovery-and-monitoring/single/direct_connection_mongos.yml +++ /dev/null @@ -1,36 +0,0 @@ -description: "Direct connection to mongos" - -uri: "mongodb://a/?directConnection=true" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - msg: "isdbgrid", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "Mongos", - setName: - } - }, - topologyType: "Single", - logicalSessionTimeoutMinutes: null, - setName: - } - } -] diff --git a/testdata/server-discovery-and-monitoring/single/direct_connection_replicaset.json b/testdata/server-discovery-and-monitoring/single/direct_connection_replicaset.json deleted file mode 100644 index 82a51d390e..0000000000 --- a/testdata/server-discovery-and-monitoring/single/direct_connection_replicaset.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "description": "Direct connection with replicaSet URI option", - "uri": "mongodb://a/?replicaSet=rs&directConnection=true", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - } - }, - "topologyType": "Single", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/single/direct_connection_replicaset.yml b/testdata/server-discovery-and-monitoring/single/direct_connection_replicaset.yml deleted file mode 100644 index 9a0f3996ca..0000000000 --- a/testdata/server-discovery-and-monitoring/single/direct_connection_replicaset.yml +++ /dev/null @@ -1,23 +0,0 @@ -description: Direct connection with replicaSet URI option - -uri: "mongodb://a/?replicaSet=rs&directConnection=true" - -phases: - # We are connecting to a replica set member - - responses: - - - - "a:27017" - - ok: 1 - helloOk: true - isWritablePrimary: true - setName: rs - minWireVersion: 0 - maxWireVersion: 21 - outcome: - servers: - "a:27017": - type: "RSPrimary" - setName: "rs" - topologyType: "Single" - logicalSessionTimeoutMinutes: - setName: rs diff --git a/testdata/server-discovery-and-monitoring/single/direct_connection_rsarbiter.json b/testdata/server-discovery-and-monitoring/single/direct_connection_rsarbiter.json deleted file mode 100644 index e06d284364..0000000000 --- a/testdata/server-discovery-and-monitoring/single/direct_connection_rsarbiter.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "description": "Direct connection to RSArbiter", - "uri": "mongodb://a/?directConnection=true", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "arbiterOnly": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSArbiter", - "setName": "rs" - } - }, - "topologyType": "Single", - "logicalSessionTimeoutMinutes": null, - "setName": null - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/single/direct_connection_rsarbiter.yml b/testdata/server-discovery-and-monitoring/single/direct_connection_rsarbiter.yml deleted file mode 100644 index d9fa876655..0000000000 --- a/testdata/server-discovery-and-monitoring/single/direct_connection_rsarbiter.yml +++ /dev/null @@ -1,38 +0,0 @@ -description: "Direct connection to RSArbiter" - -uri: "mongodb://a/?directConnection=true" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - arbiterOnly: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSArbiter", - setName: "rs" - } - }, - topologyType: "Single", - logicalSessionTimeoutMinutes: null, - setName: - } - } -] diff --git a/testdata/server-discovery-and-monitoring/single/direct_connection_rsprimary.json b/testdata/server-discovery-and-monitoring/single/direct_connection_rsprimary.json deleted file mode 100644 index 45eb1602fb..0000000000 --- a/testdata/server-discovery-and-monitoring/single/direct_connection_rsprimary.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "description": "Direct connection to RSPrimary", - "uri": "mongodb://a/?directConnection=true", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - } - }, - "topologyType": "Single", - "logicalSessionTimeoutMinutes": null, - "setName": null - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/single/direct_connection_rsprimary.yml b/testdata/server-discovery-and-monitoring/single/direct_connection_rsprimary.yml deleted file mode 100644 index 85dcb30a7c..0000000000 --- a/testdata/server-discovery-and-monitoring/single/direct_connection_rsprimary.yml +++ /dev/null @@ -1,37 +0,0 @@ -description: "Direct connection to RSPrimary" - -uri: "mongodb://a/?directConnection=true" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSPrimary", - setName: "rs" - } - }, - topologyType: "Single", - logicalSessionTimeoutMinutes: null, - setName: - } - } -] diff --git a/testdata/server-discovery-and-monitoring/single/direct_connection_rssecondary.json b/testdata/server-discovery-and-monitoring/single/direct_connection_rssecondary.json deleted file mode 100644 index b1bef8a49f..0000000000 --- a/testdata/server-discovery-and-monitoring/single/direct_connection_rssecondary.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "description": "Direct connection to RSSecondary", - "uri": "mongodb://a/?directConnection=true", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": false, - "secondary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSSecondary", - "setName": "rs" - } - }, - "topologyType": "Single", - "logicalSessionTimeoutMinutes": null, - "setName": null - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/single/direct_connection_rssecondary.yml b/testdata/server-discovery-and-monitoring/single/direct_connection_rssecondary.yml deleted file mode 100644 index 2d7da65e41..0000000000 --- a/testdata/server-discovery-and-monitoring/single/direct_connection_rssecondary.yml +++ /dev/null @@ -1,38 +0,0 @@ -description: "Direct connection to RSSecondary" - -uri: "mongodb://a/?directConnection=true" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: false, - secondary: true, - hosts: ["a:27017", "b:27017"], - setName: "rs", - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "RSSecondary", - setName: "rs" - } - }, - topologyType: "Single", - logicalSessionTimeoutMinutes: null, - setName: - } - } -] diff --git a/testdata/server-discovery-and-monitoring/single/direct_connection_standalone.json b/testdata/server-discovery-and-monitoring/single/direct_connection_standalone.json deleted file mode 100644 index e71ba07e74..0000000000 --- a/testdata/server-discovery-and-monitoring/single/direct_connection_standalone.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "description": "Direct connection to standalone", - "uri": "mongodb://a/?directConnection=true", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Standalone", - "setName": null - } - }, - "topologyType": "Single", - "logicalSessionTimeoutMinutes": null, - "setName": null - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/single/direct_connection_standalone.yml b/testdata/server-discovery-and-monitoring/single/direct_connection_standalone.yml deleted file mode 100644 index ab4cb02ad4..0000000000 --- a/testdata/server-discovery-and-monitoring/single/direct_connection_standalone.yml +++ /dev/null @@ -1,35 +0,0 @@ -description: "Direct connection to standalone" - -uri: "mongodb://a/?directConnection=true" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "Standalone", - setName: - } - }, - topologyType: "Single", - logicalSessionTimeoutMinutes: null, - setName: - } - } -] diff --git a/testdata/server-discovery-and-monitoring/single/direct_connection_unavailable_seed.json b/testdata/server-discovery-and-monitoring/single/direct_connection_unavailable_seed.json deleted file mode 100644 index 16f2735da5..0000000000 --- a/testdata/server-discovery-and-monitoring/single/direct_connection_unavailable_seed.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "description": "Direct connection to unavailable seed", - "uri": "mongodb://a/?directConnection=true", - "phases": [ - { - "responses": [ - [ - "a:27017", - {} - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "Single", - "logicalSessionTimeoutMinutes": null, - "setName": null - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/single/direct_connection_unavailable_seed.yml b/testdata/server-discovery-and-monitoring/single/direct_connection_unavailable_seed.yml deleted file mode 100644 index 46284ded6d..0000000000 --- a/testdata/server-discovery-and-monitoring/single/direct_connection_unavailable_seed.yml +++ /dev/null @@ -1,28 +0,0 @@ -description: "Direct connection to unavailable seed" - -uri: "mongodb://a/?directConnection=true" - -phases: [ - - { - responses: [ - - ["a:27017", {}] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "Single", - logicalSessionTimeoutMinutes: null, - setName: - } - } -] diff --git a/testdata/server-discovery-and-monitoring/single/direct_connection_wrong_set_name.json b/testdata/server-discovery-and-monitoring/single/direct_connection_wrong_set_name.json deleted file mode 100644 index 8014a0a533..0000000000 --- a/testdata/server-discovery-and-monitoring/single/direct_connection_wrong_set_name.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "description": "Direct connection to RSPrimary with wrong set name", - "uri": "mongodb://a/?directConnection=true&replicaSet=rs", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "wrong", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown" - } - }, - "topologyType": "Single", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "hosts": [ - "a:27017", - "b:27017" - ], - "setName": "rs", - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "RSPrimary", - "setName": "rs" - } - }, - "topologyType": "Single", - "logicalSessionTimeoutMinutes": null, - "setName": "rs" - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/single/direct_connection_wrong_set_name.yml b/testdata/server-discovery-and-monitoring/single/direct_connection_wrong_set_name.yml deleted file mode 100644 index 46b476d049..0000000000 --- a/testdata/server-discovery-and-monitoring/single/direct_connection_wrong_set_name.yml +++ /dev/null @@ -1,40 +0,0 @@ -description: Direct connection to RSPrimary with wrong set name -uri: mongodb://a/?directConnection=true&replicaSet=rs -phases: -- responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - - b:27017 - setName: wrong - minWireVersion: 0 - maxWireVersion: 21 - outcome: - servers: - a:27017: - type: Unknown - topologyType: Single - logicalSessionTimeoutMinutes: - setName: rs -- responses: - - - a:27017 - - ok: 1 - helloOk: true - isWritablePrimary: true - hosts: - - a:27017 - - b:27017 - setName: rs - minWireVersion: 0 - maxWireVersion: 21 - outcome: - servers: - a:27017: - type: RSPrimary - setName: rs - topologyType: Single - logicalSessionTimeoutMinutes: - setName: rs diff --git a/testdata/server-discovery-and-monitoring/single/discover_standalone.json b/testdata/server-discovery-and-monitoring/single/discover_standalone.json deleted file mode 100644 index d78c81654b..0000000000 --- a/testdata/server-discovery-and-monitoring/single/discover_standalone.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "description": "Discover standalone", - "uri": "mongodb://a/?directConnection=false", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Standalone", - "setName": null - } - }, - "topologyType": "Single", - "logicalSessionTimeoutMinutes": null, - "setName": null - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/single/discover_standalone.yml b/testdata/server-discovery-and-monitoring/single/discover_standalone.yml deleted file mode 100644 index bc112d4eac..0000000000 --- a/testdata/server-discovery-and-monitoring/single/discover_standalone.yml +++ /dev/null @@ -1,35 +0,0 @@ -description: "Discover standalone" - -uri: "mongodb://a/?directConnection=false" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "Standalone", - setName: - } - }, - topologyType: "Single", - logicalSessionTimeoutMinutes: null, - setName: - } - } -] diff --git a/testdata/server-discovery-and-monitoring/single/discover_unavailable_seed.json b/testdata/server-discovery-and-monitoring/single/discover_unavailable_seed.json deleted file mode 100644 index b1f306c2be..0000000000 --- a/testdata/server-discovery-and-monitoring/single/discover_unavailable_seed.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "description": "Discover unavailable seed", - "uri": "mongodb://a/?directConnection=false", - "phases": [ - { - "responses": [ - [ - "a:27017", - {} - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "Unknown", - "logicalSessionTimeoutMinutes": null, - "setName": null - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/single/discover_unavailable_seed.yml b/testdata/server-discovery-and-monitoring/single/discover_unavailable_seed.yml deleted file mode 100644 index e451025e8a..0000000000 --- a/testdata/server-discovery-and-monitoring/single/discover_unavailable_seed.yml +++ /dev/null @@ -1,28 +0,0 @@ -description: "Discover unavailable seed" - -uri: "mongodb://a/?directConnection=false" - -phases: [ - - { - responses: [ - - ["a:27017", {}] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "Unknown", - logicalSessionTimeoutMinutes: null, - setName: - } - } -] diff --git a/testdata/server-discovery-and-monitoring/single/ls_timeout_standalone.json b/testdata/server-discovery-and-monitoring/single/ls_timeout_standalone.json deleted file mode 100644 index 236eabe00a..0000000000 --- a/testdata/server-discovery-and-monitoring/single/ls_timeout_standalone.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "description": "Parse logicalSessionTimeoutMinutes from standalone", - "uri": "mongodb://a", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "logicalSessionTimeoutMinutes": 7, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Standalone", - "setName": null - } - }, - "topologyType": "Single", - "logicalSessionTimeoutMinutes": 7, - "setName": null - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/single/ls_timeout_standalone.yml b/testdata/server-discovery-and-monitoring/single/ls_timeout_standalone.yml deleted file mode 100644 index 4747af6770..0000000000 --- a/testdata/server-discovery-and-monitoring/single/ls_timeout_standalone.yml +++ /dev/null @@ -1,36 +0,0 @@ -description: "Parse logicalSessionTimeoutMinutes from standalone" - -uri: "mongodb://a" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - logicalSessionTimeoutMinutes: 7, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "Standalone", - setName: - } - }, - topologyType: "Single", - logicalSessionTimeoutMinutes: 7, - setName: - } - } -] diff --git a/testdata/server-discovery-and-monitoring/single/not_ok_response.json b/testdata/server-discovery-and-monitoring/single/not_ok_response.json deleted file mode 100644 index cfaac3564a..0000000000 --- a/testdata/server-discovery-and-monitoring/single/not_ok_response.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "description": "Handle a not-ok isWritablePrimary response", - "uri": "mongodb://a", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ], - [ - "a:27017", - { - "ok": 0, - "helloOk": true, - "isWritablePrimary": true, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "Single", - "logicalSessionTimeoutMinutes": null, - "setName": null - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/single/not_ok_response.yml b/testdata/server-discovery-and-monitoring/single/not_ok_response.yml deleted file mode 100644 index c1ae7d9875..0000000000 --- a/testdata/server-discovery-and-monitoring/single/not_ok_response.yml +++ /dev/null @@ -1,44 +0,0 @@ -description: "Handle a not-ok isWritablePrimary response" - -uri: "mongodb://a" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - minWireVersion: 0, - maxWireVersion: 21 - }], - - ["a:27017", { - - ok: 0, - helloOk: true, - isWritablePrimary: true, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "Single", - logicalSessionTimeoutMinutes: null, - setName: - } - } -] diff --git a/testdata/server-discovery-and-monitoring/single/standalone_removed.json b/testdata/server-discovery-and-monitoring/single/standalone_removed.json deleted file mode 100644 index 675cdbb008..0000000000 --- a/testdata/server-discovery-and-monitoring/single/standalone_removed.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "description": "Standalone removed from multi-server topology", - "uri": "mongodb://a,b", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "b:27017": { - "type": "Unknown", - "setName": null - } - }, - "topologyType": "Unknown", - "logicalSessionTimeoutMinutes": null, - "setName": null - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/single/standalone_removed.yml b/testdata/server-discovery-and-monitoring/single/standalone_removed.yml deleted file mode 100644 index c8404463f7..0000000000 --- a/testdata/server-discovery-and-monitoring/single/standalone_removed.yml +++ /dev/null @@ -1,35 +0,0 @@ -description: "Standalone removed from multi-server topology" - -uri: "mongodb://a,b" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - helloOk: true, - isWritablePrimary: true, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "b:27017": { - - type: "Unknown", - setName: - } - }, - topologyType: "Unknown", - logicalSessionTimeoutMinutes: null, - setName: - } - } -] diff --git a/testdata/server-discovery-and-monitoring/single/standalone_using_legacy_hello.json b/testdata/server-discovery-and-monitoring/single/standalone_using_legacy_hello.json deleted file mode 100644 index 488cac4918..0000000000 --- a/testdata/server-discovery-and-monitoring/single/standalone_using_legacy_hello.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "description": "Connect to standalone using legacy hello", - "uri": "mongodb://a", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "ismaster": true, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Standalone", - "setName": null - } - }, - "topologyType": "Single", - "logicalSessionTimeoutMinutes": null, - "setName": null - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/single/standalone_using_legacy_hello.yml b/testdata/server-discovery-and-monitoring/single/standalone_using_legacy_hello.yml deleted file mode 100644 index 82c6ccfa7b..0000000000 --- a/testdata/server-discovery-and-monitoring/single/standalone_using_legacy_hello.yml +++ /dev/null @@ -1,34 +0,0 @@ -description: "Connect to standalone using legacy hello" - -uri: "mongodb://a" - -phases: [ - - { - responses: [ - - ["a:27017", { - - ok: 1, - ismaster: true, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - - outcome: { - - servers: { - - "a:27017": { - - type: "Standalone", - setName: - } - }, - topologyType: "Single", - logicalSessionTimeoutMinutes: null, - setName: - } - } -] diff --git a/testdata/server-discovery-and-monitoring/single/too_new.json b/testdata/server-discovery-and-monitoring/single/too_new.json deleted file mode 100644 index 8dd57d3348..0000000000 --- a/testdata/server-discovery-and-monitoring/single/too_new.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "description": "Standalone with large minWireVersion", - "uri": "mongodb://a", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "minWireVersion": 999, - "maxWireVersion": 1000 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Standalone", - "setName": null - } - }, - "topologyType": "Single", - "logicalSessionTimeoutMinutes": null, - "setName": null, - "compatible": false - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/single/too_new.yml b/testdata/server-discovery-and-monitoring/single/too_new.yml deleted file mode 100644 index b176660d96..0000000000 --- a/testdata/server-discovery-and-monitoring/single/too_new.yml +++ /dev/null @@ -1,27 +0,0 @@ -description: "Standalone with large minWireVersion" -uri: "mongodb://a" -phases: [ - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - minWireVersion: 999, - maxWireVersion: 1000 - }] - ], - outcome: { - servers: { - "a:27017": { - type: "Standalone", - setName: - } - }, - topologyType: "Single", - logicalSessionTimeoutMinutes: null, - setName: , - compatible: false - } - } -] diff --git a/testdata/server-discovery-and-monitoring/single/too_old.json b/testdata/server-discovery-and-monitoring/single/too_old.json deleted file mode 100644 index 8c027e01db..0000000000 --- a/testdata/server-discovery-and-monitoring/single/too_old.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "description": "Standalone with default maxWireVersion of 0", - "uri": "mongodb://a", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Standalone", - "setName": null - } - }, - "topologyType": "Single", - "logicalSessionTimeoutMinutes": null, - "setName": null, - "compatible": false - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/single/too_old.yml b/testdata/server-discovery-and-monitoring/single/too_old.yml deleted file mode 100644 index 05cc1dc8f1..0000000000 --- a/testdata/server-discovery-and-monitoring/single/too_old.yml +++ /dev/null @@ -1,25 +0,0 @@ -description: "Standalone with default maxWireVersion of 0" -uri: "mongodb://a" -phases: [ - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true - }] - ], - outcome: { - servers: { - "a:27017": { - type: "Standalone", - setName: - } - }, - topologyType: "Single", - logicalSessionTimeoutMinutes: null, - setName: , - compatible: false - } - } -] diff --git a/testdata/server-discovery-and-monitoring/single/too_old_then_upgraded.json b/testdata/server-discovery-and-monitoring/single/too_old_then_upgraded.json deleted file mode 100644 index c3dd98cf62..0000000000 --- a/testdata/server-discovery-and-monitoring/single/too_old_then_upgraded.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "description": "Standalone with default maxWireVersion of 0 is upgraded to one with maxWireVersion 21", - "uri": "mongodb://a", - "phases": [ - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Standalone", - "setName": null - } - }, - "topologyType": "Single", - "logicalSessionTimeoutMinutes": null, - "setName": null, - "compatible": false - } - }, - { - "responses": [ - [ - "a:27017", - { - "ok": 1, - "helloOk": true, - "isWritablePrimary": true, - "minWireVersion": 0, - "maxWireVersion": 21 - } - ] - ], - "outcome": { - "servers": { - "a:27017": { - "type": "Standalone", - "setName": null - } - }, - "topologyType": "Single", - "logicalSessionTimeoutMinutes": null, - "setName": null, - "compatible": true - } - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/single/too_old_then_upgraded.yml b/testdata/server-discovery-and-monitoring/single/too_old_then_upgraded.yml deleted file mode 100644 index 87b72b9000..0000000000 --- a/testdata/server-discovery-and-monitoring/single/too_old_then_upgraded.yml +++ /dev/null @@ -1,48 +0,0 @@ -description: "Standalone with default maxWireVersion of 0 is upgraded to one with maxWireVersion 21" -uri: "mongodb://a" -phases: [ - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true - }] - ], - outcome: { - servers: { - "a:27017": { - type: "Standalone", - setName: - } - }, - topologyType: "Single", - logicalSessionTimeoutMinutes: null, - setName: , - compatible: false - } - }, - { - responses: [ - ["a:27017", { - ok: 1, - helloOk: true, - isWritablePrimary: true, - minWireVersion: 0, - maxWireVersion: 21 - }] - ], - outcome: { - servers: { - "a:27017": { - type: "Standalone", - setName: - } - }, - topologyType: "Single", - logicalSessionTimeoutMinutes: null, - setName: , - compatible: true - } - } -] diff --git a/testdata/server-discovery-and-monitoring/unified/auth-error.json b/testdata/server-discovery-and-monitoring/unified/auth-error.json deleted file mode 100644 index 62d26494c7..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/auth-error.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "description": "auth-error", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "4.4", - "auth": true, - "serverless": "forbid", - "topologies": [ - "single", - "replicaset", - "sharded" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "setupClient", - "useMultipleMongoses": false - } - } - ], - "initialData": [ - { - "collectionName": "auth-error", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ], - "tests": [ - { - "description": "Reset server and pool after AuthenticationFailure error", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "setupClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "saslContinue" - ], - "appName": "authErrorTest", - "errorCode": 18 - } - } - } - }, - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent", - "serverDescriptionChangedEvent", - "poolClearedEvent" - ], - "uriOptions": { - "retryWrites": false, - "appname": "authErrorTest" - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "sdam-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "auth-error" - } - } - ] - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 3 - }, - { - "_id": 4 - } - ] - }, - "expectError": { - "isError": true - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 5 - }, - { - "_id": 6 - } - ] - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "auth-error", - "documents": [ - { - "_id": 5 - }, - { - "_id": 6 - } - ] - }, - "commandName": "insert", - "databaseName": "sdam-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "auth-error", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - }, - { - "_id": 5 - }, - { - "_id": 6 - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/auth-error.yml b/testdata/server-discovery-and-monitoring/unified/auth-error.yml deleted file mode 100644 index febf4a46dc..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/auth-error.yml +++ /dev/null @@ -1,130 +0,0 @@ -description: auth-error - -schemaVersion: "1.4" - -runOnRequirements: - # failCommand appName requirements - - minServerVersion: "4.4" - auth: true - serverless: forbid - topologies: [ single, replicaset, sharded ] - -createEntities: - - client: - id: &setupClient setupClient - useMultipleMongoses: false - -initialData: &initialData - - collectionName: &collectionName auth-error - databaseName: &databaseName sdam-tests - documents: - - _id: 1 - - _id: 2 -tests: - - description: Reset server and pool after AuthenticationFailure error - operations: - - name: failPoint - object: testRunner - arguments: - client: *setupClient - failPoint: - configureFailPoint: failCommand - mode: - times: 1 - data: - failCommands: - - saslContinue - appName: authErrorTest - errorCode: 18 - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - serverDescriptionChangedEvent - - poolClearedEvent - uriOptions: - retryWrites: false - appname: authErrorTest - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: insertMany - object: *collection - arguments: - documents: - - _id: 3 - - _id: 4 - expectError: - isError: true - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - # Perform another operation to ensure the node is rediscovered. - - name: insertMany - object: *collection - arguments: - documents: - - _id: 5 - - _id: 6 - # Assert the server was marked Unknown and pool was cleared exactly once. - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - expectEvents: - # Note: The first insert command is never attempted because connection - # checkout fails. - - client: *client - eventType: command - events: - - commandStartedEvent: - command: - insert: auth-error - documents: - - _id: 5 - - _id: 6 - commandName: insert - databaseName: *databaseName - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - _id: 1 - - _id: 2 - - _id: 5 - - _id: 6 diff --git a/testdata/server-discovery-and-monitoring/unified/auth-misc-command-error.json b/testdata/server-discovery-and-monitoring/unified/auth-misc-command-error.json deleted file mode 100644 index fd62fe604e..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/auth-misc-command-error.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "description": "auth-misc-command-error", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "4.4", - "auth": true, - "serverless": "forbid", - "topologies": [ - "single", - "replicaset", - "sharded" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "setupClient", - "useMultipleMongoses": false - } - } - ], - "initialData": [ - { - "collectionName": "auth-misc-error", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ], - "tests": [ - { - "description": "Reset server and pool after misc command error", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "setupClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "saslContinue" - ], - "appName": "authMiscErrorTest", - "errorCode": 1 - } - } - } - }, - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent", - "serverDescriptionChangedEvent", - "poolClearedEvent" - ], - "uriOptions": { - "retryWrites": false, - "appname": "authMiscErrorTest" - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "sdam-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "auth-misc-error" - } - } - ] - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 3 - }, - { - "_id": 4 - } - ] - }, - "expectError": { - "isError": true - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 5 - }, - { - "_id": 6 - } - ] - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "auth-misc-error", - "documents": [ - { - "_id": 5 - }, - { - "_id": 6 - } - ] - }, - "commandName": "insert", - "databaseName": "sdam-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "auth-misc-error", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - }, - { - "_id": 5 - }, - { - "_id": 6 - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/auth-misc-command-error.yml b/testdata/server-discovery-and-monitoring/unified/auth-misc-command-error.yml deleted file mode 100644 index 9969ca92d4..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/auth-misc-command-error.yml +++ /dev/null @@ -1,132 +0,0 @@ ---- -description: auth-misc-command-error - -schemaVersion: "1.4" - -runOnRequirements: - # failCommand appName requirements - - minServerVersion: "4.4" - auth: true - serverless: forbid - topologies: [ single, replicaset, sharded ] - -createEntities: - - client: - id: &setupClient setupClient - useMultipleMongoses: false - -initialData: &initialData - - collectionName: &collectionName auth-misc-error - databaseName: &databaseName sdam-tests - documents: - - _id: 1 - - _id: 2 - -tests: - - description: Reset server and pool after misc command error - operations: - - name: failPoint - object: testRunner - arguments: - client: *setupClient - failPoint: - configureFailPoint: failCommand - mode: - times: 1 - data: - failCommands: - - saslContinue - appName: authMiscErrorTest - errorCode: 1 # InternalError - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - serverDescriptionChangedEvent - - poolClearedEvent - uriOptions: - retryWrites: false - appname: authMiscErrorTest - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: insertMany - object: *collection - arguments: - documents: - - _id: 3 - - _id: 4 - expectError: - isError: true - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - # Perform another operation to ensure the node is rediscovered. - - name: insertMany - object: *collection - arguments: - documents: - - _id: 5 - - _id: 6 - # Assert the server was marked Unknown and pool was cleared exactly once. - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - expectEvents: - # Note: The first insert command is never attempted because connection - # checkout fails. - - client: *client - eventType: command - events: - - commandStartedEvent: - command: - insert: auth-misc-error - documents: - - _id: 5 - - _id: 6 - commandName: insert - databaseName: *databaseName - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - _id: 1 - - _id: 2 - - _id: 5 - - _id: 6 diff --git a/testdata/server-discovery-and-monitoring/unified/auth-network-error.json b/testdata/server-discovery-and-monitoring/unified/auth-network-error.json deleted file mode 100644 index 84763af32e..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/auth-network-error.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "description": "auth-network-error", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "4.4", - "auth": true, - "serverless": "forbid", - "topologies": [ - "single", - "replicaset", - "sharded" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "setupClient", - "useMultipleMongoses": false - } - } - ], - "initialData": [ - { - "collectionName": "auth-network-error", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ], - "tests": [ - { - "description": "Reset server and pool after network error during authentication", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "setupClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "saslContinue" - ], - "closeConnection": true, - "appName": "authNetworkErrorTest" - } - } - } - }, - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent", - "serverDescriptionChangedEvent", - "poolClearedEvent" - ], - "uriOptions": { - "retryWrites": false, - "appname": "authNetworkErrorTest" - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "sdam-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "auth-network-error" - } - } - ] - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 3 - }, - { - "_id": 4 - } - ] - }, - "expectError": { - "isError": true - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 5 - }, - { - "_id": 6 - } - ] - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "auth-network-error", - "documents": [ - { - "_id": 5 - }, - { - "_id": 6 - } - ] - }, - "commandName": "insert", - "databaseName": "sdam-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "auth-network-error", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - }, - { - "_id": 5 - }, - { - "_id": 6 - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/auth-network-error.yml b/testdata/server-discovery-and-monitoring/unified/auth-network-error.yml deleted file mode 100644 index cdf77c56df..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/auth-network-error.yml +++ /dev/null @@ -1,132 +0,0 @@ ---- -description: auth-network-error - -schemaVersion: "1.4" - -runOnRequirements: - # failCommand appName requirements - - minServerVersion: "4.4" - auth: true - serverless: forbid - topologies: [ single, replicaset, sharded ] - -createEntities: - - client: - id: &setupClient setupClient - useMultipleMongoses: false - -initialData: &initialData - - collectionName: &collectionName auth-network-error - databaseName: &databaseName sdam-tests - documents: - - _id: 1 - - _id: 2 - -tests: - - description: Reset server and pool after network error during authentication - operations: - - name: failPoint - object: testRunner - arguments: - client: *setupClient - failPoint: - configureFailPoint: failCommand - mode: - times: 1 - data: - failCommands: - - saslContinue - closeConnection: true - appName: authNetworkErrorTest - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - serverDescriptionChangedEvent - - poolClearedEvent - uriOptions: - retryWrites: false - appname: authNetworkErrorTest - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: insertMany - object: *collection - arguments: - documents: - - _id: 3 - - _id: 4 - expectError: - isError: true - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - # Perform another operation to ensure the node is rediscovered. - - name: insertMany - object: *collection - arguments: - documents: - - _id: 5 - - _id: 6 - # Assert the server was marked Unknown and pool was cleared exactly once. - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - expectEvents: - # Note: The first insert command is never attempted because connection - # checkout fails. - - client: *client - eventType: command - events: - - commandStartedEvent: - command: - insert: auth-network-error - documents: - - _id: 5 - - _id: 6 - commandName: insert - databaseName: *databaseName - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - _id: 1 - - _id: 2 - - _id: 5 - - _id: 6 diff --git a/testdata/server-discovery-and-monitoring/unified/auth-network-timeout-error.json b/testdata/server-discovery-and-monitoring/unified/auth-network-timeout-error.json deleted file mode 100644 index 3cf9576eba..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/auth-network-timeout-error.json +++ /dev/null @@ -1,233 +0,0 @@ -{ - "description": "auth-network-timeout-error", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "4.4", - "auth": true, - "serverless": "forbid", - "topologies": [ - "single", - "replicaset", - "sharded" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "setupClient", - "useMultipleMongoses": false - } - } - ], - "initialData": [ - { - "collectionName": "auth-network-timeout-error", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ], - "tests": [ - { - "description": "Reset server and pool after network timeout error during authentication", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "setupClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "saslContinue" - ], - "blockConnection": true, - "blockTimeMS": 500, - "appName": "authNetworkTimeoutErrorTest" - } - } - } - }, - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent", - "serverDescriptionChangedEvent", - "poolClearedEvent" - ], - "uriOptions": { - "retryWrites": false, - "appname": "authNetworkTimeoutErrorTest", - "connectTimeoutMS": 250, - "socketTimeoutMS": 250 - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "sdam-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "auth-network-timeout-error" - } - } - ] - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 3 - }, - { - "_id": 4 - } - ] - }, - "expectError": { - "isError": true - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 5 - }, - { - "_id": 6 - } - ] - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "auth-network-timeout-error", - "documents": [ - { - "_id": 5 - }, - { - "_id": 6 - } - ] - }, - "commandName": "insert", - "databaseName": "sdam-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "auth-network-timeout-error", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - }, - { - "_id": 5 - }, - { - "_id": 6 - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/auth-network-timeout-error.yml b/testdata/server-discovery-and-monitoring/unified/auth-network-timeout-error.yml deleted file mode 100644 index 49b91d8373..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/auth-network-timeout-error.yml +++ /dev/null @@ -1,138 +0,0 @@ ---- -description: auth-network-timeout-error - -schemaVersion: "1.4" - -runOnRequirements: - # failCommand appName requirements - - minServerVersion: "4.4" - auth: true - serverless: forbid - topologies: [ single, replicaset, sharded ] - -createEntities: - - client: - id: &setupClient setupClient - useMultipleMongoses: false - -initialData: &initialData - - collectionName: &collectionName auth-network-timeout-error - databaseName: &databaseName sdam-tests - documents: - - _id: 1 - - _id: 2 - -tests: - - description: Reset server and pool after network timeout error during authentication - operations: - - name: failPoint - object: testRunner - arguments: - client: *setupClient - failPoint: - configureFailPoint: failCommand - mode: - times: 1 - data: - failCommands: - - saslContinue - blockConnection: true - blockTimeMS: 500 - appName: authNetworkTimeoutErrorTest - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - serverDescriptionChangedEvent - - poolClearedEvent - uriOptions: - retryWrites: false - appname: authNetworkTimeoutErrorTest - # Set a short connect/socket timeout to ensure the fail point causes the - # connection establishment to timeout. - connectTimeoutMS: 250 - socketTimeoutMS: 250 - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: insertMany - object: *collection - arguments: - documents: - - _id: 3 - - _id: 4 - expectError: - isError: true - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - # Perform another operation to ensure the node is rediscovered. - - name: insertMany - object: *collection - arguments: - documents: - - _id: 5 - - _id: 6 - # Assert the server was marked Unknown and pool was cleared exactly once. - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - expectEvents: - # Note: The first insert command is never attempted because connection - # checkout fails. - - client: *client - eventType: command - events: - - commandStartedEvent: - command: - insert: auth-network-timeout-error - documents: - - _id: 5 - - _id: 6 - commandName: insert - databaseName: *databaseName - - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - _id: 1 - - _id: 2 - - _id: 5 - - _id: 6 diff --git a/testdata/server-discovery-and-monitoring/unified/auth-shutdown-error.json b/testdata/server-discovery-and-monitoring/unified/auth-shutdown-error.json deleted file mode 100644 index b9e503af66..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/auth-shutdown-error.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "description": "auth-shutdown-error", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "4.4", - "auth": true, - "serverless": "forbid", - "topologies": [ - "single", - "replicaset", - "sharded" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "setupClient", - "useMultipleMongoses": false - } - } - ], - "initialData": [ - { - "collectionName": "auth-shutdown-error", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ], - "tests": [ - { - "description": "Reset server and pool after shutdown error during authentication", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "setupClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "saslContinue" - ], - "appName": "authShutdownErrorTest", - "errorCode": 91 - } - } - } - }, - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent", - "serverDescriptionChangedEvent", - "poolClearedEvent" - ], - "uriOptions": { - "retryWrites": false, - "appname": "authShutdownErrorTest" - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "sdam-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "auth-shutdown-error" - } - } - ] - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 3 - }, - { - "_id": 4 - } - ] - }, - "expectError": { - "isError": true - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 5 - }, - { - "_id": 6 - } - ] - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "auth-shutdown-error", - "documents": [ - { - "_id": 5 - }, - { - "_id": 6 - } - ] - }, - "commandName": "insert", - "databaseName": "sdam-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "auth-shutdown-error", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - }, - { - "_id": 5 - }, - { - "_id": 6 - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/auth-shutdown-error.yml b/testdata/server-discovery-and-monitoring/unified/auth-shutdown-error.yml deleted file mode 100644 index f0bb4d17df..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/auth-shutdown-error.yml +++ /dev/null @@ -1,133 +0,0 @@ ---- -description: auth-shutdown-error - -schemaVersion: "1.4" - -runOnRequirements: - # failCommand appName requirements - - minServerVersion: "4.4" - auth: true - serverless: forbid - topologies: [ single, replicaset, sharded ] - -createEntities: - - client: - id: &setupClient setupClient - useMultipleMongoses: false - -initialData: &initialData - - collectionName: &collectionName auth-shutdown-error - databaseName: &databaseName sdam-tests - documents: - - _id: 1 - - _id: 2 - -tests: - - description: Reset server and pool after shutdown error during authentication - operations: - - name: failPoint - object: testRunner - arguments: - client: *setupClient - failPoint: - configureFailPoint: failCommand - mode: - times: 1 - data: - failCommands: - - saslContinue - appName: authShutdownErrorTest - errorCode: 91 - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - serverDescriptionChangedEvent - - poolClearedEvent - uriOptions: - retryWrites: false - appname: authShutdownErrorTest - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: insertMany - object: *collection - arguments: - documents: - - _id: 3 - - _id: 4 - expectError: - isError: true - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - # Perform another operation to ensure the node is rediscovered. - - name: insertMany - object: *collection - arguments: - documents: - - _id: 5 - - _id: 6 - # Assert the server was marked Unknown and pool was cleared exactly once. - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - expectEvents: - # Note: The first insert command is never attempted because connection - # checkout fails. - - client: *client - eventType: command - events: - - commandStartedEvent: - command: - insert: auth-shutdown-error - documents: - - _id: 5 - - _id: 6 - commandName: insert - databaseName: *databaseName - - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - _id: 1 - - _id: 2 - - _id: 5 - - _id: 6 diff --git a/testdata/server-discovery-and-monitoring/unified/cancel-server-check.json b/testdata/server-discovery-and-monitoring/unified/cancel-server-check.json deleted file mode 100644 index a60ccfcb41..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/cancel-server-check.json +++ /dev/null @@ -1,201 +0,0 @@ -{ - "description": "cancel-server-check", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "4.0", - "topologies": [ - "replicaset" - ], - "serverless": "forbid" - }, - { - "minServerVersion": "4.2", - "topologies": [ - "sharded" - ], - "serverless": "forbid" - } - ], - "createEntities": [ - { - "client": { - "id": "setupClient", - "useMultipleMongoses": false - } - } - ], - "initialData": [ - { - "collectionName": "cancel-server-check", - "databaseName": "sdam-tests", - "documents": [] - } - ], - "tests": [ - { - "description": "Cancel server check", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeEvents": [ - "serverDescriptionChangedEvent", - "poolClearedEvent" - ], - "uriOptions": { - "retryWrites": true, - "heartbeatFrequencyMS": 10000, - "serverSelectionTimeoutMS": 5000, - "appname": "cancelServerCheckTest" - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "sdam-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "cancel-server-check" - } - } - ] - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 1 - } - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "closeConnection": true - } - }, - "client": "setupClient" - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 2 - } - }, - "expectResult": { - "insertedId": 2 - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 3 - } - }, - "expectResult": { - "insertedId": 3 - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - } - ], - "outcome": [ - { - "collectionName": "cancel-server-check", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - }, - { - "_id": 3 - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/cancel-server-check.yml b/testdata/server-discovery-and-monitoring/unified/cancel-server-check.yml deleted file mode 100644 index af46792546..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/cancel-server-check.yml +++ /dev/null @@ -1,143 +0,0 @@ ---- -description: cancel-server-check - -schemaVersion: "1.4" - -runOnRequirements: - # General failCommand requirements (this file does not use appName - # with failCommand). - - minServerVersion: "4.0" - topologies: - - replicaset - serverless: forbid - - minServerVersion: "4.2" - topologies: - - sharded - serverless: forbid - -createEntities: - - client: - id: &setupClient setupClient - useMultipleMongoses: false - -initialData: &initialData - - collectionName: &collectionName cancel-server-check - databaseName: &databaseName sdam-tests - documents: [] - -tests: - - description: Cancel server check - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - useMultipleMongoses: false - observeEvents: - - serverDescriptionChangedEvent - - poolClearedEvent - uriOptions: - retryWrites: true - heartbeatFrequencyMS: 10000 - # Server selection timeout MUST be less than heartbeatFrequencyMS for - # this test. This setting ensures that the retried insert will fail - # after 5 seconds if the driver does not properly cancel the in progress - # check. - serverSelectionTimeoutMS: 5000 - appname: cancelServerCheckTest - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - # Perform an operation to ensure the node is discovered. - - name: insertOne - object: *collection - arguments: - document: - _id: 1 - # Configure the next inserts to fail with a non-timeout network error. - # This should: - # 1) Mark the server Unknown - # 2) Clear the connection pool - # 3) Cancel the in progress hello or legacy hello check and close the Monitor - # connection - # 4) The write will be then we retried, server selection will request an - # immediate check, and block for ~500ms until the next Monitor check - # proceeds. - # 5) The write will succeed on the second attempt. - - name: failPoint - object: testRunner - arguments: - failPoint: - configureFailPoint: failCommand - mode: - times: 1 - data: - failCommands: - - insert - closeConnection: true - client: *setupClient - - name: insertOne - object: *collection - arguments: - document: - _id: 2 - expectResult: - insertedId: 2 - # The first error should mark the server Unknown and then clear the pool. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - # Perform another operation to ensure the node still selectable. - - name: insertOne - object: *collection - arguments: - document: - _id: 3 - expectResult: - insertedId: 3 - # Assert the server was marked Unknown and pool was cleared exactly once. - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - - # Order of operations is non-deterministic so we cannot check events. - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - _id: 1 - - _id: 2 - - _id: 3 diff --git a/testdata/server-discovery-and-monitoring/unified/connectTimeoutMS.json b/testdata/server-discovery-and-monitoring/unified/connectTimeoutMS.json deleted file mode 100644 index d3e860a9cb..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/connectTimeoutMS.json +++ /dev/null @@ -1,221 +0,0 @@ -{ - "description": "connectTimeoutMS", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "4.4", - "serverless": "forbid", - "topologies": [ - "single", - "replicaset", - "sharded" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "setupClient", - "useMultipleMongoses": false - } - } - ], - "initialData": [ - { - "collectionName": "connectTimeoutMS", - "databaseName": "sdam-tests", - "documents": [] - } - ], - "tests": [ - { - "description": "connectTimeoutMS=0", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeEvents": [ - "commandStartedEvent", - "serverDescriptionChangedEvent", - "poolClearedEvent" - ], - "uriOptions": { - "retryWrites": false, - "connectTimeoutMS": 0, - "heartbeatFrequencyMS": 500, - "appname": "connectTimeoutMS=0" - }, - "useMultipleMongoses": false - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "sdam-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "connectTimeoutMS" - } - } - ] - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "hello", - "isMaster" - ], - "appName": "connectTimeoutMS=0", - "blockConnection": true, - "blockTimeMS": 550 - } - }, - "client": "setupClient" - } - }, - { - "name": "wait", - "object": "testRunner", - "arguments": { - "ms": 750 - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 3 - }, - { - "_id": 4 - } - ] - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 0 - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 0 - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "connectTimeoutMS", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - }, - "commandName": "insert", - "databaseName": "sdam-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "insert": "connectTimeoutMS", - "documents": [ - { - "_id": 3 - }, - { - "_id": 4 - } - ] - }, - "commandName": "insert", - "databaseName": "sdam-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "connectTimeoutMS", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - }, - { - "_id": 3 - }, - { - "_id": 4 - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/connectTimeoutMS.yml b/testdata/server-discovery-and-monitoring/unified/connectTimeoutMS.yml deleted file mode 100644 index 7c610623eb..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/connectTimeoutMS.yml +++ /dev/null @@ -1,130 +0,0 @@ ---- -description: connectTimeoutMS - -schemaVersion: "1.4" - -runOnRequirements: - # failCommand appName requirements - - minServerVersion: "4.4" - serverless: forbid - topologies: [ single, replicaset, sharded ] - -createEntities: - - client: - id: &setupClient setupClient - useMultipleMongoses: false - -initialData: &initialData - - collectionName: &collectionName connectTimeoutMS - databaseName: &databaseName sdam-tests - documents: [] - -tests: - - description: connectTimeoutMS=0 - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - observeEvents: - - commandStartedEvent - - serverDescriptionChangedEvent - - poolClearedEvent - uriOptions: - retryWrites: false - connectTimeoutMS: 0 - heartbeatFrequencyMS: 500 - appname: connectTimeoutMS=0 - useMultipleMongoses: false - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - # Perform an operation to ensure the node is discovered. - - name: insertMany - object: *collection - arguments: - documents: - - _id: 1 - - _id: 2 - # Block the next streaming hello check for longer than - # heartbeatFrequencyMS to ensure that the connection timeout remains - # unlimited. - - name: failPoint - object: testRunner - arguments: - failPoint: - configureFailPoint: failCommand - mode: - times: 2 - data: - failCommands: - - hello - - isMaster - appName: connectTimeoutMS=0 - blockConnection: true - blockTimeMS: 550 - client: *setupClient - - name: wait - object: testRunner - arguments: - ms: 750 - # Perform an operation to ensure the node is still selectable. - - name: insertMany - object: *collection - arguments: - documents: - - _id: 3 - - _id: 4 - # Assert that the server was never marked Unknown and the pool was never - # cleared. - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 0 - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 0 - expectEvents: - - client: *client - eventType: command - events: - - commandStartedEvent: - command: - insert: connectTimeoutMS - documents: - - _id: 1 - - _id: 2 - commandName: insert - databaseName: *databaseName - - commandStartedEvent: - command: - insert: connectTimeoutMS - documents: - - _id: 3 - - _id: 4 - commandName: insert - databaseName: *databaseName - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - _id: 1 - - _id: 2 - - _id: 3 - - _id: 4 diff --git a/testdata/server-discovery-and-monitoring/unified/find-network-error.json b/testdata/server-discovery-and-monitoring/unified/find-network-error.json deleted file mode 100644 index c1b6db40ca..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/find-network-error.json +++ /dev/null @@ -1,234 +0,0 @@ -{ - "description": "find-network-error", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "4.4", - "serverless": "forbid", - "topologies": [ - "single", - "replicaset", - "sharded" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "setupClient", - "useMultipleMongoses": false - } - } - ], - "initialData": [ - { - "collectionName": "find-network-error", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ], - "tests": [ - { - "description": "Reset server and pool after network error on find", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "setupClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "closeConnection": true, - "appName": "findNetworkErrorTest" - } - } - } - }, - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent", - "serverDescriptionChangedEvent", - "poolClearedEvent" - ], - "uriOptions": { - "retryWrites": false, - "retryReads": false, - "appname": "findNetworkErrorTest" - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "sdam-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "find-network-error" - } - } - ] - } - }, - { - "name": "find", - "object": "collection", - "arguments": { - "filter": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 5 - }, - { - "_id": 6 - } - ] - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "find-network-error" - }, - "commandName": "find", - "databaseName": "sdam-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "insert": "find-network-error", - "documents": [ - { - "_id": 5 - }, - { - "_id": 6 - } - ] - }, - "commandName": "insert", - "databaseName": "sdam-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "find-network-error", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - }, - { - "_id": 5 - }, - { - "_id": 6 - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/find-network-error.yml b/testdata/server-discovery-and-monitoring/unified/find-network-error.yml deleted file mode 100644 index f97d799a2a..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/find-network-error.yml +++ /dev/null @@ -1,135 +0,0 @@ ---- -description: find-network-error - -schemaVersion: "1.4" - -runOnRequirements: - # failCommand appName requirements - - minServerVersion: "4.4" - serverless: forbid - topologies: [ single, replicaset, sharded ] - -createEntities: - - client: - id: &setupClient setupClient - useMultipleMongoses: false - -initialData: &initialData - - collectionName: &collectionName find-network-error - databaseName: &databaseName sdam-tests - documents: - - _id: 1 - - _id: 2 - -tests: - - description: Reset server and pool after network error on find - operations: - - name: failPoint - object: testRunner - arguments: - client: *setupClient - failPoint: - configureFailPoint: failCommand - mode: - times: 1 - data: - failCommands: - - find - closeConnection: true - appName: findNetworkErrorTest - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - serverDescriptionChangedEvent - - poolClearedEvent - uriOptions: - retryWrites: false - retryReads: false - appname: findNetworkErrorTest - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: find - object: *collection - arguments: - filter: - _id: 1 - expectError: - isError: true - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - # Perform another operation to ensure the node is rediscovered. - - name: insertMany - object: *collection - arguments: - documents: - - _id: 5 - - _id: 6 - # Assert the server was marked Unknown and pool was cleared exactly once. - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - expectEvents: - - client: *client - eventType: command - events: - - commandStartedEvent: - command: - find: find-network-error - commandName: find - databaseName: *databaseName - - commandStartedEvent: - command: - insert: find-network-error - documents: - - _id: 5 - - _id: 6 - commandName: insert - databaseName: *databaseName - - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - _id: 1 - - _id: 2 - - _id: 5 - - _id: 6 diff --git a/testdata/server-discovery-and-monitoring/unified/find-network-timeout-error.json b/testdata/server-discovery-and-monitoring/unified/find-network-timeout-error.json deleted file mode 100644 index e5ac9f21aa..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/find-network-timeout-error.json +++ /dev/null @@ -1,199 +0,0 @@ -{ - "description": "find-network-timeout-error", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "4.4", - "serverless": "forbid", - "topologies": [ - "single", - "replicaset", - "sharded" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "setupClient", - "useMultipleMongoses": false - } - } - ], - "initialData": [ - { - "collectionName": "find-network-timeout-error", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ], - "tests": [ - { - "description": "Ignore network timeout error on find", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "setupClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "blockConnection": true, - "blockTimeMS": 500, - "appName": "findNetworkTimeoutErrorTest" - } - } - } - }, - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent", - "serverDescriptionChangedEvent", - "poolClearedEvent" - ], - "uriOptions": { - "retryWrites": false, - "retryReads": false, - "appname": "findNetworkTimeoutErrorTest", - "socketTimeoutMS": 250 - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "sdam-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "find-network-timeout-error" - } - } - ] - } - }, - { - "name": "find", - "object": "collection", - "arguments": { - "filter": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 3 - } - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 0 - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 0 - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "find-network-timeout-error" - }, - "commandName": "find", - "databaseName": "sdam-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "insert": "find-network-timeout-error", - "documents": [ - { - "_id": 3 - } - ] - }, - "commandName": "insert", - "databaseName": "sdam-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "find-network-timeout-error", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - }, - { - "_id": 3 - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/find-network-timeout-error.yml b/testdata/server-discovery-and-monitoring/unified/find-network-timeout-error.yml deleted file mode 100644 index e00b7a2be0..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/find-network-timeout-error.yml +++ /dev/null @@ -1,119 +0,0 @@ ---- -description: find-network-timeout-error - -schemaVersion: "1.4" - -runOnRequirements: - # failCommand appName requirements - - minServerVersion: "4.4" - serverless: forbid - topologies: [ single, replicaset, sharded ] - -createEntities: - - client: - id: &setupClient setupClient - useMultipleMongoses: false - -initialData: &initialData - - collectionName: &collectionName find-network-timeout-error - databaseName: &databaseName sdam-tests - documents: - - _id: 1 - - _id: 2 - -tests: - - description: Ignore network timeout error on find - operations: - - name: failPoint - object: testRunner - arguments: - client: *setupClient - failPoint: - configureFailPoint: failCommand - mode: - times: 1 - data: - failCommands: - - find - blockConnection: true - blockTimeMS: 500 - appName: findNetworkTimeoutErrorTest - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - serverDescriptionChangedEvent - - poolClearedEvent - uriOptions: - retryWrites: false - retryReads: false - appname: findNetworkTimeoutErrorTest - # Set a short socket timeout to ensure the find command times out. - socketTimeoutMS: 250 - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: find - object: *collection - arguments: - filter: - _id: 1 - expectError: - isError: true - # Perform another operation to ensure the node is still usable. - - name: insertOne - object: *collection - arguments: - document: - _id: 3 - # Assert the server was not marked Unknown and the pool was not cleared. - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 0 - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 0 - expectEvents: - - client: *client - eventType: command - events: - - commandStartedEvent: - command: - find: find-network-timeout-error - commandName: find - databaseName: *databaseName - - commandStartedEvent: - command: - insert: find-network-timeout-error - documents: - - _id: 3 - commandName: insert - databaseName: *databaseName - - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - _id: 1 - - _id: 2 - - _id: 3 diff --git a/testdata/server-discovery-and-monitoring/unified/find-shutdown-error.json b/testdata/server-discovery-and-monitoring/unified/find-shutdown-error.json deleted file mode 100644 index 6e5a2cac05..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/find-shutdown-error.json +++ /dev/null @@ -1,251 +0,0 @@ -{ - "description": "find-shutdown-error", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "4.4", - "serverless": "forbid", - "topologies": [ - "single", - "replicaset", - "sharded" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "setupClient", - "useMultipleMongoses": false - } - } - ], - "initialData": [ - { - "collectionName": "find-shutdown-error", - "databaseName": "sdam-tests", - "documents": [] - } - ], - "tests": [ - { - "description": "Concurrent shutdown error on find", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "uriOptions": { - "retryWrites": false, - "retryReads": false, - "heartbeatFrequencyMS": 500, - "appname": "shutdownErrorFindTest" - }, - "observeEvents": [ - "serverDescriptionChangedEvent", - "poolClearedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "sdam-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "find-shutdown-error" - } - } - ] - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 1 - } - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "find" - ], - "appName": "shutdownErrorFindTest", - "errorCode": 91, - "blockConnection": true, - "blockTimeMS": 500 - } - }, - "client": "setupClient" - } - }, - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "thread": { - "id": "thread0" - } - }, - { - "thread": { - "id": "thread1" - } - } - ] - } - }, - { - "name": "runOnThread", - "object": "testRunner", - "arguments": { - "thread": "thread0", - "operation": { - "name": "find", - "object": "collection", - "arguments": { - "filter": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - } - } - }, - { - "name": "runOnThread", - "object": "testRunner", - "arguments": { - "thread": "thread1", - "operation": { - "name": "find", - "object": "collection", - "arguments": { - "filter": { - "_id": 1 - } - }, - "expectError": { - "isError": true - } - } - } - }, - { - "name": "waitForThread", - "object": "testRunner", - "arguments": { - "thread": "thread0" - } - }, - { - "name": "waitForThread", - "object": "testRunner", - "arguments": { - "thread": "thread1" - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 4 - } - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - } - ], - "outcome": [ - { - "collectionName": "find-shutdown-error", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 4 - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/find-shutdown-error.yml b/testdata/server-discovery-and-monitoring/unified/find-shutdown-error.yml deleted file mode 100644 index 395215244b..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/find-shutdown-error.yml +++ /dev/null @@ -1,163 +0,0 @@ ---- -description: find-shutdown-error - -schemaVersion: "1.4" - -runOnRequirements: - # failCommand appName requirements - - minServerVersion: "4.4" - serverless: forbid - topologies: [ single, replicaset, sharded ] - -createEntities: - - client: - id: &setupClient setupClient - useMultipleMongoses: false - -initialData: &initialData - - collectionName: &collectionName find-shutdown-error - databaseName: &databaseName sdam-tests - documents: [] - -tests: - - description: Concurrent shutdown error on find - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - useMultipleMongoses: false - uriOptions: - retryWrites: false - retryReads: false - heartbeatFrequencyMS: 500 - appname: shutdownErrorFindTest - observeEvents: - - serverDescriptionChangedEvent - - poolClearedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - # Perform an operation to ensure the node is discovered. - - name: insertOne - object: *collection - arguments: - document: - _id: 1 - # Configure the next two finds to fail with a non-timeout shutdown - # errors. Block the connection for 500ms to ensure both operations check - # out connections from the same pool generation. - - name: failPoint - object: testRunner - arguments: - failPoint: - configureFailPoint: failCommand - mode: - times: 2 - data: - failCommands: - - find - appName: shutdownErrorFindTest - errorCode: 91 - blockConnection: true - blockTimeMS: 500 - client: *setupClient - # Start threads. - - name: createEntities - object: testRunner - arguments: - entities: - - thread: - id: &thread0 thread0 - - thread: - id: &thread1 thread1 - # Perform concurrent find operations. Both fail with shutdown errors. - - name: runOnThread - object: testRunner - arguments: - thread: *thread0 - operation: - name: find - object: *collection - arguments: - filter: - _id: 1 - expectError: - isError: true - - name: runOnThread - object: testRunner - arguments: - thread: *thread1 - operation: - name: find - object: *collection - arguments: - filter: - _id: 1 - expectError: - isError: true - # Stop threads. - - name: waitForThread - object: testRunner - arguments: - thread: *thread0 - - name: waitForThread - object: testRunner - arguments: - thread: *thread1 - # The first shutdown error should mark the server Unknown and then clear - # the pool. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - # Perform an operation to ensure the node is rediscovered. - - name: insertOne - object: *collection - arguments: - document: - _id: 4 - # Assert the server was marked Unknown and pool was cleared exactly once. - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - - # Order of operations is non-deterministic so we cannot check events. - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - _id: 1 - - _id: 4 diff --git a/testdata/server-discovery-and-monitoring/unified/hello-command-error.json b/testdata/server-discovery-and-monitoring/unified/hello-command-error.json deleted file mode 100644 index 87958cb2c0..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/hello-command-error.json +++ /dev/null @@ -1,376 +0,0 @@ -{ - "description": "hello-command-error", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "4.4.7", - "serverless": "forbid", - "topologies": [ - "single", - "replicaset", - "sharded" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "setupClient", - "useMultipleMongoses": false - } - } - ], - "initialData": [ - { - "collectionName": "hello-command-error", - "databaseName": "sdam-tests", - "documents": [] - } - ], - "tests": [ - { - "description": "Command error on Monitor handshake", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "setupClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "hello", - "isMaster" - ], - "appName": "commandErrorHandshakeTest", - "closeConnection": false, - "errorCode": 91 - } - } - } - }, - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeEvents": [ - "serverDescriptionChangedEvent", - "poolClearedEvent", - "commandStartedEvent" - ], - "uriOptions": { - "retryWrites": false, - "connectTimeoutMS": 250, - "heartbeatFrequencyMS": 500, - "appname": "commandErrorHandshakeTest" - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "sdam-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "hello-command-error" - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "hello-command-error", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - }, - "commandName": "insert", - "databaseName": "sdam-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "hello-command-error", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ] - }, - { - "description": "Command error on Monitor check", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent", - "serverDescriptionChangedEvent", - "poolClearedEvent" - ], - "uriOptions": { - "retryWrites": false, - "connectTimeoutMS": 1000, - "heartbeatFrequencyMS": 500, - "appname": "commandErrorCheckTest" - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "sdam-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "hello-command-error" - } - } - ] - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "hello", - "isMaster" - ], - "appName": "commandErrorCheckTest", - "closeConnection": false, - "blockConnection": true, - "blockTimeMS": 750, - "errorCode": 91 - } - }, - "client": "setupClient" - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 3 - }, - { - "_id": 4 - } - ] - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "hello-command-error", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - }, - "commandName": "insert", - "databaseName": "sdam-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "insert": "hello-command-error", - "documents": [ - { - "_id": 3 - }, - { - "_id": 4 - } - ] - }, - "commandName": "insert", - "databaseName": "sdam-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "hello-command-error", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - }, - { - "_id": 3 - }, - { - "_id": 4 - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/hello-command-error.yml b/testdata/server-discovery-and-monitoring/unified/hello-command-error.yml deleted file mode 100644 index 1c9c079220..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/hello-command-error.yml +++ /dev/null @@ -1,233 +0,0 @@ ---- -description: hello-command-error - -schemaVersion: "1.4" - -runOnRequirements: - # Require SERVER-49336 for failCommand + appName on the initial handshake. - - minServerVersion: "4.4.7" - serverless: forbid - topologies: [ single, replicaset, sharded ] - -createEntities: - - client: - id: &setupClient setupClient - useMultipleMongoses: false - -initialData: &initialData - - collectionName: &collectionName hello-command-error - databaseName: &databaseName sdam-tests - documents: [] - -tests: - - description: Command error on Monitor handshake - operations: - # Configure the next streaming hello check to fail with a command error. - # Use "times: 4" to increase the probability that the Monitor check fails - # since the RTT hello may trigger this failpoint one or many times as - # well. - - name: failPoint - object: testRunner - arguments: - client: *setupClient - failPoint: - configureFailPoint: failCommand - mode: - times: 4 - data: - failCommands: - - hello - - isMaster - appName: commandErrorHandshakeTest - closeConnection: false - errorCode: 91 - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - useMultipleMongoses: false - observeEvents: - - serverDescriptionChangedEvent - - poolClearedEvent - - commandStartedEvent - uriOptions: - retryWrites: false - connectTimeoutMS: 250 - heartbeatFrequencyMS: 500 - appname: commandErrorHandshakeTest - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - # The command error on the initial handshake should mark the server - # Unknown (emitting a ServerDescriptionChangedEvent) and clear the pool. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - # Perform an operation to ensure the node is discovered. - - name: insertMany - object: *collection - arguments: - documents: - - _id: 1 - - _id: 2 - # We cannot assert the server was marked Unknown and pool was cleared an - # exact number of times because the RTT hello may or may not have - # triggered this failpoint as well. - - expectEvents: - - client: *client - eventType: command - events: - - commandStartedEvent: - command: - insert: hello-command-error - documents: - - _id: 1 - - _id: 2 - commandName: insert - databaseName: *databaseName - - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - _id: 1 - - _id: 2 - - - description: Command error on Monitor check - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - serverDescriptionChangedEvent - - poolClearedEvent - uriOptions: - retryWrites: false - connectTimeoutMS: 1000 - heartbeatFrequencyMS: 500 - appname: commandErrorCheckTest - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - # Perform an operation to ensure the node is discovered. - - name: insertMany - object: *collection - arguments: - documents: - - _id: 1 - - _id: 2 - # Configure the next streaming hello check to fail with a command - # error. - # Use times: 2 so that the RTT hello is blocked as well. - - name: failPoint - object: testRunner - arguments: - failPoint: - configureFailPoint: failCommand - mode: - times: 2 - data: - failCommands: - - hello - - isMaster - appName: commandErrorCheckTest - closeConnection: false - blockConnection: true - blockTimeMS: 750 - errorCode: 91 - client: *setupClient - # The command error on the next check should mark the server Unknown and - # clear the pool. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - # Perform an operation to ensure the node is rediscovered. - - name: insertMany - object: *collection - arguments: - documents: - - _id: 3 - - _id: 4 - # Assert the server was marked Unknown and pool was cleared exactly once. - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - expectEvents: - - client: *client - eventType: command - events: - - commandStartedEvent: - command: - insert: hello-command-error - documents: - - _id: 1 - - _id: 2 - commandName: insert - databaseName: *databaseName - - commandStartedEvent: - command: - insert: hello-command-error - documents: - - _id: 3 - - _id: 4 - commandName: insert - databaseName: *databaseName - - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - _id: 1 - - _id: 2 - - _id: 3 - - _id: 4 diff --git a/testdata/server-discovery-and-monitoring/unified/hello-network-error.json b/testdata/server-discovery-and-monitoring/unified/hello-network-error.json deleted file mode 100644 index 15ed2b605e..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/hello-network-error.json +++ /dev/null @@ -1,346 +0,0 @@ -{ - "description": "hello-network-error", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "4.4.7", - "serverless": "forbid", - "topologies": [ - "single", - "replicaset", - "sharded" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "setupClient", - "useMultipleMongoses": false - } - } - ], - "initialData": [ - { - "collectionName": "hello-network-error", - "databaseName": "sdam-tests", - "documents": [] - } - ], - "tests": [ - { - "description": "Network error on Monitor handshake", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "setupClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "hello", - "isMaster" - ], - "appName": "networkErrorHandshakeTest", - "closeConnection": true - } - } - } - }, - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent", - "serverDescriptionChangedEvent", - "poolClearedEvent" - ], - "uriOptions": { - "retryWrites": false, - "connectTimeoutMS": 250, - "heartbeatFrequencyMS": 500, - "appname": "networkErrorHandshakeTest" - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "sdam-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "hello-network-error" - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "hello-network-error", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - }, - "commandName": "insert", - "databaseName": "sdam-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "hello-network-error", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ] - }, - { - "description": "Network error on Monitor check", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent", - "serverDescriptionChangedEvent", - "poolClearedEvent" - ], - "uriOptions": { - "retryWrites": false, - "connectTimeoutMS": 250, - "heartbeatFrequencyMS": 500, - "appname": "networkErrorCheckTest" - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "sdam-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "hello-network-error" - } - } - ] - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "hello", - "isMaster" - ], - "appName": "networkErrorCheckTest", - "closeConnection": true - } - }, - "client": "setupClient" - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 3 - }, - { - "_id": 4 - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "hello-network-error", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - }, - "commandName": "insert", - "databaseName": "sdam-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "insert": "hello-network-error", - "documents": [ - { - "_id": 3 - }, - { - "_id": 4 - } - ] - }, - "commandName": "insert", - "databaseName": "sdam-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "hello-network-error", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - }, - { - "_id": 3 - }, - { - "_id": 4 - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/hello-network-error.yml b/testdata/server-discovery-and-monitoring/unified/hello-network-error.yml deleted file mode 100644 index 5f29194fc6..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/hello-network-error.yml +++ /dev/null @@ -1,227 +0,0 @@ ---- -description: hello-network-error - -schemaVersion: "1.4" - -runOnRequirements: - # Require SERVER-49336 for failCommand + appName on the initial handshake. - - minServerVersion: "4.4.7" - serverless: forbid - topologies: [ single, replicaset, sharded ] - -createEntities: - - client: - id: &setupClient setupClient - useMultipleMongoses: false - -initialData: &initialData - - collectionName: &collectionName hello-network-error - databaseName: &databaseName sdam-tests - documents: [] - -tests: - - description: Network error on Monitor handshake - # Configure the initial handshake to fail with a network error. - # Use times: 2 so that the RTT hello fails as well. - operations: - - name: failPoint - object: testRunner - arguments: - client: *setupClient - failPoint: - configureFailPoint: failCommand - mode: - times: 2 - data: - failCommands: - - hello - - isMaster - appName: networkErrorHandshakeTest - closeConnection: true - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - serverDescriptionChangedEvent - - poolClearedEvent - uriOptions: - retryWrites: false - connectTimeoutMS: 250 - heartbeatFrequencyMS: 500 - appname: networkErrorHandshakeTest - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - # The network error on the initial handshake should mark the server - # Unknown (emitting a ServerDescriptionChangedEvent) and clear the pool. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - # Perform an operation to ensure the node is discovered. - - name: insertMany - object: *collection - arguments: - documents: - - _id: 1 - - _id: 2 - # We cannot assert the server was marked Unknown and pool was cleared an - # exact number of times because the RTT hello may or may not have - # triggered this failpoint as well. - - expectEvents: - - client: *client - eventType: command - events: - - commandStartedEvent: - command: - insert: hello-network-error - documents: - - _id: 1 - - _id: 2 - commandName: insert - databaseName: *databaseName - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - _id: 1 - - _id: 2 - - - description: Network error on Monitor check - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - serverDescriptionChangedEvent - - poolClearedEvent - uriOptions: - retryWrites: false - connectTimeoutMS: 250 - heartbeatFrequencyMS: 500 - appname: networkErrorCheckTest - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - # Perform an operation to ensure the node is discovered. - - name: insertMany - object: *collection - arguments: - documents: - - _id: 1 - - _id: 2 - # Configure the next streaming hello check to fail with a non-timeout - # network error. Use "times: 4" to increase the probability that the - # Monitor check fails since the RTT hello may trigger this failpoint one - # or many times as well. - - name: failPoint - object: testRunner - arguments: - failPoint: - configureFailPoint: failCommand - mode: - times: 4 - data: - failCommands: - - hello - - isMaster - appName: networkErrorCheckTest - closeConnection: true - client: *setupClient - # The network error on the next check should mark the server Unknown and - # clear the pool. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - # Perform an operation to ensure the node is rediscovered. - - name: insertMany - object: *collection - arguments: - documents: - - _id: 3 - - _id: 4 - # We cannot assert the server was marked Unknown and pool was cleared an - # exact number of times because the RTT hello may or may not have - # triggered this failpoint as well. - # - name: assertEventCount - # object: testRunner - # arguments: - # client: *client - # event: - # serverDescriptionChangedEvent: - # newDescription: - # type: Unknown - # count: 1 - # - name: assertEventCount - # object: testRunner - # arguments: - # event: - # poolClearedEvent: {} - # count: 1 - expectEvents: - - client: *client - eventType: command - events: - - commandStartedEvent: - command: - insert: hello-network-error - documents: - - _id: 1 - - _id: 2 - commandName: insert - databaseName: *databaseName - - commandStartedEvent: - command: - insert: hello-network-error - documents: - - _id: 3 - - _id: 4 - commandName: insert - databaseName: *databaseName - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - _id: 1 - - _id: 2 - - _id: 3 - - _id: 4 diff --git a/testdata/server-discovery-and-monitoring/unified/hello-timeout.json b/testdata/server-discovery-and-monitoring/unified/hello-timeout.json deleted file mode 100644 index fe7cf4e78d..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/hello-timeout.json +++ /dev/null @@ -1,514 +0,0 @@ -{ - "description": "hello-timeout", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "4.4", - "serverless": "forbid", - "topologies": [ - "single", - "replicaset", - "sharded" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "setupClient", - "useMultipleMongoses": false - } - } - ], - "initialData": [ - { - "collectionName": "hello-timeout", - "databaseName": "sdam-tests", - "documents": [] - } - ], - "tests": [ - { - "description": "Network timeout on Monitor handshake", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "setupClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "hello", - "isMaster" - ], - "appName": "timeoutMonitorHandshakeTest", - "blockConnection": true, - "blockTimeMS": 1000 - } - } - } - }, - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent", - "serverDescriptionChangedEvent", - "poolClearedEvent" - ], - "uriOptions": { - "retryWrites": false, - "connectTimeoutMS": 250, - "heartbeatFrequencyMS": 500, - "appname": "timeoutMonitorHandshakeTest" - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "sdam-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "hello-timeout" - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "hello-timeout", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - }, - "commandName": "insert", - "databaseName": "sdam-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "hello-timeout", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ] - }, - { - "description": "Network timeout on Monitor check", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent", - "serverDescriptionChangedEvent", - "poolClearedEvent" - ], - "uriOptions": { - "retryWrites": false, - "connectTimeoutMS": 750, - "heartbeatFrequencyMS": 500, - "appname": "timeoutMonitorCheckTest" - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "sdam-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "hello-timeout" - } - } - ] - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "hello", - "isMaster" - ], - "appName": "timeoutMonitorCheckTest", - "blockConnection": true, - "blockTimeMS": 1000 - } - }, - "client": "setupClient" - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 3 - }, - { - "_id": 4 - } - ] - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "hello-timeout", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - }, - "commandName": "insert", - "databaseName": "sdam-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "insert": "hello-timeout", - "documents": [ - { - "_id": 3 - }, - { - "_id": 4 - } - ] - }, - "commandName": "insert", - "databaseName": "sdam-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "hello-timeout", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - }, - { - "_id": 3 - }, - { - "_id": 4 - } - ] - } - ] - }, - { - "description": "Driver extends timeout while streaming", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeEvents": [ - "commandStartedEvent", - "serverDescriptionChangedEvent", - "poolClearedEvent" - ], - "uriOptions": { - "retryWrites": false, - "connectTimeoutMS": 250, - "heartbeatFrequencyMS": 500, - "appname": "extendsTimeoutTest" - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "sdam-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "hello-timeout" - } - } - ] - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - }, - { - "name": "wait", - "object": "testRunner", - "arguments": { - "ms": 2000 - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 3 - }, - { - "_id": 4 - } - ] - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 0 - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 0 - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "hello-timeout", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - }, - "commandName": "insert", - "databaseName": "sdam-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "insert": "hello-timeout", - "documents": [ - { - "_id": 3 - }, - { - "_id": 4 - } - ] - }, - "commandName": "insert", - "databaseName": "sdam-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "hello-timeout", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - }, - { - "_id": 3 - }, - { - "_id": 4 - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/hello-timeout.yml b/testdata/server-discovery-and-monitoring/unified/hello-timeout.yml deleted file mode 100644 index 2a3374d1e7..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/hello-timeout.yml +++ /dev/null @@ -1,318 +0,0 @@ ---- -description: hello-timeout - -schemaVersion: "1.4" - -runOnRequirements: - # failCommand appName requirements - - minServerVersion: "4.4" - serverless: forbid - topologies: [ single, replicaset, sharded ] - -createEntities: - - client: - id: &setupClient setupClient - useMultipleMongoses: false - -initialData: &initialData - - collectionName: &collectionName hello-timeout - databaseName: &databaseName sdam-tests - documents: [] - -tests: - - description: Network timeout on Monitor handshake - operations: - # Configure the initial handshake to fail with a timeout. - # Use times: 2 so that the RTT hello is blocked as well. - - name: failPoint - object: testRunner - arguments: - client: *setupClient - failPoint: - configureFailPoint: failCommand - mode: - times: 2 - data: - failCommands: - - hello - - isMaster - appName: timeoutMonitorHandshakeTest - blockConnection: true - blockTimeMS: 1000 - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - serverDescriptionChangedEvent - - poolClearedEvent - uriOptions: - retryWrites: false - connectTimeoutMS: 250 - heartbeatFrequencyMS: 500 - appname: timeoutMonitorHandshakeTest - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - # The network error on the initial handshake should mark the server - # Unknown (emitting a ServerDescriptionChangedEvent) and clear the pool. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - # Perform an operation to ensure the node is discovered. - - name: insertMany - object: *collection - arguments: - documents: - - _id: 1 - - _id: 2 - # We cannot assert the server was marked Unknown and pool was cleared an - # exact number of times because the RTT hello may or may not have - # triggered this failpoint as well. - # - name: assertEventCount - # object: testRunner - # arguments: - # event: ServerMarkedUnknownEvent - # count: 1 - # - name: assertEventCount - # object: testRunner - # arguments: - # event: PoolClearedEvent - # count: 1 - expectEvents: - - client: *client - eventType: command - events: - - commandStartedEvent: - command: - insert: hello-timeout - documents: - - _id: 1 - - _id: 2 - commandName: insert - databaseName: *databaseName - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - _id: 1 - - _id: 2 - - - description: Network timeout on Monitor check - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - useMultipleMongoses: false - observeEvents: - - commandStartedEvent - - serverDescriptionChangedEvent - - poolClearedEvent - uriOptions: - retryWrites: false - connectTimeoutMS: 750 - heartbeatFrequencyMS: 500 - appname: timeoutMonitorCheckTest - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - # Perform an operation to ensure the node is discovered. - - name: insertMany - object: *collection - arguments: - documents: - - _id: 1 - - _id: 2 - # Configure the next streaming hello check to fail with a timeout. - # Use "times: 4" to increase the probability that the Monitor check times - # out since the RTT hello may trigger this failpoint one or many times as - # well. - - name: failPoint - object: testRunner - arguments: - failPoint: - configureFailPoint: failCommand - mode: - times: 4 - data: - failCommands: - - hello - - isMaster - appName: timeoutMonitorCheckTest - blockConnection: true - # blockTimeMS is evaluated after the waiting for heartbeatFrequencyMS server-side, so this value only - # needs to be greater than connectTimeoutMS. The driver will wait for (500+750)ms and the server will - # respond after (500+1000)ms. - blockTimeMS: 1000 - client: *setupClient - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - # The network error on the next check should mark the server Unknown and - # clear the pool. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - # Perform an operation to ensure the node is rediscovered. - - name: insertMany - object: *collection - arguments: - documents: - - _id: 3 - - _id: 4 - # We cannot assert the server was marked Unknown and pool was cleared an - # exact number of times because the RTT hello may have triggered this - # failpoint one or many times as well. - - expectEvents: - - client: *client - eventType: command - events: - - commandStartedEvent: - command: - insert: hello-timeout - documents: - - _id: 1 - - _id: 2 - commandName: insert - databaseName: *databaseName - - commandStartedEvent: - command: - insert: hello-timeout - documents: - - _id: 3 - - _id: 4 - commandName: insert - databaseName: *databaseName - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - _id: 1 - - _id: 2 - - _id: 3 - - _id: 4 - - - description: Driver extends timeout while streaming - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - observeEvents: - - commandStartedEvent - - serverDescriptionChangedEvent - - poolClearedEvent - uriOptions: - retryWrites: false - connectTimeoutMS: 250 - heartbeatFrequencyMS: 500 - appname: extendsTimeoutTest - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - # Perform an operation to ensure the node is discovered. - - name: insertMany - object: *collection - arguments: - documents: - - _id: 1 - - _id: 2 - # Wait for multiple monitor checks to complete. - - name: wait - object: testRunner - arguments: - ms: 2000 - # Perform an operation to ensure the node is still selectable. - - name: insertMany - object: *collection - arguments: - documents: - - _id: 3 - - _id: 4 - # Assert that the server was never marked Unknown and the pool was never - # cleared. - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 0 - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 0 - expectEvents: - - client: *client - eventType: command - events: - - commandStartedEvent: - command: - insert: hello-timeout - documents: - - _id: 1 - - _id: 2 - commandName: insert - databaseName: *databaseName - - commandStartedEvent: - command: - insert: hello-timeout - documents: - - _id: 3 - - _id: 4 - commandName: insert - databaseName: *databaseName - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - _id: 1 - - _id: 2 - - _id: 3 - - _id: 4 diff --git a/testdata/server-discovery-and-monitoring/unified/insert-network-error.json b/testdata/server-discovery-and-monitoring/unified/insert-network-error.json deleted file mode 100644 index bfe41a4cb6..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/insert-network-error.json +++ /dev/null @@ -1,246 +0,0 @@ -{ - "description": "insert-network-error", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "4.4", - "serverless": "forbid", - "topologies": [ - "single", - "replicaset", - "sharded" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "setupClient", - "useMultipleMongoses": false - } - } - ], - "initialData": [ - { - "collectionName": "insert-network-error", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ], - "tests": [ - { - "description": "Reset server and pool after network error on insert", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "setupClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "closeConnection": true, - "appName": "insertNetworkErrorTest" - } - } - } - }, - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeEvents": [ - "commandStartedEvent", - "serverDescriptionChangedEvent", - "poolClearedEvent" - ], - "uriOptions": { - "retryWrites": false, - "appname": "insertNetworkErrorTest" - }, - "useMultipleMongoses": false - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "sdam-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "insert-network-error" - } - } - ] - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 3 - }, - { - "_id": 4 - } - ] - }, - "expectError": { - "isError": true - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 5 - }, - { - "_id": 6 - } - ] - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "insert-network-error", - "documents": [ - { - "_id": 3 - }, - { - "_id": 4 - } - ] - }, - "commandName": "insert", - "databaseName": "sdam-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "insert": "insert-network-error", - "documents": [ - { - "_id": 5 - }, - { - "_id": 6 - } - ] - }, - "commandName": "insert", - "databaseName": "sdam-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "insert-network-error", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - }, - { - "_id": 5 - }, - { - "_id": 6 - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/insert-network-error.yml b/testdata/server-discovery-and-monitoring/unified/insert-network-error.yml deleted file mode 100644 index fcedf54357..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/insert-network-error.yml +++ /dev/null @@ -1,137 +0,0 @@ ---- -description: insert-network-error - -schemaVersion: "1.4" - -runOnRequirements: - # failCommand appName requirements - - minServerVersion: "4.4" - serverless: forbid - topologies: [ single, replicaset, sharded ] - -createEntities: - - client: - id: &setupClient setupClient - useMultipleMongoses: false - -initialData: &initialData - - collectionName: &collectionName insert-network-error - databaseName: &databaseName sdam-tests - documents: - - _id: 1 - - _id: 2 - -tests: - - description: Reset server and pool after network error on insert - operations: - - name: failPoint - object: testRunner - arguments: - client: *setupClient - failPoint: - configureFailPoint: failCommand - mode: - times: 1 - data: - failCommands: - - insert - closeConnection: true - appName: insertNetworkErrorTest - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - observeEvents: - - commandStartedEvent - - serverDescriptionChangedEvent - - poolClearedEvent - uriOptions: - retryWrites: false - appname: insertNetworkErrorTest - useMultipleMongoses: false - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - name: insertMany - object: *collection - arguments: - documents: - - _id: 3 - - _id: 4 - expectError: - isError: true - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - # Perform another operation to ensure the node is rediscovered. - - name: insertMany - object: *collection - arguments: - documents: - - _id: 5 - - _id: 6 - # Assert the server was marked Unknown and pool was cleared exactly once. - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - expectEvents: - - client: *client - eventType: command - events: - - commandStartedEvent: - command: - insert: insert-network-error - documents: - - _id: 3 - - _id: 4 - commandName: insert - databaseName: *databaseName - - commandStartedEvent: - command: - insert: insert-network-error - documents: - - _id: 5 - - _id: 6 - commandName: insert - databaseName: *databaseName - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - _id: 1 - - _id: 2 - - _id: 5 - - _id: 6 diff --git a/testdata/server-discovery-and-monitoring/unified/insert-shutdown-error.json b/testdata/server-discovery-and-monitoring/unified/insert-shutdown-error.json deleted file mode 100644 index af7c6c987a..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/insert-shutdown-error.json +++ /dev/null @@ -1,250 +0,0 @@ -{ - "description": "insert-shutdown-error", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "4.4", - "serverless": "forbid", - "topologies": [ - "single", - "replicaset", - "sharded" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "setupClient", - "useMultipleMongoses": false - } - } - ], - "initialData": [ - { - "collectionName": "insert-shutdown-error", - "databaseName": "sdam-tests", - "documents": [] - } - ], - "tests": [ - { - "description": "Concurrent shutdown error on insert", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "uriOptions": { - "retryWrites": false, - "heartbeatFrequencyMS": 500, - "appname": "shutdownErrorInsertTest" - }, - "observeEvents": [ - "serverDescriptionChangedEvent", - "poolClearedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "sdam-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "insert-shutdown-error" - } - } - ] - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 1 - } - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 2 - }, - "data": { - "failCommands": [ - "insert" - ], - "appName": "shutdownErrorInsertTest", - "errorCode": 91, - "blockConnection": true, - "blockTimeMS": 500 - } - }, - "client": "setupClient" - } - }, - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "thread": { - "id": "thread0" - } - }, - { - "thread": { - "id": "thread1" - } - } - ] - } - }, - { - "name": "runOnThread", - "object": "testRunner", - "arguments": { - "thread": "thread0", - "operation": { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 2 - } - }, - "expectError": { - "isError": true - } - } - } - }, - { - "name": "runOnThread", - "object": "testRunner", - "arguments": { - "thread": "thread1", - "operation": { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 3 - } - }, - "expectError": { - "isError": true - } - } - } - }, - { - "name": "waitForThread", - "object": "testRunner", - "arguments": { - "thread": "thread0" - } - }, - { - "name": "waitForThread", - "object": "testRunner", - "arguments": { - "thread": "thread1" - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 4 - } - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - } - ], - "outcome": [ - { - "collectionName": "insert-shutdown-error", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 4 - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/insert-shutdown-error.yml b/testdata/server-discovery-and-monitoring/unified/insert-shutdown-error.yml deleted file mode 100644 index ae32229ffa..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/insert-shutdown-error.yml +++ /dev/null @@ -1,162 +0,0 @@ ---- -description: insert-shutdown-error - -schemaVersion: "1.4" - -runOnRequirements: - # failCommand appName requirements - - minServerVersion: "4.4" - serverless: forbid - topologies: [ single, replicaset, sharded ] - -createEntities: - - client: - id: &setupClient setupClient - useMultipleMongoses: false - -initialData: &initialData - - collectionName: &collectionName insert-shutdown-error - databaseName: &databaseName sdam-tests - documents: [] - -tests: - - description: Concurrent shutdown error on insert - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - useMultipleMongoses: false - uriOptions: - retryWrites: false - heartbeatFrequencyMS: 500 - appname: shutdownErrorInsertTest - observeEvents: - - serverDescriptionChangedEvent - - poolClearedEvent - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - # Perform an operation to ensure the node is discovered. - - name: insertOne - object: *collection - arguments: - document: - _id: 1 - # Configure the next two inserts to fail with a non-timeout shutdown - # errors. Block the connection for 500ms to ensure both operations check - # out connections from the same pool generation. - - name: failPoint - object: testRunner - arguments: - failPoint: - configureFailPoint: failCommand - mode: - times: 2 - data: - failCommands: - - insert - appName: shutdownErrorInsertTest - errorCode: 91 - blockConnection: true - blockTimeMS: 500 - client: *setupClient - # Start threads. - - name: createEntities - object: testRunner - arguments: - entities: - - thread: - id: &thread0 thread0 - - thread: - id: &thread1 thread1 - # Perform concurrent insert operations. Both fail with shutdown errors. - - name: runOnThread - object: testRunner - arguments: - thread: *thread0 - operation: - name: insertOne - object: *collection - arguments: - document: - _id: 2 - expectError: - isError: true - - name: runOnThread - object: testRunner - arguments: - thread: *thread1 - operation: - name: insertOne - object: *collection - arguments: - document: - _id: 3 - expectError: - isError: true - # Stop threads. - - name: waitForThread - object: testRunner - arguments: - thread: *thread0 - - name: waitForThread - object: testRunner - arguments: - thread: *thread1 - # The first shutdown error should mark the server Unknown and then clear - # the pool. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - # Perform an operation to ensure the node is rediscovered. - - name: insertOne - object: *collection - arguments: - document: - _id: 4 - # Assert the server was marked Unknown and pool was cleared exactly once. - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - - # Order of operations is non-deterministic so we cannot check events. - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - _id: 1 - - _id: 4 diff --git a/testdata/server-discovery-and-monitoring/unified/interruptInUse-pool-clear.json b/testdata/server-discovery-and-monitoring/unified/interruptInUse-pool-clear.json deleted file mode 100644 index d9329646d4..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/interruptInUse-pool-clear.json +++ /dev/null @@ -1,591 +0,0 @@ -{ - "description": "interruptInUse", - "schemaVersion": "1.11", - "runOnRequirements": [ - { - "minServerVersion": "4.4", - "serverless": "forbid", - "topologies": [ - "replicaset", - "sharded" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "setupClient", - "useMultipleMongoses": false - } - } - ], - "initialData": [ - { - "collectionName": "interruptInUse", - "databaseName": "sdam-tests", - "documents": [] - } - ], - "tests": [ - { - "description": "Connection pool clear uses interruptInUseConnections=true after monitor timeout", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeEvents": [ - "poolClearedEvent", - "connectionClosedEvent", - "commandStartedEvent", - "commandSucceededEvent", - "commandFailedEvent", - "connectionCheckedOutEvent", - "connectionCheckedInEvent" - ], - "uriOptions": { - "connectTimeoutMS": 500, - "heartbeatFrequencyMS": 500, - "appname": "interruptInUse", - "retryReads": false, - "minPoolSize": 0 - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "sdam-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "interruptInUse" - } - }, - { - "thread": { - "id": "thread1" - } - } - ] - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 1 - } - } - }, - { - "name": "runOnThread", - "object": "testRunner", - "arguments": { - "thread": "thread1", - "operation": { - "name": "find", - "object": "collection", - "arguments": { - "filter": { - "$where": "sleep(2000) || true" - } - }, - "expectError": { - "isError": true - } - } - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "setupClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "hello", - "isMaster" - ], - "blockConnection": true, - "blockTimeMS": 1500, - "appName": "interruptInUse" - } - } - } - }, - { - "name": "waitForThread", - "object": "testRunner", - "arguments": { - "thread": "thread1" - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert" - } - }, - { - "commandSucceededEvent": { - "commandName": "insert" - } - }, - { - "commandStartedEvent": { - "commandName": "find" - } - }, - { - "commandFailedEvent": { - "commandName": "find" - } - } - ] - }, - { - "client": "client", - "eventType": "cmap", - "events": [ - { - "connectionCheckedOutEvent": {} - }, - { - "connectionCheckedInEvent": {} - }, - { - "connectionCheckedOutEvent": {} - }, - { - "poolClearedEvent": { - "interruptInUseConnections": true - } - }, - { - "connectionCheckedInEvent": {} - }, - { - "connectionClosedEvent": {} - } - ] - } - ], - "outcome": [ - { - "collectionName": "interruptInUse", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - } - ] - } - ] - }, - { - "description": "Error returned from connection pool clear with interruptInUseConnections=true is retryable", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeEvents": [ - "poolClearedEvent", - "connectionClosedEvent", - "commandStartedEvent", - "commandFailedEvent", - "commandSucceededEvent", - "connectionCheckedOutEvent", - "connectionCheckedInEvent" - ], - "uriOptions": { - "connectTimeoutMS": 500, - "heartbeatFrequencyMS": 500, - "appname": "interruptInUseRetryable", - "retryReads": true, - "minPoolSize": 0 - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "sdam-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "interruptInUse" - } - }, - { - "thread": { - "id": "thread1" - } - } - ] - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 1 - } - } - }, - { - "name": "runOnThread", - "object": "testRunner", - "arguments": { - "thread": "thread1", - "operation": { - "name": "find", - "object": "collection", - "arguments": { - "filter": { - "$where": "sleep(2000) || true" - } - } - } - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "setupClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "hello", - "isMaster" - ], - "blockConnection": true, - "blockTimeMS": 1500, - "appName": "interruptInUseRetryable" - } - } - } - }, - { - "name": "waitForThread", - "object": "testRunner", - "arguments": { - "thread": "thread1" - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert" - } - }, - { - "commandSucceededEvent": { - "commandName": "insert" - } - }, - { - "commandStartedEvent": { - "commandName": "find" - } - }, - { - "commandFailedEvent": { - "commandName": "find" - } - }, - { - "commandStartedEvent": { - "commandName": "find" - } - }, - { - "commandSucceededEvent": { - "commandName": "find" - } - } - ] - }, - { - "client": "client", - "eventType": "cmap", - "events": [ - { - "connectionCheckedOutEvent": {} - }, - { - "connectionCheckedInEvent": {} - }, - { - "connectionCheckedOutEvent": {} - }, - { - "poolClearedEvent": { - "interruptInUseConnections": true - } - }, - { - "connectionCheckedInEvent": {} - }, - { - "connectionClosedEvent": {} - }, - { - "connectionCheckedOutEvent": {} - }, - { - "connectionCheckedInEvent": {} - } - ] - } - ], - "outcome": [ - { - "collectionName": "interruptInUse", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - } - ] - } - ] - }, - { - "description": "Error returned from connection pool clear with interruptInUseConnections=true is retryable for write", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeEvents": [ - "poolClearedEvent", - "connectionClosedEvent", - "commandStartedEvent", - "commandFailedEvent", - "commandSucceededEvent", - "connectionCheckedOutEvent", - "connectionCheckedInEvent" - ], - "uriOptions": { - "connectTimeoutMS": 500, - "heartbeatFrequencyMS": 500, - "appname": "interruptInUseRetryableWrite", - "retryWrites": true, - "minPoolSize": 0 - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "sdam-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "interruptInUse" - } - }, - { - "thread": { - "id": "thread1" - } - } - ] - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 1 - } - } - }, - { - "name": "runOnThread", - "object": "testRunner", - "arguments": { - "thread": "thread1", - "operation": { - "name": "updateOne", - "object": "collection", - "arguments": { - "filter": { - "$where": "sleep(2000) || true" - }, - "update": { - "$set": { - "a": "bar" - } - } - } - } - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "setupClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 4 - }, - "data": { - "failCommands": [ - "hello", - "isMaster" - ], - "blockConnection": true, - "blockTimeMS": 1500, - "appName": "interruptInUseRetryableWrite" - } - } - } - }, - { - "name": "waitForThread", - "object": "testRunner", - "arguments": { - "thread": "thread1" - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "commandName": "insert" - } - }, - { - "commandSucceededEvent": { - "commandName": "insert" - } - }, - { - "commandStartedEvent": { - "commandName": "update" - } - }, - { - "commandFailedEvent": { - "commandName": "update" - } - }, - { - "commandStartedEvent": { - "commandName": "update" - } - }, - { - "commandSucceededEvent": { - "commandName": "update" - } - } - ] - }, - { - "client": "client", - "eventType": "cmap", - "events": [ - { - "connectionCheckedOutEvent": {} - }, - { - "connectionCheckedInEvent": {} - }, - { - "connectionCheckedOutEvent": {} - }, - { - "poolClearedEvent": { - "interruptInUseConnections": true - } - }, - { - "connectionCheckedInEvent": {} - }, - { - "connectionClosedEvent": {} - }, - { - "connectionCheckedOutEvent": {} - }, - { - "connectionCheckedInEvent": {} - } - ] - } - ], - "outcome": [ - { - "collectionName": "interruptInUse", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1, - "a": "bar" - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/interruptInUse-pool-clear.yml b/testdata/server-discovery-and-monitoring/unified/interruptInUse-pool-clear.yml deleted file mode 100644 index 67cd7d3ae3..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/interruptInUse-pool-clear.yml +++ /dev/null @@ -1,341 +0,0 @@ ---- -description: interruptInUse - -schemaVersion: "1.11" - -runOnRequirements: - # failCommand appName requirements - - minServerVersion: "4.4" - serverless: forbid - topologies: [ replicaset, sharded ] - -createEntities: - - client: - id: &setupClient setupClient - useMultipleMongoses: false - -initialData: &initialData - - collectionName: &collectionName interruptInUse - databaseName: &databaseName sdam-tests - documents: [] - -tests: - - description: Connection pool clear uses interruptInUseConnections=true after monitor timeout - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - useMultipleMongoses: false - observeEvents: - - poolClearedEvent - - connectionClosedEvent - - commandStartedEvent - - commandSucceededEvent - - commandFailedEvent - - connectionCheckedOutEvent - - connectionCheckedInEvent - uriOptions: - connectTimeoutMS: 500 - heartbeatFrequencyMS: 500 - appname: interruptInUse - retryReads: false - minPoolSize: 0 - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - thread: - id: &thread1 thread1 - - name: insertOne - object: *collection - arguments: - document: { _id: 1 } - # simulate a long-running query - - name: runOnThread - object: testRunner - arguments: - thread: *thread1 - operation: - name: find - object: *collection - arguments: - filter: - $where : sleep(2000) || true - expectError: - isError: true - # Configure the monitor check to fail with a timeout. - # Use "times: 4" to increase the probability that the Monitor check triggers - # the failpoint, since the RTT hello may trigger this failpoint one or many - # times as well. - - name: failPoint - object: testRunner - arguments: - client: *setupClient - failPoint: - configureFailPoint: failCommand - mode: - times: 4 - data: - failCommands: - - hello - - isMaster - blockConnection: true - blockTimeMS: 1500 - appName: interruptInUse - - name: waitForThread - object: testRunner - arguments: - thread: *thread1 - - expectEvents: - - client: *client - eventType: command - events: - - commandStartedEvent: - commandName: insert - - commandSucceededEvent: - commandName: insert - - commandStartedEvent: - commandName: find - - commandFailedEvent: - commandName: find - - client: *client - eventType: cmap - events: - - connectionCheckedOutEvent: {} - - connectionCheckedInEvent: {} - - connectionCheckedOutEvent: {} - - poolClearedEvent: - interruptInUseConnections: true - - connectionCheckedInEvent: {} - - connectionClosedEvent: {} - - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - _id: 1 - - - description: Error returned from connection pool clear with interruptInUseConnections=true is retryable - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - useMultipleMongoses: false - observeEvents: - - poolClearedEvent - - connectionClosedEvent - - commandStartedEvent - - commandFailedEvent - - commandSucceededEvent - - connectionCheckedOutEvent - - connectionCheckedInEvent - uriOptions: - connectTimeoutMS: 500 - heartbeatFrequencyMS: 500 - appname: interruptInUseRetryable - retryReads: true - minPoolSize: 0 - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - thread: - id: &thread1 thread1 - - name: insertOne - object: *collection - arguments: - document: { _id: 1 } - # simulate a long-running query - - name: runOnThread - object: testRunner - arguments: - thread: *thread1 - operation: - name: find - object: *collection - arguments: - filter: - $where : sleep(2000) || true - # Configure the monitor check to fail with a timeout. - # Use "times: 4" to increase the probability that the Monitor check triggers - # the failpoint, since the RTT hello may trigger this failpoint one or many - # times as well. - - name: failPoint - object: testRunner - arguments: - client: *setupClient - failPoint: - configureFailPoint: failCommand - mode: - times: 4 - data: - failCommands: - - hello - - isMaster - blockConnection: true - blockTimeMS: 1500 - appName: interruptInUseRetryable - - name: waitForThread - object: testRunner - arguments: - thread: *thread1 - - expectEvents: - - client: *client - eventType: command - events: - - commandStartedEvent: - commandName: insert - - commandSucceededEvent: - commandName: insert - - commandStartedEvent: - commandName: find - - commandFailedEvent: - commandName: find - - commandStartedEvent: - commandName: find - - commandSucceededEvent: - commandName: find - - client: *client - eventType: cmap - events: - - connectionCheckedOutEvent: {} - - connectionCheckedInEvent: {} - - connectionCheckedOutEvent: {} - - poolClearedEvent: - interruptInUseConnections: true - - connectionCheckedInEvent: {} - - connectionClosedEvent: {} - - connectionCheckedOutEvent: {} - - connectionCheckedInEvent: {} - - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - _id: 1 - - description: Error returned from connection pool clear with interruptInUseConnections=true is retryable for write - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - useMultipleMongoses: false - observeEvents: - - poolClearedEvent - - connectionClosedEvent - - commandStartedEvent - - commandFailedEvent - - commandSucceededEvent - - connectionCheckedOutEvent - - connectionCheckedInEvent - uriOptions: - connectTimeoutMS: 500 - heartbeatFrequencyMS: 500 - appname: interruptInUseRetryableWrite - retryWrites: true - minPoolSize: 0 - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - - thread: - id: &thread1 thread1 - # ensure the primary is discovered - - name: insertOne - object: *collection - arguments: - document: { _id: 1 } - # simulate a long-running query - - name: runOnThread - object: testRunner - arguments: - thread: *thread1 - operation: - name: updateOne - object: *collection - arguments: - filter: - $where: sleep(2000) || true - update: - "$set": { "a": "bar" } - # Configure the monitor check to fail with a timeout. - # Use "times: 4" to increase the probability that the Monitor check triggers - # the failpoint, since the RTT hello may trigger this failpoint one or many - # times as well. - - name: failPoint - object: testRunner - arguments: - client: *setupClient - failPoint: - configureFailPoint: failCommand - mode: - times: 4 - data: - failCommands: - - hello - - isMaster - blockConnection: true - blockTimeMS: 1500 - appName: interruptInUseRetryableWrite - - name: waitForThread - object: testRunner - arguments: - thread: *thread1 - - expectEvents: - - client: *client - eventType: command - events: - - commandStartedEvent: - commandName: insert - - commandSucceededEvent: - commandName: insert - - commandStartedEvent: - commandName: update - - commandFailedEvent: - commandName: update - - commandStartedEvent: - commandName: update - - commandSucceededEvent: - commandName: update - - client: *client - eventType: cmap - events: - - connectionCheckedOutEvent: {} - - connectionCheckedInEvent: {} - - connectionCheckedOutEvent: {} - - poolClearedEvent: - interruptInUseConnections: true - - connectionCheckedInEvent: {} - - connectionClosedEvent: {} - - connectionCheckedOutEvent: {} - - connectionCheckedInEvent: {} - - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - { _id: 1, a : bar } - diff --git a/testdata/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.json b/testdata/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.json deleted file mode 100644 index 30c0657630..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "description": "loadbalanced-emit-topology-description-changed-before-close", - "schemaVersion": "1.20", - "runOnRequirements": [ - { - "topologies": [ - "load-balanced" - ], - "minServerVersion": "4.4" - } - ], - "tests": [ - { - "description": "Topology lifecycle", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeEvents": [ - "topologyDescriptionChangedEvent", - "topologyOpeningEvent", - "topologyClosedEvent" - ] - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "topologyDescriptionChangedEvent": {} - }, - "count": 2 - } - }, - { - "name": "close", - "object": "client" - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "sdam", - "events": [ - { - "topologyOpeningEvent": {} - }, - { - "topologyDescriptionChangedEvent": { - "previousDescription": { - "type": "Unknown" - }, - "newDescription": {} - } - }, - { - "topologyDescriptionChangedEvent": { - "newDescription": { - "type": "LoadBalanced" - } - } - }, - { - "topologyDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - { - "topologyClosedEvent": {} - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.yml b/testdata/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.yml deleted file mode 100644 index c919a8cf8b..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/loadbalanced-emit-topology-changed-before-close.yml +++ /dev/null @@ -1,49 +0,0 @@ -description: "loadbalanced-emit-topology-description-changed-before-close" - -schemaVersion: "1.20" - -runOnRequirements: - - topologies: - - load-balanced - minServerVersion: "4.4" # awaitable hello - -tests: - - description: "Topology lifecycle" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - observeEvents: - - topologyDescriptionChangedEvent - - topologyOpeningEvent - - topologyClosedEvent - # ensure the topology has been fully discovered before closing the client. - # expected events are initial server discovery and server connect event. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - topologyDescriptionChangedEvent: {} - count: 2 - - name: close - object: *client - expectEvents: - - client: *client - eventType: sdam - events: - - topologyOpeningEvent: {} - - topologyDescriptionChangedEvent: # unknown -> unknown w disconnected server - previousDescription: - type: "Unknown" - newDescription: {} - - topologyDescriptionChangedEvent: # unknown w disconnected server -> loadBalanced - newDescription: - type: "LoadBalanced" - - topologyDescriptionChangedEvent: # loadbalanced -> unknown - newDescription: - type: "Unknown" - - topologyClosedEvent: {} diff --git a/testdata/server-discovery-and-monitoring/unified/logging-loadbalanced.json b/testdata/server-discovery-and-monitoring/unified/logging-loadbalanced.json deleted file mode 100644 index 0ad3b0ceaa..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/logging-loadbalanced.json +++ /dev/null @@ -1,166 +0,0 @@ -{ - "description": "loadbalanced-logging", - "schemaVersion": "1.16", - "runOnRequirements": [ - { - "topologies": [ - "load-balanced" - ], - "minServerVersion": "4.4" - } - ], - "tests": [ - { - "description": "Topology lifecycle", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeLogMessages": { - "topology": "debug" - }, - "observeEvents": [ - "topologyDescriptionChangedEvent" - ] - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "topologyDescriptionChangedEvent": {} - }, - "count": 2 - } - }, - { - "name": "close", - "object": "client" - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting topology monitoring", - "topologyId": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting server monitoring", - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped server monitoring", - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped topology monitoring", - "topologyId": { - "$$exists": true - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/logging-loadbalanced.yml b/testdata/server-discovery-and-monitoring/unified/logging-loadbalanced.yml deleted file mode 100644 index 432ec354ed..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/logging-loadbalanced.yml +++ /dev/null @@ -1,81 +0,0 @@ -description: "loadbalanced-logging" - -schemaVersion: "1.16" - -runOnRequirements: - - topologies: - - load-balanced - minServerVersion: "4.4" # awaitable hello - -tests: - - description: "Topology lifecycle" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - observeLogMessages: - topology: debug - observeEvents: - - topologyDescriptionChangedEvent - # ensure the topology has been fully discovered before closing the client. - # expected events are initial server discovery and server connect event. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - topologyDescriptionChangedEvent: {} - count: 2 - - name: close - object: *client - expectLogMessages: - - client: *client - messages: - - level: debug - component: topology - data: - message: "Starting topology monitoring" - topologyId: { $$exists: true } - - level: debug - component: topology - data: - message: "Topology description changed" - topologyId: { $$exists: true } - previousDescription: { $$exists: true } # unknown topology - newDescription: { $$exists: true } # unknown topology, disconnected server - - level: debug - component: topology - data: - message: "Starting server monitoring" - topologyId: { $$exists: true } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - level: debug - component: topology - data: - message: "Topology description changed" - topologyId: { $$exists: true } - previousDescription: { $$exists: true } - newDescription: { $$exists: true } # loadBalanced topology - - level: debug - component: topology - data: - message: "Stopped server monitoring" - topologyId: { $$exists: true } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - level: debug - component: topology - data: - message: "Topology description changed" - topologyId: { $$exists: true } - previousDescription: { $$exists: true } # loadBalanced topology - newDescription: { $$exists: true } # unknown topology - - level: debug - component: topology - data: - message: "Stopped topology monitoring" - topologyId: { $$exists: true } diff --git a/testdata/server-discovery-and-monitoring/unified/logging-replicaset.json b/testdata/server-discovery-and-monitoring/unified/logging-replicaset.json deleted file mode 100644 index e6738225cd..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/logging-replicaset.json +++ /dev/null @@ -1,606 +0,0 @@ -{ - "description": "replicaset-logging", - "schemaVersion": "1.16", - "runOnRequirements": [ - { - "topologies": [ - "replicaset" - ], - "minServerVersion": "4.4" - } - ], - "createEntities": [ - { - "client": { - "id": "setupClient" - } - } - ], - "tests": [ - { - "description": "Topology lifecycle", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeLogMessages": { - "topology": "debug" - }, - "observeEvents": [ - "topologyDescriptionChangedEvent" - ] - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "topologyDescriptionChangedEvent": {} - }, - "count": 4 - } - }, - { - "name": "close", - "object": "client" - } - ], - "expectLogMessages": [ - { - "client": "client", - "ignoreMessages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting server monitoring" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat started" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat succeeded" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat failed" - } - } - ], - "messages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting topology monitoring", - "topologyId": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped server monitoring", - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped server monitoring", - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped server monitoring", - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped topology monitoring", - "topologyId": { - "$$exists": true - } - } - } - ] - } - ] - }, - { - "description": "Successful heartbeat", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeLogMessages": { - "topology": "debug" - }, - "observeEvents": [ - "serverHeartbeatSucceededEvent" - ] - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverHeartbeatSucceededEvent": {} - }, - "count": 3 - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "ignoreExtraMessages": true, - "ignoreMessages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat started" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting server monitoring" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped server monitoring" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed" - } - } - ], - "messages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting topology monitoring", - "topologyId": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat succeeded", - "awaited": { - "$$exists": true - }, - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - }, - "driverConnectionId": { - "$$exists": true - }, - "serverConnectionId": { - "$$exists": true - }, - "durationMS": { - "$$type": [ - "int", - "long" - ] - }, - "reply": { - "$$matchAsDocument": { - "$$matchAsRoot": { - "ok": 1 - } - } - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat succeeded", - "awaited": { - "$$exists": true - }, - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - }, - "driverConnectionId": { - "$$exists": true - }, - "serverConnectionId": { - "$$exists": true - }, - "durationMS": { - "$$type": [ - "int", - "long" - ] - }, - "reply": { - "$$matchAsDocument": { - "$$matchAsRoot": { - "ok": 1 - } - } - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat succeeded", - "awaited": { - "$$exists": true - }, - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - }, - "driverConnectionId": { - "$$exists": true - }, - "serverConnectionId": { - "$$exists": true - }, - "durationMS": { - "$$type": [ - "int", - "long" - ] - }, - "reply": { - "$$matchAsDocument": { - "$$matchAsRoot": { - "ok": 1 - } - } - } - } - } - ] - } - ] - }, - { - "description": "Failing heartbeat", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeLogMessages": { - "topology": "debug" - }, - "observeEvents": [ - "serverHeartbeatFailedEvent" - ], - "uriOptions": { - "appname": "failingHeartbeatLoggingTest" - } - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "failPoint": { - "configureFailPoint": "failCommand", - "mode": "alwaysOn", - "data": { - "failCommands": [ - "hello", - "isMaster" - ], - "appName": "failingHeartbeatLoggingTest", - "closeConnection": true - } - }, - "client": "setupClient" - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverHeartbeatFailedEvent": {} - }, - "count": 1 - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "ignoreExtraMessages": true, - "ignoreMessages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat started" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat succeeded" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting server monitoring" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped server monitoring" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed" - } - } - ], - "messages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting topology monitoring", - "topologyId": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat failed", - "awaited": { - "$$exists": true - }, - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - }, - "driverConnectionId": { - "$$exists": true - }, - "durationMS": { - "$$type": [ - "int", - "long" - ] - }, - "failure": { - "$$exists": true - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/logging-replicaset.yml b/testdata/server-discovery-and-monitoring/unified/logging-replicaset.yml deleted file mode 100644 index a0b856ec72..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/logging-replicaset.yml +++ /dev/null @@ -1,289 +0,0 @@ -description: "replicaset-logging" - -schemaVersion: "1.16" - -runOnRequirements: - - topologies: - - replicaset - minServerVersion: "4.4" # awaitable hello - -createEntities: - - client: - id: &setupClient setupClient - -tests: - - description: "Topology lifecycle" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - observeLogMessages: - topology: debug - observeEvents: - - topologyDescriptionChangedEvent - # ensure the topology has been fully discovered before closing the client. - # expected events are initial cluster type change from unknown to ReplicaSet, and connect events for each of 3 servers. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - topologyDescriptionChangedEvent: {} - count: 4 - - name: close - object: *client - expectLogMessages: - - client: *client - ignoreMessages: - - level: debug - component: topology - data: - message: "Starting server monitoring" - - level: debug - component: topology - data: - message: "Server heartbeat started" - - level: debug - component: topology - data: - message: "Server heartbeat succeeded" - - level: debug - component: topology - data: - message: "Server heartbeat failed" - messages: - - level: debug - component: topology - data: - message: "Starting topology monitoring" - topologyId: { $$exists: true } - - level: debug - component: topology - data: - message: "Topology description changed" - topologyId: { $$exists: true } - previousDescription: { $$exists: true } # unknown topology - newDescription: { $$exists: true } # ReplicaSet topology - - level: debug - component: topology - data: - message: "Topology description changed" - topologyId: { $$exists: true } - previousDescription: { $$exists: true } - newDescription: { $$exists: true } # server connected - - level: debug - component: topology - data: - message: "Topology description changed" - topologyId: { $$exists: true } - previousDescription: { $$exists: true } - newDescription: { $$exists: true } # server connected - - level: debug - component: topology - data: - message: "Topology description changed" - topologyId: { $$exists: true } - previousDescription: { $$exists: true } - newDescription: { $$exists: true } # server connected - - level: debug - component: topology - data: - message: "Stopped server monitoring" - topologyId: { $$exists: true } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - level: debug - component: topology - data: - message: "Stopped server monitoring" - topologyId: { $$exists: true } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - level: debug - component: topology - data: - message: "Stopped server monitoring" - topologyId: { $$exists: true } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - level: debug - component: topology - data: - message: "Topology description changed" - topologyId: { $$exists: true } - previousDescription: { $$exists: true } # ReplicaSet topology - newDescription: { $$exists: true } # unknown topology - - level: debug - component: topology - data: - message: "Stopped topology monitoring" - topologyId: { $$exists: true } - - description: Successful heartbeat - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: *client - observeLogMessages: - topology: debug - observeEvents: - - serverHeartbeatSucceededEvent - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverHeartbeatSucceededEvent: {} - count: 3 - expectLogMessages: - - client: *client - ignoreExtraMessages: true - ignoreMessages: - - level: debug - component: topology - data: - message: "Server heartbeat started" - - level: debug - component: topology - data: - message: "Starting server monitoring" - - level: debug - component: topology - data: - message: "Stopped server monitoring" - - level: debug - component: topology - data: - message: "Topology description changed" - messages: - - level: debug - component: topology - data: - message: "Starting topology monitoring" - topologyId: { $$exists: true } - - level: debug - component: topology - data: - message: "Server heartbeat succeeded" - awaited: { $$exists: true } - topologyId: { $$exists: true } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - driverConnectionId: { $$exists: true } - serverConnectionId: { $$exists: true } - durationMS: { $$type: [int, long] } - reply: - $$matchAsDocument: - "$$matchAsRoot": - ok: 1 - - level: debug - component: topology - data: - message: "Server heartbeat succeeded" - awaited: { $$exists: true } - topologyId: { $$exists: true } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - driverConnectionId: { $$exists: true } - serverConnectionId: { $$exists: true } - durationMS: { $$type: [int, long] } - reply: - $$matchAsDocument: - "$$matchAsRoot": - ok: 1 - - level: debug - component: topology - data: - message: "Server heartbeat succeeded" - awaited: { $$exists: true } - topologyId: { $$exists: true } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - driverConnectionId: { $$exists: true } - serverConnectionId: { $$exists: true } - durationMS: { $$type: [int, long] } - reply: - $$matchAsDocument: - "$$matchAsRoot": - ok: 1 - - description: Failing heartbeat - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: *client - observeLogMessages: - topology: debug - observeEvents: - - serverHeartbeatFailedEvent - uriOptions: - appname: failingHeartbeatLoggingTest - - name: failPoint - object: testRunner - arguments: - failPoint: - configureFailPoint: failCommand - mode: "alwaysOn" - data: - failCommands: - - hello - - isMaster - appName: failingHeartbeatLoggingTest - closeConnection: true - client: *setupClient - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverHeartbeatFailedEvent: {} - count: 1 - expectLogMessages: - - client: *client - ignoreExtraMessages: true - ignoreMessages: - - level: debug - component: topology - data: - message: "Server heartbeat started" - - level: debug - component: topology - data: - message: "Server heartbeat succeeded" - - level: debug - component: topology - data: - message: "Starting server monitoring" - - level: debug - component: topology - data: - message: "Stopped server monitoring" - - level: debug - component: topology - data: - message: "Topology description changed" - messages: - - level: debug - component: topology - data: - message: "Starting topology monitoring" - topologyId: - "$$exists": true - - level: debug - component: topology - data: - message: "Server heartbeat failed" - awaited: { $$exists: true } - topologyId: { $$exists: true } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - driverConnectionId: { $$exists: true } - durationMS: { $$type: [int, long] } - failure: { $$exists: true } \ No newline at end of file diff --git a/testdata/server-discovery-and-monitoring/unified/logging-sharded.json b/testdata/server-discovery-and-monitoring/unified/logging-sharded.json deleted file mode 100644 index 61b27f5be0..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/logging-sharded.json +++ /dev/null @@ -1,492 +0,0 @@ -{ - "description": "sharded-logging", - "schemaVersion": "1.16", - "runOnRequirements": [ - { - "topologies": [ - "sharded" - ], - "minServerVersion": "4.4" - } - ], - "createEntities": [ - { - "client": { - "id": "setupClient", - "useMultipleMongoses": false - } - } - ], - "tests": [ - { - "description": "Topology lifecycle", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeLogMessages": { - "topology": "debug" - }, - "observeEvents": [ - "topologyDescriptionChangedEvent" - ], - "useMultipleMongoses": true - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "topologyDescriptionChangedEvent": {} - }, - "count": 3 - } - }, - { - "name": "close", - "object": "client" - } - ], - "expectLogMessages": [ - { - "client": "client", - "ignoreMessages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting server monitoring" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat started" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat succeeded" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat failed" - } - } - ], - "messages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting topology monitoring", - "topologyId": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped server monitoring", - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped server monitoring", - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped topology monitoring", - "topologyId": { - "$$exists": true - } - } - } - ] - } - ] - }, - { - "description": "Successful heartbeat", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeLogMessages": { - "topology": "debug" - }, - "observeEvents": [ - "serverHeartbeatSucceededEvent" - ] - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverHeartbeatSucceededEvent": {} - }, - "count": 1 - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "ignoreExtraMessages": true, - "ignoreMessages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat started" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting server monitoring" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped server monitoring" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed" - } - } - ], - "messages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting topology monitoring", - "topologyId": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat succeeded", - "awaited": { - "$$exists": true - }, - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - }, - "driverConnectionId": { - "$$exists": true - }, - "serverConnectionId": { - "$$exists": true - }, - "durationMS": { - "$$type": [ - "int", - "long" - ] - }, - "reply": { - "$$matchAsDocument": { - "$$matchAsRoot": { - "ok": 1 - } - } - } - } - } - ] - } - ] - }, - { - "description": "Failing heartbeat", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeLogMessages": { - "topology": "debug" - }, - "observeEvents": [ - "serverHeartbeatStartedEvent", - "serverHeartbeatFailedEvent" - ], - "uriOptions": { - "appname": "failingHeartbeatLoggingTest" - } - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "failPoint": { - "configureFailPoint": "failCommand", - "mode": "alwaysOn", - "data": { - "failCommands": [ - "hello", - "isMaster" - ], - "appName": "failingHeartbeatLoggingTest", - "closeConnection": true - } - }, - "client": "setupClient" - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverHeartbeatFailedEvent": {} - }, - "count": 1 - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "ignoreExtraMessages": true, - "ignoreMessages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat started" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat succeeded" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting server monitoring" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped server monitoring" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed" - } - } - ], - "messages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting topology monitoring", - "topologyId": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat failed", - "awaited": { - "$$exists": true - }, - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - }, - "driverConnectionId": { - "$$exists": true - }, - "durationMS": { - "$$type": [ - "int", - "long" - ] - }, - "failure": { - "$$exists": true - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/logging-sharded.yml b/testdata/server-discovery-and-monitoring/unified/logging-sharded.yml deleted file mode 100644 index 19870878b9..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/logging-sharded.yml +++ /dev/null @@ -1,248 +0,0 @@ -description: "sharded-logging" - -schemaVersion: "1.16" - -runOnRequirements: - - topologies: - - sharded - minServerVersion: "4.4" # awaitable hello - -createEntities: - - client: - id: &setupClient setupClient - useMultipleMongoses: false - -tests: - - description: "Topology lifecycle" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - observeLogMessages: - topology: debug - observeEvents: - - topologyDescriptionChangedEvent - useMultipleMongoses: true - # ensure the topology has been fully discovered before closing the client. - # expected events are initial cluster type change from unknown to sharded, and connect events for each of 2 servers. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - topologyDescriptionChangedEvent: {} - count: 3 - - name: close - object: *client - expectLogMessages: - - client: *client - ignoreMessages: - - level: debug - component: topology - data: - message: "Starting server monitoring" - - level: debug - component: topology - data: - message: "Server heartbeat started" - - level: debug - component: topology - data: - message: "Server heartbeat succeeded" - - level: debug - component: topology - data: - message: "Server heartbeat failed" - messages: - - level: debug - component: topology - data: - message: "Starting topology monitoring" - topologyId: { $$exists: true } - - level: debug - component: topology - data: - message: "Topology description changed" - topologyId: { $$exists: true } - previousDescription: { $$exists: true } # unknown topology - newDescription: { $$exists: true } # Sharded topology - - level: debug - component: topology - data: - message: "Topology description changed" - topologyId: { $$exists: true } - previousDescription: { $$exists: true } - newDescription: { $$exists: true } # shard router connected - - level: debug - component: topology - data: - message: "Topology description changed" - topologyId: { $$exists: true } - previousDescription: { $$exists: true } - newDescription: { $$exists: true } # shard router connected - - level: debug - component: topology - data: - message: "Stopped server monitoring" - topologyId: { $$exists: true } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - level: debug - component: topology - data: - message: "Stopped server monitoring" - topologyId: { $$exists: true } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - level: debug - component: topology - data: - message: "Topology description changed" - topologyId: { $$exists: true } - previousDescription: { $$exists: true } # Sharded topology - newDescription: { $$exists: true } # unknown topology - - level: debug - component: topology - data: - message: "Stopped topology monitoring" - topologyId: { $$exists: true } - - description: Successful heartbeat - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: *client - observeLogMessages: - topology: debug - observeEvents: - - serverHeartbeatSucceededEvent - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverHeartbeatSucceededEvent: {} - count: 1 - expectLogMessages: - - client: *client - ignoreExtraMessages: true - ignoreMessages: - - level: debug - component: topology - data: - message: "Server heartbeat started" - - level: debug - component: topology - data: - message: "Starting server monitoring" - - level: debug - component: topology - data: - message: "Stopped server monitoring" - - level: debug - component: topology - data: - message: "Topology description changed" - messages: - - level: debug - component: topology - data: - message: "Starting topology monitoring" - topologyId: { $$exists: true } - - level: debug - component: topology - data: - message: "Server heartbeat succeeded" - awaited: { $$exists: true } - topologyId: { $$exists: true } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - driverConnectionId: { $$exists: true } - serverConnectionId: { $$exists: true } - durationMS: { $$type: [int, long] } - reply: - $$matchAsDocument: - "$$matchAsRoot": - ok: 1 - - description: Failing heartbeat - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: *client - observeLogMessages: - topology: debug - observeEvents: - - serverHeartbeatStartedEvent - - serverHeartbeatFailedEvent - uriOptions: - appname: failingHeartbeatLoggingTest - - name: failPoint - object: testRunner - arguments: - failPoint: - configureFailPoint: failCommand - mode: "alwaysOn" - data: - failCommands: - - hello - - isMaster - appName: failingHeartbeatLoggingTest - closeConnection: true - client: *setupClient - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverHeartbeatFailedEvent: {} - count: 1 - expectLogMessages: - - client: *client - ignoreExtraMessages: true - ignoreMessages: - - level: debug - component: topology - data: - message: "Server heartbeat started" - - level: debug - component: topology - data: - message: "Server heartbeat succeeded" - - level: debug - component: topology - data: - message: "Starting server monitoring" - - level: debug - component: topology - data: - message: "Stopped server monitoring" - - level: debug - component: topology - data: - message: "Topology description changed" - messages: - - level: debug - component: topology - data: - message: "Starting topology monitoring" - topologyId: - "$$exists": true - - level: debug - component: topology - data: - message: "Server heartbeat failed" - awaited: { $$exists: true } - topologyId: { $$exists: true } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - driverConnectionId: { $$exists: true } - durationMS: { $$type: [int, long] } - failure: { $$exists: true } \ No newline at end of file diff --git a/testdata/server-discovery-and-monitoring/unified/logging-standalone.json b/testdata/server-discovery-and-monitoring/unified/logging-standalone.json deleted file mode 100644 index 1ee6dbe899..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/logging-standalone.json +++ /dev/null @@ -1,517 +0,0 @@ -{ - "description": "standalone-logging", - "schemaVersion": "1.16", - "runOnRequirements": [ - { - "topologies": [ - "single" - ], - "minServerVersion": "4.4" - } - ], - "createEntities": [ - { - "client": { - "id": "setupClient" - } - } - ], - "tests": [ - { - "description": "Topology lifecycle", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeLogMessages": { - "topology": "debug" - }, - "observeEvents": [ - "topologyDescriptionChangedEvent" - ] - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "topologyDescriptionChangedEvent": {} - }, - "count": 2 - } - }, - { - "name": "close", - "object": "client" - } - ], - "expectLogMessages": [ - { - "client": "client", - "ignoreMessages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat started" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat succeeded" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat failed" - } - } - ], - "messages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting topology monitoring", - "topologyId": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting server monitoring", - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped server monitoring", - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed", - "topologyId": { - "$$exists": true - }, - "previousDescription": { - "$$exists": true - }, - "newDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped topology monitoring", - "topologyId": { - "$$exists": true - } - } - } - ] - } - ] - }, - { - "description": "Successful heartbeat", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeLogMessages": { - "topology": "debug" - }, - "observeEvents": [ - "serverHeartbeatSucceededEvent" - ] - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverHeartbeatSucceededEvent": {} - }, - "count": 1 - } - }, - { - "name": "close", - "object": "client" - } - ], - "expectLogMessages": [ - { - "client": "client", - "ignoreExtraMessages": true, - "ignoreMessages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped topology monitoring" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped server monitoring" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting server monitoring" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting topology monitoring" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat failed" - } - } - ], - "messages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat started", - "awaited": { - "$$exists": true - }, - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - }, - "driverConnectionId": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat succeeded", - "awaited": { - "$$exists": true - }, - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - }, - "driverConnectionId": { - "$$exists": true - }, - "serverConnectionId": { - "$$exists": true - }, - "durationMS": { - "$$type": [ - "int", - "long" - ] - }, - "reply": { - "$$matchAsDocument": { - "$$matchAsRoot": { - "ok": 1 - } - } - } - } - } - ] - } - ] - }, - { - "description": "Failing heartbeat", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeLogMessages": { - "topology": "debug" - }, - "observeEvents": [ - "serverHeartbeatFailedEvent" - ], - "uriOptions": { - "appname": "failingHeartbeatLoggingTest" - } - } - } - ] - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "setupClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": "alwaysOn", - "data": { - "failCommands": [ - "hello", - "isMaster" - ], - "appName": "failingHeartbeatLoggingTest", - "closeConnection": true - } - } - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverHeartbeatFailedEvent": {} - }, - "count": 1 - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "ignoreExtraMessages": true, - "ignoreMessages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped topology monitoring" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Stopped server monitoring" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Topology description changed" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting server monitoring" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Starting topology monitoring" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat started" - } - }, - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat succeeded" - } - } - ], - "messages": [ - { - "level": "debug", - "component": "topology", - "data": { - "message": "Server heartbeat failed", - "awaited": { - "$$exists": true - }, - "topologyId": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - }, - "driverConnectionId": { - "$$exists": true - }, - "durationMS": { - "$$type": [ - "int", - "long" - ] - }, - "failure": { - "$$exists": true - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/logging-standalone.yml b/testdata/server-discovery-and-monitoring/unified/logging-standalone.yml deleted file mode 100644 index 80cf98a20e..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/logging-standalone.yml +++ /dev/null @@ -1,258 +0,0 @@ -description: "standalone-logging" - -schemaVersion: "1.16" - -runOnRequirements: - - topologies: - - single - minServerVersion: "4.4" # awaitable hello - -createEntities: - - client: - id: &setupClient setupClient - -tests: - - description: "Topology lifecycle" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - observeLogMessages: - topology: debug - observeEvents: - - topologyDescriptionChangedEvent - # ensure the topology has been fully discovered before closing the client. - # expected events are initial server discovery and server connect event. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - topologyDescriptionChangedEvent: {} - count: 2 - - name: close - object: *client - expectLogMessages: - - client: *client - ignoreMessages: - - level: debug - component: topology - data: - message: "Server heartbeat started" - - level: debug - component: topology - data: - message: "Server heartbeat succeeded" - - level: debug - component: topology - data: - message: "Server heartbeat failed" - messages: - - level: debug - component: topology - data: - message: "Starting topology monitoring" - topologyId: { $$exists: true } - - level: debug - component: topology - data: - message: "Topology description changed" - topologyId: { $$exists: true } - previousDescription: { $$exists: true } # unknown topology - newDescription: { $$exists: true } # unknown topology, disconnected server - - level: debug - component: topology - data: - message: "Starting server monitoring" - topologyId: { $$exists: true } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - level: debug - component: topology - data: - message: "Topology description changed" - topologyId: { $$exists: true } - previousDescription: { $$exists: true } - newDescription: { $$exists: true } # standalone topology - - level: debug - component: topology - data: - message: "Stopped server monitoring" - topologyId: { $$exists: true } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - level: debug - component: topology - data: - message: "Topology description changed" - topologyId: { $$exists: true } - previousDescription: { $$exists: true } # standalone topology - newDescription: { $$exists: true } # unknown topology - - level: debug - component: topology - data: - message: "Stopped topology monitoring" - topologyId: { $$exists: true } - - description: Successful heartbeat - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - observeLogMessages: - topology: debug - observeEvents: - - serverHeartbeatSucceededEvent - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverHeartbeatSucceededEvent: {} - count: 1 - - name: close - object: *client - expectLogMessages: - - client: *client - ignoreExtraMessages: true - ignoreMessages: - - level: debug - component: topology - data: - message: "Topology description changed" - - level: debug - component: topology - data: - message: "Stopped topology monitoring" - - level: debug - component: topology - data: - message: "Stopped server monitoring" - - level: debug - component: topology - data: - message: "Topology description changed" - - level: debug - component: topology - data: - message: "Starting server monitoring" - - level: debug - component: topology - data: - message: "Starting topology monitoring" - - level: debug - component: topology - data: - message: "Server heartbeat failed" - messages: - - level: debug - component: topology - data: - message: "Server heartbeat started" - awaited: { $$exists: true } - topologyId: { $$exists: true } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - driverConnectionId: { $$exists: true } - - level: debug - component: topology - data: - message: "Server heartbeat succeeded" - awaited: { $$exists: true } - topologyId: { $$exists: true } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - driverConnectionId: { $$exists: true } - serverConnectionId: { $$exists: true } - durationMS: { $$type: [int, long] } - reply: - $$matchAsDocument: - "$$matchAsRoot": - ok: 1 - - description: Failing heartbeat - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - observeLogMessages: - topology: debug - observeEvents: - - serverHeartbeatFailedEvent - uriOptions: - appname: failingHeartbeatLoggingTest - - name: failPoint - object: testRunner - arguments: - client: *setupClient - failPoint: - configureFailPoint: failCommand - mode: "alwaysOn" - data: - failCommands: - - hello - - isMaster - appName: failingHeartbeatLoggingTest - closeConnection: true - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverHeartbeatFailedEvent: {} - count: 1 - expectLogMessages: - - client: *client - ignoreExtraMessages: true - ignoreMessages: - - level: debug - component: topology - data: - message: "Topology description changed" - - level: debug - component: topology - data: - message: "Stopped topology monitoring" - - level: debug - component: topology - data: - message: "Stopped server monitoring" - - level: debug - component: topology - data: - message: "Topology description changed" - - level: debug - component: topology - data: - message: "Starting server monitoring" - - level: debug - component: topology - data: - message: "Starting topology monitoring" - - level: debug - component: topology - data: - message: "Server heartbeat started" - - level: debug - component: topology - data: - message: "Server heartbeat succeeded" - messages: - - level: debug - component: topology - data: - message: "Server heartbeat failed" - awaited: { $$exists: true } - topologyId: { $$exists: true } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - driverConnectionId: { $$exists: true } - durationMS: { $$type: [int, long] } - failure: { $$exists: true } \ No newline at end of file diff --git a/testdata/server-discovery-and-monitoring/unified/minPoolSize-error.json b/testdata/server-discovery-and-monitoring/unified/minPoolSize-error.json deleted file mode 100644 index bd9e9fcdec..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/minPoolSize-error.json +++ /dev/null @@ -1,177 +0,0 @@ -{ - "description": "minPoolSize-error", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "4.4.7", - "serverless": "forbid", - "topologies": [ - "single" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "setupClient", - "useMultipleMongoses": false - } - } - ], - "initialData": [ - { - "collectionName": "sdam-minPoolSize-error", - "databaseName": "sdam-tests", - "documents": [] - } - ], - "tests": [ - { - "description": "Network error on minPoolSize background creation", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "setupClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "skip": 3 - }, - "data": { - "failCommands": [ - "hello", - "isMaster" - ], - "appName": "SDAMminPoolSizeError", - "closeConnection": true - } - } - } - }, - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeEvents": [ - "serverDescriptionChangedEvent", - "poolClearedEvent", - "poolReadyEvent" - ], - "uriOptions": { - "heartbeatFrequencyMS": 10000, - "appname": "SDAMminPoolSizeError", - "minPoolSize": 10, - "serverSelectionTimeoutMS": 1000 - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "sdam-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "sdam-minPoolSize-error" - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolReadyEvent": {} - }, - "count": 1 - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "command": { - "ping": {} - }, - "commandName": "ping" - }, - "expectError": { - "isError": true - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "failPoint": { - "configureFailPoint": "failCommand", - "mode": "off" - }, - "client": "setupClient" - } - }, - { - "name": "runCommand", - "object": "database", - "arguments": { - "command": { - "ping": 1 - }, - "commandName": "ping" - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolReadyEvent": {} - }, - "count": 2 - } - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/minPoolSize-error.yml b/testdata/server-discovery-and-monitoring/unified/minPoolSize-error.yml deleted file mode 100644 index 110e647c62..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/minPoolSize-error.yml +++ /dev/null @@ -1,125 +0,0 @@ ---- -description: minPoolSize-error - -schemaVersion: "1.4" - -runOnRequirements: - # Require SERVER-49336 for failCommand + appName on the initial handshake. - - minServerVersion: "4.4.7" - serverless: forbid - topologies: - - single - -createEntities: - - client: - id: &setupClient setupClient - useMultipleMongoses: false - -initialData: &initialData - - collectionName: &collectionName sdam-minPoolSize-error - databaseName: &databaseName sdam-tests - documents: [] - -tests: - - description: Network error on minPoolSize background creation - operations: - # Configure the initial monitor handshake to succeed but the - # first or second background minPoolSize establishments to fail. - - name: failPoint - object: testRunner - arguments: - client: *setupClient - failPoint: - configureFailPoint: failCommand - mode: - skip: 3 - data: - failCommands: - - hello - - isMaster - appName: SDAMminPoolSizeError - closeConnection: true - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - useMultipleMongoses: false - observeEvents: - - serverDescriptionChangedEvent - - poolClearedEvent - - poolReadyEvent - uriOptions: - heartbeatFrequencyMS: 10000 - appname: SDAMminPoolSizeError - minPoolSize: 10 - serverSelectionTimeoutMS: 1000 - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - # Wait for monitor to succeed handshake and mark the pool as ready. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - poolReadyEvent: {} - count: 1 - # Background connection establishment ensuring minPoolSize should fail, - # causing the pool to be cleared. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - # The server should be marked as Unknown as part of this. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - # Executing a command should fail server selection due to not being able - # to find the primary. - - name: runCommand - object: *database - arguments: - command: - ping: {} - commandName: ping - expectError: - isError: true - # Disable the failpoint, allowing the monitor to discover the primary again. - - name: failPoint - object: testRunner - arguments: - failPoint: - configureFailPoint: failCommand - mode: "off" - client: *setupClient - # Perform an operation to ensure the node is discovered. - - name: runCommand - object: *database - arguments: - command: - ping: 1 - commandName: ping - # Assert that the monitor discovered the primary and mark the pool as ready again. - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - poolReadyEvent: {} - count: 2 diff --git a/testdata/server-discovery-and-monitoring/unified/pool-cleared-error.json b/testdata/server-discovery-and-monitoring/unified/pool-cleared-error.json deleted file mode 100644 index b7f6924f2b..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/pool-cleared-error.json +++ /dev/null @@ -1,373 +0,0 @@ -{ - "description": "pool-cleared-error", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "4.9", - "serverless": "forbid", - "topologies": [ - "replicaset", - "sharded" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "setupClient", - "useMultipleMongoses": false - } - } - ], - "initialData": [ - { - "collectionName": "pool-cleared-error", - "databaseName": "sdam-tests", - "documents": [] - } - ], - "tests": [ - { - "description": "PoolClearedError does not mark server unknown", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "useMultipleMongoses": false, - "observeEvents": [ - "serverDescriptionChangedEvent", - "poolClearedEvent" - ], - "uriOptions": { - "retryWrites": true, - "maxPoolSize": 1, - "appname": "poolClearedErrorTest" - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "sdam-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "pool-cleared-error" - } - } - ] - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 1 - } - } - }, - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "blockConnection": true, - "blockTimeMS": 100, - "closeConnection": true, - "appName": "poolClearedErrorTest" - } - }, - "client": "setupClient" - } - }, - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "thread": { - "id": "thread0" - } - }, - { - "thread": { - "id": "thread1" - } - }, - { - "thread": { - "id": "thread2" - } - }, - { - "thread": { - "id": "thread3" - } - }, - { - "thread": { - "id": "thread4" - } - }, - { - "thread": { - "id": "thread5" - } - } - ] - } - }, - { - "name": "runOnThread", - "object": "testRunner", - "arguments": { - "thread": "thread0", - "operation": { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 2 - } - } - } - } - }, - { - "name": "runOnThread", - "object": "testRunner", - "arguments": { - "thread": "thread1", - "operation": { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 3 - } - } - } - } - }, - { - "name": "runOnThread", - "object": "testRunner", - "arguments": { - "thread": "thread2", - "operation": { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 4 - } - } - } - } - }, - { - "name": "runOnThread", - "object": "testRunner", - "arguments": { - "thread": "thread3", - "operation": { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 5 - } - } - } - } - }, - { - "name": "runOnThread", - "object": "testRunner", - "arguments": { - "thread": "thread4", - "operation": { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 6 - } - } - } - } - }, - { - "name": "runOnThread", - "object": "testRunner", - "arguments": { - "thread": "thread5", - "operation": { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 7 - } - } - } - } - }, - { - "name": "waitForThread", - "object": "testRunner", - "arguments": { - "thread": "thread0" - } - }, - { - "name": "waitForThread", - "object": "testRunner", - "arguments": { - "thread": "thread1" - } - }, - { - "name": "waitForThread", - "object": "testRunner", - "arguments": { - "thread": "thread2" - } - }, - { - "name": "waitForThread", - "object": "testRunner", - "arguments": { - "thread": "thread3" - } - }, - { - "name": "waitForThread", - "object": "testRunner", - "arguments": { - "thread": "thread4" - } - }, - { - "name": "waitForThread", - "object": "testRunner", - "arguments": { - "thread": "thread5" - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "_id": 8 - } - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 1 - } - } - ], - "outcome": [ - { - "collectionName": "pool-cleared-error", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - }, - { - "_id": 3 - }, - { - "_id": 4 - }, - { - "_id": 5 - }, - { - "_id": 6 - }, - { - "_id": 7 - }, - { - "_id": 8 - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/pool-cleared-error.yml b/testdata/server-discovery-and-monitoring/unified/pool-cleared-error.yml deleted file mode 100644 index f3bad7959e..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/pool-cleared-error.yml +++ /dev/null @@ -1,239 +0,0 @@ ---- -description: pool-cleared-error - -schemaVersion: "1.4" - -runOnRequirements: - # This test requires retryable writes, failCommand appName, and - # failCommand blockConnection with closeConnection:true (SERVER-53512). - - minServerVersion: "4.9" - serverless: forbid - topologies: - - replicaset - - sharded - -createEntities: - - client: - id: &setupClient setupClient - useMultipleMongoses: false - -initialData: &initialData - - collectionName: &collectionName pool-cleared-error - databaseName: &databaseName sdam-tests - documents: [] - -tests: - - description: PoolClearedError does not mark server unknown - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - useMultipleMongoses: false - observeEvents: - - serverDescriptionChangedEvent - - poolClearedEvent - uriOptions: - retryWrites: true - maxPoolSize: 1 - appname: poolClearedErrorTest - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - # Perform an operation to ensure the node is discovered. - - name: insertOne - object: *collection - arguments: - document: - _id: 1 - # Configure the next insert to fail with a network error which will - # clear the pool leaving it paused until the server is rediscovered. - - name: failPoint - object: testRunner - arguments: - failPoint: - configureFailPoint: failCommand - mode: - times: 1 - data: - failCommands: - - insert - blockConnection: true - blockTimeMS: 100 - closeConnection: true - appName: poolClearedErrorTest - client: *setupClient - # Start threads. - - name: createEntities - object: testRunner - arguments: - entities: - - thread: - id: &thread0 thread0 - - thread: - id: &thread1 thread1 - - thread: - id: &thread2 thread2 - - thread: - id: &thread3 thread3 - - thread: - id: &thread4 thread4 - - thread: - id: &thread5 thread5 - # Perform concurrent insert operations. The first one to execute will - # fail with a network error, mark the server Unknown, clear the pool, - # and retry. - # The other operations will either: - # - Notice the pool is paused, fail with a PoolClearedError, and retry. - # - Or block waiting in server selection until the server is - # rediscovered. - # - # Note that this test does not guarantee that a PoolClearedError will be - # raised but it is likely since the initial insert is delayed. - - name: runOnThread - object: testRunner - arguments: - thread: *thread0 - operation: - name: insertOne - object: *collection - arguments: - document: - _id: 2 - - name: runOnThread - object: testRunner - arguments: - thread: *thread1 - operation: - name: insertOne - object: *collection - arguments: - document: - _id: 3 - - name: runOnThread - object: testRunner - arguments: - thread: *thread2 - operation: - name: insertOne - object: *collection - arguments: - document: - _id: 4 - - name: runOnThread - object: testRunner - arguments: - thread: *thread3 - operation: - name: insertOne - object: *collection - arguments: - document: - _id: 5 - - name: runOnThread - object: testRunner - arguments: - thread: *thread4 - operation: - name: insertOne - object: *collection - arguments: - document: - _id: 6 - - name: runOnThread - object: testRunner - arguments: - thread: *thread5 - operation: - name: insertOne - object: *collection - arguments: - document: - _id: 7 - # Stop threads. - - name: waitForThread - object: testRunner - arguments: - thread: *thread0 - - name: waitForThread - object: testRunner - arguments: - thread: *thread1 - - name: waitForThread - object: testRunner - arguments: - thread: *thread2 - - name: waitForThread - object: testRunner - arguments: - thread: *thread3 - - name: waitForThread - object: testRunner - arguments: - thread: *thread4 - - name: waitForThread - object: testRunner - arguments: - thread: *thread5 - # The first shutdown error should mark the server Unknown and then clear - # the pool. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - # Perform an operation to ensure the node still usable. - - name: insertOne - object: *collection - arguments: - document: - _id: 8 - # Assert the server was marked Unknown and pool was cleared exactly once. - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 1 - - # Order of operations is non-deterministic so we cannot check events. - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - _id: 1 - - _id: 2 - - _id: 3 - - _id: 4 - - _id: 5 - - _id: 6 - - _id: 7 - - _id: 8 diff --git a/testdata/server-discovery-and-monitoring/unified/rediscover-quickly-after-step-down.json b/testdata/server-discovery-and-monitoring/unified/rediscover-quickly-after-step-down.json deleted file mode 100644 index 3147a07a1e..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/rediscover-quickly-after-step-down.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "description": "rediscover-quickly-after-step-down", - "schemaVersion": "1.4", - "runOnRequirements": [ - { - "minServerVersion": "4.4", - "serverless": "forbid", - "topologies": [ - "replicaset" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "setupClient" - } - }, - { - "database": { - "id": "adminDatabase", - "client": "setupClient", - "databaseName": "admin" - } - } - ], - "initialData": [ - { - "collectionName": "test-replSetStepDown", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ], - "tests": [ - { - "description": "Rediscover quickly after replSetStepDown", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeEvents": [ - "poolClearedEvent", - "commandStartedEvent" - ], - "uriOptions": { - "appname": "replSetStepDownTest", - "heartbeatFrequencyMS": 60000, - "serverSelectionTimeoutMS": 5000, - "w": "majority" - } - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "sdam-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "test-replSetStepDown" - } - } - ] - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 3 - }, - { - "_id": 4 - } - ] - } - }, - { - "name": "recordTopologyDescription", - "object": "testRunner", - "arguments": { - "client": "client", - "id": "topologyDescription" - } - }, - { - "name": "assertTopologyType", - "object": "testRunner", - "arguments": { - "topologyDescription": "topologyDescription", - "topologyType": "ReplicaSetWithPrimary" - } - }, - { - "name": "runCommand", - "object": "adminDatabase", - "arguments": { - "command": { - "replSetFreeze": 0 - }, - "readPreference": { - "mode": "secondary" - }, - "commandName": "replSetFreeze" - } - }, - { - "name": "runCommand", - "object": "adminDatabase", - "arguments": { - "command": { - "replSetStepDown": 30, - "secondaryCatchUpPeriodSecs": 30, - "force": false - }, - "commandName": "replSetStepDown" - } - }, - { - "name": "waitForPrimaryChange", - "object": "testRunner", - "arguments": { - "client": "client", - "priorTopologyDescription": "topologyDescription", - "timeoutMS": 15000 - } - }, - { - "name": "insertMany", - "object": "collection", - "arguments": { - "documents": [ - { - "_id": 5 - }, - { - "_id": 6 - } - ] - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "poolClearedEvent": {} - }, - "count": 0 - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "command", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "test-replSetStepDown", - "documents": [ - { - "_id": 3 - }, - { - "_id": 4 - } - ] - }, - "commandName": "insert", - "databaseName": "sdam-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "insert": "test-replSetStepDown", - "documents": [ - { - "_id": 5 - }, - { - "_id": 6 - } - ] - }, - "commandName": "insert", - "databaseName": "sdam-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test-replSetStepDown", - "databaseName": "sdam-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - }, - { - "_id": 3 - }, - { - "_id": 4 - }, - { - "_id": 5 - }, - { - "_id": 6 - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/rediscover-quickly-after-step-down.yml b/testdata/server-discovery-and-monitoring/unified/rediscover-quickly-after-step-down.yml deleted file mode 100644 index f3e7509160..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/rediscover-quickly-after-step-down.yml +++ /dev/null @@ -1,144 +0,0 @@ ---- -description: rediscover-quickly-after-step-down - -schemaVersion: "1.4" - -runOnRequirements: - # 4.4 is required for streaming. - # A replica set is required for replSetStepDown. - - minServerVersion: "4.4" - serverless: forbid - topologies: - - replicaset - -createEntities: - - client: - id: &setupClient setupClient - - database: - id: &adminDatabase adminDatabase - client: *setupClient - databaseName: admin - -initialData: &initialData - - collectionName: &collectionName test-replSetStepDown - databaseName: &databaseName sdam-tests - documents: - - _id: 1 - - _id: 2 - -tests: - - description: Rediscover quickly after replSetStepDown - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - observeEvents: - - poolClearedEvent - - commandStartedEvent - uriOptions: - appname: replSetStepDownTest - # Configure a large heartbeatFrequencyMS - heartbeatFrequencyMS: 60000 - # Configure a much smaller server selection timeout so that the test - # will error when it cannot discover the new primary soon. - serverSelectionTimeoutMS: 5000 - w: majority - - database: - id: &database database - client: *client - databaseName: *databaseName - - collection: - id: &collection collection - database: *database - collectionName: *collectionName - # Discover the primary. - - name: insertMany - object: *collection - arguments: - documents: - - _id: 3 - - _id: 4 - - name: recordTopologyDescription - object: testRunner - arguments: - client: *client - id: &topologyDescription topologyDescription - - name: assertTopologyType - object: testRunner - arguments: - topologyDescription: *topologyDescription - topologyType: ReplicaSetWithPrimary - # Unfreeze a secondary with replSetFreeze:0 to ensure a speedy election. - - name: runCommand - object: *adminDatabase - arguments: - command: - replSetFreeze: 0 - readPreference: - mode: secondary - commandName: replSetFreeze - # Run replSetStepDown on the meta client. - - name: runCommand - object: *adminDatabase - arguments: - command: - replSetStepDown: 30 - secondaryCatchUpPeriodSecs: 30 - force: false - commandName: replSetStepDown - - name: waitForPrimaryChange - object: testRunner - arguments: - client: *client - priorTopologyDescription: *topologyDescription - # We use a relatively large timeout here to workaround slow - # elections on Windows, possibly caused by SERVER-48154. - timeoutMS: 15000 - # Rediscover the new primary. - - name: insertMany - object: *collection - arguments: - documents: - - _id: 5 - - _id: 6 - # Assert that no pools were cleared. - - name: assertEventCount - object: testRunner - arguments: - client: *client - event: - poolClearedEvent: {} - count: 0 - expectEvents: - - client: *client - eventType: command - events: - - commandStartedEvent: - command: - insert: test-replSetStepDown - documents: - - _id: 3 - - _id: 4 - commandName: insert - databaseName: *databaseName - - commandStartedEvent: - command: - insert: test-replSetStepDown - documents: - - _id: 5 - - _id: 6 - commandName: insert - databaseName: *databaseName - outcome: - - collectionName: *collectionName - databaseName: *databaseName - documents: - - _id: 1 - - _id: 2 - - _id: 3 - - _id: 4 - - _id: 5 - - _id: 6 diff --git a/testdata/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json b/testdata/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json deleted file mode 100644 index 066a4ffee5..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "description": "replicaset-emit-topology-description-changed-before-close", - "schemaVersion": "1.20", - "runOnRequirements": [ - { - "topologies": [ - "replicaset" - ], - "minServerVersion": "4.4" - } - ], - "tests": [ - { - "description": "Topology lifecycle", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeEvents": [ - "topologyDescriptionChangedEvent", - "topologyOpeningEvent", - "topologyClosedEvent" - ] - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "topologyDescriptionChangedEvent": {} - }, - "count": 4 - } - }, - { - "name": "close", - "object": "client" - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "sdam", - "ignoreExtraEvents": false, - "events": [ - { - "topologyOpeningEvent": {} - }, - { - "topologyDescriptionChangedEvent": {} - }, - { - "topologyDescriptionChangedEvent": {} - }, - { - "topologyDescriptionChangedEvent": {} - }, - { - "topologyDescriptionChangedEvent": {} - }, - { - "topologyDescriptionChangedEvent": { - "previousDescription": { - "type": "ReplicaSetWithPrimary" - }, - "newDescription": { - "type": "Unknown" - } - } - }, - { - "topologyClosedEvent": {} - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml b/testdata/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml deleted file mode 100644 index d0a1158ea9..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/replicaset-emit-topology-changed-before-close.yml +++ /dev/null @@ -1,49 +0,0 @@ -description: "replicaset-emit-topology-description-changed-before-close" - -schemaVersion: "1.20" - -runOnRequirements: - - topologies: - - replicaset - minServerVersion: "4.4" # awaitable hello - -tests: - - description: "Topology lifecycle" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - observeEvents: - - topologyDescriptionChangedEvent - - topologyOpeningEvent - - topologyClosedEvent - # ensure the topology has been fully discovered before closing the client. - # expected events are initial server discovery and 3 server connect events. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - topologyDescriptionChangedEvent: {} - count: 4 - - name: close - object: *client - expectEvents: - - client: *client - eventType: sdam - ignoreExtraEvents: false - events: - - topologyOpeningEvent: {} - - topologyDescriptionChangedEvent: {} # unknown -> replset no primary - - topologyDescriptionChangedEvent: {} # server connected - - topologyDescriptionChangedEvent: {} # server connected - - topologyDescriptionChangedEvent: {} # server connected - - topologyDescriptionChangedEvent: # replicaset -> unknown - previousDescription: - type: "ReplicaSetWithPrimary" - newDescription: - type: "Unknown" - - topologyClosedEvent: {} diff --git a/testdata/server-discovery-and-monitoring/unified/serverMonitoringMode.json b/testdata/server-discovery-and-monitoring/unified/serverMonitoringMode.json deleted file mode 100644 index 4b492f7d85..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/serverMonitoringMode.json +++ /dev/null @@ -1,512 +0,0 @@ -{ - "description": "serverMonitoringMode", - "schemaVersion": "1.17", - "runOnRequirements": [ - { - "topologies": [ - "single", - "sharded", - "sharded-replicaset" - ], - "serverless": "forbid" - } - ], - "tests": [ - { - "description": "connect with serverMonitoringMode=auto >=4.4", - "runOnRequirements": [ - { - "minServerVersion": "4.4.0" - } - ], - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "serverMonitoringMode": "auto" - }, - "useMultipleMongoses": false, - "observeEvents": [ - "serverHeartbeatStartedEvent", - "serverHeartbeatSucceededEvent", - "serverHeartbeatFailedEvent" - ] - } - }, - { - "database": { - "id": "db", - "client": "client", - "databaseName": "sdam-tests" - } - } - ] - } - }, - { - "name": "runCommand", - "object": "db", - "arguments": { - "commandName": "ping", - "command": { - "ping": 1 - } - }, - "expectResult": { - "ok": 1 - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverHeartbeatStartedEvent": {} - }, - "count": 2 - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "sdam", - "ignoreExtraEvents": true, - "events": [ - { - "serverHeartbeatStartedEvent": { - "awaited": false - } - }, - { - "serverHeartbeatSucceededEvent": { - "awaited": false - } - }, - { - "serverHeartbeatStartedEvent": { - "awaited": true - } - } - ] - } - ] - }, - { - "description": "connect with serverMonitoringMode=auto <4.4", - "runOnRequirements": [ - { - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "serverMonitoringMode": "auto", - "heartbeatFrequencyMS": 500 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "serverHeartbeatStartedEvent", - "serverHeartbeatSucceededEvent", - "serverHeartbeatFailedEvent" - ] - } - }, - { - "database": { - "id": "db", - "client": "client", - "databaseName": "sdam-tests" - } - } - ] - } - }, - { - "name": "runCommand", - "object": "db", - "arguments": { - "commandName": "ping", - "command": { - "ping": 1 - } - }, - "expectResult": { - "ok": 1 - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverHeartbeatStartedEvent": {} - }, - "count": 2 - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "sdam", - "ignoreExtraEvents": true, - "events": [ - { - "serverHeartbeatStartedEvent": { - "awaited": false - } - }, - { - "serverHeartbeatSucceededEvent": { - "awaited": false - } - }, - { - "serverHeartbeatStartedEvent": { - "awaited": false - } - } - ] - } - ] - }, - { - "description": "connect with serverMonitoringMode=stream >=4.4", - "runOnRequirements": [ - { - "minServerVersion": "4.4.0" - } - ], - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "serverMonitoringMode": "stream" - }, - "useMultipleMongoses": false, - "observeEvents": [ - "serverHeartbeatStartedEvent", - "serverHeartbeatSucceededEvent", - "serverHeartbeatFailedEvent" - ] - } - }, - { - "database": { - "id": "db", - "client": "client", - "databaseName": "sdam-tests" - } - } - ] - } - }, - { - "name": "runCommand", - "object": "db", - "arguments": { - "commandName": "ping", - "command": { - "ping": 1 - } - }, - "expectResult": { - "ok": 1 - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverHeartbeatStartedEvent": {} - }, - "count": 2 - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "sdam", - "ignoreExtraEvents": true, - "events": [ - { - "serverHeartbeatStartedEvent": { - "awaited": false - } - }, - { - "serverHeartbeatSucceededEvent": { - "awaited": false - } - }, - { - "serverHeartbeatStartedEvent": { - "awaited": true - } - } - ] - } - ] - }, - { - "description": "connect with serverMonitoringMode=stream <4.4", - "runOnRequirements": [ - { - "maxServerVersion": "4.2.99" - } - ], - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "serverMonitoringMode": "stream", - "heartbeatFrequencyMS": 500 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "serverHeartbeatStartedEvent", - "serverHeartbeatSucceededEvent", - "serverHeartbeatFailedEvent" - ] - } - }, - { - "database": { - "id": "db", - "client": "client", - "databaseName": "sdam-tests" - } - } - ] - } - }, - { - "name": "runCommand", - "object": "db", - "arguments": { - "commandName": "ping", - "command": { - "ping": 1 - } - }, - "expectResult": { - "ok": 1 - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverHeartbeatStartedEvent": {} - }, - "count": 2 - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "sdam", - "ignoreExtraEvents": true, - "events": [ - { - "serverHeartbeatStartedEvent": { - "awaited": false - } - }, - { - "serverHeartbeatSucceededEvent": { - "awaited": false - } - }, - { - "serverHeartbeatStartedEvent": { - "awaited": false - } - } - ] - } - ] - }, - { - "description": "connect with serverMonitoringMode=poll", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "serverMonitoringMode": "poll", - "heartbeatFrequencyMS": 500 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "serverHeartbeatStartedEvent", - "serverHeartbeatSucceededEvent", - "serverHeartbeatFailedEvent" - ] - } - }, - { - "database": { - "id": "db", - "client": "client", - "databaseName": "sdam-tests" - } - } - ] - } - }, - { - "name": "runCommand", - "object": "db", - "arguments": { - "commandName": "ping", - "command": { - "ping": 1 - } - }, - "expectResult": { - "ok": 1 - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverHeartbeatStartedEvent": {} - }, - "count": 2 - } - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "sdam", - "ignoreExtraEvents": true, - "events": [ - { - "serverHeartbeatStartedEvent": { - "awaited": false - } - }, - { - "serverHeartbeatSucceededEvent": { - "awaited": false - } - }, - { - "serverHeartbeatStartedEvent": { - "awaited": false - } - } - ] - } - ] - }, - { - "description": "poll waits after successful heartbeat", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "uriOptions": { - "serverMonitoringMode": "poll", - "heartbeatFrequencyMS": 1000000 - }, - "useMultipleMongoses": false, - "observeEvents": [ - "serverHeartbeatStartedEvent", - "serverHeartbeatSucceededEvent" - ] - } - }, - { - "database": { - "id": "db", - "client": "client", - "databaseName": "sdam-tests" - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverHeartbeatSucceededEvent": {} - }, - "count": 1 - } - }, - { - "name": "wait", - "object": "testRunner", - "arguments": { - "ms": 500 - } - }, - { - "name": "assertEventCount", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverHeartbeatStartedEvent": {} - }, - "count": 1 - } - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/serverMonitoringMode.yml b/testdata/server-discovery-and-monitoring/unified/serverMonitoringMode.yml deleted file mode 100644 index 5a81f0e1ad..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/serverMonitoringMode.yml +++ /dev/null @@ -1,213 +0,0 @@ -description: serverMonitoringMode - -schemaVersion: "1.17" -# These tests cannot run on replica sets because the order of the expected -# SDAM events are non-deterministic when monitoring multiple servers. -# They also cannot run on Serverless or load balanced clusters where SDAM is disabled. -runOnRequirements: - - topologies: [single, sharded, sharded-replicaset] - serverless: forbid -tests: - - description: "connect with serverMonitoringMode=auto >=4.4" - runOnRequirements: - - minServerVersion: "4.4.0" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: client - uriOptions: - serverMonitoringMode: "auto" - useMultipleMongoses: false - observeEvents: - - serverHeartbeatStartedEvent - - serverHeartbeatSucceededEvent - - serverHeartbeatFailedEvent - - database: - id: db - client: client - databaseName: sdam-tests - - &ping - name: runCommand - object: db - arguments: - commandName: ping - command: { ping: 1 } - expectResult: { ok: 1 } - # Wait for the second serverHeartbeatStartedEvent to ensure we start streaming. - - &waitForSecondHeartbeatStarted - name: waitForEvent - object: testRunner - arguments: - client: client - event: - serverHeartbeatStartedEvent: {} - count: 2 - expectEvents: &streamingStartedEvents - - client: client - eventType: sdam - ignoreExtraEvents: true - events: - - serverHeartbeatStartedEvent: - awaited: False - - serverHeartbeatSucceededEvent: - awaited: False - - serverHeartbeatStartedEvent: - awaited: True - - - description: "connect with serverMonitoringMode=auto <4.4" - runOnRequirements: - - maxServerVersion: "4.2.99" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: client - uriOptions: - serverMonitoringMode: "auto" - heartbeatFrequencyMS: 500 - useMultipleMongoses: false - observeEvents: - - serverHeartbeatStartedEvent - - serverHeartbeatSucceededEvent - - serverHeartbeatFailedEvent - - database: - id: db - client: client - databaseName: sdam-tests - - *ping - # Wait for the second serverHeartbeatStartedEvent to ensure we do not stream. - - *waitForSecondHeartbeatStarted - expectEvents: &pollingStartedEvents - - client: client - eventType: sdam - ignoreExtraEvents: true - events: - - serverHeartbeatStartedEvent: - awaited: False - - serverHeartbeatSucceededEvent: - awaited: False - - serverHeartbeatStartedEvent: - awaited: False - - - description: "connect with serverMonitoringMode=stream >=4.4" - runOnRequirements: - - minServerVersion: "4.4.0" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: client - uriOptions: - serverMonitoringMode: "stream" - useMultipleMongoses: false - observeEvents: - - serverHeartbeatStartedEvent - - serverHeartbeatSucceededEvent - - serverHeartbeatFailedEvent - - database: - id: db - client: client - databaseName: sdam-tests - - *ping - # Wait for the second serverHeartbeatStartedEvent to ensure we start streaming. - - *waitForSecondHeartbeatStarted - expectEvents: *streamingStartedEvents - - - description: "connect with serverMonitoringMode=stream <4.4" - runOnRequirements: - - maxServerVersion: "4.2.99" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: client - uriOptions: - serverMonitoringMode: "stream" - heartbeatFrequencyMS: 500 - useMultipleMongoses: false - observeEvents: - - serverHeartbeatStartedEvent - - serverHeartbeatSucceededEvent - - serverHeartbeatFailedEvent - - database: - id: db - client: client - databaseName: sdam-tests - - *ping - # Wait for the second serverHeartbeatStartedEvent to ensure we do not stream. - - *waitForSecondHeartbeatStarted - expectEvents: *pollingStartedEvents - - - description: "connect with serverMonitoringMode=poll" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: client - uriOptions: - serverMonitoringMode: "poll" - heartbeatFrequencyMS: 500 - useMultipleMongoses: false - observeEvents: - - serverHeartbeatStartedEvent - - serverHeartbeatSucceededEvent - - serverHeartbeatFailedEvent - - database: - id: db - client: client - databaseName: sdam-tests - - *ping - # Wait for the second serverHeartbeatStartedEvent to ensure we do not stream. - - *waitForSecondHeartbeatStarted - expectEvents: *pollingStartedEvents - - - description: "poll waits after successful heartbeat" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: client - uriOptions: - serverMonitoringMode: "poll" - heartbeatFrequencyMS: 1000000 - useMultipleMongoses: false - observeEvents: - - serverHeartbeatStartedEvent - - serverHeartbeatSucceededEvent - - database: - id: db - client: client - databaseName: sdam-tests - # Wait for the first serverHeartbeatSucceededEvent to ensure we start polling. - - name: waitForEvent - object: testRunner - arguments: - client: client - event: - serverHeartbeatSucceededEvent: {} - count: 1 - # Wait for a bit longer to ensure we wait heartbeatFrequencyMS before starting the next check. - - name: wait - object: testRunner - arguments: - ms: 500 - - name: assertEventCount - object: testRunner - arguments: - client: client - event: - serverHeartbeatStartedEvent: {} - count: 1 diff --git a/testdata/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.json b/testdata/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.json deleted file mode 100644 index 98fb585531..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "description": "sharded-emit-topology-description-changed-before-close", - "schemaVersion": "1.20", - "runOnRequirements": [ - { - "topologies": [ - "sharded" - ], - "minServerVersion": "4.4" - } - ], - "tests": [ - { - "description": "Topology lifecycle", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeEvents": [ - "topologyDescriptionChangedEvent", - "topologyOpeningEvent", - "topologyClosedEvent" - ], - "useMultipleMongoses": true - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "topologyDescriptionChangedEvent": {} - }, - "count": 3 - } - }, - { - "name": "close", - "object": "client" - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "sdam", - "ignoreExtraEvents": false, - "events": [ - { - "topologyOpeningEvent": {} - }, - { - "topologyDescriptionChangedEvent": { - "previousDescription": { - "type": "Unknown" - }, - "newDescription": { - "type": "Unknown" - } - } - }, - { - "topologyDescriptionChangedEvent": { - "previousDescription": { - "type": "Unknown" - }, - "newDescription": { - "type": "Sharded" - } - } - }, - { - "topologyDescriptionChangedEvent": { - "previousDescription": { - "type": "Sharded" - }, - "newDescription": { - "type": "Sharded" - } - } - }, - { - "topologyDescriptionChangedEvent": { - "previousDescription": { - "type": "Sharded" - }, - "newDescription": { - "type": "Unknown" - } - } - }, - { - "topologyClosedEvent": {} - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.yml b/testdata/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.yml deleted file mode 100644 index cb6cc5ad4d..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/sharded-emit-topology-changed-before-close.yml +++ /dev/null @@ -1,62 +0,0 @@ -description: "sharded-emit-topology-description-changed-before-close" - -schemaVersion: "1.20" - -runOnRequirements: - - topologies: - - sharded - minServerVersion: "4.4" # awaitable hello - -tests: - - description: "Topology lifecycle" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - observeEvents: - - topologyDescriptionChangedEvent - - topologyOpeningEvent - - topologyClosedEvent - useMultipleMongoses: true - # ensure the topology has been fully discovered before closing the client. - # expected events are initial cluster type change from unknown to sharded and connect events - # for each of 2 servers - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - topologyDescriptionChangedEvent: {} - count: 3 - - name: close - object: *client - expectEvents: - - client: *client - eventType: sdam - ignoreExtraEvents: false - events: - - topologyOpeningEvent: {} - - topologyDescriptionChangedEvent: # unknown -> unknown w disconnected server - previousDescription: - type: "Unknown" - newDescription: - type: "Unknown" - - topologyDescriptionChangedEvent: # server connected - previousDescription: - type: "Unknown" - newDescription: - type: "Sharded" - - topologyDescriptionChangedEvent: # server connected - previousDescription: - type: "Sharded" - newDescription: - type: "Sharded" - - topologyDescriptionChangedEvent: # sharded -> unknown - previousDescription: - type: "Sharded" - newDescription: - type: "Unknown" - - topologyClosedEvent: {} diff --git a/testdata/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json b/testdata/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json deleted file mode 100644 index 27b5444d54..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "description": "standalone-emit-topology-description-changed-before-close", - "schemaVersion": "1.20", - "runOnRequirements": [ - { - "topologies": [ - "single" - ], - "minServerVersion": "4.4" - } - ], - "tests": [ - { - "description": "Topology lifecycle", - "operations": [ - { - "name": "createEntities", - "object": "testRunner", - "arguments": { - "entities": [ - { - "client": { - "id": "client", - "observeEvents": [ - "topologyDescriptionChangedEvent", - "topologyOpeningEvent", - "topologyClosedEvent" - ] - } - } - ] - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "topologyDescriptionChangedEvent": {} - }, - "count": 2 - } - }, - { - "name": "close", - "object": "client" - } - ], - "expectEvents": [ - { - "client": "client", - "eventType": "sdam", - "ignoreExtraEvents": false, - "events": [ - { - "topologyOpeningEvent": {} - }, - { - "topologyDescriptionChangedEvent": { - "previousDescription": { - "type": "Unknown" - }, - "newDescription": { - "type": "Unknown" - } - } - }, - { - "topologyDescriptionChangedEvent": { - "previousDescription": { - "type": "Unknown" - }, - "newDescription": { - "type": "Single" - } - } - }, - { - "topologyDescriptionChangedEvent": { - "previousDescription": { - "type": "Single" - }, - "newDescription": { - "type": "Unknown" - } - } - }, - { - "topologyClosedEvent": {} - } - ] - } - ] - } - ] -} diff --git a/testdata/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml b/testdata/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml deleted file mode 100644 index 20fa380bd5..0000000000 --- a/testdata/server-discovery-and-monitoring/unified/standalone-emit-topology-changed-before-close.yml +++ /dev/null @@ -1,55 +0,0 @@ -description: "standalone-emit-topology-description-changed-before-close" - -schemaVersion: "1.20" - -runOnRequirements: - - topologies: - - single - minServerVersion: "4.4" # awaitable hello - -tests: - - description: "Topology lifecycle" - operations: - - name: createEntities - object: testRunner - arguments: - entities: - - client: - id: &client client - observeEvents: - - topologyDescriptionChangedEvent - - topologyOpeningEvent - - topologyClosedEvent - # ensure the topology has been fully discovered before closing the client. - # expected events are initial server discovery and server connect event. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - topologyDescriptionChangedEvent: {} - count: 2 - - name: close - object: *client - expectEvents: - - client: *client - eventType: sdam - ignoreExtraEvents: false - events: - - topologyOpeningEvent: {} - - topologyDescriptionChangedEvent: # unknown -> unknown w disconnected server - previousDescription: - type: "Unknown" - newDescription: - type: "Unknown" - - topologyDescriptionChangedEvent: # unknown w disconnected server -> standalone - previousDescription: - type: "Unknown" - newDescription: - type: "Single" - - topologyDescriptionChangedEvent: # standalone -> unknown - previousDescription: - type: "Single" - newDescription: - type: "Unknown" - - topologyClosedEvent: {} diff --git a/testdata/server-selection/in_window/equilibrium.json b/testdata/server-selection/in_window/equilibrium.json deleted file mode 100644 index c5f177d49b..0000000000 --- a/testdata/server-selection/in_window/equilibrium.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "description": "When in equilibrium selection is evenly distributed", - "topology_description": { - "type": "Sharded", - "servers": [ - { - "address": "a:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - }, - { - "address": "b:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - }, - { - "address": "c:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ] - }, - "mocked_topology_state": [ - { - "address": "a:27017", - "operation_count": 5 - }, - { - "address": "b:27017", - "operation_count": 5 - }, - { - "address": "c:27017", - "operation_count": 5 - } - ], - "iterations": 2000, - "outcome": { - "tolerance": 0.05, - "expected_frequencies": { - "a:27017": 0.33, - "b:27017": 0.33, - "c:27017": 0.33 - } - } -} diff --git a/testdata/server-selection/in_window/equilibrium.yml b/testdata/server-selection/in_window/equilibrium.yml deleted file mode 100644 index a79fa21b1d..0000000000 --- a/testdata/server-selection/in_window/equilibrium.yml +++ /dev/null @@ -1,27 +0,0 @@ -description: When in equilibrium selection is evenly distributed -topology_description: - type: Sharded - servers: - - address: a:27017 - avg_rtt_ms: 35 - type: Mongos - - address: b:27017 - avg_rtt_ms: 35 - type: Mongos - - address: c:27017 - avg_rtt_ms: 35 - type: Mongos -mocked_topology_state: - - address: a:27017 - operation_count: 5 - - address: b:27017 - operation_count: 5 - - address: c:27017 - operation_count: 5 -iterations: 2000 -outcome: - tolerance: 0.05 - expected_frequencies: - a:27017: 0.33 - b:27017: 0.33 - c:27017: 0.33 diff --git a/testdata/server-selection/in_window/many-choices.json b/testdata/server-selection/in_window/many-choices.json deleted file mode 100644 index 7e940513ef..0000000000 --- a/testdata/server-selection/in_window/many-choices.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "description": "Selections from many choices occur at correct frequencies", - "topology_description": { - "type": "Sharded", - "servers": [ - { - "address": "a:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - }, - { - "address": "b:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - }, - { - "address": "c:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - }, - { - "address": "d:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - }, - { - "address": "e:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - }, - { - "address": "f:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - }, - { - "address": "g:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - }, - { - "address": "h:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - }, - { - "address": "i:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ] - }, - "mocked_topology_state": [ - { - "address": "a:27017", - "operation_count": 0 - }, - { - "address": "b:27017", - "operation_count": 5 - }, - { - "address": "c:27017", - "operation_count": 5 - }, - { - "address": "d:27017", - "operation_count": 10 - }, - { - "address": "e:27017", - "operation_count": 10 - }, - { - "address": "f:27017", - "operation_count": 20 - }, - { - "address": "g:27017", - "operation_count": 20 - }, - { - "address": "h:27017", - "operation_count": 50 - }, - { - "address": "i:27017", - "operation_count": 60 - } - ], - "iterations": 10000, - "outcome": { - "tolerance": 0.03, - "expected_frequencies": { - "a:27017": 0.22, - "b:27017": 0.18, - "c:27017": 0.18, - "d:27017": 0.125, - "e:27017": 0.125, - "f:27017": 0.074, - "g:27017": 0.074, - "h:27017": 0.0277, - "i:27017": 0 - } - } -} diff --git a/testdata/server-selection/in_window/many-choices.yml b/testdata/server-selection/in_window/many-choices.yml deleted file mode 100644 index 6b3292129d..0000000000 --- a/testdata/server-selection/in_window/many-choices.yml +++ /dev/null @@ -1,63 +0,0 @@ -description: Selections from many choices occur at correct frequencies -topology_description: - type: Sharded - servers: - - address: a:27017 - avg_rtt_ms: 35 - type: Mongos - - address: b:27017 - avg_rtt_ms: 35 - type: Mongos - - address: c:27017 - avg_rtt_ms: 35 - type: Mongos - - address: d:27017 - avg_rtt_ms: 35 - type: Mongos - - address: e:27017 - avg_rtt_ms: 35 - type: Mongos - - address: f:27017 - avg_rtt_ms: 35 - type: Mongos - - address: g:27017 - avg_rtt_ms: 35 - type: Mongos - - address: h:27017 - avg_rtt_ms: 35 - type: Mongos - - address: i:27017 - avg_rtt_ms: 35 - type: Mongos -mocked_topology_state: - - address: a:27017 - operation_count: 0 - - address: b:27017 - operation_count: 5 - - address: c:27017 - operation_count: 5 - - address: d:27017 - operation_count: 10 - - address: e:27017 - operation_count: 10 - - address: f:27017 - operation_count: 20 - - address: g:27017 - operation_count: 20 - - address: h:27017 - operation_count: 50 - - address: i:27017 - operation_count: 60 -iterations: 10000 -outcome: - tolerance: 0.03 - expected_frequencies: - a:27017: 0.22 - b:27017: 0.18 - c:27017: 0.18 - d:27017: 0.125 - e:27017: 0.125 - f:27017: 0.074 - g:27017: 0.074 - h:27017: 0.0277 - i:27017: 0 diff --git a/testdata/server-selection/in_window/one-least-two-tied.json b/testdata/server-selection/in_window/one-least-two-tied.json deleted file mode 100644 index ed7526e716..0000000000 --- a/testdata/server-selection/in_window/one-least-two-tied.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "description": "Least operations gets most selections, two tied share the rest", - "topology_description": { - "type": "Sharded", - "servers": [ - { - "address": "a:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - }, - { - "address": "b:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - }, - { - "address": "c:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ] - }, - "mocked_topology_state": [ - { - "address": "a:27017", - "operation_count": 16 - }, - { - "address": "b:27017", - "operation_count": 10 - }, - { - "address": "c:27017", - "operation_count": 16 - } - ], - "iterations": 2000, - "outcome": { - "tolerance": 0.05, - "expected_frequencies": { - "a:27017": 0.165, - "b:27017": 0.66, - "c:27017": 0.165 - } - } -} diff --git a/testdata/server-selection/in_window/one-least-two-tied.yml b/testdata/server-selection/in_window/one-least-two-tied.yml deleted file mode 100644 index e05bdfaf70..0000000000 --- a/testdata/server-selection/in_window/one-least-two-tied.yml +++ /dev/null @@ -1,27 +0,0 @@ -description: Least operations gets most selections, two tied share the rest -topology_description: - type: Sharded - servers: - - address: a:27017 - avg_rtt_ms: 35 - type: Mongos - - address: b:27017 - avg_rtt_ms: 35 - type: Mongos - - address: c:27017 - avg_rtt_ms: 35 - type: Mongos -mocked_topology_state: - - address: a:27017 - operation_count: 16 - - address: b:27017 - operation_count: 10 - - address: c:27017 - operation_count: 16 -iterations: 2000 -outcome: - tolerance: 0.05 - expected_frequencies: - a:27017: 0.165 - b:27017: 0.66 - c:27017: 0.165 diff --git a/testdata/server-selection/in_window/rs-equilibrium.json b/testdata/server-selection/in_window/rs-equilibrium.json deleted file mode 100644 index 61c6687e50..0000000000 --- a/testdata/server-selection/in_window/rs-equilibrium.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "description": "When in equilibrium selection is evenly distributed (replica set)", - "topology_description": { - "type": "ReplicaSetWithPrimary", - "servers": [ - { - "address": "a:27017", - "avg_rtt_ms": 35, - "type": "RSPrimary" - }, - { - "address": "b:27017", - "avg_rtt_ms": 35, - "type": "RSSecondary" - }, - { - "address": "c:27017", - "avg_rtt_ms": 35, - "type": "RSSecondary" - } - ] - }, - "mocked_topology_state": [ - { - "address": "a:27017", - "operation_count": 6 - }, - { - "address": "b:27017", - "operation_count": 6 - }, - { - "address": "c:27017", - "operation_count": 6 - } - ], - "iterations": 2000, - "outcome": { - "tolerance": 0.05, - "expected_frequencies": { - "a:27017": 0.33, - "b:27017": 0.33, - "c:27017": 0.33 - } - } -} diff --git a/testdata/server-selection/in_window/rs-equilibrium.yml b/testdata/server-selection/in_window/rs-equilibrium.yml deleted file mode 100644 index 0d8006a2d4..0000000000 --- a/testdata/server-selection/in_window/rs-equilibrium.yml +++ /dev/null @@ -1,27 +0,0 @@ -description: When in equilibrium selection is evenly distributed (replica set) -topology_description: - type: ReplicaSetWithPrimary - servers: - - address: a:27017 - avg_rtt_ms: 35 - type: RSPrimary - - address: b:27017 - avg_rtt_ms: 35 - type: RSSecondary - - address: c:27017 - avg_rtt_ms: 35 - type: RSSecondary -mocked_topology_state: - - address: a:27017 - operation_count: 6 - - address: b:27017 - operation_count: 6 - - address: c:27017 - operation_count: 6 -iterations: 2000 -outcome: - tolerance: 0.05 - expected_frequencies: - a:27017: 0.33 - b:27017: 0.33 - c:27017: 0.33 diff --git a/testdata/server-selection/in_window/rs-three-choices.json b/testdata/server-selection/in_window/rs-three-choices.json deleted file mode 100644 index 3fdc15205c..0000000000 --- a/testdata/server-selection/in_window/rs-three-choices.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "description": "Selections from three servers occur at proper distributions (replica set)", - "topology_description": { - "type": "ReplicaSetWithPrimary", - "servers": [ - { - "address": "a:27017", - "avg_rtt_ms": 35, - "type": "RSPrimary" - }, - { - "address": "b:27017", - "avg_rtt_ms": 35, - "type": "RSSecondary" - }, - { - "address": "c:27017", - "avg_rtt_ms": 35, - "type": "RSSecondary" - } - ] - }, - "mocked_topology_state": [ - { - "address": "a:27017", - "operation_count": 3 - }, - { - "address": "b:27017", - "operation_count": 6 - }, - { - "address": "c:27017", - "operation_count": 20 - } - ], - "iterations": 2000, - "outcome": { - "tolerance": 0.05, - "expected_frequencies": { - "a:27017": 0.66, - "b:27017": 0.33, - "c:27017": 0 - } - } -} diff --git a/testdata/server-selection/in_window/rs-three-choices.yml b/testdata/server-selection/in_window/rs-three-choices.yml deleted file mode 100644 index 514f7e66b3..0000000000 --- a/testdata/server-selection/in_window/rs-three-choices.yml +++ /dev/null @@ -1,27 +0,0 @@ -description: Selections from three servers occur at proper distributions (replica set) -topology_description: - type: ReplicaSetWithPrimary - servers: - - address: a:27017 - avg_rtt_ms: 35 - type: RSPrimary - - address: b:27017 - avg_rtt_ms: 35 - type: RSSecondary - - address: c:27017 - avg_rtt_ms: 35 - type: RSSecondary -mocked_topology_state: - - address: a:27017 - operation_count: 3 - - address: b:27017 - operation_count: 6 - - address: c:27017 - operation_count: 20 -iterations: 2000 -outcome: - tolerance: 0.05 - expected_frequencies: - a:27017: 0.66 - b:27017: 0.33 - c:27017: 0 diff --git a/testdata/server-selection/in_window/three-choices.json b/testdata/server-selection/in_window/three-choices.json deleted file mode 100644 index 7b5b414549..0000000000 --- a/testdata/server-selection/in_window/three-choices.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "description": "Selections from three servers occur at proper distributions", - "topology_description": { - "type": "Sharded", - "servers": [ - { - "address": "a:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - }, - { - "address": "b:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - }, - { - "address": "c:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ] - }, - "mocked_topology_state": [ - { - "address": "a:27017", - "operation_count": 3 - }, - { - "address": "b:27017", - "operation_count": 6 - }, - { - "address": "c:27017", - "operation_count": 20 - } - ], - "iterations": 2000, - "outcome": { - "tolerance": 0.05, - "expected_frequencies": { - "a:27017": 0.66, - "b:27017": 0.33, - "c:27017": 0 - } - } -} diff --git a/testdata/server-selection/in_window/three-choices.yml b/testdata/server-selection/in_window/three-choices.yml deleted file mode 100644 index ffc9f53ea6..0000000000 --- a/testdata/server-selection/in_window/three-choices.yml +++ /dev/null @@ -1,27 +0,0 @@ -description: Selections from three servers occur at proper distributions -topology_description: - type: Sharded - servers: - - address: a:27017 - avg_rtt_ms: 35 - type: Mongos - - address: b:27017 - avg_rtt_ms: 35 - type: Mongos - - address: c:27017 - avg_rtt_ms: 35 - type: Mongos -mocked_topology_state: - - address: a:27017 - operation_count: 3 - - address: b:27017 - operation_count: 6 - - address: c:27017 - operation_count: 20 -iterations: 2000 -outcome: - tolerance: 0.05 - expected_frequencies: - a:27017: 0.66 - b:27017: 0.33 - c:27017: 0 diff --git a/testdata/server-selection/in_window/two-choices.json b/testdata/server-selection/in_window/two-choices.json deleted file mode 100644 index 2c7a605d8d..0000000000 --- a/testdata/server-selection/in_window/two-choices.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "description": "Better of two choices always selected", - "topology_description": { - "type": "Sharded", - "servers": [ - { - "address": "a:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - }, - { - "address": "b:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ] - }, - "mocked_topology_state": [ - { - "address": "a:27017", - "operation_count": 0 - }, - { - "address": "b:27017", - "operation_count": 5 - } - ], - "iterations": 100, - "outcome": { - "tolerance": 0, - "expected_frequencies": { - "a:27017": 1, - "b:27017": 0 - } - } -} diff --git a/testdata/server-selection/in_window/two-choices.yml b/testdata/server-selection/in_window/two-choices.yml deleted file mode 100644 index ef763d649e..0000000000 --- a/testdata/server-selection/in_window/two-choices.yml +++ /dev/null @@ -1,21 +0,0 @@ -description: Better of two choices always selected -topology_description: - type: Sharded - servers: - - address: a:27017 - avg_rtt_ms: 35 - type: Mongos - - address: b:27017 - avg_rtt_ms: 35 - type: Mongos -mocked_topology_state: - - address: a:27017 - operation_count: 0 - - address: b:27017 - operation_count: 5 -iterations: 100 -outcome: - tolerance: 0.0 - expected_frequencies: - a:27017: 1 - b:27017: 0 diff --git a/testdata/server-selection/in_window/two-least.json b/testdata/server-selection/in_window/two-least.json deleted file mode 100644 index 73214fc647..0000000000 --- a/testdata/server-selection/in_window/two-least.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "description": "Two tied for least operations share all selections", - "topology_description": { - "type": "Sharded", - "servers": [ - { - "address": "a:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - }, - { - "address": "b:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - }, - { - "address": "c:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ] - }, - "mocked_topology_state": [ - { - "address": "a:27017", - "operation_count": 10 - }, - { - "address": "b:27017", - "operation_count": 10 - }, - { - "address": "c:27017", - "operation_count": 16 - } - ], - "iterations": 2000, - "outcome": { - "tolerance": 0.05, - "expected_frequencies": { - "a:27017": 0.5, - "b:27017": 0.5, - "c:27017": 0 - } - } -} diff --git a/testdata/server-selection/in_window/two-least.yml b/testdata/server-selection/in_window/two-least.yml deleted file mode 100644 index ba4bf39ee1..0000000000 --- a/testdata/server-selection/in_window/two-least.yml +++ /dev/null @@ -1,27 +0,0 @@ -description: Two tied for least operations share all selections -topology_description: - type: Sharded - servers: - - address: a:27017 - avg_rtt_ms: 35 - type: Mongos - - address: b:27017 - avg_rtt_ms: 35 - type: Mongos - - address: c:27017 - avg_rtt_ms: 35 - type: Mongos -mocked_topology_state: - - address: a:27017 - operation_count: 10 - - address: b:27017 - operation_count: 10 - - address: c:27017 - operation_count: 16 -iterations: 2000 -outcome: - tolerance: 0.05 - expected_frequencies: - a:27017: 0.5 - b:27017: 0.5 - c:27017: 0 diff --git a/testdata/server-selection/logging/load-balanced.json b/testdata/server-selection/logging/load-balanced.json deleted file mode 100644 index 5855c4e991..0000000000 --- a/testdata/server-selection/logging/load-balanced.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "description": "server-selection-logging", - "schemaVersion": "1.13", - "runOnRequirements": [ - { - "topologies": [ - "load-balanced" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "client", - "uriOptions": { - "heartbeatFrequencyMS": 500 - }, - "observeLogMessages": { - "serverSelection": "debug" - }, - "observeEvents": [ - "serverDescriptionChangedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "logging-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "server-selection" - } - } - ], - "tests": [ - { - "description": "A successful operation - load balanced cluster", - "operations": [ - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "LoadBalancer" - } - } - }, - "count": 1 - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "x": 1 - } - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "serverSelection", - "data": { - "message": "Server selection started", - "selector": { - "$$exists": true - }, - "operation": "insert", - "topologyDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "serverSelection", - "data": { - "message": "Server selection succeeded", - "selector": { - "$$exists": true - }, - "operation": "insert", - "topologyDescription": { - "$$exists": true - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/server-selection/logging/load-balanced.yml b/testdata/server-selection/logging/load-balanced.yml deleted file mode 100644 index 7f86784147..0000000000 --- a/testdata/server-selection/logging/load-balanced.yml +++ /dev/null @@ -1,60 +0,0 @@ -description: "server-selection-logging" - -schemaVersion: "1.13" - -runOnRequirements: - - topologies: - - load-balanced - -createEntities: - - client: - id: &client client - uriOptions: - heartbeatFrequencyMS: 500 - observeLogMessages: - serverSelection: debug - observeEvents: - - serverDescriptionChangedEvent - - database: - id: &database database - client: *client - databaseName: &databaseName logging-tests - - collection: - id: &collection collection - database: *database - collectionName: &collectionName server-selection - -tests: - - description: "A successful operation - load balanced cluster" - operations: - # ensure we've discovered the entire topology before starting. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: LoadBalancer - count: 1 - - name: insertOne - object: *collection - arguments: - document: { x : 1 } - expectLogMessages: - - client: *client - messages: - - level: debug - component: serverSelection - data: - message: "Server selection started" - selector: { $$exists: true } - operation: insert - topologyDescription: { $$exists: true } - - level: debug - component: serverSelection - data: - message: "Server selection succeeded" - selector: { $$exists: true } - operation: insert - topologyDescription: { $$exists: true } diff --git a/testdata/server-selection/logging/operation-id.json b/testdata/server-selection/logging/operation-id.json deleted file mode 100644 index 72ebff60d8..0000000000 --- a/testdata/server-selection/logging/operation-id.json +++ /dev/null @@ -1,418 +0,0 @@ -{ - "description": "operation-id", - "schemaVersion": "1.14", - "runOnRequirements": [ - { - "topologies": [ - "single" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "client", - "uriOptions": { - "retryWrites": false, - "heartbeatFrequencyMS": 500, - "appName": "loggingClient", - "serverSelectionTimeoutMS": 2000 - }, - "observeLogMessages": { - "serverSelection": "debug" - }, - "observeEvents": [ - "serverDescriptionChangedEvent", - "topologyDescriptionChangedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "logging-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "server-selection" - } - }, - { - "client": { - "id": "failPointClient" - } - } - ], - "_yamlAnchors": { - "namespace": "logging-tests.server-selection" - }, - "tests": [ - { - "description": "Successful bulkWrite operation: log messages have operationIds", - "operations": [ - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "topologyDescriptionChangedEvent": {} - }, - "count": 2 - } - }, - { - "name": "bulkWrite", - "object": "collection", - "arguments": { - "requests": [ - { - "insertOne": { - "document": { - "x": 1 - } - } - } - ] - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "serverSelection", - "data": { - "message": "Server selection started", - "operationId": { - "$$type": [ - "int", - "long" - ] - }, - "operation": "insert" - } - }, - { - "level": "debug", - "component": "serverSelection", - "data": { - "message": "Server selection succeeded", - "operationId": { - "$$type": [ - "int", - "long" - ] - }, - "operation": "insert" - } - } - ] - } - ] - }, - { - "description": "Failed bulkWrite operation: log messages have operationIds", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": "alwaysOn", - "data": { - "failCommands": [ - "hello", - "ismaster" - ], - "appName": "loggingClient", - "closeConnection": true - } - } - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "bulkWrite", - "object": "collection", - "arguments": { - "requests": [ - { - "insertOne": { - "document": { - "x": 1 - } - } - } - ] - }, - "expectError": { - "isClientError": true - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "serverSelection", - "data": { - "message": "Server selection started", - "operationId": { - "$$type": [ - "int", - "long" - ] - }, - "operation": "insert" - } - }, - { - "level": "info", - "component": "serverSelection", - "data": { - "message": "Waiting for suitable server to become available", - "operationId": { - "$$type": [ - "int", - "long" - ] - }, - "operation": "insert" - } - }, - { - "level": "debug", - "component": "serverSelection", - "data": { - "message": "Server selection failed", - "operationId": { - "$$type": [ - "int", - "long" - ] - }, - "operation": "insert" - } - } - ] - } - ] - }, - { - "description": "Successful client bulkWrite operation: log messages have operationIds", - "runOnRequirements": [ - { - "minServerVersion": "8.0", - "serverless": "forbid" - } - ], - "operations": [ - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "topologyDescriptionChangedEvent": {} - }, - "count": 2 - } - }, - { - "name": "clientBulkWrite", - "object": "client", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "logging-tests.server-selection", - "document": { - "x": 1 - } - } - } - ] - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "serverSelection", - "data": { - "message": "Server selection started", - "operationId": { - "$$type": [ - "int", - "long" - ] - }, - "operation": "bulkWrite" - } - }, - { - "level": "debug", - "component": "serverSelection", - "data": { - "message": "Server selection succeeded", - "operationId": { - "$$type": [ - "int", - "long" - ] - }, - "operation": "bulkWrite" - } - } - ] - } - ] - }, - { - "description": "Failed client bulkWrite operation: log messages have operationIds", - "runOnRequirements": [ - { - "minServerVersion": "8.0", - "serverless": "forbid" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": "alwaysOn", - "data": { - "failCommands": [ - "hello", - "ismaster" - ], - "appName": "loggingClient", - "closeConnection": true - } - } - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "clientBulkWrite", - "object": "client", - "arguments": { - "models": [ - { - "insertOne": { - "namespace": "logging-tests.server-selection", - "document": { - "x": 1 - } - } - } - ] - }, - "expectError": { - "isClientError": true - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "serverSelection", - "data": { - "message": "Server selection started", - "operationId": { - "$$type": [ - "int", - "long" - ] - }, - "operation": "bulkWrite" - } - }, - { - "level": "info", - "component": "serverSelection", - "data": { - "message": "Waiting for suitable server to become available", - "operationId": { - "$$type": [ - "int", - "long" - ] - }, - "operation": "bulkWrite" - } - }, - { - "level": "debug", - "component": "serverSelection", - "data": { - "message": "Server selection failed", - "operationId": { - "$$type": [ - "int", - "long" - ] - }, - "operation": "bulkWrite" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/server-selection/logging/operation-id.yml b/testdata/server-selection/logging/operation-id.yml deleted file mode 100644 index e5732893fa..0000000000 --- a/testdata/server-selection/logging/operation-id.yml +++ /dev/null @@ -1,223 +0,0 @@ -description: "operation-id" - -schemaVersion: "1.14" - -runOnRequirements: - - topologies: - - single - -createEntities: - - client: - id: &client client - uriOptions: - retryWrites: false # so we don't retry after hitting a failpoint - heartbeatFrequencyMS: 500 - appName: &appName loggingClient - serverSelectionTimeoutMS: 2000 # avoid hanging for 30s in test expecting SS failure due to timeout - observeLogMessages: - serverSelection: debug - observeEvents: - - serverDescriptionChangedEvent - - topologyDescriptionChangedEvent - - database: - id: &database database - client: *client - databaseName: &databaseName logging-tests - - collection: - id: &collection collection - database: *database - collectionName: &collectionName server-selection - - client: - id: &failPointClient failPointClient - -_yamlAnchors: - namespace: &namespace "logging-tests.server-selection" - -tests: - - description: "Successful bulkWrite operation: log messages have operationIds" - operations: - # ensure we've discovered the server so it is immediately available - # and no extra "waiting for suitable server" messages are emitted. - # expected topology events reflect initial server discovery and server connect event. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - topologyDescriptionChangedEvent: {} - count: 2 - - name: bulkWrite - object: *collection - arguments: - requests: - - insertOne: - document: { x: 1 } - expectLogMessages: - - client: *client - messages: - - level: debug - component: serverSelection - data: - message: "Server selection started" - operationId: { $$type: [int, long] } - operation: insert - - level: debug - component: serverSelection - data: - message: "Server selection succeeded" - operationId: { $$type: [int, long] } - operation: insert - - - description: "Failed bulkWrite operation: log messages have operationIds" - runOnRequirements: - - minServerVersion: "4.4" # failCommand appname support - operations: - # fail all hello/legacy hello commands for the main client. - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: alwaysOn - data: - failCommands: ["hello", "ismaster"] - appName: *appName - closeConnection: true - # wait until we've marked the server unknown due - # to a failed heartbeat. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: bulkWrite - object: *collection - arguments: - requests: - - insertOne: - document: { x: 1 } - expectError: - isClientError: true # server selection timeout - expectLogMessages: - - client: *client - messages: - - level: debug - component: serverSelection - data: - message: "Server selection started" - operationId: { $$type: [int, long] } - operation: insert - - level: info - component: serverSelection - data: - message: "Waiting for suitable server to become available" - operationId: { $$type: [int, long] } - operation: insert - - level: debug - component: serverSelection - data: - message: "Server selection failed" - operationId: { $$type: [int, long] } - operation: insert - - - description: "Successful client bulkWrite operation: log messages have operationIds" - runOnRequirements: - - minServerVersion: "8.0" # required for bulkWrite command - serverless: forbid - operations: - # ensure we've discovered the server so it is immediately available - # and no extra "waiting for suitable server" messages are emitted. - # expected topology events reflect initial server discovery and server connect event. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - topologyDescriptionChangedEvent: {} - count: 2 - - name: clientBulkWrite - object: *client - arguments: - models: - - insertOne: - namespace: *namespace - document: { x: 1 } - expectLogMessages: - - client: *client - messages: - - level: debug - component: serverSelection - data: - message: "Server selection started" - operationId: { $$type: [int, long] } - operation: bulkWrite - - level: debug - component: serverSelection - data: - message: "Server selection succeeded" - operationId: { $$type: [int, long] } - operation: bulkWrite - - - description: "Failed client bulkWrite operation: log messages have operationIds" - runOnRequirements: - - minServerVersion: "8.0" # required for bulkWrite command - serverless: forbid - operations: - # fail all hello/legacy hello commands for the main client. - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: alwaysOn - data: - failCommands: ["hello", "ismaster"] - appName: *appName - closeConnection: true - # wait until we've marked the server unknown due - # to a failed heartbeat. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: clientBulkWrite - object: *client - arguments: - models: - - insertOne: - namespace: *namespace - document: { x: 1 } - expectError: - isClientError: true # server selection timeout - expectLogMessages: - - client: *client - messages: - - level: debug - component: serverSelection - data: - message: "Server selection started" - operationId: { $$type: [int, long] } - operation: bulkWrite - - level: info - component: serverSelection - data: - message: "Waiting for suitable server to become available" - operationId: { $$type: [int, long] } - operation: bulkWrite - - level: debug - component: serverSelection - data: - message: "Server selection failed" - operationId: { $$type: [int, long] } - operation: bulkWrite diff --git a/testdata/server-selection/logging/replica-set.json b/testdata/server-selection/logging/replica-set.json deleted file mode 100644 index 5eba784bf2..0000000000 --- a/testdata/server-selection/logging/replica-set.json +++ /dev/null @@ -1,228 +0,0 @@ -{ - "description": "replica-set-logging", - "schemaVersion": "1.14", - "runOnRequirements": [ - { - "topologies": [ - "replicaset" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "client", - "uriOptions": { - "retryWrites": false, - "heartbeatFrequencyMS": 500, - "serverSelectionTimeoutMS": 2000 - }, - "observeLogMessages": { - "serverSelection": "debug" - }, - "observeEvents": [ - "serverDescriptionChangedEvent", - "topologyDescriptionChangedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "logging-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "server-selection" - } - }, - { - "client": { - "id": "failPointClient" - } - }, - { - "collection": { - "id": "unsatisfiableRPColl", - "database": "database", - "collectionName": "unsatisfiableRPColl", - "collectionOptions": { - "readPreference": { - "mode": "Secondary", - "tagSets": [ - { - "nonexistenttag": "a" - } - ] - } - } - } - } - ], - "tests": [ - { - "description": "A successful operation", - "operations": [ - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "topologyDescriptionChangedEvent": {} - }, - "count": 4 - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "x": 1 - } - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "serverSelection", - "data": { - "message": "Server selection started", - "selector": { - "$$exists": true - }, - "operation": "insert", - "topologyDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "serverSelection", - "data": { - "message": "Server selection succeeded", - "selector": { - "$$exists": true - }, - "operation": "insert", - "topologyDescription": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - } - ] - } - ] - }, - { - "description": "Server selection fails due to unsatisfiable read preference", - "runOnRequirements": [ - { - "minServerVersion": "4.0" - } - ], - "operations": [ - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "topologyDescriptionChangedEvent": {} - }, - "count": 4 - } - }, - { - "name": "find", - "object": "unsatisfiableRPColl", - "arguments": { - "filter": { - "x": 1 - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "serverSelection", - "data": { - "message": "Server selection started", - "selector": { - "$$exists": true - }, - "operation": "find", - "topologyDescription": { - "$$exists": true - } - } - }, - { - "level": "info", - "component": "serverSelection", - "data": { - "message": "Waiting for suitable server to become available", - "selector": { - "$$exists": true - }, - "operation": "find", - "topologyDescription": { - "$$exists": true - }, - "remainingTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "serverSelection", - "data": { - "message": "Server selection failed", - "selector": { - "$$exists": true - }, - "operation": "find", - "topologyDescription": { - "$$exists": true - }, - "failure": { - "$$exists": true - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/server-selection/logging/replica-set.yml b/testdata/server-selection/logging/replica-set.yml deleted file mode 100644 index f360f65f69..0000000000 --- a/testdata/server-selection/logging/replica-set.yml +++ /dev/null @@ -1,126 +0,0 @@ -description: "replica-set-logging" - -schemaVersion: "1.14" - -runOnRequirements: - - topologies: - - replicaset - -createEntities: - - client: - id: &client client - uriOptions: - retryWrites: false # so we don't retry after hitting a failpoint - heartbeatFrequencyMS: 500 - serverSelectionTimeoutMS: 2000 # avoid hanging for 30s in test expecting SS failure due to timeout - observeLogMessages: - serverSelection: debug - observeEvents: - - serverDescriptionChangedEvent - - topologyDescriptionChangedEvent - - database: - id: &database database - client: *client - databaseName: &databaseName logging-tests - - collection: - id: &collection collection - database: *database - collectionName: &collectionName server-selection - - client: - id: &failPointClient failPointClient - - collection: - id: &unsatisfiableRPColl unsatisfiableRPColl - database: *database - collectionName: &unsatisfiableRPColl unsatisfiableRPColl - collectionOptions: - readPreference: - mode: Secondary - tagSets: - - { nonexistenttag : a } - -tests: - - description: "A successful operation" - operations: - # ensure we've discovered the primary before starting, so we don't get an unexpected "waiting" message - # when server selection happens for the insert, or have extra logs from the driver performing server - # expected events are initial cluster type change from unknown to ReplicaSet, and connect events for each of 3 servers. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - topologyDescriptionChangedEvent: {} - count: 4 - - name: insertOne - object: *collection - arguments: - document: { x : 1 } - expectLogMessages: - - client: *client - messages: - - level: debug - component: serverSelection - data: - message: "Server selection started" - selector: { $$exists: true } - operation: insert - topologyDescription: { $$exists: true } - - level: debug - component: serverSelection - data: - message: "Server selection succeeded" - selector: { $$exists: true } - operation: insert - topologyDescription: { $$exists: true } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - - description: "Server selection fails due to unsatisfiable read preference" - runOnRequirements: - - minServerVersion: "4.0" # min version for failCommand on mongod - operations: - # ensure we've discovered the primary before starting, so we don't get an unexpected "waiting" message - # when server selection happens for the insert, or have extra logs from the driver performing server - # expected events are initial cluster type change from unknown to ReplicaSet, and connect events for each of 3 servers. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - topologyDescriptionChangedEvent: {} - count: 4 - # the `find` should never succeed due to the unsatisfiable read preference. - - name: find - object: *unsatisfiableRPColl - arguments: - filter: { x : 1 } - expectError: - isClientError: true # server selection error - expectLogMessages: - # the topology won't change during this time, so although we exhaust - # serverSelectionTimeoutMS we only expect a single message. - - client: *client - messages: - - level: debug - component: serverSelection - data: - message: "Server selection started" - selector: { $$exists: true } - operation: find - topologyDescription: { $$exists: true } - - level: info - component: serverSelection - data: - message: "Waiting for suitable server to become available" - selector: { $$exists: true } - operation: find - topologyDescription: { $$exists: true } - remainingTimeMS: { $$type: [int, long] } - - level: debug - component: serverSelection - data: - message: "Server selection failed" - selector: { $$exists: true } - operation: find - topologyDescription: { $$exists: true } - failure: { $$exists: true } diff --git a/testdata/server-selection/logging/sharded.json b/testdata/server-selection/logging/sharded.json deleted file mode 100644 index d42fba9100..0000000000 --- a/testdata/server-selection/logging/sharded.json +++ /dev/null @@ -1,237 +0,0 @@ -{ - "description": "server-selection-logging", - "schemaVersion": "1.14", - "runOnRequirements": [ - { - "topologies": [ - "sharded" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "client", - "uriOptions": { - "retryWrites": false, - "heartbeatFrequencyMS": 500, - "appName": "loggingClient", - "serverSelectionTimeoutMS": 2000 - }, - "observeLogMessages": { - "serverSelection": "debug" - }, - "observeEvents": [ - "serverDescriptionChangedEvent", - "topologyDescriptionChangedEvent" - ], - "useMultipleMongoses": false - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "logging-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "server-selection" - } - }, - { - "client": { - "id": "failPointClient", - "useMultipleMongoses": false - } - } - ], - "tests": [ - { - "description": "A successful operation", - "operations": [ - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "topologyDescriptionChangedEvent": {} - }, - "count": 2 - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "x": 1 - } - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "serverSelection", - "data": { - "message": "Server selection started", - "selector": { - "$$exists": true - }, - "operation": "insert", - "topologyDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "serverSelection", - "data": { - "message": "Server selection succeeded", - "selector": { - "$$exists": true - }, - "operation": "insert", - "topologyDescription": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - } - ] - } - ] - }, - { - "description": "Failure due to unreachable server", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": "alwaysOn", - "data": { - "failCommands": [ - "hello", - "ismaster" - ], - "appName": "loggingClient", - "closeConnection": true - } - } - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "x": 1 - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "serverSelection", - "data": { - "message": "Server selection started", - "selector": { - "$$exists": true - }, - "operation": "insert", - "topologyDescription": { - "$$exists": true - } - } - }, - { - "level": "info", - "component": "serverSelection", - "data": { - "message": "Waiting for suitable server to become available", - "selector": { - "$$exists": true - }, - "operation": "insert", - "topologyDescription": { - "$$exists": true - }, - "remainingTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "serverSelection", - "data": { - "message": "Server selection failed", - "selector": { - "$$exists": true - }, - "operation": "insert", - "topologyDescription": { - "$$exists": true - }, - "failure": { - "$$exists": true - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/server-selection/logging/sharded.yml b/testdata/server-selection/logging/sharded.yml deleted file mode 100644 index 9a2215c85e..0000000000 --- a/testdata/server-selection/logging/sharded.yml +++ /dev/null @@ -1,129 +0,0 @@ -description: "server-selection-logging" - -schemaVersion: "1.14" - -runOnRequirements: - - topologies: - - sharded - -createEntities: - - client: - id: &client client - uriOptions: - retryWrites: false # so we don't retry after hitting a failpoint - heartbeatFrequencyMS: 500 - appName: &appName loggingClient - serverSelectionTimeoutMS: 2000 # avoid hanging for 30s in test expecting SS failure due to timeout - observeLogMessages: - serverSelection: debug - observeEvents: - - serverDescriptionChangedEvent - - topologyDescriptionChangedEvent - useMultipleMongoses: false - - database: - id: &database database - client: *client - databaseName: &databaseName logging-tests - - collection: - id: &collection collection - database: *database - collectionName: &collectionName server-selection - - client: - id: &failPointClient failPointClient - useMultipleMongoses: false - -tests: - - description: "A successful operation" - operations: - # ensure we've discovered the entire topology before starting. - # expected events are initial cluster type change from unknown to sharded, and connect events for one mongos. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - topologyDescriptionChangedEvent: {} - count: 2 - - name: insertOne - object: *collection - arguments: - document: { x : 1 } - expectLogMessages: - - client: *client - messages: - - level: debug - component: serverSelection - data: - message: "Server selection started" - selector: { $$exists: true } - operation: insert - topologyDescription: { $$exists: true } - - level: debug - component: serverSelection - data: - message: "Server selection succeeded" - selector: { $$exists: true } - operation: insert - topologyDescription: { $$exists: true } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - - description: "Failure due to unreachable server" - runOnRequirements: - - minServerVersion: "4.4" # failCommand appname support - operations: - # fail all hello/legacy hello commands for the main client. - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: alwaysOn - data: - failCommands: ["hello", "ismaster"] - appName: *appName - closeConnection: true - # wait until we've marked the server unknown due - # to a failed heartbeat. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: insertOne - object: *collection - arguments: - document: { x : 1 } - expectError: - isClientError: true # server selection timeout - expectLogMessages: - - client: *client - messages: - - level: debug - component: serverSelection - data: - message: "Server selection started" - selector: { $$exists: true } - operation: insert - topologyDescription: { $$exists: true } - - level: info - component: serverSelection - data: - message: "Waiting for suitable server to become available" - selector: { $$exists: true } - operation: insert - topologyDescription: { $$exists: true } - remainingTimeMS: { $$type: [int, long] } - - level: debug - component: serverSelection - data: - message: "Server selection failed" - selector: { $$exists: true } - operation: insert - topologyDescription: { $$exists: true } - failure: { $$exists: true } diff --git a/testdata/server-selection/logging/standalone.json b/testdata/server-selection/logging/standalone.json deleted file mode 100644 index 3b3eddd841..0000000000 --- a/testdata/server-selection/logging/standalone.json +++ /dev/null @@ -1,235 +0,0 @@ -{ - "description": "standalone-logging", - "schemaVersion": "1.14", - "runOnRequirements": [ - { - "topologies": [ - "single" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "client", - "uriOptions": { - "retryWrites": false, - "heartbeatFrequencyMS": 500, - "appName": "loggingClient", - "serverSelectionTimeoutMS": 2000 - }, - "observeLogMessages": { - "serverSelection": "debug" - }, - "observeEvents": [ - "serverDescriptionChangedEvent", - "topologyDescriptionChangedEvent" - ] - } - }, - { - "database": { - "id": "database", - "client": "client", - "databaseName": "logging-tests" - } - }, - { - "collection": { - "id": "collection", - "database": "database", - "collectionName": "server-selection" - } - }, - { - "client": { - "id": "failPointClient" - } - } - ], - "tests": [ - { - "description": "A successful operation", - "operations": [ - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "topologyDescriptionChangedEvent": {} - }, - "count": 2 - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "x": 1 - } - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "serverSelection", - "data": { - "message": "Server selection started", - "selector": { - "$$exists": true - }, - "operation": "insert", - "topologyDescription": { - "$$exists": true - } - } - }, - { - "level": "debug", - "component": "serverSelection", - "data": { - "message": "Server selection succeeded", - "selector": { - "$$exists": true - }, - "operation": "insert", - "topologyDescription": { - "$$exists": true - }, - "serverHost": { - "$$type": "string" - }, - "serverPort": { - "$$type": [ - "int", - "long" - ] - } - } - } - ] - } - ] - }, - { - "description": "Failure due to unreachable server", - "runOnRequirements": [ - { - "minServerVersion": "4.4" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "failPointClient", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": "alwaysOn", - "data": { - "failCommands": [ - "hello", - "ismaster" - ], - "appName": "loggingClient", - "closeConnection": true - } - } - } - }, - { - "name": "waitForEvent", - "object": "testRunner", - "arguments": { - "client": "client", - "event": { - "serverDescriptionChangedEvent": { - "newDescription": { - "type": "Unknown" - } - } - }, - "count": 1 - } - }, - { - "name": "insertOne", - "object": "collection", - "arguments": { - "document": { - "x": 1 - } - }, - "expectError": { - "isClientError": true - } - } - ], - "expectLogMessages": [ - { - "client": "client", - "messages": [ - { - "level": "debug", - "component": "serverSelection", - "data": { - "message": "Server selection started", - "selector": { - "$$exists": true - }, - "operation": "insert", - "topologyDescription": { - "$$exists": true - } - } - }, - { - "level": "info", - "component": "serverSelection", - "data": { - "message": "Waiting for suitable server to become available", - "selector": { - "$$exists": true - }, - "operation": "insert", - "topologyDescription": { - "$$exists": true - }, - "remainingTimeMS": { - "$$type": [ - "int", - "long" - ] - } - } - }, - { - "level": "debug", - "component": "serverSelection", - "data": { - "message": "Server selection failed", - "selector": { - "$$exists": true - }, - "operation": "insert", - "topologyDescription": { - "$$exists": true - }, - "failure": { - "$$exists": true - } - } - } - ] - } - ] - } - ] -} diff --git a/testdata/server-selection/logging/standalone.yml b/testdata/server-selection/logging/standalone.yml deleted file mode 100644 index 5ff803ec04..0000000000 --- a/testdata/server-selection/logging/standalone.yml +++ /dev/null @@ -1,128 +0,0 @@ -description: "standalone-logging" - -schemaVersion: "1.14" - -runOnRequirements: - - topologies: - - single - -createEntities: - - client: - id: &client client - uriOptions: - retryWrites: false # so we don't retry after hitting a failpoint - heartbeatFrequencyMS: 500 - appName: &appName loggingClient - serverSelectionTimeoutMS: 2000 # avoid hanging for 30s in test expecting SS failure due to timeout - observeLogMessages: - serverSelection: debug - observeEvents: - - serverDescriptionChangedEvent - - topologyDescriptionChangedEvent - - database: - id: &database database - client: *client - databaseName: &databaseName logging-tests - - collection: - id: &collection collection - database: *database - collectionName: &collectionName server-selection - - client: - id: &failPointClient failPointClient - -tests: - - description: "A successful operation" - operations: - # ensure we've discovered the server so it is immediately available - # and no extra "waiting for suitable server" messages are emitted. - # expected topology events reflect initial server discovery and server connect event. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - topologyDescriptionChangedEvent: {} - count: 2 - - name: insertOne - object: *collection - arguments: - document: { x : 1 } - expectLogMessages: - - client: *client - messages: - - level: debug - component: serverSelection - data: - message: "Server selection started" - selector: { $$exists: true } - operation: insert - topologyDescription: { $$exists: true } - - level: debug - component: serverSelection - data: - message: "Server selection succeeded" - selector: { $$exists: true } - operation: insert - topologyDescription: { $$exists: true } - serverHost: { $$type: string } - serverPort: { $$type: [int, long] } - - - description: "Failure due to unreachable server" - runOnRequirements: - - minServerVersion: "4.4" # failCommand appname support - operations: - # fail all hello/legacy hello commands for the main client. - - name: failPoint - object: testRunner - arguments: - client: *failPointClient - failPoint: - configureFailPoint: failCommand - mode: alwaysOn - data: - failCommands: ["hello", "ismaster"] - appName: *appName - closeConnection: true - # wait until we've marked the server unknown due - # to a failed heartbeat. - - name: waitForEvent - object: testRunner - arguments: - client: *client - event: - serverDescriptionChangedEvent: - newDescription: - type: Unknown - count: 1 - - name: insertOne - object: *collection - arguments: - document: { x : 1 } - expectError: - isClientError: true # server selection timeout - expectLogMessages: - - client: *client - messages: - - level: debug - component: serverSelection - data: - message: "Server selection started" - selector: { $$exists: true } - operation: insert - topologyDescription: { $$exists: true } - - level: info - component: serverSelection - data: - message: "Waiting for suitable server to become available" - selector: { $$exists: true } - operation: insert - topologyDescription: { $$exists: true } - remainingTimeMS: { $$type: [int, long] } - - level: debug - component: serverSelection - data: - message: "Server selection failed" - selector: { $$exists: true } - operation: insert - topologyDescription: { $$exists: true } - failure: { $$exists: true } diff --git a/testdata/server-selection/rtt/first_value.json b/testdata/server-selection/rtt/first_value.json deleted file mode 100644 index 421944da36..0000000000 --- a/testdata/server-selection/rtt/first_value.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "avg_rtt_ms": "NULL", - "new_rtt_ms": 10, - "new_avg_rtt": 10 -} diff --git a/testdata/server-selection/rtt/first_value.yml b/testdata/server-selection/rtt/first_value.yml deleted file mode 100644 index da48a19282..0000000000 --- a/testdata/server-selection/rtt/first_value.yml +++ /dev/null @@ -1,3 +0,0 @@ -avg_rtt_ms: 'NULL' -new_rtt_ms: 10 -new_avg_rtt: 10 diff --git a/testdata/server-selection/rtt/first_value_zero.json b/testdata/server-selection/rtt/first_value_zero.json deleted file mode 100644 index d5bfc41b25..0000000000 --- a/testdata/server-selection/rtt/first_value_zero.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "avg_rtt_ms": "NULL", - "new_rtt_ms": 0, - "new_avg_rtt": 0 -} diff --git a/testdata/server-selection/rtt/first_value_zero.yml b/testdata/server-selection/rtt/first_value_zero.yml deleted file mode 100644 index 89f4638e95..0000000000 --- a/testdata/server-selection/rtt/first_value_zero.yml +++ /dev/null @@ -1,3 +0,0 @@ -avg_rtt_ms: 'NULL' -new_rtt_ms: 0 -new_avg_rtt: 0 diff --git a/testdata/server-selection/rtt/value_test_1.json b/testdata/server-selection/rtt/value_test_1.json deleted file mode 100644 index ed6a80ce29..0000000000 --- a/testdata/server-selection/rtt/value_test_1.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "avg_rtt_ms": 0, - "new_rtt_ms": 5, - "new_avg_rtt": 1 -} diff --git a/testdata/server-selection/rtt/value_test_1.yml b/testdata/server-selection/rtt/value_test_1.yml deleted file mode 100644 index 10ba5c05ef..0000000000 --- a/testdata/server-selection/rtt/value_test_1.yml +++ /dev/null @@ -1,3 +0,0 @@ -avg_rtt_ms: 0 -new_rtt_ms: 5 -new_avg_rtt: 1.0 diff --git a/testdata/server-selection/rtt/value_test_2.json b/testdata/server-selection/rtt/value_test_2.json deleted file mode 100644 index ccb5a0173b..0000000000 --- a/testdata/server-selection/rtt/value_test_2.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "avg_rtt_ms": 3.1, - "new_rtt_ms": 36, - "new_avg_rtt": 9.68 -} diff --git a/testdata/server-selection/rtt/value_test_2.yml b/testdata/server-selection/rtt/value_test_2.yml deleted file mode 100644 index 118c8ec374..0000000000 --- a/testdata/server-selection/rtt/value_test_2.yml +++ /dev/null @@ -1,3 +0,0 @@ -avg_rtt_ms: 3.1 -new_rtt_ms: 36 -new_avg_rtt: 9.68 diff --git a/testdata/server-selection/rtt/value_test_3.json b/testdata/server-selection/rtt/value_test_3.json deleted file mode 100644 index 6921c94d36..0000000000 --- a/testdata/server-selection/rtt/value_test_3.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "avg_rtt_ms": 9.12, - "new_rtt_ms": 9.12, - "new_avg_rtt": 9.12 -} diff --git a/testdata/server-selection/rtt/value_test_3.yml b/testdata/server-selection/rtt/value_test_3.yml deleted file mode 100644 index e4af46c61a..0000000000 --- a/testdata/server-selection/rtt/value_test_3.yml +++ /dev/null @@ -1,3 +0,0 @@ -avg_rtt_ms: 9.12 -new_rtt_ms: 9.12 -new_avg_rtt: 9.12 diff --git a/testdata/server-selection/rtt/value_test_4.json b/testdata/server-selection/rtt/value_test_4.json deleted file mode 100644 index d9ce3800b8..0000000000 --- a/testdata/server-selection/rtt/value_test_4.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "avg_rtt_ms": 1, - "new_rtt_ms": 1000, - "new_avg_rtt": 200.8 -} diff --git a/testdata/server-selection/rtt/value_test_4.yml b/testdata/server-selection/rtt/value_test_4.yml deleted file mode 100644 index cf68726b2d..0000000000 --- a/testdata/server-selection/rtt/value_test_4.yml +++ /dev/null @@ -1,3 +0,0 @@ -avg_rtt_ms: 1 -new_rtt_ms: 1000 -new_avg_rtt: 200.8 diff --git a/testdata/server-selection/rtt/value_test_5.json b/testdata/server-selection/rtt/value_test_5.json deleted file mode 100644 index 9ae33bc143..0000000000 --- a/testdata/server-selection/rtt/value_test_5.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "avg_rtt_ms": 0, - "new_rtt_ms": 0.25, - "new_avg_rtt": 0.05 -} diff --git a/testdata/server-selection/rtt/value_test_5.yml b/testdata/server-selection/rtt/value_test_5.yml deleted file mode 100644 index 698ee308c2..0000000000 --- a/testdata/server-selection/rtt/value_test_5.yml +++ /dev/null @@ -1,3 +0,0 @@ -avg_rtt_ms: 0 -new_rtt_ms: 0.25 -new_avg_rtt: 0.05 diff --git a/testdata/server-selection/server_selection/LoadBalanced/read/Nearest.json b/testdata/server-selection/server_selection/LoadBalanced/read/Nearest.json deleted file mode 100644 index 76fa336d55..0000000000 --- a/testdata/server-selection/server_selection/LoadBalanced/read/Nearest.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "topology_description": { - "type": "LoadBalanced", - "servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "Nearest", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ], - "in_latency_window": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ] -} diff --git a/testdata/server-selection/server_selection/LoadBalanced/read/Nearest.yml b/testdata/server-selection/server_selection/LoadBalanced/read/Nearest.yml deleted file mode 100644 index 2e9a16d5e0..0000000000 --- a/testdata/server-selection/server_selection/LoadBalanced/read/Nearest.yml +++ /dev/null @@ -1,16 +0,0 @@ -topology_description: - type: LoadBalanced - servers: - - &1 - address: g:27017 - avg_rtt_ms: 0 - type: LoadBalancer -operation: read -read_preference: - mode: Nearest - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/LoadBalanced/read/Primary.json b/testdata/server-selection/server_selection/LoadBalanced/read/Primary.json deleted file mode 100644 index 5a4a0aa93a..0000000000 --- a/testdata/server-selection/server_selection/LoadBalanced/read/Primary.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "topology_description": { - "type": "LoadBalanced", - "servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "Primary" - }, - "suitable_servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ], - "in_latency_window": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ] -} diff --git a/testdata/server-selection/server_selection/LoadBalanced/read/Primary.yml b/testdata/server-selection/server_selection/LoadBalanced/read/Primary.yml deleted file mode 100644 index 72ea728d6e..0000000000 --- a/testdata/server-selection/server_selection/LoadBalanced/read/Primary.yml +++ /dev/null @@ -1,14 +0,0 @@ -topology_description: - type: LoadBalanced - servers: - - &1 - address: g:27017 - avg_rtt_ms: 0 - type: LoadBalancer -operation: read -read_preference: - mode: Primary -suitable_servers: -- *1 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/LoadBalanced/read/PrimaryPreferred.json b/testdata/server-selection/server_selection/LoadBalanced/read/PrimaryPreferred.json deleted file mode 100644 index 9aa151cd06..0000000000 --- a/testdata/server-selection/server_selection/LoadBalanced/read/PrimaryPreferred.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "topology_description": { - "type": "LoadBalanced", - "servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "PrimaryPreferred", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ], - "in_latency_window": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ] -} diff --git a/testdata/server-selection/server_selection/LoadBalanced/read/PrimaryPreferred.yml b/testdata/server-selection/server_selection/LoadBalanced/read/PrimaryPreferred.yml deleted file mode 100644 index 96e6ff54c2..0000000000 --- a/testdata/server-selection/server_selection/LoadBalanced/read/PrimaryPreferred.yml +++ /dev/null @@ -1,16 +0,0 @@ -topology_description: - type: LoadBalanced - servers: - - &1 - address: g:27017 - avg_rtt_ms: 0 - type: LoadBalancer -operation: read -read_preference: - mode: PrimaryPreferred - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/LoadBalanced/read/Secondary.json b/testdata/server-selection/server_selection/LoadBalanced/read/Secondary.json deleted file mode 100644 index c49e30370b..0000000000 --- a/testdata/server-selection/server_selection/LoadBalanced/read/Secondary.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "topology_description": { - "type": "LoadBalanced", - "servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "Secondary", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ], - "in_latency_window": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ] -} diff --git a/testdata/server-selection/server_selection/LoadBalanced/read/Secondary.yml b/testdata/server-selection/server_selection/LoadBalanced/read/Secondary.yml deleted file mode 100644 index 2f027d2dc7..0000000000 --- a/testdata/server-selection/server_selection/LoadBalanced/read/Secondary.yml +++ /dev/null @@ -1,16 +0,0 @@ -topology_description: - type: LoadBalanced - servers: - - &1 - address: g:27017 - avg_rtt_ms: 0 - type: LoadBalancer -operation: read -read_preference: - mode: Secondary - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/LoadBalanced/read/SecondaryPreferred.json b/testdata/server-selection/server_selection/LoadBalanced/read/SecondaryPreferred.json deleted file mode 100644 index 18e46877b4..0000000000 --- a/testdata/server-selection/server_selection/LoadBalanced/read/SecondaryPreferred.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "topology_description": { - "type": "LoadBalanced", - "servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "SecondaryPreferred", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ], - "in_latency_window": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ] -} diff --git a/testdata/server-selection/server_selection/LoadBalanced/read/SecondaryPreferred.yml b/testdata/server-selection/server_selection/LoadBalanced/read/SecondaryPreferred.yml deleted file mode 100644 index f3da0ec4b0..0000000000 --- a/testdata/server-selection/server_selection/LoadBalanced/read/SecondaryPreferred.yml +++ /dev/null @@ -1,16 +0,0 @@ -topology_description: - type: LoadBalanced - servers: - - &1 - address: g:27017 - avg_rtt_ms: 0 - type: LoadBalancer -operation: read -read_preference: - mode: SecondaryPreferred - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/LoadBalanced/write/Nearest.json b/testdata/server-selection/server_selection/LoadBalanced/write/Nearest.json deleted file mode 100644 index e52e343332..0000000000 --- a/testdata/server-selection/server_selection/LoadBalanced/write/Nearest.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "topology_description": { - "type": "LoadBalanced", - "servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ] - }, - "operation": "write", - "read_preference": { - "mode": "Nearest", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ], - "in_latency_window": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ] -} diff --git a/testdata/server-selection/server_selection/LoadBalanced/write/Nearest.yml b/testdata/server-selection/server_selection/LoadBalanced/write/Nearest.yml deleted file mode 100644 index 8e7b59dc4a..0000000000 --- a/testdata/server-selection/server_selection/LoadBalanced/write/Nearest.yml +++ /dev/null @@ -1,16 +0,0 @@ -topology_description: - type: LoadBalanced - servers: - - &1 - address: g:27017 - avg_rtt_ms: 0 - type: LoadBalancer -operation: write -read_preference: - mode: Nearest - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/LoadBalanced/write/Primary.json b/testdata/server-selection/server_selection/LoadBalanced/write/Primary.json deleted file mode 100644 index 9061b25208..0000000000 --- a/testdata/server-selection/server_selection/LoadBalanced/write/Primary.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "topology_description": { - "type": "LoadBalanced", - "servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ] - }, - "operation": "write", - "read_preference": { - "mode": "Primary" - }, - "suitable_servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ], - "in_latency_window": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ] -} diff --git a/testdata/server-selection/server_selection/LoadBalanced/write/Primary.yml b/testdata/server-selection/server_selection/LoadBalanced/write/Primary.yml deleted file mode 100644 index 457eb53e58..0000000000 --- a/testdata/server-selection/server_selection/LoadBalanced/write/Primary.yml +++ /dev/null @@ -1,14 +0,0 @@ -topology_description: - type: LoadBalanced - servers: - - &1 - address: g:27017 - avg_rtt_ms: 0 - type: LoadBalancer -operation: write -read_preference: - mode: Primary -suitable_servers: -- *1 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/LoadBalanced/write/PrimaryPreferred.json b/testdata/server-selection/server_selection/LoadBalanced/write/PrimaryPreferred.json deleted file mode 100644 index 5c94dc410d..0000000000 --- a/testdata/server-selection/server_selection/LoadBalanced/write/PrimaryPreferred.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "topology_description": { - "type": "LoadBalanced", - "servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ] - }, - "operation": "write", - "read_preference": { - "mode": "PrimaryPreferred", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ], - "in_latency_window": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ] -} diff --git a/testdata/server-selection/server_selection/LoadBalanced/write/PrimaryPreferred.yml b/testdata/server-selection/server_selection/LoadBalanced/write/PrimaryPreferred.yml deleted file mode 100644 index 2a078d1f40..0000000000 --- a/testdata/server-selection/server_selection/LoadBalanced/write/PrimaryPreferred.yml +++ /dev/null @@ -1,16 +0,0 @@ -topology_description: - type: LoadBalanced - servers: - - &1 - address: g:27017 - avg_rtt_ms: 0 - type: LoadBalancer -operation: write -read_preference: - mode: PrimaryPreferred - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/LoadBalanced/write/Secondary.json b/testdata/server-selection/server_selection/LoadBalanced/write/Secondary.json deleted file mode 100644 index 5493867e12..0000000000 --- a/testdata/server-selection/server_selection/LoadBalanced/write/Secondary.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "topology_description": { - "type": "LoadBalanced", - "servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ] - }, - "operation": "write", - "read_preference": { - "mode": "Secondary", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ], - "in_latency_window": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ] -} diff --git a/testdata/server-selection/server_selection/LoadBalanced/write/Secondary.yml b/testdata/server-selection/server_selection/LoadBalanced/write/Secondary.yml deleted file mode 100644 index dc67dbc942..0000000000 --- a/testdata/server-selection/server_selection/LoadBalanced/write/Secondary.yml +++ /dev/null @@ -1,16 +0,0 @@ -topology_description: - type: LoadBalanced - servers: - - &1 - address: g:27017 - avg_rtt_ms: 0 - type: LoadBalancer -operation: write -read_preference: - mode: Secondary - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/LoadBalanced/write/SecondaryPreferred.json b/testdata/server-selection/server_selection/LoadBalanced/write/SecondaryPreferred.json deleted file mode 100644 index f7905f1d5f..0000000000 --- a/testdata/server-selection/server_selection/LoadBalanced/write/SecondaryPreferred.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "topology_description": { - "type": "LoadBalanced", - "servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ] - }, - "operation": "write", - "read_preference": { - "mode": "SecondaryPreferred", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ], - "in_latency_window": [ - { - "address": "g:27017", - "avg_rtt_ms": 0, - "type": "LoadBalancer" - } - ] -} diff --git a/testdata/server-selection/server_selection/LoadBalanced/write/SecondaryPreferred.yml b/testdata/server-selection/server_selection/LoadBalanced/write/SecondaryPreferred.yml deleted file mode 100644 index 77026a67c0..0000000000 --- a/testdata/server-selection/server_selection/LoadBalanced/write/SecondaryPreferred.yml +++ /dev/null @@ -1,16 +0,0 @@ -topology_description: - type: LoadBalanced - servers: - - &1 - address: g:27017 - avg_rtt_ms: 0 - type: LoadBalancer -operation: write -read_preference: - mode: SecondaryPreferred - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Nearest.json b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Nearest.json deleted file mode 100644 index aa48679e86..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Nearest.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetNoPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "Nearest", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ], - "in_latency_window": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Nearest.yml b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Nearest.yml deleted file mode 100644 index 0615671941..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Nearest.yml +++ /dev/null @@ -1,25 +0,0 @@ -topology_description: - type: ReplicaSetNoPrimary - servers: - - &1 - address: b:27017 - avg_rtt_ms: 5 - type: RSSecondary - tags: - data_center: nyc - - &2 - address: c:27017 - avg_rtt_ms: 100 - type: RSSecondary - tags: - data_center: nyc -operation: read -read_preference: - mode: Nearest - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -- *2 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Nearest_multiple.json b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Nearest_multiple.json deleted file mode 100644 index 1fcfd52a47..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Nearest_multiple.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetNoPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 10, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 20, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "Nearest", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 10, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 20, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ], - "in_latency_window": [ - { - "address": "b:27017", - "avg_rtt_ms": 10, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 20, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Nearest_multiple.yml b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Nearest_multiple.yml deleted file mode 100644 index cd3abc5820..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Nearest_multiple.yml +++ /dev/null @@ -1,26 +0,0 @@ -topology_description: - type: ReplicaSetNoPrimary - servers: - - &1 - address: b:27017 - avg_rtt_ms: 10 - type: RSSecondary - tags: - data_center: nyc - - &2 - address: c:27017 - avg_rtt_ms: 20 - type: RSSecondary - tags: - data_center: nyc -operation: read -read_preference: - mode: Nearest - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -- *2 -in_latency_window: -- *1 -- *2 diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Nearest_non_matching.json b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Nearest_non_matching.json deleted file mode 100644 index b72895d8a8..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Nearest_non_matching.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetNoPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "Nearest", - "tag_sets": [ - { - "data_center": "sf" - } - ] - }, - "suitable_servers": [], - "in_latency_window": [] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml deleted file mode 100644 index 7e24dd1666..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +++ /dev/null @@ -1,20 +0,0 @@ -topology_description: - type: ReplicaSetNoPrimary - servers: - - address: b:27017 - avg_rtt_ms: 5 - type: RSSecondary - tags: - data_center: nyc - - address: c:27017 - avg_rtt_ms: 100 - type: RSSecondary - tags: - data_center: nyc -operation: read -read_preference: - mode: Nearest - tag_sets: - - data_center: sf -suitable_servers: [] -in_latency_window: [] diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PossiblePrimary.json b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PossiblePrimary.json deleted file mode 100644 index 4d286af830..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PossiblePrimary.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetNoPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "PossiblePrimary" - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "Primary", - "tag_sets": [ - {} - ] - }, - "suitable_servers": [], - "in_latency_window": [] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PossiblePrimary.yml b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PossiblePrimary.yml deleted file mode 100644 index cc5bfa88d5..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PossiblePrimary.yml +++ /dev/null @@ -1,15 +0,0 @@ -# Test that PossiblePrimary isn't candidate for any read preference mode. ---- -topology_description: - type: ReplicaSetNoPrimary - servers: - - address: b:27017 - avg_rtt_ms: 5 - type: PossiblePrimary -operation: read -read_preference: - mode: Primary - tag_sets: - - {} -suitable_servers: [] -in_latency_window: [] diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PossiblePrimaryNearest.json b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PossiblePrimaryNearest.json deleted file mode 100644 index bf9c70b420..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PossiblePrimaryNearest.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetNoPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "PossiblePrimary" - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "Nearest", - "tag_sets": [ - {} - ] - }, - "suitable_servers": [], - "in_latency_window": [] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PossiblePrimaryNearest.yml b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PossiblePrimaryNearest.yml deleted file mode 100644 index 4e50f31380..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PossiblePrimaryNearest.yml +++ /dev/null @@ -1,15 +0,0 @@ -# Test that PossiblePrimary isn't candidate for any read preference mode. ---- -topology_description: - type: ReplicaSetNoPrimary - servers: - - address: b:27017 - avg_rtt_ms: 5 - type: PossiblePrimary -operation: read -read_preference: - mode: Nearest - tag_sets: - - {} -suitable_servers: [] -in_latency_window: [] diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Primary.json b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Primary.json deleted file mode 100644 index 550a5f129b..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Primary.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetNoPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "Primary", - "tag_sets": [ - {} - ] - }, - "suitable_servers": [], - "in_latency_window": [] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Primary.yml b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Primary.yml deleted file mode 100644 index 54dbc8c09c..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Primary.yml +++ /dev/null @@ -1,20 +0,0 @@ -topology_description: - type: ReplicaSetNoPrimary - servers: - - address: b:27017 - avg_rtt_ms: 5 - type: RSSecondary - tags: - data_center: nyc - - address: c:27017 - avg_rtt_ms: 100 - type: RSSecondary - tags: - data_center: nyc -operation: read -read_preference: - mode: Primary - tag_sets: - - {} -suitable_servers: [] -in_latency_window: [] diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PrimaryPreferred.json b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PrimaryPreferred.json deleted file mode 100644 index f87ef4f617..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PrimaryPreferred.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetNoPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "PrimaryPreferred", - "tag_sets": [ - {} - ] - }, - "suitable_servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ], - "in_latency_window": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml deleted file mode 100644 index 6b57953ae7..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +++ /dev/null @@ -1,25 +0,0 @@ -topology_description: - type: ReplicaSetNoPrimary - servers: - - &1 - address: b:27017 - avg_rtt_ms: 5 - type: RSSecondary - tags: - data_center: nyc - - &2 - address: c:27017 - avg_rtt_ms: 100 - type: RSSecondary - tags: - data_center: nyc -operation: read -read_preference: - mode: PrimaryPreferred - tag_sets: - - {} -suitable_servers: -- *1 -- *2 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.json b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.json deleted file mode 100644 index ee96229927..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetNoPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "PrimaryPreferred", - "tag_sets": [ - { - "data_center": "sf" - } - ] - }, - "suitable_servers": [], - "in_latency_window": [] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml deleted file mode 100644 index 2cbf107da3..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +++ /dev/null @@ -1,20 +0,0 @@ -topology_description: - type: ReplicaSetNoPrimary - servers: - - address: b:27017 - avg_rtt_ms: 5 - type: RSSecondary - tags: - data_center: nyc - - address: c:27017 - avg_rtt_ms: 100 - type: RSSecondary - tags: - data_center: nyc -operation: read -read_preference: - mode: PrimaryPreferred - tag_sets: - - data_center: sf -suitable_servers: [] -in_latency_window: [] diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary.json b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary.json deleted file mode 100644 index 3b8f1e97cd..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetNoPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "Secondary", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ], - "in_latency_window": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary.yml b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary.yml deleted file mode 100644 index 382060dad4..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary.yml +++ /dev/null @@ -1,25 +0,0 @@ -topology_description: - type: ReplicaSetNoPrimary - servers: - - &1 - address: b:27017 - avg_rtt_ms: 5 - type: RSSecondary - tags: - data_center: nyc - - &2 - address: c:27017 - avg_rtt_ms: 100 - type: RSSecondary - tags: - data_center: nyc -operation: read -read_preference: - mode: Secondary - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -- *2 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/SecondaryPreferred.json b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/SecondaryPreferred.json deleted file mode 100644 index c3142ec115..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/SecondaryPreferred.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetNoPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "SecondaryPreferred", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ], - "in_latency_window": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml deleted file mode 100644 index 7095e460b1..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +++ /dev/null @@ -1,25 +0,0 @@ -topology_description: - type: ReplicaSetNoPrimary - servers: - - &1 - address: b:27017 - avg_rtt_ms: 5 - type: RSSecondary - tags: - data_center: nyc - - &2 - address: c:27017 - avg_rtt_ms: 100 - type: RSSecondary - tags: - data_center: nyc -operation: read -read_preference: - mode: SecondaryPreferred - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -- *2 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.json b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.json deleted file mode 100644 index a2c18bb7d2..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetNoPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "SecondaryPreferred", - "tag_sets": [ - { - "data_center": "sf" - } - ] - }, - "suitable_servers": [], - "in_latency_window": [] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml deleted file mode 100644 index abd388b1f5..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +++ /dev/null @@ -1,20 +0,0 @@ -topology_description: - type: ReplicaSetNoPrimary - servers: - - address: b:27017 - avg_rtt_ms: 5 - type: RSSecondary - tags: - data_center: nyc - - address: c:27017 - avg_rtt_ms: 100 - type: RSSecondary - tags: - data_center: nyc -operation: read -read_preference: - mode: SecondaryPreferred - tag_sets: - - data_center: sf -suitable_servers: [] -in_latency_window: [] diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary_multi_tags.json b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary_multi_tags.json deleted file mode 100644 index b319918e92..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary_multi_tags.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetNoPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "rack": "one", - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "rack": "two", - "data_center": "sf" - } - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "Secondary", - "tag_sets": [ - { - "data_center": "nyc", - "rack": "one" - }, - { - "other_tag": "doesntexist" - } - ] - }, - "suitable_servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "rack": "one", - "data_center": "nyc" - } - } - ], - "in_latency_window": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "rack": "one", - "data_center": "nyc" - } - } - ] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary_multi_tags.yml b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary_multi_tags.yml deleted file mode 100644 index c2ca618451..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary_multi_tags.yml +++ /dev/null @@ -1,31 +0,0 @@ -# Catch bugs like CDRIVER-1447, ensure clients select a server that matches all -# tags, even when the other server mismatches multiple tags. ---- -topology_description: - type: ReplicaSetNoPrimary - servers: - - &1 - address: b:27017 - avg_rtt_ms: 5 - type: RSSecondary - tags: - rack: one - data_center: nyc - - &2 - address: c:27017 - avg_rtt_ms: 5 - type: RSSecondary - tags: - rack: two - data_center: sf -operation: read -read_preference: - mode: Secondary - tag_sets: - - data_center: nyc - rack: one - - other_tag: doesntexist -suitable_servers: -- *1 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary_multi_tags2.json b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary_multi_tags2.json deleted file mode 100644 index 8f64d95ecb..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary_multi_tags2.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetNoPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "rack": "one", - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "rack": "two", - "data_center": "nyc" - } - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "Secondary", - "tag_sets": [ - { - "data_center": "nyc", - "rack": "one" - }, - { - "other_tag": "doesntexist" - } - ] - }, - "suitable_servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "rack": "one", - "data_center": "nyc" - } - } - ], - "in_latency_window": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "rack": "one", - "data_center": "nyc" - } - } - ] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary_multi_tags2.yml b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary_multi_tags2.yml deleted file mode 100644 index 3a4cb4f2ae..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary_multi_tags2.yml +++ /dev/null @@ -1,31 +0,0 @@ -# Ensure clients select a server that matches all tags, even when the other -# server matches one tag and doesn't match the other. ---- -topology_description: - type: ReplicaSetNoPrimary - servers: - - &1 - address: b:27017 - avg_rtt_ms: 5 - type: RSSecondary - tags: - rack: one - data_center: nyc - - &2 - address: c:27017 - avg_rtt_ms: 5 - type: RSSecondary - tags: - rack: two # mismatch - data_center: nyc # match -operation: read -read_preference: - mode: Secondary - tag_sets: - - data_center: nyc - rack: one - - other_tag: doesntexist -suitable_servers: -- *1 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary_non_matching.json b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary_non_matching.json deleted file mode 100644 index 4931e1019a..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary_non_matching.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetNoPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "Secondary", - "tag_sets": [ - { - "data_center": "sf" - } - ] - }, - "suitable_servers": [], - "in_latency_window": [] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml deleted file mode 100644 index 0772769e23..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +++ /dev/null @@ -1,20 +0,0 @@ -topology_description: - type: ReplicaSetNoPrimary - servers: - - address: b:27017 - avg_rtt_ms: 5 - type: RSSecondary - tags: - data_center: nyc - - address: c:27017 - avg_rtt_ms: 100 - type: RSSecondary - tags: - data_center: nyc -operation: read -read_preference: - mode: Secondary - tag_sets: - - data_center: sf -suitable_servers: [] -in_latency_window: [] diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/write/SecondaryPreferred.json b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/write/SecondaryPreferred.json deleted file mode 100644 index e136cf12a4..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/write/SecondaryPreferred.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetNoPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ] - }, - "operation": "write", - "read_preference": { - "mode": "SecondaryPreferred", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [], - "in_latency_window": [] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/write/SecondaryPreferred.yml b/testdata/server-selection/server_selection/ReplicaSetNoPrimary/write/SecondaryPreferred.yml deleted file mode 100644 index 9152e57297..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetNoPrimary/write/SecondaryPreferred.yml +++ /dev/null @@ -1,20 +0,0 @@ -topology_description: - type: ReplicaSetNoPrimary - servers: - - address: b:27017 - avg_rtt_ms: 5 - type: RSSecondary - tags: - data_center: nyc - - address: c:27017 - avg_rtt_ms: 100 - type: RSSecondary - tags: - data_center: nyc -operation: write -read_preference: - mode: SecondaryPreferred - tag_sets: - - data_center: nyc -suitable_servers: [] -in_latency_window: [] diff --git a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Nearest.json b/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Nearest.json deleted file mode 100644 index cfe4965938..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Nearest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetWithPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "a:27017", - "avg_rtt_ms": 26, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "Nearest", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "a:27017", - "avg_rtt_ms": 26, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ], - "in_latency_window": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Nearest.yml b/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Nearest.yml deleted file mode 100644 index 5e8e0499d2..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Nearest.yml +++ /dev/null @@ -1,32 +0,0 @@ -topology_description: - type: ReplicaSetWithPrimary - servers: - - &1 - address: b:27017 - avg_rtt_ms: 5 - type: RSSecondary - tags: - data_center: nyc - - &3 - address: c:27017 - avg_rtt_ms: 100 - type: RSSecondary - tags: - data_center: nyc - - &2 - address: a:27017 - avg_rtt_ms: 26 - type: RSPrimary - tags: - data_center: nyc -operation: read -read_preference: - mode: Nearest - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -- *2 -- *3 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Nearest_multiple.json b/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Nearest_multiple.json deleted file mode 100644 index 67296d434f..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Nearest_multiple.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetWithPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 10, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "a:27017", - "avg_rtt_ms": 20, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "Nearest", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 10, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "a:27017", - "avg_rtt_ms": 20, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ], - "in_latency_window": [ - { - "address": "b:27017", - "avg_rtt_ms": 10, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "a:27017", - "avg_rtt_ms": 20, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - } - ] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Nearest_multiple.yml b/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Nearest_multiple.yml deleted file mode 100644 index 6aacd508fa..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Nearest_multiple.yml +++ /dev/null @@ -1,33 +0,0 @@ -topology_description: - type: ReplicaSetWithPrimary - servers: - - &1 - address: b:27017 - avg_rtt_ms: 10 - type: RSSecondary - tags: - data_center: nyc - - &3 - address: c:27017 - avg_rtt_ms: 100 - type: RSSecondary - tags: - data_center: nyc - - &2 - address: a:27017 - avg_rtt_ms: 20 - type: RSPrimary - tags: - data_center: nyc -operation: read -read_preference: - mode: Nearest - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -- *2 -- *3 -in_latency_window: -- *1 -- *2 diff --git a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Nearest_non_matching.json b/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Nearest_non_matching.json deleted file mode 100644 index a3a85c9a83..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Nearest_non_matching.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetWithPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "a:27017", - "avg_rtt_ms": 26, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "Nearest", - "tag_sets": [ - { - "data_center": "sf" - } - ] - }, - "suitable_servers": [], - "in_latency_window": [] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml b/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml deleted file mode 100644 index 5047d4e3ea..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +++ /dev/null @@ -1,25 +0,0 @@ -topology_description: - type: ReplicaSetWithPrimary - servers: - - address: b:27017 - avg_rtt_ms: 5 - type: RSSecondary - tags: - data_center: nyc - - address: c:27017 - avg_rtt_ms: 100 - type: RSSecondary - tags: - data_center: nyc - - address: a:27017 - avg_rtt_ms: 26 - type: RSPrimary - tags: - data_center: nyc -operation: read -read_preference: - mode: Nearest - tag_sets: - - data_center: sf -suitable_servers: [] -in_latency_window: [] diff --git a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Primary.json b/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Primary.json deleted file mode 100644 index ae04419a5c..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Primary.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetWithPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "a:27017", - "avg_rtt_ms": 26, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "Primary", - "tag_sets": [ - {} - ] - }, - "suitable_servers": [ - { - "address": "a:27017", - "avg_rtt_ms": 26, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - } - ], - "in_latency_window": [ - { - "address": "a:27017", - "avg_rtt_ms": 26, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - } - ] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Primary.yml b/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Primary.yml deleted file mode 100644 index a08b53ee7f..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Primary.yml +++ /dev/null @@ -1,28 +0,0 @@ -topology_description: - type: ReplicaSetWithPrimary - servers: - - address: b:27017 - avg_rtt_ms: 5 - type: RSSecondary - tags: - data_center: nyc - - address: c:27017 - avg_rtt_ms: 100 - type: RSSecondary - tags: - data_center: nyc - - &1 - address: a:27017 - avg_rtt_ms: 26 - type: RSPrimary - tags: - data_center: nyc -operation: read -read_preference: - mode: Primary - tag_sets: - - {} -suitable_servers: -- *1 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/PrimaryPreferred.json b/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/PrimaryPreferred.json deleted file mode 100644 index 306171f3a2..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/PrimaryPreferred.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetWithPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "a:27017", - "avg_rtt_ms": 26, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "PrimaryPreferred", - "tag_sets": [ - {} - ] - }, - "suitable_servers": [ - { - "address": "a:27017", - "avg_rtt_ms": 26, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - } - ], - "in_latency_window": [ - { - "address": "a:27017", - "avg_rtt_ms": 26, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - } - ] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml b/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml deleted file mode 100644 index 199cb25f54..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +++ /dev/null @@ -1,28 +0,0 @@ -topology_description: - type: ReplicaSetWithPrimary - servers: - - address: b:27017 - avg_rtt_ms: 5 - type: RSSecondary - tags: - data_center: nyc - - address: c:27017 - avg_rtt_ms: 100 - type: RSSecondary - tags: - data_center: nyc - - &1 - address: a:27017 - avg_rtt_ms: 26 - type: RSPrimary - tags: - data_center: nyc -operation: read -read_preference: - mode: PrimaryPreferred - tag_sets: - - {} -suitable_servers: -- *1 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.json b/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.json deleted file mode 100644 index 722f1cfb1a..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetWithPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "a:27017", - "avg_rtt_ms": 26, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "PrimaryPreferred", - "tag_sets": [ - { - "data_center": "sf" - } - ] - }, - "suitable_servers": [ - { - "address": "a:27017", - "avg_rtt_ms": 26, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - } - ], - "in_latency_window": [ - { - "address": "a:27017", - "avg_rtt_ms": 26, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - } - ] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml b/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml deleted file mode 100644 index ed880b2bc3..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +++ /dev/null @@ -1,28 +0,0 @@ -topology_description: - type: ReplicaSetWithPrimary - servers: - - address: b:27017 - avg_rtt_ms: 5 - type: RSSecondary - tags: - data_center: nyc - - address: c:27017 - avg_rtt_ms: 100 - type: RSSecondary - tags: - data_center: nyc - - &1 - address: a:27017 - avg_rtt_ms: 26 - type: RSPrimary - tags: - data_center: nyc -operation: read -read_preference: - mode: PrimaryPreferred - tag_sets: - - data_center: sf -suitable_servers: -- *1 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Secondary.json b/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Secondary.json deleted file mode 100644 index 23864a278c..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Secondary.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetWithPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "a:27017", - "avg_rtt_ms": 26, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "Secondary", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ], - "in_latency_window": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Secondary.yml b/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Secondary.yml deleted file mode 100644 index 85afe014a1..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Secondary.yml +++ /dev/null @@ -1,30 +0,0 @@ -topology_description: - type: ReplicaSetWithPrimary - servers: - - &1 - address: b:27017 - avg_rtt_ms: 5 - type: RSSecondary - tags: - data_center: nyc - - &2 - address: c:27017 - avg_rtt_ms: 100 - type: RSSecondary - tags: - data_center: nyc - - address: a:27017 - avg_rtt_ms: 26 - type: RSPrimary - tags: - data_center: nyc -operation: read -read_preference: - mode: Secondary - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -- *2 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred.json b/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred.json deleted file mode 100644 index d07c24218d..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetWithPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "a:27017", - "avg_rtt_ms": 26, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "SecondaryPreferred", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ], - "in_latency_window": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - } - ] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred.yml b/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred.yml deleted file mode 100644 index f067035238..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred.yml +++ /dev/null @@ -1,30 +0,0 @@ -topology_description: - type: ReplicaSetWithPrimary - servers: - - &1 - address: b:27017 - avg_rtt_ms: 5 - type: RSSecondary - tags: - data_center: nyc - - &2 - address: c:27017 - avg_rtt_ms: 100 - type: RSSecondary - tags: - data_center: nyc - - address: a:27017 - avg_rtt_ms: 26 - type: RSPrimary - tags: - data_center: nyc -operation: read -read_preference: - mode: SecondaryPreferred - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -- *2 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.json b/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.json deleted file mode 100644 index f893cc9f82..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetWithPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "a:27017", - "avg_rtt_ms": 26, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "SecondaryPreferred", - "tag_sets": [ - { - "data_center": "sf" - } - ] - }, - "suitable_servers": [ - { - "address": "a:27017", - "avg_rtt_ms": 26, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - } - ], - "in_latency_window": [ - { - "address": "a:27017", - "avg_rtt_ms": 26, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - } - ] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.yml b/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.yml deleted file mode 100644 index f74af2214a..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.yml +++ /dev/null @@ -1,28 +0,0 @@ -topology_description: - type: ReplicaSetWithPrimary - servers: - - address: b:27017 - avg_rtt_ms: 5 - type: RSSecondary - tags: - data_center: nyc - - address: c:27017 - avg_rtt_ms: 100 - type: RSSecondary - tags: - data_center: nyc - - &1 - address: a:27017 - avg_rtt_ms: 26 - type: RSPrimary - tags: - data_center: nyc -operation: read -read_preference: - mode: SecondaryPreferred - tag_sets: - - data_center: sf -suitable_servers: -- *1 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred_tags.json b/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred_tags.json deleted file mode 100644 index a74a2dbf33..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred_tags.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetWithPrimary", - "servers": [ - { - "address": "a:27017", - "avg_rtt_ms": 5, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "sf" - } - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "SecondaryPreferred", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "a:27017", - "avg_rtt_ms": 5, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - } - ], - "in_latency_window": [ - { - "address": "a:27017", - "avg_rtt_ms": 5, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - } - ] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred_tags.yml b/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred_tags.yml deleted file mode 100644 index a493a885bc..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred_tags.yml +++ /dev/null @@ -1,28 +0,0 @@ -# Attempt to select the secondary, except its tag doesn't match. -# Fall back to primary. ---- -topology_description: - type: ReplicaSetWithPrimary - servers: - - &1 - address: a:27017 - avg_rtt_ms: 5 - type: RSPrimary - tags: - data_center: nyc - - &2 - address: b:27017 - avg_rtt_ms: 5 - type: RSSecondary - tags: - data_center: sf # No match. -operation: read -read_preference: - mode: SecondaryPreferred - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -in_latency_window: -- *1 - diff --git a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Secondary_non_matching.json b/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Secondary_non_matching.json deleted file mode 100644 index 1272180666..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Secondary_non_matching.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetWithPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "a:27017", - "avg_rtt_ms": 26, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "Secondary", - "tag_sets": [ - { - "data_center": "sf" - } - ] - }, - "suitable_servers": [], - "in_latency_window": [] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Secondary_non_matching.yml b/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Secondary_non_matching.yml deleted file mode 100644 index 6414401e85..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/read/Secondary_non_matching.yml +++ /dev/null @@ -1,25 +0,0 @@ -topology_description: - type: ReplicaSetWithPrimary - servers: - - address: b:27017 - avg_rtt_ms: 5 - type: RSSecondary - tags: - data_center: nyc - - address: c:27017 - avg_rtt_ms: 100 - type: RSSecondary - tags: - data_center: nyc - - address: a:27017 - avg_rtt_ms: 26 - type: RSPrimary - tags: - data_center: nyc -operation: read -read_preference: - mode: Secondary - tag_sets: - - data_center: sf -suitable_servers: [] -in_latency_window: [] diff --git a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/write/SecondaryPreferred.json b/testdata/server-selection/server_selection/ReplicaSetWithPrimary/write/SecondaryPreferred.json deleted file mode 100644 index 65ab3dc640..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/write/SecondaryPreferred.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "topology_description": { - "type": "ReplicaSetWithPrimary", - "servers": [ - { - "address": "b:27017", - "avg_rtt_ms": 5, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "c:27017", - "avg_rtt_ms": 100, - "type": "RSSecondary", - "tags": { - "data_center": "nyc" - } - }, - { - "address": "a:27017", - "avg_rtt_ms": 26, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - } - ] - }, - "operation": "write", - "read_preference": { - "mode": "SecondaryPreferred", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "a:27017", - "avg_rtt_ms": 26, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - } - ], - "in_latency_window": [ - { - "address": "a:27017", - "avg_rtt_ms": 26, - "type": "RSPrimary", - "tags": { - "data_center": "nyc" - } - } - ] -} diff --git a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/write/SecondaryPreferred.yml b/testdata/server-selection/server_selection/ReplicaSetWithPrimary/write/SecondaryPreferred.yml deleted file mode 100644 index 9a01da480b..0000000000 --- a/testdata/server-selection/server_selection/ReplicaSetWithPrimary/write/SecondaryPreferred.yml +++ /dev/null @@ -1,28 +0,0 @@ -topology_description: - type: ReplicaSetWithPrimary - servers: - - address: b:27017 - avg_rtt_ms: 5 - type: RSSecondary - tags: - data_center: nyc - - address: c:27017 - avg_rtt_ms: 100 - type: RSSecondary - tags: - data_center: nyc - - &1 - address: a:27017 - avg_rtt_ms: 26 - type: RSPrimary - tags: - data_center: nyc -operation: write -read_preference: - mode: SecondaryPreferred - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/Sharded/read/Nearest.json b/testdata/server-selection/server_selection/Sharded/read/Nearest.json deleted file mode 100644 index 705a784a0b..0000000000 --- a/testdata/server-selection/server_selection/Sharded/read/Nearest.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "topology_description": { - "type": "Sharded", - "servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - }, - { - "address": "h:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "Nearest", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - }, - { - "address": "h:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ], - "in_latency_window": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - } - ] -} diff --git a/testdata/server-selection/server_selection/Sharded/read/Nearest.yml b/testdata/server-selection/server_selection/Sharded/read/Nearest.yml deleted file mode 100644 index 4b06b4dda6..0000000000 --- a/testdata/server-selection/server_selection/Sharded/read/Nearest.yml +++ /dev/null @@ -1,21 +0,0 @@ -topology_description: - type: Sharded - servers: - - &1 - address: g:27017 - avg_rtt_ms: 5 - type: Mongos - - &2 - address: h:27017 - avg_rtt_ms: 35 - type: Mongos -operation: read -read_preference: - mode: Nearest - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -- *2 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/Sharded/read/Primary.json b/testdata/server-selection/server_selection/Sharded/read/Primary.json deleted file mode 100644 index 7a321be2bb..0000000000 --- a/testdata/server-selection/server_selection/Sharded/read/Primary.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "topology_description": { - "type": "Sharded", - "servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - }, - { - "address": "h:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "Primary" - }, - "suitable_servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - }, - { - "address": "h:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ], - "in_latency_window": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - } - ] -} diff --git a/testdata/server-selection/server_selection/Sharded/read/Primary.yml b/testdata/server-selection/server_selection/Sharded/read/Primary.yml deleted file mode 100644 index 1b4b076589..0000000000 --- a/testdata/server-selection/server_selection/Sharded/read/Primary.yml +++ /dev/null @@ -1,19 +0,0 @@ -topology_description: - type: Sharded - servers: - - &1 - address: g:27017 - avg_rtt_ms: 5 - type: Mongos - - &2 - address: h:27017 - avg_rtt_ms: 35 - type: Mongos -operation: read -read_preference: - mode: Primary -suitable_servers: -- *1 -- *2 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/Sharded/read/PrimaryPreferred.json b/testdata/server-selection/server_selection/Sharded/read/PrimaryPreferred.json deleted file mode 100644 index e9bc1421f9..0000000000 --- a/testdata/server-selection/server_selection/Sharded/read/PrimaryPreferred.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "topology_description": { - "type": "Sharded", - "servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - }, - { - "address": "h:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "PrimaryPreferred", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - }, - { - "address": "h:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ], - "in_latency_window": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - } - ] -} diff --git a/testdata/server-selection/server_selection/Sharded/read/PrimaryPreferred.yml b/testdata/server-selection/server_selection/Sharded/read/PrimaryPreferred.yml deleted file mode 100644 index b908d7ac10..0000000000 --- a/testdata/server-selection/server_selection/Sharded/read/PrimaryPreferred.yml +++ /dev/null @@ -1,21 +0,0 @@ -topology_description: - type: Sharded - servers: - - &1 - address: g:27017 - avg_rtt_ms: 5 - type: Mongos - - &2 - address: h:27017 - avg_rtt_ms: 35 - type: Mongos -operation: read -read_preference: - mode: PrimaryPreferred - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -- *2 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/Sharded/read/Secondary.json b/testdata/server-selection/server_selection/Sharded/read/Secondary.json deleted file mode 100644 index 49813f7b9e..0000000000 --- a/testdata/server-selection/server_selection/Sharded/read/Secondary.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "topology_description": { - "type": "Sharded", - "servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - }, - { - "address": "h:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "Secondary", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - }, - { - "address": "h:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ], - "in_latency_window": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - } - ] -} diff --git a/testdata/server-selection/server_selection/Sharded/read/Secondary.yml b/testdata/server-selection/server_selection/Sharded/read/Secondary.yml deleted file mode 100644 index bf7c6aa88e..0000000000 --- a/testdata/server-selection/server_selection/Sharded/read/Secondary.yml +++ /dev/null @@ -1,21 +0,0 @@ -topology_description: - type: Sharded - servers: - - &1 - address: g:27017 - avg_rtt_ms: 5 - type: Mongos - - &2 - address: h:27017 - avg_rtt_ms: 35 - type: Mongos -operation: read -read_preference: - mode: Secondary - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -- *2 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/Sharded/read/SecondaryPreferred.json b/testdata/server-selection/server_selection/Sharded/read/SecondaryPreferred.json deleted file mode 100644 index 62fa13f297..0000000000 --- a/testdata/server-selection/server_selection/Sharded/read/SecondaryPreferred.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "topology_description": { - "type": "Sharded", - "servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - }, - { - "address": "h:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "SecondaryPreferred", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - }, - { - "address": "h:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ], - "in_latency_window": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - } - ] -} diff --git a/testdata/server-selection/server_selection/Sharded/read/SecondaryPreferred.yml b/testdata/server-selection/server_selection/Sharded/read/SecondaryPreferred.yml deleted file mode 100644 index a9f238901f..0000000000 --- a/testdata/server-selection/server_selection/Sharded/read/SecondaryPreferred.yml +++ /dev/null @@ -1,21 +0,0 @@ -topology_description: - type: Sharded - servers: - - &1 - address: g:27017 - avg_rtt_ms: 5 - type: Mongos - - &2 - address: h:27017 - avg_rtt_ms: 35 - type: Mongos -operation: read -read_preference: - mode: SecondaryPreferred - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -- *2 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/Sharded/write/Nearest.json b/testdata/server-selection/server_selection/Sharded/write/Nearest.json deleted file mode 100644 index aef7f02ec7..0000000000 --- a/testdata/server-selection/server_selection/Sharded/write/Nearest.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "topology_description": { - "type": "Sharded", - "servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - }, - { - "address": "h:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ] - }, - "operation": "write", - "read_preference": { - "mode": "Nearest", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - }, - { - "address": "h:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ], - "in_latency_window": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - } - ] -} diff --git a/testdata/server-selection/server_selection/Sharded/write/Nearest.yml b/testdata/server-selection/server_selection/Sharded/write/Nearest.yml deleted file mode 100644 index 1f3c2da0ee..0000000000 --- a/testdata/server-selection/server_selection/Sharded/write/Nearest.yml +++ /dev/null @@ -1,21 +0,0 @@ -topology_description: - type: Sharded - servers: - - &1 - address: g:27017 - avg_rtt_ms: 5 - type: Mongos - - &2 - address: h:27017 - avg_rtt_ms: 35 - type: Mongos -operation: write -read_preference: - mode: Nearest - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -- *2 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/Sharded/write/Primary.json b/testdata/server-selection/server_selection/Sharded/write/Primary.json deleted file mode 100644 index f6ce2e75c1..0000000000 --- a/testdata/server-selection/server_selection/Sharded/write/Primary.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "topology_description": { - "type": "Sharded", - "servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - }, - { - "address": "h:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ] - }, - "operation": "write", - "read_preference": { - "mode": "Primary" - }, - "suitable_servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - }, - { - "address": "h:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ], - "in_latency_window": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - } - ] -} diff --git a/testdata/server-selection/server_selection/Sharded/write/Primary.yml b/testdata/server-selection/server_selection/Sharded/write/Primary.yml deleted file mode 100644 index f673af0737..0000000000 --- a/testdata/server-selection/server_selection/Sharded/write/Primary.yml +++ /dev/null @@ -1,19 +0,0 @@ -topology_description: - type: Sharded - servers: - - &1 - address: g:27017 - avg_rtt_ms: 5 - type: Mongos - - &2 - address: h:27017 - avg_rtt_ms: 35 - type: Mongos -operation: write -read_preference: - mode: Primary -suitable_servers: -- *1 -- *2 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/Sharded/write/PrimaryPreferred.json b/testdata/server-selection/server_selection/Sharded/write/PrimaryPreferred.json deleted file mode 100644 index 25f56a5359..0000000000 --- a/testdata/server-selection/server_selection/Sharded/write/PrimaryPreferred.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "topology_description": { - "type": "Sharded", - "servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - }, - { - "address": "h:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ] - }, - "operation": "write", - "read_preference": { - "mode": "PrimaryPreferred", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - }, - { - "address": "h:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ], - "in_latency_window": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - } - ] -} diff --git a/testdata/server-selection/server_selection/Sharded/write/PrimaryPreferred.yml b/testdata/server-selection/server_selection/Sharded/write/PrimaryPreferred.yml deleted file mode 100644 index a754720604..0000000000 --- a/testdata/server-selection/server_selection/Sharded/write/PrimaryPreferred.yml +++ /dev/null @@ -1,21 +0,0 @@ -topology_description: - type: Sharded - servers: - - &1 - address: g:27017 - avg_rtt_ms: 5 - type: Mongos - - &2 - address: h:27017 - avg_rtt_ms: 35 - type: Mongos -operation: write -read_preference: - mode: PrimaryPreferred - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -- *2 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/Sharded/write/Secondary.json b/testdata/server-selection/server_selection/Sharded/write/Secondary.json deleted file mode 100644 index 1fa026f716..0000000000 --- a/testdata/server-selection/server_selection/Sharded/write/Secondary.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "topology_description": { - "type": "Sharded", - "servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - }, - { - "address": "h:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ] - }, - "operation": "write", - "read_preference": { - "mode": "Secondary", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - }, - { - "address": "h:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ], - "in_latency_window": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - } - ] -} diff --git a/testdata/server-selection/server_selection/Sharded/write/Secondary.yml b/testdata/server-selection/server_selection/Sharded/write/Secondary.yml deleted file mode 100644 index 99ac48eb1a..0000000000 --- a/testdata/server-selection/server_selection/Sharded/write/Secondary.yml +++ /dev/null @@ -1,21 +0,0 @@ -topology_description: - type: Sharded - servers: - - &1 - address: g:27017 - avg_rtt_ms: 5 - type: Mongos - - &2 - address: h:27017 - avg_rtt_ms: 35 - type: Mongos -operation: write -read_preference: - mode: Secondary - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -- *2 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/Sharded/write/SecondaryPreferred.json b/testdata/server-selection/server_selection/Sharded/write/SecondaryPreferred.json deleted file mode 100644 index f9467472aa..0000000000 --- a/testdata/server-selection/server_selection/Sharded/write/SecondaryPreferred.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "topology_description": { - "type": "Sharded", - "servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - }, - { - "address": "h:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ] - }, - "operation": "write", - "read_preference": { - "mode": "SecondaryPreferred", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - }, - { - "address": "h:27017", - "avg_rtt_ms": 35, - "type": "Mongos" - } - ], - "in_latency_window": [ - { - "address": "g:27017", - "avg_rtt_ms": 5, - "type": "Mongos" - } - ] -} diff --git a/testdata/server-selection/server_selection/Sharded/write/SecondaryPreferred.yml b/testdata/server-selection/server_selection/Sharded/write/SecondaryPreferred.yml deleted file mode 100644 index c4fb9b6c60..0000000000 --- a/testdata/server-selection/server_selection/Sharded/write/SecondaryPreferred.yml +++ /dev/null @@ -1,21 +0,0 @@ -topology_description: - type: Sharded - servers: - - &1 - address: g:27017 - avg_rtt_ms: 5 - type: Mongos - - &2 - address: h:27017 - avg_rtt_ms: 35 - type: Mongos -operation: write -read_preference: - mode: SecondaryPreferred - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -- *2 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/Single/read/SecondaryPreferred.json b/testdata/server-selection/server_selection/Single/read/SecondaryPreferred.json deleted file mode 100644 index e60496dfdf..0000000000 --- a/testdata/server-selection/server_selection/Single/read/SecondaryPreferred.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "topology_description": { - "type": "Single", - "servers": [ - { - "address": "a:27017", - "avg_rtt_ms": 5, - "type": "Standalone", - "tags": { - "data_center": "dc" - } - } - ] - }, - "operation": "read", - "read_preference": { - "mode": "SecondaryPreferred", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "a:27017", - "avg_rtt_ms": 5, - "type": "Standalone", - "tags": { - "data_center": "dc" - } - } - ], - "in_latency_window": [ - { - "address": "a:27017", - "avg_rtt_ms": 5, - "type": "Standalone", - "tags": { - "data_center": "dc" - } - } - ] -} diff --git a/testdata/server-selection/server_selection/Single/read/SecondaryPreferred.yml b/testdata/server-selection/server_selection/Single/read/SecondaryPreferred.yml deleted file mode 100644 index e926fd5788..0000000000 --- a/testdata/server-selection/server_selection/Single/read/SecondaryPreferred.yml +++ /dev/null @@ -1,18 +0,0 @@ -topology_description: - type: Single - servers: - - &1 - address: a:27017 - avg_rtt_ms: 5 - type: Standalone - tags: - data_center: dc -operation: read -read_preference: - mode: SecondaryPreferred - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/Single/write/SecondaryPreferred.json b/testdata/server-selection/server_selection/Single/write/SecondaryPreferred.json deleted file mode 100644 index 34fe91d5a2..0000000000 --- a/testdata/server-selection/server_selection/Single/write/SecondaryPreferred.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "topology_description": { - "type": "Single", - "servers": [ - { - "address": "a:27017", - "avg_rtt_ms": 5, - "type": "Standalone", - "tags": { - "data_center": "dc" - } - } - ] - }, - "operation": "write", - "read_preference": { - "mode": "SecondaryPreferred", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [ - { - "address": "a:27017", - "avg_rtt_ms": 5, - "type": "Standalone", - "tags": { - "data_center": "dc" - } - } - ], - "in_latency_window": [ - { - "address": "a:27017", - "avg_rtt_ms": 5, - "type": "Standalone", - "tags": { - "data_center": "dc" - } - } - ] -} diff --git a/testdata/server-selection/server_selection/Single/write/SecondaryPreferred.yml b/testdata/server-selection/server_selection/Single/write/SecondaryPreferred.yml deleted file mode 100644 index c8b592bd93..0000000000 --- a/testdata/server-selection/server_selection/Single/write/SecondaryPreferred.yml +++ /dev/null @@ -1,18 +0,0 @@ -topology_description: - type: Single - servers: - - &1 - address: a:27017 - avg_rtt_ms: 5 - type: Standalone - tags: - data_center: dc -operation: write -read_preference: - mode: SecondaryPreferred - tag_sets: - - data_center: nyc -suitable_servers: -- *1 -in_latency_window: -- *1 diff --git a/testdata/server-selection/server_selection/Unknown/read/SecondaryPreferred.json b/testdata/server-selection/server_selection/Unknown/read/SecondaryPreferred.json deleted file mode 100644 index 0ae8075fba..0000000000 --- a/testdata/server-selection/server_selection/Unknown/read/SecondaryPreferred.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "topology_description": { - "type": "Unknown", - "servers": [] - }, - "operation": "read", - "read_preference": { - "mode": "SecondaryPreferred", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [], - "in_latency_window": [] -} diff --git a/testdata/server-selection/server_selection/Unknown/read/SecondaryPreferred.yml b/testdata/server-selection/server_selection/Unknown/read/SecondaryPreferred.yml deleted file mode 100644 index 4c1622fbc5..0000000000 --- a/testdata/server-selection/server_selection/Unknown/read/SecondaryPreferred.yml +++ /dev/null @@ -1,10 +0,0 @@ -topology_description: - type: Unknown - servers: [] -operation: read -read_preference: - mode: SecondaryPreferred - tag_sets: - - data_center: nyc -suitable_servers: [] -in_latency_window: [] diff --git a/testdata/server-selection/server_selection/Unknown/write/SecondaryPreferred.json b/testdata/server-selection/server_selection/Unknown/write/SecondaryPreferred.json deleted file mode 100644 index a70eece62c..0000000000 --- a/testdata/server-selection/server_selection/Unknown/write/SecondaryPreferred.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "topology_description": { - "type": "Unknown", - "servers": [] - }, - "operation": "write", - "read_preference": { - "mode": "SecondaryPreferred", - "tag_sets": [ - { - "data_center": "nyc" - } - ] - }, - "suitable_servers": [], - "in_latency_window": [] -} diff --git a/testdata/server-selection/server_selection/Unknown/write/SecondaryPreferred.yml b/testdata/server-selection/server_selection/Unknown/write/SecondaryPreferred.yml deleted file mode 100644 index 416728591a..0000000000 --- a/testdata/server-selection/server_selection/Unknown/write/SecondaryPreferred.yml +++ /dev/null @@ -1,10 +0,0 @@ -topology_description: - type: Unknown - servers: [] -operation: write -read_preference: - mode: SecondaryPreferred - tag_sets: - - data_center: nyc -suitable_servers: [] -in_latency_window: [] diff --git a/testdata/sessions/driver-sessions-dirty-session-errors.json b/testdata/sessions/driver-sessions-dirty-session-errors.json deleted file mode 100644 index 6aa1da1df5..0000000000 --- a/testdata/sessions/driver-sessions-dirty-session-errors.json +++ /dev/null @@ -1,968 +0,0 @@ -{ - "description": "driver-sessions-dirty-session-errors", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "4.0", - "topologies": [ - "replicaset" - ] - }, - { - "minServerVersion": "4.1.8", - "topologies": [ - "sharded" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "session-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test" - } - }, - { - "session": { - "id": "session0", - "client": "client0" - } - } - ], - "initialData": [ - { - "collectionName": "test", - "databaseName": "session-tests", - "documents": [ - { - "_id": 1 - } - ] - } - ], - "tests": [ - { - "description": "Dirty explicit session is discarded (insert)", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "closeConnection": true - } - } - } - }, - { - "name": "assertSessionNotDirty", - "object": "testRunner", - "arguments": { - "session": "session0" - } - }, - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "session": "session0", - "document": { - "_id": 2 - } - }, - "expectResult": { - "$$unsetOrMatches": { - "insertedId": { - "$$unsetOrMatches": 2 - } - } - } - }, - { - "name": "assertSessionDirty", - "object": "testRunner", - "arguments": { - "session": "session0" - } - }, - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "session": "session0", - "document": { - "_id": 3 - } - }, - "expectResult": { - "$$unsetOrMatches": { - "insertedId": { - "$$unsetOrMatches": 3 - } - } - } - }, - { - "name": "assertSessionDirty", - "object": "testRunner", - "arguments": { - "session": "session0" - } - }, - { - "name": "endSession", - "object": "session0" - }, - { - "name": "find", - "object": "collection0", - "arguments": { - "filter": { - "_id": -1 - } - }, - "expectResult": [] - }, - { - "name": "assertDifferentLsidOnLastTwoCommands", - "object": "testRunner", - "arguments": { - "client": "client0" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 2 - } - ], - "ordered": true, - "lsid": { - "$$sessionLsid": "session0" - }, - "txnNumber": 1 - }, - "commandName": "insert", - "databaseName": "session-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 2 - } - ], - "ordered": true, - "lsid": { - "$$sessionLsid": "session0" - }, - "txnNumber": 1 - }, - "commandName": "insert", - "databaseName": "session-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 3 - } - ], - "ordered": true, - "lsid": { - "$$sessionLsid": "session0" - }, - "txnNumber": 2 - }, - "commandName": "insert", - "databaseName": "session-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "find": "test", - "filter": { - "_id": -1 - }, - "lsid": { - "$$type": "object" - } - }, - "commandName": "find", - "databaseName": "session-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test", - "databaseName": "session-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - }, - { - "_id": 3 - } - ] - } - ] - }, - { - "description": "Dirty explicit session is discarded (findAndModify)", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "closeConnection": true - } - } - } - }, - { - "name": "assertSessionNotDirty", - "object": "testRunner", - "arguments": { - "session": "session0" - } - }, - { - "name": "findOneAndUpdate", - "object": "collection0", - "arguments": { - "session": "session0", - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "returnDocument": "Before" - }, - "expectResult": { - "_id": 1 - } - }, - { - "name": "assertSessionDirty", - "object": "testRunner", - "arguments": { - "session": "session0" - } - }, - { - "name": "endSession", - "object": "session0" - }, - { - "name": "find", - "object": "collection0", - "arguments": { - "filter": { - "_id": -1 - } - }, - "expectResult": [] - }, - { - "name": "assertDifferentLsidOnLastTwoCommands", - "object": "testRunner", - "arguments": { - "client": "client0" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "test", - "query": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "new": false, - "lsid": { - "$$sessionLsid": "session0" - }, - "txnNumber": 1, - "readConcern": { - "$$exists": false - }, - "writeConcern": { - "$$exists": false - } - }, - "commandName": "findAndModify", - "databaseName": "session-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "findAndModify": "test", - "query": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "new": false, - "lsid": { - "$$sessionLsid": "session0" - }, - "txnNumber": 1, - "readConcern": { - "$$exists": false - }, - "writeConcern": { - "$$exists": false - } - }, - "commandName": "findAndModify", - "databaseName": "session-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "find": "test", - "filter": { - "_id": -1 - }, - "lsid": { - "$$type": "object" - } - }, - "commandName": "find", - "databaseName": "session-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test", - "databaseName": "session-tests", - "documents": [ - { - "_id": 1, - "x": 1 - } - ] - } - ] - }, - { - "description": "Dirty implicit session is discarded (insert)", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "insert" - ], - "closeConnection": true - } - } - } - }, - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 2 - } - }, - "expectResult": { - "$$unsetOrMatches": { - "insertedId": { - "$$unsetOrMatches": 2 - } - } - } - }, - { - "name": "find", - "object": "collection0", - "arguments": { - "filter": { - "_id": -1 - } - }, - "expectResult": [] - }, - { - "name": "assertDifferentLsidOnLastTwoCommands", - "object": "testRunner", - "arguments": { - "client": "client0" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 2 - } - ], - "ordered": true, - "lsid": { - "$$type": "object" - }, - "txnNumber": 1 - }, - "commandName": "insert", - "databaseName": "session-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 2 - } - ], - "ordered": true, - "lsid": { - "$$type": "object" - }, - "txnNumber": 1 - }, - "commandName": "insert", - "databaseName": "session-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "find": "test", - "filter": { - "_id": -1 - }, - "lsid": { - "$$type": "object" - } - }, - "commandName": "find", - "databaseName": "session-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test", - "databaseName": "session-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ] - }, - { - "description": "Dirty implicit session is discarded (findAndModify)", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "findAndModify" - ], - "closeConnection": true - } - } - } - }, - { - "name": "findOneAndUpdate", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "returnDocument": "Before" - }, - "expectResult": { - "_id": 1 - } - }, - { - "name": "find", - "object": "collection0", - "arguments": { - "filter": { - "_id": -1 - } - }, - "expectResult": [] - }, - { - "name": "assertDifferentLsidOnLastTwoCommands", - "object": "testRunner", - "arguments": { - "client": "client0" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "test", - "query": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "new": false, - "lsid": { - "$$type": "object" - }, - "txnNumber": 1, - "readConcern": { - "$$exists": false - }, - "writeConcern": { - "$$exists": false - } - }, - "commandName": "findAndModify", - "databaseName": "session-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "findAndModify": "test", - "query": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "new": false, - "lsid": { - "$$type": "object" - }, - "txnNumber": 1, - "readConcern": { - "$$exists": false - }, - "writeConcern": { - "$$exists": false - } - }, - "commandName": "findAndModify", - "databaseName": "session-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "find": "test", - "filter": { - "_id": -1 - }, - "lsid": { - "$$type": "object" - } - }, - "commandName": "find", - "databaseName": "session-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test", - "databaseName": "session-tests", - "documents": [ - { - "_id": 1, - "x": 1 - } - ] - } - ] - }, - { - "description": "Dirty implicit session is discarded (read returning cursor)", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "closeConnection": true - } - } - } - }, - { - "name": "aggregate", - "object": "collection0", - "arguments": { - "pipeline": [ - { - "$project": { - "_id": 1 - } - } - ] - }, - "expectResult": [ - { - "_id": 1 - } - ] - }, - { - "name": "find", - "object": "collection0", - "arguments": { - "filter": { - "_id": -1 - } - }, - "expectResult": [] - }, - { - "name": "assertDifferentLsidOnLastTwoCommands", - "object": "testRunner", - "arguments": { - "client": "client0" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "test", - "pipeline": [ - { - "$project": { - "_id": 1 - } - } - ], - "lsid": { - "$$type": "object" - } - }, - "commandName": "aggregate", - "databaseName": "session-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "test", - "pipeline": [ - { - "$project": { - "_id": 1 - } - } - ], - "lsid": { - "$$type": "object" - } - }, - "commandName": "aggregate", - "databaseName": "session-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "find": "test", - "filter": { - "_id": -1 - }, - "lsid": { - "$$type": "object" - } - }, - "commandName": "find", - "databaseName": "session-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test", - "databaseName": "session-tests", - "documents": [ - { - "_id": 1 - } - ] - } - ] - }, - { - "description": "Dirty implicit session is discarded (read not returning cursor)", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "aggregate" - ], - "closeConnection": true - } - } - } - }, - { - "name": "countDocuments", - "object": "collection0", - "arguments": { - "filter": {} - }, - "expectResult": 1 - }, - { - "name": "find", - "object": "collection0", - "arguments": { - "filter": { - "_id": -1 - } - }, - "expectResult": [] - }, - { - "name": "assertDifferentLsidOnLastTwoCommands", - "object": "testRunner", - "arguments": { - "client": "client0" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "test", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ], - "lsid": { - "$$type": "object" - } - }, - "commandName": "aggregate", - "databaseName": "session-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "test", - "pipeline": [ - { - "$match": {} - }, - { - "$group": { - "_id": 1, - "n": { - "$sum": 1 - } - } - } - ], - "lsid": { - "$$type": "object" - } - }, - "commandName": "aggregate", - "databaseName": "session-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "find": "test", - "filter": { - "_id": -1 - }, - "lsid": { - "$$type": "object" - } - }, - "commandName": "find", - "databaseName": "session-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test", - "databaseName": "session-tests", - "documents": [ - { - "_id": 1 - } - ] - } - ] - } - ] -} diff --git a/testdata/sessions/driver-sessions-dirty-session-errors.yml b/testdata/sessions/driver-sessions-dirty-session-errors.yml deleted file mode 100644 index eb7978660d..0000000000 --- a/testdata/sessions/driver-sessions-dirty-session-errors.yml +++ /dev/null @@ -1,351 +0,0 @@ -description: "driver-sessions-dirty-session-errors" - -schemaVersion: "1.0" - -runOnRequirements: - - minServerVersion: "4.0" - topologies: [ replicaset ] - - minServerVersion: "4.1.8" - topologies: [ sharded ] - -createEntities: - - client: - id: &client0 client0 - useMultipleMongoses: false - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name session-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name test - - session: - id: &session0 session0 - client: *client0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - -tests: - - description: "Dirty explicit session is discarded (insert)" - operations: - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ insert ] - closeConnection: true - - name: assertSessionNotDirty - object: testRunner - arguments: - session: *session0 - - name: insertOne - object: *collection0 - arguments: - session: *session0 - document: { _id: 2 } - expectResult: { $$unsetOrMatches: { insertedId: { $$unsetOrMatches: 2 } } } - - name: assertSessionDirty - object: testRunner - arguments: - session: *session0 - - name: insertOne - object: *collection0 - arguments: - session: *session0 - document: { _id: 3 } - expectResult: { $$unsetOrMatches: { insertedId: { $$unsetOrMatches: 3 } } } - - name: assertSessionDirty - object: testRunner - arguments: - session: *session0 - - name: endSession - object: *session0 - - &find_with_implicit_session - name: find - object: *collection0 - arguments: - filter: { _id: -1 } - expectResult: [] - - name: assertDifferentLsidOnLastTwoCommands - object: testRunner - arguments: - client: *client0 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: &insert_attempt - command: - insert: *collection0Name - documents: - - { _id: 2 } - ordered: true - lsid: { $$sessionLsid: *session0 } - txnNumber: 1 - commandName: insert - databaseName: *database0Name - - commandStartedEvent: *insert_attempt - - commandStartedEvent: - command: - insert: *collection0Name - documents: - - { _id: 3 } - ordered: true - lsid: { $$sessionLsid: *session0 } - txnNumber: 2 - commandName: insert - databaseName: *database0Name - - commandStartedEvent: &find_with_implicit_session_event - command: - find: *collection0Name - filter: { _id: -1 } - # There is no explicit session to use with $$sessionLsid, so - # just assert an arbitrary lsid document - lsid: { $$type: object } - commandName: find - databaseName: *database0Name - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } - - { _id: 3 } - - - description: "Dirty explicit session is discarded (findAndModify)" - operations: - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ findAndModify ] - closeConnection: true - - name: assertSessionNotDirty - object: testRunner - arguments: - session: *session0 - - name: findOneAndUpdate - object: *collection0 - arguments: - session: *session0 - filter: { _id: 1 } - update: { $inc: { x: 1 } } - returnDocument: Before - expectResult: { _id: 1 } - - name: assertSessionDirty - object: testRunner - arguments: - session: *session0 - - name: endSession - object: *session0 - - *find_with_implicit_session - - name: assertDifferentLsidOnLastTwoCommands - object: testRunner - arguments: - client: *client0 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: &findAndModify_attempt - command: - findAndModify: *collection0Name - query: { _id: 1 } - update: { $inc: { x: 1 } } - new: false - lsid: { $$sessionLsid: *session0 } - txnNumber: 1 - readConcern: { $$exists: false } - writeConcern: { $$exists: false } - commandName: findAndModify - databaseName: *database0Name - - commandStartedEvent: *findAndModify_attempt - - commandStartedEvent: *find_with_implicit_session_event - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 1 } - - - description: "Dirty implicit session is discarded (insert)" - operations: - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ insert ] - closeConnection: true - - name: insertOne - object: *collection0 - arguments: - document: { _id: 2 } - expectResult: { $$unsetOrMatches: { insertedId: { $$unsetOrMatches: 2 } } } - - *find_with_implicit_session - - name: assertDifferentLsidOnLastTwoCommands - object: testRunner - arguments: - client: *client0 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: &insert_attempt - command: - insert: *collection0Name - documents: - - { _id: 2 } - ordered: true - lsid: { $$type: object } - txnNumber: 1 - commandName: insert - databaseName: *database0Name - - commandStartedEvent: *insert_attempt - - commandStartedEvent: *find_with_implicit_session_event - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } - - - description: "Dirty implicit session is discarded (findAndModify)" - operations: - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ findAndModify ] - closeConnection: true - - name: findOneAndUpdate - object: *collection0 - arguments: - filter: { _id: 1 } - update: { $inc: { x: 1 } } - returnDocument: Before - expectResult: { _id: 1 } - - *find_with_implicit_session - - name: assertDifferentLsidOnLastTwoCommands - object: testRunner - arguments: - client: *client0 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: &findAndModify_attempt - command: - findAndModify: *collection0Name - query: { _id: 1 } - update: { $inc: { x: 1 } } - new: false - lsid: { $$type: object } - txnNumber: 1 - readConcern: { $$exists: false } - writeConcern: { $$exists: false } - commandName: findAndModify - databaseName: *database0Name - - commandStartedEvent: *findAndModify_attempt - - commandStartedEvent: *find_with_implicit_session_event - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 1 } - - - description: "Dirty implicit session is discarded (read returning cursor)" - operations: - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ aggregate ] - closeConnection: true - - name: aggregate - object: *collection0 - arguments: - pipeline: [ { $project: { _id: 1 } } ] - expectResult: [ { _id: 1 } ] - - *find_with_implicit_session - - name: assertDifferentLsidOnLastTwoCommands - object: testRunner - arguments: - client: *client0 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: &aggregate_attempt - command: - aggregate: *collection0Name - pipeline: [ { $project: { _id: 1 } } ] - lsid: { $$type: object } - commandName: aggregate - databaseName: *database0Name - - commandStartedEvent: *aggregate_attempt - - commandStartedEvent: *find_with_implicit_session_event - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - - description: "Dirty implicit session is discarded (read not returning cursor)" - operations: - - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [ aggregate ] - closeConnection: true - - name: countDocuments - object: *collection0 - arguments: - filter: {} - expectResult: 1 - - *find_with_implicit_session - - name: assertDifferentLsidOnLastTwoCommands - object: testRunner - arguments: - client: *client0 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: &countDocuments_attempt - command: - aggregate: *collection0Name - pipeline: [ { $match: {} }, { $group: { _id: 1, n: { $sum: 1 } } } ] - lsid: { $$type: object } - commandName: aggregate - databaseName: *database0Name - - commandStartedEvent: *countDocuments_attempt - - commandStartedEvent: *find_with_implicit_session_event - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } diff --git a/testdata/sessions/driver-sessions-server-support.json b/testdata/sessions/driver-sessions-server-support.json deleted file mode 100644 index 55312b32eb..0000000000 --- a/testdata/sessions/driver-sessions-server-support.json +++ /dev/null @@ -1,256 +0,0 @@ -{ - "description": "driver-sessions-server-support", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "3.6" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "session-tests" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "test" - } - }, - { - "session": { - "id": "session0", - "client": "client0" - } - } - ], - "initialData": [ - { - "collectionName": "test", - "databaseName": "session-tests", - "documents": [ - { - "_id": 1 - } - ] - } - ], - "tests": [ - { - "description": "Server supports explicit sessions", - "operations": [ - { - "name": "assertSessionNotDirty", - "object": "testRunner", - "arguments": { - "session": "session0" - } - }, - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "session": "session0", - "document": { - "_id": 2 - } - }, - "expectResult": { - "$$unsetOrMatches": { - "insertedId": { - "$$unsetOrMatches": 2 - } - } - } - }, - { - "name": "assertSessionNotDirty", - "object": "testRunner", - "arguments": { - "session": "session0" - } - }, - { - "name": "endSession", - "object": "session0" - }, - { - "name": "find", - "object": "collection0", - "arguments": { - "filter": { - "_id": -1 - } - }, - "expectResult": [] - }, - { - "name": "assertSameLsidOnLastTwoCommands", - "object": "testRunner", - "arguments": { - "client": "client0" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 2 - } - ], - "ordered": true, - "lsid": { - "$$sessionLsid": "session0" - } - }, - "commandName": "insert", - "databaseName": "session-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "find": "test", - "filter": { - "_id": -1 - }, - "lsid": { - "$$sessionLsid": "session0" - } - }, - "commandName": "find", - "databaseName": "session-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test", - "databaseName": "session-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ] - }, - { - "description": "Server supports implicit sessions", - "operations": [ - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 2 - } - }, - "expectResult": { - "$$unsetOrMatches": { - "insertedId": { - "$$unsetOrMatches": 2 - } - } - } - }, - { - "name": "find", - "object": "collection0", - "arguments": { - "filter": { - "_id": -1 - } - }, - "expectResult": [] - }, - { - "name": "assertSameLsidOnLastTwoCommands", - "object": "testRunner", - "arguments": { - "client": "client0" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "test", - "documents": [ - { - "_id": 2 - } - ], - "ordered": true, - "lsid": { - "$$type": "object" - } - }, - "commandName": "insert", - "databaseName": "session-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "find": "test", - "filter": { - "_id": -1 - }, - "lsid": { - "$$type": "object" - } - }, - "commandName": "find", - "databaseName": "session-tests" - } - } - ] - } - ], - "outcome": [ - { - "collectionName": "test", - "databaseName": "session-tests", - "documents": [ - { - "_id": 1 - }, - { - "_id": 2 - } - ] - } - ] - } - ] -} diff --git a/testdata/sessions/driver-sessions-server-support.yml b/testdata/sessions/driver-sessions-server-support.yml deleted file mode 100644 index 437b4863f1..0000000000 --- a/testdata/sessions/driver-sessions-server-support.yml +++ /dev/null @@ -1,123 +0,0 @@ -description: "driver-sessions-server-support" - -schemaVersion: "1.0" - -runOnRequirements: - - minServerVersion: "3.6" - -createEntities: - - client: - id: &client0 client0 - useMultipleMongoses: false - observeEvents: [ commandStartedEvent ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name session-tests - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name test - - session: - id: &session0 session0 - client: *client0 - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - -tests: - - description: "Server supports explicit sessions" - operations: - - name: assertSessionNotDirty - object: testRunner - arguments: - session: *session0 - - name: insertOne - object: *collection0 - arguments: - session: *session0 - document: { _id: 2 } - expectResult: { $$unsetOrMatches: { insertedId: { $$unsetOrMatches: 2 } } } - - name: assertSessionNotDirty - object: testRunner - arguments: - session: *session0 - - name: endSession - object: *session0 - - &find_with_implicit_session - name: find - object: *collection0 - arguments: - filter: { _id: -1 } - expectResult: [] - - name: assertSameLsidOnLastTwoCommands - object: testRunner - arguments: - client: *client0 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection0Name - documents: [ { _id: 2 } ] - ordered: true - lsid: { $$sessionLsid: *session0 } - commandName: insert - databaseName: *database0Name - - commandStartedEvent: - command: - find: *collection0Name - filter: { _id: -1 } - lsid: { $$sessionLsid: *session0 } - commandName: find - databaseName: *database0Name - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } - - - description: "Server supports implicit sessions" - operations: - - name: insertOne - object: *collection0 - arguments: - document: { _id: 2 } - expectResult: { $$unsetOrMatches: { insertedId: { $$unsetOrMatches: 2 } } } - - *find_with_implicit_session - - name: assertSameLsidOnLastTwoCommands - object: testRunner - arguments: - client: *client0 - expectEvents: - - client: *client0 - events: - - commandStartedEvent: - command: - insert: *collection0Name - documents: - - { _id: 2 } - ordered: true - # There is no explicit session to use with $$sessionLsid, so - # just assert an arbitrary lsid document - lsid: { $$type: object } - commandName: insert - databaseName: *database0Name - - commandStartedEvent: - command: - find: *collection0Name - filter: { _id: -1 } - lsid: { $$type: object } - commandName: find - databaseName: *database0Name - outcome: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1 } - - { _id: 2 } diff --git a/testdata/sessions/implicit-sessions-default-causal-consistency.json b/testdata/sessions/implicit-sessions-default-causal-consistency.json deleted file mode 100644 index 517c8ebc63..0000000000 --- a/testdata/sessions/implicit-sessions-default-causal-consistency.json +++ /dev/null @@ -1,318 +0,0 @@ -{ - "description": "implicit sessions default causal consistency", - "schemaVersion": "1.3", - "runOnRequirements": [ - { - "minServerVersion": "4.2", - "topologies": [ - "replicaset", - "sharded", - "load-balanced" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "useMultipleMongoses": false, - "observeEvents": [ - "commandStartedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "implicit-cc-tests" - } - }, - { - "collection": { - "id": "collectionDefault", - "database": "database0", - "collectionName": "coll-default" - } - }, - { - "collection": { - "id": "collectionSnapshot", - "database": "database0", - "collectionName": "coll-snapshot", - "collectionOptions": { - "readConcern": { - "level": "snapshot" - } - } - } - }, - { - "collection": { - "id": "collectionlinearizable", - "database": "database0", - "collectionName": "coll-linearizable", - "collectionOptions": { - "readConcern": { - "level": "linearizable" - } - } - } - } - ], - "initialData": [ - { - "collectionName": "coll-default", - "databaseName": "implicit-cc-tests", - "documents": [ - { - "_id": 1, - "x": "default" - } - ] - }, - { - "collectionName": "coll-snapshot", - "databaseName": "implicit-cc-tests", - "documents": [ - { - "_id": 1, - "x": "snapshot" - } - ] - }, - { - "collectionName": "coll-linearizable", - "databaseName": "implicit-cc-tests", - "documents": [ - { - "_id": 1, - "x": "linearizable" - } - ] - } - ], - "tests": [ - { - "description": "readConcern is not sent on retried read in implicit session when readConcern level is not specified", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 11600 - } - } - } - }, - { - "name": "find", - "object": "collectionDefault", - "arguments": { - "filter": {} - }, - "expectResult": [ - { - "_id": 1, - "x": "default" - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "coll-default", - "filter": {}, - "readConcern": { - "$$exists": false - } - }, - "databaseName": "implicit-cc-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "find": "coll-default", - "filter": {}, - "readConcern": { - "$$exists": false - } - }, - "databaseName": "implicit-cc-tests" - } - } - ] - } - ] - }, - { - "description": "afterClusterTime is not sent on retried read in implicit session when readConcern level is snapshot", - "runOnRequirements": [ - { - "minServerVersion": "5.0" - } - ], - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 11600 - } - } - } - }, - { - "name": "find", - "object": "collectionSnapshot", - "arguments": { - "filter": {} - }, - "expectResult": [ - { - "_id": 1, - "x": "snapshot" - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "coll-snapshot", - "filter": {}, - "readConcern": { - "level": "snapshot", - "afterClusterTime": { - "$$exists": false - } - } - }, - "databaseName": "implicit-cc-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "find": "coll-snapshot", - "filter": {}, - "readConcern": { - "level": "snapshot", - "afterClusterTime": { - "$$exists": false - } - } - }, - "databaseName": "implicit-cc-tests" - } - } - ] - } - ] - }, - { - "description": "afterClusterTime is not sent on retried read in implicit session when readConcern level is linearizable", - "operations": [ - { - "name": "failPoint", - "object": "testRunner", - "arguments": { - "client": "client0", - "failPoint": { - "configureFailPoint": "failCommand", - "mode": { - "times": 1 - }, - "data": { - "failCommands": [ - "find" - ], - "errorCode": 11600 - } - } - } - }, - { - "name": "find", - "object": "collectionlinearizable", - "arguments": { - "filter": {} - }, - "expectResult": [ - { - "_id": 1, - "x": "linearizable" - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "coll-linearizable", - "filter": {}, - "readConcern": { - "level": "linearizable", - "afterClusterTime": { - "$$exists": false - } - } - }, - "databaseName": "implicit-cc-tests" - } - }, - { - "commandStartedEvent": { - "command": { - "find": "coll-linearizable", - "filter": {}, - "readConcern": { - "level": "linearizable", - "afterClusterTime": { - "$$exists": false - } - } - }, - "databaseName": "implicit-cc-tests" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/sessions/implicit-sessions-default-causal-consistency.yml b/testdata/sessions/implicit-sessions-default-causal-consistency.yml deleted file mode 100644 index 052c6dac20..0000000000 --- a/testdata/sessions/implicit-sessions-default-causal-consistency.yml +++ /dev/null @@ -1,119 +0,0 @@ -description: "implicit sessions default causal consistency" - -schemaVersion: "1.3" - -runOnRequirements: - - minServerVersion: "4.2" - topologies: [replicaset, sharded, load-balanced] - -createEntities: - - client: - id: &client0 client0 - useMultipleMongoses: false - observeEvents: [commandStartedEvent] - - database: - id: &database0 database0 - client: *client0 - databaseName: &databaseName implicit-cc-tests - - collection: - id: &collectionDefault collectionDefault - database: *database0 - collectionName: &collectionNameDefault coll-default - - collection: - id: &collectionSnapshot collectionSnapshot - database: *database0 - collectionName: &collectionNameSnapshot coll-snapshot - collectionOptions: - readConcern: { level: snapshot } - - collection: - id: &collectionlinearizable collectionlinearizable - database: *database0 - collectionName: &collectionNamelinearizable coll-linearizable - collectionOptions: - readConcern: { level: linearizable } - -initialData: - - collectionName: *collectionNameDefault - databaseName: *databaseName - documents: - - { _id: 1, x: default } - - collectionName: *collectionNameSnapshot - databaseName: *databaseName - documents: - - { _id: 1, x: snapshot } - - collectionName: *collectionNamelinearizable - databaseName: *databaseName - documents: - - { _id: 1, x: linearizable } - -tests: - - description: "readConcern is not sent on retried read in implicit session when readConcern level is not specified" - operations: - - &failPointCommand - name: failPoint - object: testRunner - arguments: - client: *client0 - failPoint: - configureFailPoint: failCommand - mode: { times: 1 } - data: - failCommands: [find] - errorCode: 11600 #InterruptedAtShutdown - - name: find - object: *collectionDefault - arguments: - filter: {} - expectResult: [{ _id: 1, x: default }] - expectEvents: - - client: *client0 - events: - - commandStartedEvent: &commandStartedEventDefault - command: - find: *collectionNameDefault - filter: {} - readConcern: { $$exists: false } - databaseName: *databaseName - - commandStartedEvent: *commandStartedEventDefault - - - description: "afterClusterTime is not sent on retried read in implicit session when readConcern level is snapshot" - runOnRequirements: - - minServerVersion: "5.0" - operations: - - *failPointCommand - - name: find - object: *collectionSnapshot - arguments: - filter: {} - expectResult: [{ _id: 1, x: snapshot }] - expectEvents: - - client: *client0 - events: - - commandStartedEvent: &commandStartedEventSnapshot - command: - find: *collectionNameSnapshot - filter: {} - readConcern: - { level: snapshot, afterClusterTime: { $$exists: false } } - databaseName: *databaseName - - commandStartedEvent: *commandStartedEventSnapshot - - - description: "afterClusterTime is not sent on retried read in implicit session when readConcern level is linearizable" - operations: - - *failPointCommand - - name: find - object: *collectionlinearizable - arguments: - filter: {} - expectResult: [{ _id: 1, x: linearizable }] - expectEvents: - - client: *client0 - events: - - commandStartedEvent: &commandStartedEventLinearizable - command: - find: *collectionNamelinearizable - filter: {} - readConcern: - { level: linearizable, afterClusterTime: { $$exists: false } } - databaseName: *databaseName - - commandStartedEvent: *commandStartedEventLinearizable diff --git a/testdata/sessions/snapshot-sessions-not-supported-client-error.json b/testdata/sessions/snapshot-sessions-not-supported-client-error.json deleted file mode 100644 index 208e4cfe63..0000000000 --- a/testdata/sessions/snapshot-sessions-not-supported-client-error.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "description": "snapshot-sessions-not-supported-client-error", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "3.6", - "maxServerVersion": "4.4.99" - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent", - "commandFailedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "database0" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "collection0" - } - }, - { - "session": { - "id": "session0", - "client": "client0", - "sessionOptions": { - "snapshot": true - } - } - } - ], - "initialData": [ - { - "collectionName": "collection0", - "databaseName": "database0", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ], - "tests": [ - { - "description": "Client error on find with snapshot", - "operations": [ - { - "name": "find", - "object": "collection0", - "arguments": { - "session": "session0", - "filter": {} - }, - "expectError": { - "isClientError": true, - "errorContains": "Snapshot reads require MongoDB 5.0 or later" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ] - }, - { - "description": "Client error on aggregate with snapshot", - "operations": [ - { - "name": "aggregate", - "object": "collection0", - "arguments": { - "session": "session0", - "pipeline": [] - }, - "expectError": { - "isClientError": true, - "errorContains": "Snapshot reads require MongoDB 5.0 or later" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ] - }, - { - "description": "Client error on distinct with snapshot", - "operations": [ - { - "name": "distinct", - "object": "collection0", - "arguments": { - "fieldName": "x", - "filter": {}, - "session": "session0" - }, - "expectError": { - "isClientError": true, - "errorContains": "Snapshot reads require MongoDB 5.0 or later" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [] - } - ] - } - ] -} diff --git a/testdata/sessions/snapshot-sessions-not-supported-client-error.yml b/testdata/sessions/snapshot-sessions-not-supported-client-error.yml deleted file mode 100644 index e725c848d3..0000000000 --- a/testdata/sessions/snapshot-sessions-not-supported-client-error.yml +++ /dev/null @@ -1,75 +0,0 @@ -description: snapshot-sessions-not-supported-client-error - -schemaVersion: "1.0" - -runOnRequirements: - - minServerVersion: "3.6" - maxServerVersion: "4.4.99" - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent, commandFailedEvent ] - - database: - id: &database0Name database0 - client: *client0 - databaseName: *database0Name - - collection: - id: &collection0Name collection0 - database: *database0Name - collectionName: *collection0Name - - session: - id: session0 - client: client0 - sessionOptions: - snapshot: true - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - -tests: -- description: Client error on find with snapshot - operations: - - name: find - object: collection0 - arguments: - session: session0 - filter: {} - expectError: - isClientError: true - errorContains: Snapshot reads require MongoDB 5.0 or later - expectEvents: - - client: *client0 - events: [] - -- description: Client error on aggregate with snapshot - operations: - - name: aggregate - object: collection0 - arguments: - session: session0 - pipeline: [] - expectError: - isClientError: true - errorContains: Snapshot reads require MongoDB 5.0 or later - expectEvents: - - client: *client0 - events: [] - -- description: Client error on distinct with snapshot - operations: - - name: distinct - object: collection0 - arguments: - fieldName: x - filter: {} - session: session0 - expectError: - isClientError: true - errorContains: Snapshot reads require MongoDB 5.0 or later - expectEvents: - - client: *client0 - events: [] diff --git a/testdata/sessions/snapshot-sessions-not-supported-server-error.json b/testdata/sessions/snapshot-sessions-not-supported-server-error.json deleted file mode 100644 index 79213f314f..0000000000 --- a/testdata/sessions/snapshot-sessions-not-supported-server-error.json +++ /dev/null @@ -1,187 +0,0 @@ -{ - "description": "snapshot-sessions-not-supported-server-error", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "5.0", - "topologies": [ - "single" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent", - "commandFailedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "database0" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "collection0" - } - }, - { - "session": { - "id": "session0", - "client": "client0", - "sessionOptions": { - "snapshot": true - } - } - } - ], - "initialData": [ - { - "collectionName": "collection0", - "databaseName": "database0", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ], - "tests": [ - { - "description": "Server returns an error on find with snapshot", - "operations": [ - { - "name": "find", - "object": "collection0", - "arguments": { - "session": "session0", - "filter": {} - }, - "expectError": { - "isError": true, - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": false - } - } - } - } - }, - { - "commandFailedEvent": { - "commandName": "find" - } - } - ] - } - ] - }, - { - "description": "Server returns an error on aggregate with snapshot", - "operations": [ - { - "name": "aggregate", - "object": "collection0", - "arguments": { - "session": "session0", - "pipeline": [] - }, - "expectError": { - "isError": true, - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": false - } - } - } - } - }, - { - "commandFailedEvent": { - "commandName": "aggregate" - } - } - ] - } - ] - }, - { - "description": "Server returns an error on distinct with snapshot", - "operations": [ - { - "name": "distinct", - "object": "collection0", - "arguments": { - "fieldName": "x", - "filter": {}, - "session": "session0" - }, - "expectError": { - "isError": true, - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "distinct": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": false - } - } - } - } - }, - { - "commandFailedEvent": { - "commandName": "distinct" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/sessions/snapshot-sessions-not-supported-server-error.yml b/testdata/sessions/snapshot-sessions-not-supported-server-error.yml deleted file mode 100644 index 4953dbcbe5..0000000000 --- a/testdata/sessions/snapshot-sessions-not-supported-server-error.yml +++ /dev/null @@ -1,102 +0,0 @@ -description: snapshot-sessions-not-supported-server-error - -schemaVersion: "1.0" - -runOnRequirements: - - minServerVersion: "5.0" - topologies: [ single ] - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent, commandFailedEvent ] - - database: - id: &database0Name database0 - client: *client0 - databaseName: *database0Name - - collection: - id: &collection0Name collection0 - database: *database0Name - collectionName: *collection0Name - - session: - id: session0 - client: client0 - sessionOptions: - snapshot: true - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - -tests: -- description: Server returns an error on find with snapshot - operations: - - name: find - object: collection0 - arguments: - session: session0 - filter: {} - expectError: - isError: true - isClientError: false - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - find: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": false - - commandFailedEvent: - commandName: find - -- description: Server returns an error on aggregate with snapshot - operations: - - name: aggregate - object: collection0 - arguments: - session: session0 - pipeline: [] - expectError: - isError: true - isClientError: false - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - aggregate: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": false - - commandFailedEvent: - commandName: aggregate - -- description: Server returns an error on distinct with snapshot - operations: - - name: distinct - object: collection0 - arguments: - fieldName: x - filter: {} - session: session0 - expectError: - isError: true - isClientError: false - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - distinct: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": false - - commandFailedEvent: - commandName: distinct diff --git a/testdata/sessions/snapshot-sessions-unsupported-ops.json b/testdata/sessions/snapshot-sessions-unsupported-ops.json deleted file mode 100644 index c41f74d337..0000000000 --- a/testdata/sessions/snapshot-sessions-unsupported-ops.json +++ /dev/null @@ -1,493 +0,0 @@ -{ - "description": "snapshot-sessions-unsupported-ops", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "5.0", - "topologies": [ - "replicaset", - "sharded" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent", - "commandFailedEvent" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "database0" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "collection0" - } - }, - { - "session": { - "id": "session0", - "client": "client0", - "sessionOptions": { - "snapshot": true - } - } - } - ], - "initialData": [ - { - "collectionName": "collection0", - "databaseName": "database0", - "documents": [ - { - "_id": 1, - "x": 11 - } - ] - } - ], - "tests": [ - { - "description": "Server returns an error on insertOne with snapshot", - "runOnRequirements": [ - { - "topologies": [ - "replicaset" - ] - } - ], - "operations": [ - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "session": "session0", - "document": { - "_id": 22, - "x": 22 - } - }, - "expectError": { - "isError": true, - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": false - } - } - } - } - }, - { - "commandFailedEvent": { - "commandName": "insert" - } - } - ] - } - ] - }, - { - "description": "Server returns an error on insertMany with snapshot", - "runOnRequirements": [ - { - "topologies": [ - "replicaset" - ] - } - ], - "operations": [ - { - "name": "insertMany", - "object": "collection0", - "arguments": { - "session": "session0", - "documents": [ - { - "_id": 22, - "x": 22 - }, - { - "_id": 33, - "x": 33 - } - ] - }, - "expectError": { - "isError": true, - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "insert": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": false - } - } - } - } - }, - { - "commandFailedEvent": { - "commandName": "insert" - } - } - ] - } - ] - }, - { - "description": "Server returns an error on deleteOne with snapshot", - "runOnRequirements": [ - { - "topologies": [ - "replicaset" - ] - } - ], - "operations": [ - { - "name": "deleteOne", - "object": "collection0", - "arguments": { - "session": "session0", - "filter": {} - }, - "expectError": { - "isError": true, - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "delete": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": false - } - } - } - } - }, - { - "commandFailedEvent": { - "commandName": "delete" - } - } - ] - } - ] - }, - { - "description": "Server returns an error on updateOne with snapshot", - "runOnRequirements": [ - { - "topologies": [ - "replicaset" - ] - } - ], - "operations": [ - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "session": "session0", - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - } - }, - "expectError": { - "isError": true, - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "update": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": false - } - } - } - } - }, - { - "commandFailedEvent": { - "commandName": "update" - } - } - ] - } - ] - }, - { - "description": "Server returns an error on findOneAndUpdate with snapshot", - "operations": [ - { - "name": "findOneAndUpdate", - "object": "collection0", - "arguments": { - "session": "session0", - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - } - }, - "expectError": { - "isError": true, - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "findAndModify": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": false - } - } - } - } - }, - { - "commandFailedEvent": { - "commandName": "findAndModify" - } - } - ] - } - ] - }, - { - "description": "Server returns an error on listDatabases with snapshot", - "operations": [ - { - "name": "listDatabases", - "object": "client0", - "arguments": { - "session": "session0" - }, - "expectError": { - "isError": true, - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "listDatabases": 1, - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": false - } - } - } - } - }, - { - "commandFailedEvent": { - "commandName": "listDatabases" - } - } - ] - } - ] - }, - { - "description": "Server returns an error on listCollections with snapshot", - "operations": [ - { - "name": "listCollections", - "object": "database0", - "arguments": { - "session": "session0" - }, - "expectError": { - "isError": true, - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "listCollections": 1, - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": false - } - } - } - } - }, - { - "commandFailedEvent": { - "commandName": "listCollections" - } - } - ] - } - ] - }, - { - "description": "Server returns an error on listIndexes with snapshot", - "operations": [ - { - "name": "listIndexes", - "object": "collection0", - "arguments": { - "session": "session0" - }, - "expectError": { - "isError": true, - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "listIndexes": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": false - } - } - } - } - }, - { - "commandFailedEvent": { - "commandName": "listIndexes" - } - } - ] - } - ] - }, - { - "description": "Server returns an error on runCommand with snapshot", - "operations": [ - { - "name": "runCommand", - "object": "database0", - "arguments": { - "session": "session0", - "commandName": "listCollections", - "command": { - "listCollections": 1 - } - }, - "expectError": { - "isError": true, - "isClientError": false - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "listCollections": 1, - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": false - } - } - } - } - }, - { - "commandFailedEvent": { - "commandName": "listCollections" - } - } - ] - } - ] - } - ] -} diff --git a/testdata/sessions/snapshot-sessions-unsupported-ops.yml b/testdata/sessions/snapshot-sessions-unsupported-ops.yml deleted file mode 100644 index 91d785e47e..0000000000 --- a/testdata/sessions/snapshot-sessions-unsupported-ops.yml +++ /dev/null @@ -1,258 +0,0 @@ -description: snapshot-sessions-unsupported-ops - -schemaVersion: "1.0" - -runOnRequirements: - - minServerVersion: "5.0" - topologies: [replicaset, sharded] - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent, commandFailedEvent ] - - database: - id: &database0Name database0 - client: *client0 - databaseName: *database0Name - - collection: - id: &collection0Name collection0 - database: *database0Name - collectionName: *collection0Name - - session: - id: session0 - client: client0 - sessionOptions: - snapshot: true - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - -tests: -- description: Server returns an error on insertOne with snapshot - # Skip on sharded clusters due to SERVER-58176. - runOnRequirements: - - topologies: [replicaset] - operations: - - name: insertOne - object: collection0 - arguments: - session: session0 - document: - _id: 22 - x: 22 - expectError: - isError: true - isClientError: false - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - insert: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": false - - commandFailedEvent: - commandName: insert - -- description: Server returns an error on insertMany with snapshot - # Skip on sharded clusters due to SERVER-58176. - runOnRequirements: - - topologies: [replicaset] - operations: - - name: insertMany - object: collection0 - arguments: - session: session0 - documents: - - _id: 22 - x: 22 - - _id: 33 - x: 33 - expectError: - isError: true - isClientError: false - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - insert: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": false - - commandFailedEvent: - commandName: insert - -- description: Server returns an error on deleteOne with snapshot - # Skip on sharded clusters due to SERVER-58176. - runOnRequirements: - - topologies: [replicaset] - operations: - - name: deleteOne - object: collection0 - arguments: - session: session0 - filter: {} - expectError: - isError: true - isClientError: false - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - delete: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": false - - commandFailedEvent: - commandName: delete - -- description: Server returns an error on updateOne with snapshot - # Skip on sharded clusters due to SERVER-58176. - runOnRequirements: - - topologies: [replicaset] - operations: - - name: updateOne - object: collection0 - arguments: - session: session0 - filter: { _id: 1 } - update: { $inc: { x: 1 } } - expectError: - isError: true - isClientError: false - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - update: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": false - - commandFailedEvent: - commandName: update - -- description: Server returns an error on findOneAndUpdate with snapshot - operations: - - name: findOneAndUpdate - object: collection0 - arguments: - session: session0 - filter: { _id: 1 } - update: { $inc: { x: 1 } } - expectError: - isError: true - isClientError: false - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - findAndModify: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": false - - commandFailedEvent: - commandName: findAndModify - -- description: Server returns an error on listDatabases with snapshot - operations: - - name: listDatabases - object: client0 - arguments: - session: session0 - expectError: - isError: true - isClientError: false - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - listDatabases: 1 - readConcern: - level: snapshot - atClusterTime: - "$$exists": false - - commandFailedEvent: - commandName: listDatabases - -- description: Server returns an error on listCollections with snapshot - operations: - - name: listCollections - object: database0 - arguments: - session: session0 - expectError: - isError: true - isClientError: false - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - listCollections: 1 - readConcern: - level: snapshot - atClusterTime: - "$$exists": false - - commandFailedEvent: - commandName: listCollections - -- description: Server returns an error on listIndexes with snapshot - operations: - - name: listIndexes - object: collection0 - arguments: - session: session0 - expectError: - isError: true - isClientError: false - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - listIndexes: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": false - - commandFailedEvent: - commandName: listIndexes - -- description: Server returns an error on runCommand with snapshot - operations: - - name: runCommand - object: database0 - arguments: - session: session0 - commandName: listCollections - command: - listCollections: 1 - expectError: - isError: true - isClientError: false - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - listCollections: 1 - readConcern: - level: snapshot - atClusterTime: - "$$exists": false - - commandFailedEvent: - commandName: listCollections diff --git a/testdata/sessions/snapshot-sessions.json b/testdata/sessions/snapshot-sessions.json deleted file mode 100644 index 260f8b6f48..0000000000 --- a/testdata/sessions/snapshot-sessions.json +++ /dev/null @@ -1,993 +0,0 @@ -{ - "description": "snapshot-sessions", - "schemaVersion": "1.0", - "runOnRequirements": [ - { - "minServerVersion": "5.0", - "topologies": [ - "replicaset", - "sharded" - ] - } - ], - "createEntities": [ - { - "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ], - "ignoreCommandMonitoringEvents": [ - "findAndModify", - "insert", - "update" - ] - } - }, - { - "database": { - "id": "database0", - "client": "client0", - "databaseName": "database0" - } - }, - { - "collection": { - "id": "collection0", - "database": "database0", - "collectionName": "collection0", - "collectionOptions": { - "writeConcern": { - "w": "majority" - } - } - } - }, - { - "session": { - "id": "session0", - "client": "client0", - "sessionOptions": { - "snapshot": true - } - } - }, - { - "session": { - "id": "session1", - "client": "client0", - "sessionOptions": { - "snapshot": true - } - } - } - ], - "initialData": [ - { - "collectionName": "collection0", - "databaseName": "database0", - "documents": [ - { - "_id": 1, - "x": 11 - }, - { - "_id": 2, - "x": 11 - } - ] - } - ], - "tests": [ - { - "description": "Find operation with snapshot", - "operations": [ - { - "name": "find", - "object": "collection0", - "arguments": { - "session": "session0", - "filter": { - "_id": 1 - } - }, - "expectResult": [ - { - "_id": 1, - "x": 11 - } - ] - }, - { - "name": "findOneAndUpdate", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "returnDocument": "After" - }, - "expectResult": { - "_id": 1, - "x": 12 - } - }, - { - "name": "find", - "object": "collection0", - "arguments": { - "session": "session1", - "filter": { - "_id": 1 - } - }, - "expectResult": [ - { - "_id": 1, - "x": 12 - } - ] - }, - { - "name": "findOneAndUpdate", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "returnDocument": "After" - }, - "expectResult": { - "_id": 1, - "x": 13 - } - }, - { - "name": "find", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - } - }, - "expectResult": [ - { - "_id": 1, - "x": 13 - } - ] - }, - { - "name": "find", - "object": "collection0", - "arguments": { - "session": "session0", - "filter": { - "_id": 1 - } - }, - "expectResult": [ - { - "_id": 1, - "x": 11 - } - ] - }, - { - "name": "find", - "object": "collection0", - "arguments": { - "session": "session1", - "filter": { - "_id": 1 - } - }, - "expectResult": [ - { - "_id": 1, - "x": 12 - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": false - } - } - } - } - }, - { - "commandStartedEvent": { - "command": { - "find": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": false - } - } - } - } - }, - { - "commandStartedEvent": { - "command": { - "find": "collection0", - "readConcern": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "command": { - "find": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": true - } - } - } - } - }, - { - "commandStartedEvent": { - "command": { - "find": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": true - } - } - } - } - } - ] - } - ] - }, - { - "description": "Distinct operation with snapshot", - "operations": [ - { - "name": "distinct", - "object": "collection0", - "arguments": { - "fieldName": "x", - "filter": {}, - "session": "session0" - }, - "expectResult": [ - 11 - ] - }, - { - "name": "findOneAndUpdate", - "object": "collection0", - "arguments": { - "filter": { - "_id": 2 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "returnDocument": "After" - }, - "expectResult": { - "_id": 2, - "x": 12 - } - }, - { - "name": "distinct", - "object": "collection0", - "arguments": { - "fieldName": "x", - "filter": {}, - "session": "session1" - }, - "expectResult": [ - 11, - 12 - ] - }, - { - "name": "findOneAndUpdate", - "object": "collection0", - "arguments": { - "filter": { - "_id": 2 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "returnDocument": "After" - }, - "expectResult": { - "_id": 2, - "x": 13 - } - }, - { - "name": "distinct", - "object": "collection0", - "arguments": { - "fieldName": "x", - "filter": {} - }, - "expectResult": [ - 11, - 13 - ] - }, - { - "name": "distinct", - "object": "collection0", - "arguments": { - "fieldName": "x", - "filter": {}, - "session": "session0" - }, - "expectResult": [ - 11 - ] - }, - { - "name": "distinct", - "object": "collection0", - "arguments": { - "fieldName": "x", - "filter": {}, - "session": "session1" - }, - "expectResult": [ - 11, - 12 - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "distinct": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": false - } - } - } - } - }, - { - "commandStartedEvent": { - "command": { - "distinct": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": false - } - } - } - } - }, - { - "commandStartedEvent": { - "command": { - "distinct": "collection0", - "readConcern": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "command": { - "distinct": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": true - } - } - } - } - }, - { - "commandStartedEvent": { - "command": { - "distinct": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": true - } - } - } - } - } - ] - } - ] - }, - { - "description": "Aggregate operation with snapshot", - "operations": [ - { - "name": "aggregate", - "object": "collection0", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": 1 - } - } - ], - "session": "session0" - }, - "expectResult": [ - { - "_id": 1, - "x": 11 - } - ] - }, - { - "name": "findOneAndUpdate", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "returnDocument": "After" - }, - "expectResult": { - "_id": 1, - "x": 12 - } - }, - { - "name": "aggregate", - "object": "collection0", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": 1 - } - } - ], - "session": "session1" - }, - "expectResult": [ - { - "_id": 1, - "x": 12 - } - ] - }, - { - "name": "findOneAndUpdate", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "returnDocument": "After" - }, - "expectResult": { - "_id": 1, - "x": 13 - } - }, - { - "name": "aggregate", - "object": "collection0", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": 1 - } - } - ] - }, - "expectResult": [ - { - "_id": 1, - "x": 13 - } - ] - }, - { - "name": "aggregate", - "object": "collection0", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": 1 - } - } - ], - "session": "session0" - }, - "expectResult": [ - { - "_id": 1, - "x": 11 - } - ] - }, - { - "name": "aggregate", - "object": "collection0", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": 1 - } - } - ], - "session": "session1" - }, - "expectResult": [ - { - "_id": 1, - "x": 12 - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": false - } - } - } - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": false - } - } - } - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "readConcern": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": true - } - } - } - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": true - } - } - } - } - } - ] - } - ] - }, - { - "description": "countDocuments operation with snapshot", - "operations": [ - { - "name": "countDocuments", - "object": "collection0", - "arguments": { - "filter": {}, - "session": "session0" - }, - "expectResult": 2 - }, - { - "name": "countDocuments", - "object": "collection0", - "arguments": { - "filter": {}, - "session": "session0" - }, - "expectResult": 2 - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": false - } - } - } - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": true - } - } - } - } - } - ] - } - ] - }, - { - "description": "Mixed operation with snapshot", - "operations": [ - { - "name": "find", - "object": "collection0", - "arguments": { - "session": "session0", - "filter": { - "_id": 1 - } - }, - "expectResult": [ - { - "_id": 1, - "x": 11 - } - ] - }, - { - "name": "findOneAndUpdate", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - }, - "returnDocument": "After" - }, - "expectResult": { - "_id": 1, - "x": 12 - } - }, - { - "name": "find", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - } - }, - "expectResult": [ - { - "_id": 1, - "x": 12 - } - ] - }, - { - "name": "aggregate", - "object": "collection0", - "arguments": { - "pipeline": [ - { - "$match": { - "_id": 1 - } - } - ], - "session": "session0" - }, - "expectResult": [ - { - "_id": 1, - "x": 11 - } - ] - }, - { - "name": "distinct", - "object": "collection0", - "arguments": { - "fieldName": "x", - "filter": {}, - "session": "session0" - }, - "expectResult": [ - 11 - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": false - } - } - } - } - }, - { - "commandStartedEvent": { - "command": { - "find": "collection0", - "readConcern": { - "$$exists": false - } - } - } - }, - { - "commandStartedEvent": { - "command": { - "aggregate": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": true - } - } - } - } - }, - { - "commandStartedEvent": { - "command": { - "distinct": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": true - } - } - } - } - } - ] - } - ] - }, - { - "description": "Write commands with snapshot session do not affect snapshot reads", - "operations": [ - { - "name": "find", - "object": "collection0", - "arguments": { - "filter": {}, - "session": "session0" - } - }, - { - "name": "insertOne", - "object": "collection0", - "arguments": { - "document": { - "_id": 22, - "x": 33 - } - } - }, - { - "name": "updateOne", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "update": { - "$inc": { - "x": 1 - } - } - } - }, - { - "name": "find", - "object": "collection0", - "arguments": { - "filter": { - "_id": 1 - }, - "session": "session0" - }, - "expectResult": [ - { - "_id": 1, - "x": 11 - } - ] - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": false - } - } - } - } - }, - { - "commandStartedEvent": { - "command": { - "find": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": true - } - } - } - } - } - ] - } - ] - }, - { - "description": "First snapshot read does not send atClusterTime", - "operations": [ - { - "name": "find", - "object": "collection0", - "arguments": { - "filter": {}, - "session": "session0" - } - } - ], - "expectEvents": [ - { - "client": "client0", - "events": [ - { - "commandStartedEvent": { - "command": { - "find": "collection0", - "readConcern": { - "level": "snapshot", - "atClusterTime": { - "$$exists": false - } - } - }, - "commandName": "find", - "databaseName": "database0" - } - } - ] - } - ] - }, - { - "description": "StartTransaction fails in snapshot session", - "operations": [ - { - "name": "startTransaction", - "object": "session0", - "expectError": { - "isError": true, - "isClientError": true, - "errorContains": "Transactions are not supported in snapshot sessions" - } - } - ] - } - ] -} diff --git a/testdata/sessions/snapshot-sessions.yml b/testdata/sessions/snapshot-sessions.yml deleted file mode 100644 index bcf0f7eec6..0000000000 --- a/testdata/sessions/snapshot-sessions.yml +++ /dev/null @@ -1,482 +0,0 @@ -description: snapshot-sessions - -schemaVersion: "1.0" - -runOnRequirements: - - minServerVersion: "5.0" - topologies: [replicaset, sharded] - -createEntities: - - client: - id: &client0 client0 - observeEvents: [ commandStartedEvent] - ignoreCommandMonitoringEvents: [ findAndModify, insert, update ] - - database: - id: &database0 database0 - client: *client0 - databaseName: &database0Name database0 - - collection: - id: &collection0 collection0 - database: *database0 - collectionName: &collection0Name collection0 - collectionOptions: - writeConcern: { w: majority } - - session: - id: session0 - client: client0 - sessionOptions: - snapshot: true - - session: - id: session1 - client: client0 - sessionOptions: - snapshot: true - -initialData: - - collectionName: *collection0Name - databaseName: *database0Name - documents: - - { _id: 1, x: 11 } - - { _id: 2, x: 11 } - -tests: -- description: Find operation with snapshot - operations: - - name: find - object: collection0 - arguments: - session: session0 - filter: { _id: 1 } - expectResult: - - {_id: 1, x: 11} - - name: findOneAndUpdate - object: collection0 - arguments: - filter: { _id: 1 } - update: { $inc: { x: 1 } } - returnDocument: After - expectResult: { _id: 1, x: 12 } - - name: find - object: collection0 - arguments: - session: session1 - filter: { _id: 1 } - expectResult: - - { _id: 1, x: 12 } - - name: findOneAndUpdate - object: collection0 - arguments: - filter: { _id: 1 } - update: { $inc: { x: 1 } } - returnDocument: After - expectResult: { _id: 1, x: 13 } - - name: find - object: collection0 - arguments: - filter: { _id: 1 } - expectResult: - - { _id: 1, x: 13 } - - name: find - object: collection0 - arguments: - session: session0 - filter: { _id: 1 } - expectResult: - - {_id: 1, x: 11} - - name: find - object: collection0 - arguments: - session: session1 - filter: { _id: 1 } - expectResult: - - {_id: 1, x: 12} - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - find: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": false - - commandStartedEvent: - command: - find: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": false - - commandStartedEvent: - command: - find: collection0 - readConcern: - "$$exists": false - - commandStartedEvent: - command: - find: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": true - - commandStartedEvent: - command: - find: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": true - -- description: Distinct operation with snapshot - operations: - - name: distinct - object: collection0 - arguments: - fieldName: x - filter: {} - session: session0 - expectResult: - - 11 - - name: findOneAndUpdate - object: collection0 - arguments: - filter: { _id: 2 } - update: { $inc: { x: 1 } } - returnDocument: After - expectResult: { _id: 2, x: 12 } - - name: distinct - object: collection0 - arguments: - fieldName: x - filter: {} - session: session1 - expectResult: [11, 12] - - name: findOneAndUpdate - object: collection0 - arguments: - filter: { _id: 2 } - update: { $inc: { x: 1 } } - returnDocument: After - expectResult: { _id: 2, x: 13 } - - name: distinct - object: collection0 - arguments: - fieldName: x - filter: {} - expectResult: [ 11, 13 ] - - name: distinct - object: collection0 - arguments: - fieldName: x - filter: {} - session: session0 - expectResult: [ 11 ] - - name: distinct - object: collection0 - arguments: - fieldName: x - filter: {} - session: session1 - expectResult: [ 11, 12 ] - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - distinct: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": false - - commandStartedEvent: - command: - distinct: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": false - - commandStartedEvent: - command: - distinct: collection0 - readConcern: - "$$exists": false - - commandStartedEvent: - command: - distinct: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": true - - commandStartedEvent: - command: - distinct: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": true - -- description: Aggregate operation with snapshot - operations: - - name: aggregate - object: collection0 - arguments: - pipeline: - - "$match": { _id: 1 } - session: session0 - expectResult: - - { _id: 1, x: 11 } - - name: findOneAndUpdate - object: collection0 - arguments: - filter: { _id: 1 } - update: { $inc: { x: 1 } } - returnDocument: After - expectResult: { _id: 1, x: 12 } - - name: aggregate - object: collection0 - arguments: - pipeline: - - "$match": - _id: 1 - session: session1 - expectResult: - - {_id: 1, x: 12} - - name: findOneAndUpdate - object: collection0 - arguments: - filter: { _id: 1 } - update: { $inc: { x: 1 } } - returnDocument: After - expectResult: { _id: 1, x: 13 } - - name: aggregate - object: collection0 - arguments: - pipeline: - - "$match": { _id: 1 } - expectResult: - - { _id: 1, x: 13 } - - name: aggregate - object: collection0 - arguments: - pipeline: - - "$match": - _id: 1 - session: session0 - expectResult: - - { _id: 1, x: 11 } - - name: aggregate - object: collection0 - arguments: - pipeline: - - "$match": { _id: 1 } - session: session1 - expectResult: - - { _id: 1, x: 12 } - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - aggregate: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": false - - commandStartedEvent: - command: - aggregate: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": false - - commandStartedEvent: - command: - aggregate: collection0 - readConcern: - "$$exists": false - - commandStartedEvent: - command: - aggregate: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": true - - commandStartedEvent: - command: - aggregate: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": true - -- description: countDocuments operation with snapshot - operations: - - name: countDocuments - object: collection0 - arguments: - filter: {} - session: session0 - expectResult: 2 - - name: countDocuments - object: collection0 - arguments: - filter: {} - session: session0 - expectResult: 2 - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - aggregate: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": false - - commandStartedEvent: - command: - aggregate: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": true - -- description: Mixed operation with snapshot - operations: - - name: find - object: collection0 - arguments: - session: session0 - filter: { _id: 1 } - expectResult: - - { _id: 1, x: 11 } - - name: findOneAndUpdate - object: collection0 - arguments: - filter: { _id: 1 } - update: { $inc: { x: 1 } } - returnDocument: After - expectResult: { _id: 1, x: 12 } - - name: find - object: collection0 - arguments: - filter: { _id: 1 } - expectResult: - - { _id: 1, x: 12 } - - name: aggregate - object: collection0 - arguments: - pipeline: - - "$match": - _id: 1 - session: session0 - expectResult: - - { _id: 1, x: 11 } - - name: distinct - object: collection0 - arguments: - fieldName: x - filter: {} - session: session0 - expectResult: [ 11 ] - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - find: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": false - - commandStartedEvent: - command: - find: collection0 - readConcern: - "$$exists": false - - commandStartedEvent: - command: - aggregate: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": true - - commandStartedEvent: - command: - distinct: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": true - -- description: Write commands with snapshot session do not affect snapshot reads - operations: - - name: find - object: collection0 - arguments: - filter: {} - session: session0 - - name: insertOne - object: collection0 - arguments: - document: - _id: 22 - x: 33 - - name: updateOne - object: collection0 - arguments: - filter: { _id: 1 } - update: { $inc: { x: 1 } } - - name: find - object: collection0 - arguments: - filter: { _id: 1 } - session: session0 - expectResult: - - {_id: 1, x: 11} - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - find: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": false - - commandStartedEvent: - command: - find: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": true - -- description: First snapshot read does not send atClusterTime - operations: - - name: find - object: collection0 - arguments: - filter: {} - session: session0 - expectEvents: - - client: client0 - events: - - commandStartedEvent: - command: - find: collection0 - readConcern: - level: snapshot - atClusterTime: - "$$exists": false - commandName: find - databaseName: database0 - -- description: StartTransaction fails in snapshot session - operations: - - name: startTransaction - object: session0 - expectError: - isError: true - isClientError: true - errorContains: Transactions are not supported in snapshot sessions diff --git a/testdata/single_and_multi_document/large_doc.json.gz b/testdata/single_and_multi_document/large_doc.json.gz deleted file mode 100644 index 58f659c572518d0339dfc3fc8dd5d8031eba1796..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1835846 zcmV(tK3_>&2yK2Ud=b52z^_y7J)C$3jTy~WRW_wRrIeb~dJtikwr>;CV5{teFK z>f3>1+P?g=KE(HqNy%ZoXyMQL6|P1Nuf`vL=bzOg=p$9M+7N!upS2u5+B0wW-!Gg0 ztj>&Gl75tAZn%He)jrtqgZr(z1b^0?G@2<$q!x>>KkF~T@Pcr?hAi_xtKQFMZLR9B zD6v0l(AZ~Jq$w|UU{%Z6rSQX-&--^@`$|0;@_QT|tU2MIbs~gMRkY7PYcp{N8egZ= z^RTMdTlaqxKC`?q!H!Uxa4JeH^Vb5a(rbm$#!AUt`_H=l#CIh>{7?w&KdU4O-m5O? zCo@QY)|O&jwD6E!{Lz2bc+L%BEc}v5^*`&3G5A88%h%~ zgdFW@5DE-jygm;hd?+6^{TgMQE_q=&>Q=j@SJ^!o^ zW~h2(L95AJAvd0KxRslKP&)&;L4M8BD+|ZNus^FP)ZWN^o)>X}RdcuN!HKm`oz0)M zHfrqXH{I*m09NG$QAhj=(R;FgR^vI9)*k-&r&jz~i+3lC0hxKv^7ym<_Ld8^FflF@ zvd%`hWa2MA4EW;DTIjX^;^$5;5m+-eS;r^um1IUBMs4+K5M%ND3tj)LU036wQBTj8 zB>q`9V>%s{#&tnqA--|x3QYYD4?_F1awoTr1YKQ=l>S-KlUn5cMRbpT`?G#=4b=@K zYOj)p->r51v58nw^N^FP_KAqcr=7p+{AV3?clcQkHZ1S~vTo=ngxHln_`#ZmDP}Zp za^`-9Izonrs!Z}BOB-an@cJ3qs7uwOR$iUA&QOvEa?t?h@1>Xx$cy@a8mDhcOpU^bI-bj7j&n zzBL->u-}7Ob>aPfKc5}cAlK-uM_N-7pAdbMdWo5-uZ7*TP`{$z_#VrFu@?2A=JVrl2v*7%jpZEuq2lF zn@N`Vl#f4a7?#K@S>%|q+kB{8?31~L9 zCdbBw9HGqb&pJ+GowunO#3#haOFmZcP0jK3g{=F&B*UHuX8d>`K;Ugl{P_s{(k1{I zwkOjP4uc#E^=Ey$8%m7$#AO83V7tjbpHTf_TKqq&&K`>An@?%g07Zw!@b#i#er$03 zSOeq;~JJbAG^EkY6$#Khwfz0{x+wq;+H5D)LWZ}LJ%M4wKdqGaJS5V+eS#oU; z`7BEA)N`|d&l?~T?RMXnUYDn%5fCHuSt(MO3YZV8iVow;Xx%tV2joUl@q}B4+b6T2 z_DMBw#WyJ-A`Mw5{J~E;2Jg9NDDXyKushl?uQP|tX_;`bH#{KLcM5(s8ZkCUuJRJV z9Pd?mHvLjqaRc-YyU0LJ^os`)`e)rUr9zqN-RJ_~l_|_xJUNAiHGpQRgP9lZ(seF^ zH`4KG4ZSqlEcy7eR(#XX$P>>$2IM61&apuc&1BQTlP1%>A^>_b)~6(ck5MqB z1+_rgv5qHt*-`Mj&(L?5qI)~0#6$fOJ%?14*$4@6S)YUxT0Le8+qpk$tz!f!zp@WX z!HzUmI2qPIKA5Fn z0CV`^)MLw>f*Jp_q8QIyW+;utP-W|H#(YahQw6d;?YEMBFSw?r z5W!B3ZH;*^iYjh5@>`BUH{!Lwz>}@~Qr{WMlot!njy%!!5uRcR1xiME;BkGqeD?Mr z3aHAJ2geZCaX@@WCUl}U6}MG^I!e*))C`(=?K3F1v|lz^FwdvU0X{!hd0mBGGQZUb z>Wjb|Yzz^SRX`&(za)9fJzo86*wJnzbKQsH{@Vb}EL|z6M1P}H4NQmY;gc3;jBHo~ z6a}g}uQK><{0HhNmaK41%41O;P)CbXOuqF|`bPzoa%gx!#Xlq?UOlknQ)>B-DFxjH zIr&(vE{=n3!)oQv>gs0m5})EeMG*apxSsFw^y$o)fXh@{MYms1Jc9wy`|pRcoZTN& z13FeibmL9b168wtu{gzT+BW$D!p5LuQTrQI7>S`KSVb#mm;56J`U8G<)gLPBOz4bY zuwOwm;^1RZ{9bWTDMDCZ%IY?V1KEyr75+fCUZ&o6^nU{O+yrB1Sx`YfZ^ag`FU=H! zuj;KPH_uRPR#qYUQix7@5N-VjaD(!*XSA+HFB$M=br~=Bskf3$K?FNd^M13o4!#5# zD-)`gY%1D)USQ=vsJRTA=stajzB4?!SBk`Yn8AKG)7smoG71iVtIdzV&icBOPYXQx z?A(Mh++T;7HS7p|x#ED(a?E8?PcBEj&wFh)Oyq|9PjdBeX@AfS-uA2tq)H z_je&wCP*F|U{3E}v#oAdS)cGMXVfvq;jOxDI&>meV2$-iE20FrK_(X`*lmZz2Sl)K z{}@M)#F)(!=zvbQ#vji<*@Xxcvfqfji<`ZX!G2Zl68To@pXIHtE6LvIL1gshk0$=I zofxV8Jg}^Pf#$cr?@G@-j#juFc>j5Xe5yIWXAN10=#!zmibcB!$eco&)3rR`J%f;K9dBLFu76CZ!fnX!Qj^~5{Qcpp32$ywLoe2O8#)43 z)g7hwBfCS0NA~sx&goWXuoDLnR2gmkSx-ge5Ad_w)2;68Q~D!8BYB}^%mLc!Qwc2j zGKVc#Wqx!^&^eyAkfoV%^L1yAjvwcx>JueAf8ggeunhz8OQeL1m5xPRe1)j{9I(B% zBnweeY<3+V&|B~lfknf?QQ&tqX71=B=iMEJ3Qg-%Xx4{;JO*H^w79Nb9Ri!+K;^zX z7pJ#nc%4IxKJ7Ci z2c>nlA9U7!>Sq@(QTW~h!|D~P6ilqXg9e!WYY~6&GSPf)Gcq5l)0T$Rt#dCLXV^LLd#kkGMow2e(Q(oWt%dVF;Lw?hbu`gPgWp7^wZ9J zejiJ@O*F&^S07#4wE8Rfqo=>$?J(E3{B4*OVCPC%u0Pm0gKUOXH3gqh_0DSuVuA{4 z>JZtLrvD^>{3?(0l8zzPaUkkomjp?h*aX=;jOv`{Xfs4llD?UQ&bf5DT! zGJT~HWv?xQ-xa=;R4J!J|Gw}n5;yo5rQ3J5Ava!MaX&-xgP8+(vP9&iAWPgFb=nbp9P2m9)k*Fp4Z0+S+hpi3->{msmP2N_g}G!dCig#oPV z9}N*oWFes;WP77>nN#7tnlXUwk~-MJ+%KG}Kwep<{Q48q$)hYm$uwhwp{%N^UI#js z>H9+;2ua#suwVLT`WtJw#r1|aQ`Cf<%qu$-9~dVN=&etT88IGE`;Yt#gGw~>LjhXS;Y80M#2Q(@>m&>JH0e4GnV%7s9iV&le2Vjm+$p)>xoa3}1H`<^0EkrL$_=tq+CKCF4)W`Q%L404l{-p99d59lC zek|!<1t-R~c>xb<6?0LXEXF$m3`@;4>ZT|E}7MgkXL53prUvI&RON@+v=2 z`%&X`B)!aUs{+liuMx7RsDN!9^kqE4sSitPxSt2sE-z=ForP_B!n3|(OUa(sZHho% zVe8Xh%?_{MGiWp8rC8cy`)Zv9^Bkdlezxadmu@|vrz86((g^_@PCGE&w7mr6`}lIP z1W{=G-%HNCxo$D=6(0MK-;Z68Yczik zCR8_8hX?MoiGlv$%>%|NUGSl1+lAjXh-567#cGcY5V+*t%M;l=vLvv(FY^zwaQ)AO z0Uurc!B><@7D5Z!+v(=F--h<%=paTt!&bhWzwyb2N|_Skx^%AmVF}E;8->YCpy2{hkQD3+U zs!t?c3yBqP6%=5}XEhh`a}vMO3>8|`+-s*?#AQ|RRrpiaYGmT=L||2!q*Q10_iv^H z<48gHD(u;6+z|M8{KzA9aIAG*@T~ktDZyH~zEVNIuPU5T5ao4zN%-9Xd+M*%L!{#Y z>iQ|ZZ7GsNZ?J&b9h^hm6X%$AfZwe`l+`E8D!39(0i55y`DW}p*8%mY9i|TR~xfq8Ee6r1dz+UIW(1Lg#!b_*$zbOfLiBkK<0YJ4FxjnT#7prOs;S zM^Imx-~1)rBOxsYIMj+`E5<2FAqtr16ai-~mprsW21r=fyZipg^fBD*+(j57yhU3! z4q!UMX{~oGUhH-Mt}S%iH&+d%T)-Ov_CYT%+Hhuse5NpCX^59bheUAeXNwq}=l(!m zfE#}(jsB|DalSt2XZKy2g-JV<_l8N48{-~D%Fm3mK~X5qvvM^~%TxNUU+(OU3zx7n zhy8{gn_IzA8Ey*u73apm&t2w_UCP=g;Dr}vf;=4TBsv7mXRF6-}xMaH!ur3fAYGsuK+)0*^o1I?5d54>^5*v}QSP~S>*uw28%CNS9mLnh4}Z1nXQ24N zWw9WsR`I6s^8>5;OA5c_H^E-S_x8q+wij=cLa+A6_>8c5&b#e z%KUdA1UVDy7v@)G(Ywo@x0kuWs!n4#a_;F8I0Lysuw%`|iEVA5(4iETD zrqj!}3K%E4>6P%b(_zbued$cSrUP2fJk9*0Jx4`$}2M2pixA zyDvMsJ^NJtLB@Uxar!(zB>4+~2dmeFW@;GH2n9U2aZLF95J+qj_xZxpEB)V(5H1?f z+Zjgv_2&G(L10I{X=(j#^1_@$1m##kr8KEv^P6HpQ z+YqFJm4ALI)X^gLqwCKPzGh(-^sUh4GaIjcOF{Mh(Pyy_;oiPe@WvnwGG+Fa8<@a@ zkM1pRqlYm|2pDTgl@p<4^d}lYnJd*!OK5xQ-mMvuvK=1F&y^1c5GlPrsQKQinP>o! zE>-&a>zA9Q7Ha=fst)QXwNyHg?e)wwCZRr*;DGwA>EOZG;Wj-kV9BIMXMN1e$M2r? zHAD1X6Xb!*U+}Y)q6{`RV*97(A%bL_{bl6teR#-rrlfc4V-BBfgwvM8%Y1De3+&Ga zP~Ekb@P++!6Am&~=lD4%qF?i#JvHleCQya3NpR?3C1?>6Yx*g&hRa>l#;xc?N z&>QaMURR0!>CGMRN}7|EK(xO)bV27#{+n^hx!S0N#o$v1{3BcTWh=SP~}*meji!o30_?;c?$LW!4>IY*TK_$ z!aVkyca*Gio0JuhIfHgN8Y1-3^9S{N(9NIncJ<5a?{m7{j8}R>v`YZB`F0P4T*`!g zpwGLD!Cs4iZ+gK)cl_8QbT3*-qzhoW3NegQH4tBW03TKALK}6&CUpu7+Z&5P?rvrj zGCW(hi7@@@;O#`f3sHPsiEG7KXu%vw{?$=6f7h%00D7;jn*T22v|=7k09WLSe*5Fl z#SY>tyOd)mOE*vVIS&4<3v-=mj|suLl|d#V6k!%Tdh-GrI|#ZwiwM-$_I6*^TVT0A zcf#*RwzU(w&rxs4jgMosoy+$TkpQRcTtdGXp{|S-JV~DkHLsbtB0fwJ(eC>S_dzMD zX}`H_P8XZSo#6o9?+`h%!sA^C=sk5gU5ib;(-8v54NrJP%3;bjJ;U!dbNZPomH9p+ z=#TU!{OfRh)Ymvb1}D1gYoX3ko+AQn2YAzC0?IF6Y_gjpmv+|3DYm}TEUa7n2iOm zsY60S{cd{QQ;D)kp$F5;XPSNjjlgH6{5@Yc36HAmB5a4N#5Jl zNon&5e3TE!Jkz;V#wN@PV!~7o{v{J60~s5>NB8r6rZuBacb9r~xD;d>MuG}Tm-9C| z<>cTs#Mk8SSAe%HH zVMtc>?$hDxS-9O7&uy`Xu1)zl>`NlY>fu4g;)I-pd6LMkc%M90&AZtYrgsU*cEQv3 z>@|j+S_0-s)quV0zs73}fKzxK5h*`28|$8ZwerXD(_Y`7COkX$?^0fNQkzZS6r72M z279OKr2so0_#!gwM@QNdDl~n2?C#pZ=P7`m{GtfEDu}s&gbZlrNM8lxzvG%6fbHiXpIMW30r4GCL&+pp47AU zB9}eS`;HuIc_z|T>L=D_9!bzqB`4&I%yQZ)|7 zlA@MbL2i(2_46sqh%E{@h3A6L@DXV#%3xK##q<)VggCPUmvs-dU70#kg%xtrq4K|K zj4Mf8VFq=Qje+!;L6$d{k+RHLwU&$gDMNhU^@}&2!xk+N-?mLWj%s$bKR|nXzv6|L zLoLf+c(Zj`dBw{?BaWcznO8J1()TgvZ-~CJxDTb@qL;G6Eh*!zJB_BwbQ1!4m+wBG zZOcp?6*T|EiB)kX*yC(KxzV2v7Yw@&`4J{IdgqPtb<*^g1Z42am4Ez+opQ$^`oHh& zs3aqx!wOxShYn?9T|IN0@Mf&rO7n?t#9Tv+)}=vT<48Sx4D?2JqAM;E+h8};7nE-Q!(w)7Z{A%YC1?%js zy*^%Ve(S)KOVw-yE8|W`!c3LQTfBHn>r`>T&Ql{1PE3ipVnU3ZoWGomyas`|&&u0k z_VT{V1sW>FdJYTfd2H*wfq%Ct(Xi3wJC_EGMXtQZYwMa38m4*Sm-@Pe7T|&aRzl2p z{}(!uzd3rX#AVuSwt&*4s_nSqh+!xH=?Ry&F+T5$>bIKTQW!@Ous?4gaCo6R2J5Cjg z%jt`8pB-DD78?oYV#XONB~;Rn&cw*!(GcIqFKqcYB3$tZ`8-dK{(k*+__GI$^S~v> zUQT7J-e4VbojPXOTpjK{dm>mjMP|~?@5xyDhy0>Bzk-p2Y)6uImn%w|RP;XANK-%k zL$9>TK_MsIuM7*l3^W!HsVV9uKkCK_BEWWB&&p2XZB7_r>Vm`r6d#}{lFaqw z*RId@t-T3{B8Jh`kIsT~oZq6=ep6kgv_OnPgOrJPW4M%mLG4Sj#9n)h<{7Xvs(n${ zaNg&<0kfy$9#V7o8buj;SUq&~z5L0KqXM0iW@sf2swZaCjleDG7l*OpKL+x7pR%%7 z9s3dfcLV3db~Pe4@%_GgNmaJqo%hf$67&`8E|0N&eMiRz<+iu^<64n^B?9pCJN&Az zElr-N1!`n??X#;&pUL8Z7qs!J=7RW??g3b5^l4kWuZv5I`|ih(^#(cGH0#0nuldp* zNRPNzKixM68oy=4uZYMC;KmmbTxLSO^&9}7%`>obGSjQq2X=%@+N5-m(En86eLO_I zht3Kmc4s?+`Uyt1l;p4X4atIIca+odYlrxGVYOwC_%XPsg#iM;O~VGgigiR21? zevmI>yl*=BHlCD?_lH`bHw1$7mkt|#PZO$Jai&^6@n9a`_c`4xQ+Q$vA5Mdwz46fn zw@^*edYHLw+vAyBi4&Cwph`q_YCT>btNMWEm$)~FBeb7g8z2M9#;;L6#=^d5GJGI? z%2IY7jtth(pM=$?iW)}%%|4C!WVZIN?;F61%r+@i^|US{tjb`~<75;)!)v(pC%m#_ zkMn7oGw92jjx4&~Nt8zdiZK^H*XGWDQg{Qb3-}e ziK-C4O2}uG->A3sh(4SJm7;{r^xDe7c0W)l{`z{X{@>3~D%8SGDW|r|rb^v+Fl6og zG@c_a$_wh3rIJ6AP`zb|LDh57_9t!haeB{S4bXZ1YsyTXOaK{FGgqFh73H}OY!$KT ziJB5SY99pn=!F%v8d6yHg$m7Bha>B7d94%77^{Q+=ox3mvI^Ra!i%|i58G?_fsz@5 zg7Q36bm;=>NC^JmN&V*M3kR%=@YFBpu88ajxQzLHP>n-K|5t-nK?~_^Oa`^#B22~- z*H2OITUOS6pTW6oT&a4S$p=6)Q|#Fhapv8E6&i`bFZ!Ggt*3ko>1wL(#R@Qn*ie zYb1#(9NV%MxVzB4O(}WN_jT)MCfh#^Kk?++K{v5U6vd9!US$dRisrO&yF^q#=ljeH zDa9%nUCIAIwwFh^{OQB23pYR{=IT3zIiG@7L3PXX#8bPcEK1wms1lEFC8HwFf!v^c z;jgjS+PeDy@}uWFDHNLgUQfuY&amtv|J197K;}%XWub;scb*P0${Kso$1*%c^gf48 z;y)!~<5)0(pT*ia>@3Cj)ogBNU-xWe1G(ei&Dr?U$kWc6$9bO+IVk4-giA_jVAu@% zl!Ac~h{8hj#rork4X3c13#y(fUJu#|Rizzan)kykU4O|UM=r2myARU&TqAq0AfLBF zMW0(-o$CisMGxKr`;DD<`~g1?r03DJr{HS{J6hMU+%R1lY6CoZD&sn%i?k{gL}4g3 z>4yfR!?ciBGu;LK^BPa<2iA?vHNnuBX0h*kQ1vq-`CtEBZ-zY>qkQ{Tb1EuC@bd>> zMDdFn>0VX;#=6p2gz8%ZwqwJ$N!NfUk1y!Swi(r}ZOw}OLgswJUp8?^wT2z|itrx7 zE4bu3k)hwm1-Gw+%CYkMOj9*nOv{Wvy(z$aLrbPP+J}9cSU^HG|B@*6{C*?~Ft!VZ ziM-b2S_|Mo)c>vLIVa_SKo9%+#po8H6tS_OV`a2ydyOU3_&)EBS6RS@Qa8{8THdh1UR)c zDLc{raP#a3z~`y+Yd0hj?{!aI-Xs0t#?Zr;*_FZ&E_nrSX!LfH!u#jO7vk5PU|s% zIfWK>YhwIqP8?7)^`g2Jn0Utg8g&_FIOX4-1Pxr5CP!#b=1+Y95*GC-pF%J{bRE1Q zMZJLpn&YT_f5%r}M`bfm4udW=|AWDU?X`Wtpt>9EQYY5>V=EP=5MJ$aq}jBFPXm`t zhU=#EMm2nLpIpRvwT@ZGqBZoP39GqClGCXf!S4#q;c!#)r^h0w{d1ktCGl_udjrO1 zdj1#jJ?YIHzF%10`#Wqm%6mF6Z@0@Q1>fsv>iu1ec1*fX)(pGsP=hpeeoMdPwub_f zUdlY=EMHXfH$k5gd+Kpqg^oTK@T5yf>&G>joX}uZO(mIG;KoFXfj5G`UVhx%-$>p{ z6%TnvtnoGyX_%WG)YwQkbfphqc05~gw6pr0av?VwZ}QvcL8-X_HznSORTUKSEHWI> zOrt`(UtCowKl+9{(N7_TZX(taqIJCq*&OKjUeOqynLZgUax<)Ams7R`WS0Xk z_)A4FT*fC~33P1l?JI3&8AUk2zmb|3kFh!_r@QB|JF6zK73yJepKJ7;{v6)?tR%4J zHCM7Rt=?)p!H!Ceo-mG~hc*RFo^7JpjtO$3 zGFjx1@$+%fcfT*pi9+o1g(kFSbFKkD`(|UCHd)e2iT6z z9#bAv&s}$wp-fYwUHzd_9CD*86rPuyKSi>ELe?8OI_jk^HnO?`Oq;*sEw!y%IN4>%zwaSqdV#1kwWbUWLT7@08Auf-sO+Y3I`ds=yW!m|tg znN1Uo*+&3+gY@=Kh<4p;6`{8>%2Ro^#?Vjq$;A>+RvLtiuAbAaRQHIC!)|j}h;Q3( zRd5Duk39je>iS7rBWA0^J?qQ3A!%hQ{~`~_=bW|2cg4|D`-J!+ygI(Mw{~9lsU^LC zknZ{CNxOwr>1+KRv|b*Q9M()Bmcyj|Kw!#!e}h;IR~63|zrd3M&CSK>CA#VWJ~MJ# z9lmsxsC?g{GR_5!Y`L&(;81Z92dk@4hWT%CA8~HdiH{u7L%t};Y zRF_Vd`+nW|x$+Q~S$2Bf6HC#xS7Pk)K_eM@;x@{_eL=Xu{ZvwtEg$3G)FnEN};PQ`mIdmrip zR39bdZ z-sk&Iu4?jwaE{m){=UCb9Q+Z-Om;~^-?V~^lM*N^O zP{;-!WztKe(>%FPh~gqUo|=t6?=v92I#SIzFlYE|`a5~ys~DE|ZM0$?0I1@8m_Y&A2QRmSSc68q~UTtrRD%D>s0_Im7jT56}OUdW{K4lA{@~>3FRC_^hwaTs@T;gif z8R)CRCobJ#Ugc6iZ#C;I^T|>hOQ-wh&nxqG8R@@O3mm!~MdhkU82WEu=Q<`LBKQ=O zv_YjQ7Nz zCDiY@Ket1=<{@T5U5~z&t*0Ab&iy6VSj~(>gyV-tAx30k83l#q-|2v}wo^`P4}B2A z62gwIrXaAG80^Le^~G&L73fwwmiM#Cnx=UhYnbaY21J6?KlkVqpz-1kJoGy+U6eWx4y#lK6TH5#}Gehy)%}&`qNnKsm2r0n2-}kE?{F9iv z8g^ugRI&+MpX(F!p*ElIukSZR^$unQjC4v2Eom6N-|-a@BL1Bo^|uu0HR!@?P>JZf z>}D%Hx0w(zf7=L?qEI9HPaS>tC5HaU_32LZoQhBG8kD3|5noYlZ990wq^!U0mnu~8 z4OvI#Wc|o7Ug+-`@|#GH;d;cREg3h{{rpE!V&5XYZyFPm)L`ZsU!CsFBt|3A!7wKWPg(_UVx=(Rd8z z+xPbxm~~2%L!K39QBS6RfnrRi_31l_Z=NIYkwGu)a@y2G zNwj~}K)(@e0i88kzA8s&4NG_SA#W1UAI6nfuV_5kXOt!(>p zi$kJg$o9nXzE)J(f-ZqoR^PU!NWW@9&s!s1^y_E(bYX)w3n&Bg3DULC`!BbgjyC$} zudZAiY9F6^j~RbmN*3VB-cycuz{Hhi!Q4zwb~D;qr6_vPNWV_N{nJV9zfKjZd#EKW zBv)R+U`G*+2l9k}ve!LT3zp+UA{Y8l#QU#CT>W*l$(0Tys9Ywhqt85uP|RA4uBVOTqci&WqJzA5NdG&GE1+<(WWqMYGl zH4O72U@}I#JxLiJE0Om%VtiCd@ppJXMfX-;`K-LW4E=cV{neWwkmt0LPIcdJcOPhJ z{mH4s#&4GN*(#GZp8G`i&4HhiT+ePXi{n0Lug5?U_i|%;V2vM7io%9JO@9F7FS*!z zV`20{W#GZ8O;#cA`MGZ4cYWQ79o?UzF9K`+ptSJ0;=@c?sP4A>ebrIBWTb+e)PBr) zB)`A*Km=c%hW_(|B>hs~ zg*cC@I1fyM?wIwoMclqwzObOK>7N)ZS>IFh6WD59jj0K>UZhdz+TO^kSvTq>JbI|3 zb&#!GJ#~7X?>bt5PAkXz@G$Pb zN3qM()A~{+FRb7Vaq4vJC3)B--gmdE?-j1L!B7RfdGD;xYh|&ax~J21%dxvhF|~2` z-Q84hrukE@z6K@Jglblw>Tmn+i}f?H*5%cIQRfYv$TA$WX8wZzaT-udIt zX(+(SE_~X@Uk_^kbtr#UvTqpiTDaDhKtW|M{2CW3C8`R}L}H4lRlzNMd4e^QpRei0 zp+uV8<=gl}pAmbW2@BExUG%}yFPEvXyGvD!=8Ylkm|~#KsA81f z3uzbOt<8SiO0xsa_R4)jgPNn`kr}1=CnLZcg_XIoEieZLykG0tg=DJ_$C1$Cic^oe zKk2d=P!#Jn)QvE|Pc;Qyw-&Bq#=FByK_S{d4bL$-M7dN zdrP7Bv^EXSrEpNzw(hT!Ok#hogA%fz9V%s}o@U-V*HEWWDe*$%vst%+Vcz_U^OZtL z(sNwyFPkhmm4e!`_8t5@63Q1LM2o>)&}O9lT}s!XQl|rDK3L0_+HC2PeW)@d-ZD&Z z)0eSA{mQlDe*!tnb`dbvMbv=OhAew4@Vnw(U>0h;h-U<-G#OEx)j_R#Tt5N+?< zRo!L^y43e#J&j*uE|Us1`1ymjuYz9ctbr$gY(TKox6k&QakTd>!V%CbKK#01>fjR)R7?3E(EuwT{S&3POwKUrYE))i}y z&_V-lgSjZTEX9Gp2%~>O^bzZ{YAX0~Jq?VbN~;uNI(lg4eSTyzOBc0qSKfcEf+oxT z<4&!fw_x@DK)kgsYkF{ylWZF)b4HZtHGy>;ZM6A5bS+vTugp$+w2yXcJ{KVHdBi-b z?SE8p-zi!TmwUV|M>FqxL7t^2twazc+1y`Jzleusv`ZV*pr8nzX*&PfiAN4omqo*q zP$1j6@PLnmy%M${VE;NG=$^c8n?IpEdzt$GEM3*Mqe>9{B?uNCao6B)xLdHm*Wc4U z_i-jGInZ6TYnQ{CK+){!T`DZ=12}`VoPRJet?5w!?dGL|sc2uZ8x@>nf%b8@3U!dc z>gYaNi}I|8Vw_=a;x%!tRTkoR0se2?{U$&B?m3de=!c3i_*eXXS=c2c(?ob`65|~L zunRcXGjfkc3J1LyG+z2CG|%!Av{hRl0$P4Tur z0L?b>_!A7#M2-r?C|WTgXqyZJ9!95SdG5&j?~>#d#0sa;F2|%}>|tn=F0{ z7&r~#Qg}bDQPeYlc3T0N+SC+q7_1BWyGiz!^*Xo6@Q!Z9@PaUDG6CGe&!z{?E#Jyu z1OKSz#2$S%Yf4anNNP`HZB#0kh=Mx``AHh13&+U_SgUd~J`--}PgWrMoMSSGK`GPbo6WE1R`OrZn3F71d4b9)`Ow8@a zY%35~!6nxpR^j(5N?3(1O(ls0^RuoRpx*$faDlWE95W2In><1^f)r z&INHZhu$W-DSpg12DXfqiXN3_B~u`7fF{F0xL>>_01iwCr?TG66?s2kHOdz%-<;-X zpqS?mH-t$FaN3vx8+d$HXP7!BeBRXxEROme-*e`KfzrX;6YZlrm06Js>o*G4E_KHi zRiyylF|xZa+h&}Ad%$VzH@%9(%G3!BjfJnAMNQ_So;ygQCqwu z>&MZ6^|5;1-=A}PelfV;?PvPwgB(u)Ik3=pZ*TYx7XJlR7G2wQe+oU&lLY7W<;LgP zIp@|C;HNwhp}t?usNxKWejJjHj33{e1O!e&(RdvDXrCU1{Q1vA_j6^W%^p_2XImGW zE;0U{D7b~!=X-W9`kZfAMZ>oEx9*s4c?~d57&Iv5m;Q~10KI9wbWrcDY!nZo;;-kt z^RGC~F#@cHj3eV8O$&eV3Fr3w85DE4+IJ6USPj)t4&^LRC!F`?k)`BUV}6P~kd3jb z--k<$C`!W2@*Vi`kF4}MTQg`flyDa1IBo>e;nY7J^wbr4N7dsvy@cG>jC0~RkJ1g?xFItgBz5c zjL+YuBsM&d4I&lh{rEMdvcT-aD7iyd&gu&DlHYlB#=ZMoWxmaQ>cCm7h5C!R#9L?rL?P_k zQM}LMKHdRmEEsf1w({QEI`}TrD+N*BFM)*?hp=DhQtkXljlp;G=-Oq+mnb_0pRVK^ zFYwKDS_$M97hR5B*_O5g2V7+nDnfqz6L+9TV6b1=rB34gz)Y)e-c{60Xyw=7jS{tT z$Bqw0N&p%<)5?S)n`q ztoQy!7aH~-8Bv!LWu5he1rVtg@5WlZT&iKTXMfkSebt$T!$~H}zA*2pa_ubyx{n>- zKz&)9OLV{^SaR%UgCW*@7|q+QV75qOo_Ge_!e%6-S^+W z`KQw4UIS-^3X14ysE9T+kjeOu6A*c^y+s&Nua~29t7*8(4agN%lQgF9`P#5><^Wx2 zMW4_G2P+nsiaFG?n8V2ce(2jsZnG{W-u(c!`F#ArdS{u*6u{DDUF?bS(Rv!1jUc#DfByFk(;qMomFBpm&^$WvDJnj(-QhRpy{7GpqCU9I~(ThucpaBln{N z&#P9_Hfmb!vs-}2Ue%Lq!T#>f zz)7_{CrK+Nn_ak3HyL8i!470;743Hi(BC2Z#qW#X0mp{xHoIQh}2!m?{#uxE6te=V?s%iUED5=7AidAo@!>{SYt`RYK7u~X8J9*LFeK2WaIS|6!m`TQLM zKqRuxZ;px!GX}nMFx547oOAQSWoU8gSM+7y?>CI*Nt4qE-SwVWXq}HUtBIGy>dpmN zffflZCUt)<5bW-E8^-;Vc7!E0h}ThkZ*#R3G#i|DF5{okrIdWVV&D<{)>8ArtBiOL zaHR0~ecvuY#$E&%^5xfjG9&S_z;2xqueOT2E~Z%vXfM z+YiN-=h9t40ytTV_|0fYBgVtR-labVo?(Ab;4e@%j*P6h!GF4h0Jz~;nMQ8N{+(dd zlpofd84oWU8sIOuJB}ZV;E!J)PFW8+K^2bB?n`izA50Ba%<*Zt2KvjdQs|c7051oC zqSG6Ro?uE0vjkE{+kxn9zpuj3;H=D_DM{LUls-6!6=Wxm+R2l7;{+sDo6Bf3hQ+=z zz*MR7*3WO15ha`(aBTP_pW}MOKJdIwtH}PS^ebBjAd_SiW#)&Xe_8>nJF4uxKUm!@ zP}44I8xkwNlCkvM((P zFbA2+KhvPI`h_9Tr=#-p&qojM37m7KfBqa#K~~BQupn*wnqRjmXKw)VoTMk~Q*@KB zJCI3lTN>0?8y=?spUeidG*pHTrvd&!kK&~RA>d;U>Vv&U&5G&vdmBn@r z>o#dz*MFKFc0A1SDc)4S8$4BLOp2l=!6TM1;!5=_g?)>0g_Vk~c-X3~PRlg| z_BD3|=K6lyfF#J@SqYUxXcF04H@Jn7nwU=&C^V6Q(`b{|#CKv#kvZ^E%QEhrUjNRm z1MbMc*>}yR$FrQkT4|nrEZ^NfjS$?z@93#ZsQ=iC3AbPnBWKx0Ba0Z&1x-m6C8C&n zKY^CjoPv*+hoArIpXW@)&U3R+Tmlm7Olm@0Zf~C+_+^ci@oqO|i%;Pk$Pl4RNtLqc z4Zh2AnDCv1UtI4nrdmEhuD3n+>0!;Mxku|{yvRWWaut;_Q+R(My_v8d)_-%`#pZuT z7qYLzrOOT*FzN@qiSu)D>W7`r9ZnC%Ha@pd1!2M&b~Qd@-DO3E@;!|6+r4NePG{`N zKO`LcJNsHP8G`x^b2|9B_n*Z@p&cZn{W)IqNI}LJrVo+jx869w{!mTi(P!*livixZ^kdgDgG74$z~7CG>~7OM@EKT> z|CGM&qrBLEO7Q8lg?t1bQ{gM(QTc4Ic-VVTLAG_G>*!w-7z<2+M2;z#iTlF`r zbizXHk75-)T?2W3p;O*7MOS@CXxY7mGxm2t92C%$=Cqw503F=0>OeU0pYvkdCnZ3P z0#CISA>Tc+2|(Jj?49C#@{_y?;6^rbS4}IbLO&q7^>rrR-LmV>X;9e}Y%hiXIn~97 z5WNxCyeeOmB{&K2-yf|PkiYOrikD)){hXC_>cAsm>s6gnIsUh%Crtxjr0$#$7^lB z1`asC_p1qU^@e_iXVrL`;$F3I3@XSGs7(6{m@Ov$937zDGtV6)w<<&h;&mxCdx?&J z&p`&VA+~0DoQ+HEBak}n&arH0{){f{OI>bSB)XNB?H8OGV#N3|PT!IVKpYq?iN-aO zKZ;EQ&Tx4#BW~eFHY|v$eYhu$CRGo<53t?E>l(F1TQ(vGzsx5(nni1Su_-`N7X7I7 zTYrR775KYRQI85`%f(9vznrmBM$dMZv_6n_vi?-k zA66bxWlP>flmHW zk(p9?DD6Yy@GaNYH3{tCfaWS&zZasv!KdtCdqnDOQJw+JSw^8D2z_$jG~lssp?Upr z)~1qR??0Z$!ufq&QeXisTUm2=ZO_thIGMH?C_D@m(*0>5+S3(mji_#hOFfVcEL%QC z_|EZrfVBZpfK^478XKGsY`b|DM$UKpdT_qVr#pDJc#UcdGrXKoFY}R-Eu2GD_o@{A zd63@00xdgc?b*dw;0`75t>!S?#pV0bMp%LKSc&5ePxQrlC|93-a#QrG`TORY!oCQ8_b_;YY=(W_ptu?_nmSHqqXJWKs4Z}&7xzPP)gyX8pV*z z$@%5Y3}^nBWaz#FlK&(=oN25vPQd!ZakOw7)c4O_$`;4lSr7~I8&cY0d)N>-t>WF` z?xz)wZl?iGI-{!0k&NiN0Q9JIXvK4bYOh;h%Ni*{KHMil2Mt#I2E=av868YL!KX;# z+%A^==!ON+JcV13s@$Tm3gP?mS*j<$oalA96GT22$&Ksvk2L>%`r?r;B#V#7!;U$1 zA&B0~Z!G*b(;jAY=od+R`}+qF>A{YwQkke5V3$3r z%jDkLSs=bpXv==cA??o5@Hu3gZ)!YVoM{d)KIx_Pi;aFR(?Awv+{H&e-;o8QAKN>p zal4a0egp98XtH?kYCk1DKcK!Vl{Jo=83? z)({Cy8C*any>Dv?`$Z$afq{NX;N)q`5jhX6-oaS2q4n3r+!dWJXkRDNgjBVU_Y2&}-EvS@unU9X$1(_ujr3N+O(eVUAvY%x8&LK(2hY zPD)0&RIUXc5EV=hnMAz&$0~t#BfkvK;#XVJ;Fot1b+6QR;vP=q9Nt$+;` z+zj=M8*^n?J*!glffu)!=pkTGQ};?r^+{e;4Qmo^X?DJh=qPZ)Bu-x=&TnD=Gk}LH zA$E)9sY*I9Z>89IK_b(Q6bq;s!&j%`jQzD=J)@8IBm|pT402^$|;o=mh~WD4OKFl^V?U8hh_oR z8EdGhJ4z^`0q6CN>+0UYX|M>KvEa&5*46yTej!7CWv3?wm)gI<4T^QO?nfFk%>{nh z+Rb5InuoW0Ad?r*WVmm&pSXp&R6k05L)FiJHAQ0QNW|C^UBm)gHs0+h3YgjSuo{i} zCPb@nAEuE3uS*}1{azDsKX?UE<=Z5(?uTImr2WE{pifviwj-c}6RYTNM6hNVkh<7&?^5HQNQc&{nRWJKeI-JL+jDYmeFw563^mN)W95(Xd-L~M3xM7Z zg9;4V_nyN8KZUgI{SgOJ7F}4qqi;HY<@<=h%C0|addXJk{_%A1%+kRXrZ4g7RRd`s zB_eSAKD=!T&V|rAFV~vu*Dx=rDHUUf7?s;_r$AMV+~|GN-v+lL7VDc>Sa$sya3>ej zM`X@*EzO)Dr)gC>hRB;y%?{i`h2fsj?UwAryyT5+5fcbh;mkmP8-Z09;m4EX4{kRz z{64P7Kc@lK2J|1quIvVPjvip$xJ_2>lh#jNfDRra5oP}R!JY(8oWO{;q5ZkXc9lY` zqhgMVu;knQptoonccpSyPL)vV8j&mWE6h-EgX;bLDG~2i4F@=3tqIGLe*=WNVI8Bp z4g>Y1A2R{$D{Olb54CGBb%3#WzRBIf^?ttWh7e4}r-Z*^clHb&rNt=?GbZ6p0n1`^v5 zp+~lF5R!zO{-*qoxqXX{>Ht1}Y%@C*GxiABZI^WNLZI>|7~rJGD*UO_^ymHYaLP?8 z`N}unUPLZ~XT~)`_I}+TWCh@kzD<`z8atp*3-=J^5ho-wnU)yL;Rf`C?6#bcF+|`R zSy81BzMTc|>e7$j?$GK%wBQCeEVY8XY$=b#8^4zpf-RuJ;>QjUeWy z^*P$QM?swbslM^owFi2@Vdt8~nYe|y9rXe4D=vB=)ITqdVdbqL#JHQ-#nIm&nn!it zJS|5fOEcg-70K)KQbmQ&6F9vg3}2k{N0&Fa2k_ba+%t&JrKUhrhSyW?wxC@<5BLjz zp5*(>{&>#80Wxfc6P%+;2I&Ip8D;j3Tnc;^A=EHhX z(k-TnmnHQ+0ba2RxlGiri-jDZ*)+#h>saOcfK`8Yng)kWX@2+vw;CIZMt zHX_{9V^Mr?z;0&G)_i{3pu* zzskBiclS~tI|f$!OTQhN_d#0UaLQ}wZiVez9uI3FcsEJU*VVHA4dN<yNam6ro zfv35B%eJ{L)%s(*;GBhbvoTV6XE$J*c3nQA>_&P-f|Jxr?BINRv-vl8s++H-!R7uO zrVZ3>J|Wt5n!Jc9+*Bg>sCXzPCTVYQzb2YQJHD5WMS>^<659`bGiJfIPY zd)u&Th_0JIZ~rk78L(Wr9E3~v5i^&-Q%xy*seV@aN&xWL9)~C&t(Rfm!0zkRN1>2m zVRIJ9^Qg`C+g#;Lg>#9`p%tRCrA>*0bx>OK4CXQye~JvgTZ-&5(*kbOz>A@IJwcFi z{Gd3v{c~u{cUj=rPXzv85Z250^9T5;4m?e!IG0aHs%?A$Yqfl(J|SP1PH+H$)sJ}R z%@p5k18-kLiyr+YCEF%wvkV{YIrehBV^mSm=&a3(6tP5Z`nxHiKr82h&&k$l_}T?bgF*3Bij zlO7ZX@VhZT&cvH6WAzQVnafk+>+t5hSAnJ!or%*w0ZpzF+^?FMrd)T3kn_MJco>#` z|IRR?pkKy@C*@(1+WuLrzfadxlb&lCChY>&*_sVXzyv-^;2zJbXnDz!iP?bDu(R)~ zqf5gdMFP(GYCmO#=Hu8_AaYWO38Nu{BDZ8+RnJRLWaC1cl7KPYu^ zPfF!eXfUEq9=9f7H?v<#x!$!{@ZQ*QkgCU~R3Glb9Pd1RgfkFPu$ zwbrfk4?JO~t*zO0V5*;C1y;kIu{ul?B*$dnFZ7({%&G0sP7Wl;8gObX*Y&iZb6&i)QyhmpwH<079NYQr6o++`8L`&2|Y+i*kNGE8U9|F?1ejE6551lp1Z0KM~= zo_>ydY`q1}%2y}xLgh@pd1!x$TeygtV%7wcDb;!HC|1@gR;S_ zT6izBHEVFTA+tTZ=%R=H#lY?R)UML)kKHu~c7QUjQ1gcKtKgi^ceGF|73u;$1N$p$ zb1uFr`j2qK9MGSKhq&0NQ5>+{{Jv|vTP=uLgJ16d$hEv?si-x;4^LRy4Q@nzAMRUdI<1Dt?~-D*u{RPU50I-vX|+Iee%Ez@U!Koy!C2i~IJn*W z&F09RXXA|TAPQmmzEvM~_2={hOIK9f=Zjn(AG_d=8g4A#qRTSx6x`7Z?d|!c_XO<# zf8k>u>`~56@@v6UIi8@lzS-Rftmt0Qx6eOV)e8@h*vG_;vg#P3F2Px)XIK{sH7SV+ zbkIkubP6_vf6L$oY0pOQiGP&e2tGwsWzCnb_|rO|``hJMT(qOH?gM$o5LzYqR-<{? z0a^}JWSB}4&^fSH7^A!BXOYwwjJf@Gd;3s}<}edDt88^P?!+ILhnqUFX_9Qa+!H~9 z+pj{yJZ~X;lNX3G$+DOoffG&D0{G;&epzDgOo8z0@Dlc(|9?*Gb_IDhzH3WB*@~c`zKLuf7hhX}<`Is1=*-;iK&lXjiAjuZnq`YvdQs1FkZfl-(GjXw`I&Gk6|X=i=vMVZuocs2ODf&Lcni<}~c2{Zy66@ zR4pi~aqAl2_`q#4JCe=W((%~^p4sWh_4k%&LYblcz05^an{(j_fc)S1bR&8FIb8`N zWBaH5r9A#V7}(oF9{eAn_ba4NK=fl#xU{(tYEE8o!;wx1Wj%g<)dJp=`M!(Q>%Q?5 z03TLg=WgRRO0nP+GW>R`Zyv(B#`}X>aFW%q-ezY1{TBu;4xWd0xwc#mZowS|2FCX@3*`!fV`Ma#2Z+RLxk zAMn01&XVt(;U_P*)5<5zkNFYF z0mzjgRU;<1$M@xeXAVZuL#Lx;aK%6B`6C72N_ioFq5moEmmwTI)5>To=wX+5Cbt#5Q=@~{PV1CAt5hv}e(JJcbZ zx<(J=E0m~ouYkk~j-Ft3%VGu(yzWy`fCzzgM50ptP?X^$-Jy{V%O<5%IUoEef2aG}p zjqKP9npkoH^00YPX=&>E`P~5hb&kJpk_8@@aL4O}l+syX?EK@wEtrm(S7V|F9tyg3 zx-hO)p1;eH1T`m*ZX@Sgp{QmDv4SVSq7jiWD{mo#Qqv!pDyEbtoP}=k_1QC|JKAt= z&yTm7WZLc81i$QvomYN`v6OaTt%#hd-aLy)o(NEs{-g!TN>|)maQf(PNL!QWlNch-%0I8~IFQZL{09d|<@2t^+Yvr?kKw zkf{l4>8Odv;QJHc#u%kpC@IIJO28}sGnl_Z>VNv-z?eCjhk5d{yD9{-@e$N``=Kuf zrvL&Q@ri8ur!lu4WJ}X%af&(I)^P_+Cb`4iNeVq=0WLB+T{(Lq&?sT+wn0@T?2^NJe6J!Ec*L|J2+?jXM6|w z{e7P>W?tO4;sj+c@drSp<3rj{u?7NN0^~<0o71!5zB5>xr+4kz=9=VMHjr4|t14eO zS5kuY3{1dW$R=s60{691t2c$cP}0T(^H#}<%O9QpyEm92IwR)Koua$U02cOS|6Ev_ zM=n|dILQsg<)P)ZHx$5}0a0{6Lti}h0>1N0!&*u5zk-p%i3FqC(DpX8#RPCt`!H#P z7~Ks@)&Yu!LZ>eBqF&&B2h56Dx5*Y?0dh55l*a45P5)w8eaDgcjw@yEQ60n_x_1*s zi$)8e*%Nc}mVQc_NI-njF#V4C#5+3I;3Sc(9x9Z#2^s}=bQzSe4&tj8VV&w}Sbx5Q zr5i#9c>D32NMeY&KP&}jRi$mP&X^%)2EfVlA?U>1`5F{l{bAkCoOiyU%%uSR{Whgq zvW}+CBG6w^FFNo3gGvHscvqHJ)ki8MD~GmQZUVYq28x@YNB^TlBrdziDuB0Gg!-x_ zB5p?VQ34ei%80T64S=t~-pLmG z>mimsI7uZ_&p)rOntK>?vt%PWy^ng|0jyN)Q6>j8KQ& zzn#3cUcl}TMXHZw`8Z((Sgud1?-X~BPQ5|YWi=2l+_cHVM{pW>#H%jyR@emYSa-so z^g(|i6!X=Vg<<^n~7_?<7WX(btwZ`*;9SPV3$ET z#KxAi*ZF6j0g96C%;-}@O|VjNlK7v1u_W`|;mrBfMCN(L^4|#VD6UiVzzFTWOjwUZ zovSG8?N&gH%_ngQu|BM6`wv>a{#2iUn4|Mpe|ncGz)alI zco)x!ulE~fwU&3*_3|LkFt343xSfnF9lH}iQEUE|cEXvW-~uFU1Ix=I!Y)uB<_J_4 zxyRV7Kd{She)nygh=--ykP}YrOI>YQ>mu-X>smn?F-3%x2YTetuetVG<~RSqFB|zA z<19M<1U;P5&2Zs$a7HI9@H8y85P6%|Vz|q|x;sXQ&Q@e%z&FSyBZp-W-u=BpM zilx=P!yEy&lXICVi6RBS!_9p(U?qkX1qWDXo@6JJAl~)x2CRPe)fZK4e@Wq~UTOOJ3@a-o%YE1~z=zzveu>nL-x`!Ue~PUDM{ z#o}lR>cHt|Hl8rydtt%qE%04m66Iwl$Ik}%F#rX=){PnKI{<0dP4lDCi>X}z*SuS z#Nu)F@tA=#=!_{Jnf}{KFpI}p+oB1i{;2fS~1JcW{z*v!d*1AqC+ zE*18pxh+6KL9hLw>g=o0VBNJ~$eP{8n-zgOS{SB@QM?iN1w3=h#5gB3(ZTTG_G2TJ zrjxrq{tIGkITe5MUy|$#ZtmESY8h;5epFy#B`w!EE;FT{0JkIcT(JEiYE(%;e`&23 zhXC~cz^>$)enp|bqo-AY@2Vq#BdJec{S5a$G)|OoCnJ<4&|ltDpZdkSfpEb7ql$`z z!=(4~1vGT}W|^ceXfB0+{%?({#`-a*oyhcyXgg3@WdNb(A9fp5{m zUY&iFzd)X&Y9PAV=p;r17FJVo>Lf_inLJp@Mi_)ZCUeDp02dV>-gKRDQCS(X0!+(W z>uqf@2RkE-=3G+|5Ap}jyxo(Z-pl=qA%O>!tz_A*_amG*uqmALqJr%#^dGG4;kjvV z%6qFK53s(+MX4&9T}(@Xj}t_l%DqF!9VpdR{OS@YrN^fObwz>S@GP0HtR6cs@3QI@ziU7V7~?`;x$&wXLA7b=3iY< zyv{108<2N4cVl!}#x&6hVBL_-PfW(MQ;tCQ7peH;r4r9>1+W^MF$LD`c-a>LvSH6M zDezy$6yap8rY6@|KmSD91n=u~=`a2=a`C`T$~A9&!zNJf&kvmQD^QKycyTHU=TW=_ zs~+?|b-Ntsk^JZT{;|`J&tE`)G0zL1a(b+S1HM)I6VeeSIP8F#nrp!9b2dWdhPR-~ zg`lo7S{pDYG9H_*`Kz~dDa>e7@2z#!n`yt`nb-L(r2Fs@9|`vVjth?RPQ+j|j3o38 zofWNcsV?|swB{*wc}YoI!Kt=SJJyLO)8_%a@<*E<-L$){f|CG~V8QXvJNm;B@XJ}Y zEOnOC7PbM;3qMGC;61I+Qt1COWM;i`FKrbdIUbq3-@5YDUj@|mSS^9^yn-ZH0Q9K3 z*nYGLym}nqvyXomH0?w)pE!6bgVv(*4-PyB&St5cfO{5-ggFdCaDZAFNmqDBb0f48>m-VAqu}MD}pro3?{r z&c*^c^<~gy7-x9Uv5U}2S9lZPhU&}ePkd9yu0YN(3iWhduEMe4nU!s$*%y%!t~^{rVlvzb^3u%xdV0yh0IyRzQ4fgET2KkFbd+*2oboN2fAykt zA$E4#V*$#;spI-1_Fzax3irY*sfPVg?<)Vn9N)m$x+jF{lG`vRQbxGHk?3>?#)v%aKaifs;8yO-}YGI9Y3D$!H#`ueM z1^<3Jt}|hr|4NHoCG1K1f=^d8@Oqz#&L{?4RI5#Pr-Z<4V24pW76~$cYx5Z3X5m5B zh7oa$Tm@QYKd&P{{sggAVPwpk>`yN2Kh}qPmtF%+TAcfQ;6~IpO6|>qq+COQH>#Yy z#VNnEd6*NCf`;U!Zre==wO4?^Et~M7@iluE`eipWdXay2P1?ZzlqeCLf)1i#hS6!n@`Xr7T?=mcbl-cV z-su_k8L)$X6yTUXih2bnh$;sEX=UV+l^UGJRZcY5S9##U&b5ANEEN&OlPZ8bf86Uu z;1?0JU%+Gxf9jr((gq$p=c)F^&D9i9b6}++ZA*zwDzsGrL|UtyHk$ol3ma(JwiNx0 z)OY`b_)KzVfv8R}P;drL8)ETIFp6>t&`Z6IcHd-+>K9-axa?)*#;3dxIP-_M12-(c zabAT$7eeXC3+CPGSPi7EYYZb9B%5mlxR=Mp-HyvlE%^z&O-Vj^}47Fi-dAWYNoK zYUf4-_P15W@>{85UBW6>pNz_5wJ2l#R~zuN`R)CVdEW%S#^BxlxIHyztiaNpPN;QT zGSU(aJ`H%pNl>SpbQ@SJ5{=9vAheq7Pp7ucD|k<1c> z7^yu#LsR?i>+RX7$_Koik{-OuSe`iH7MtihV$TTC0u)`pWb-vw}bnS-cghPyx$|hO$T?jPT&1= zQ^^hI$OV4fB&n9P4hruGXQ_rK|9lU~3bJ%{UPSYZaHe8VAcW!|c)CWgPNpc{FDID4 zmBQ(_6jW#PYxC{FgB@)UqFGuhJ<`8)73Q5sc zDhjuZwP*9HeMGia;KdZ8z7S=c|5-XXbBNK(5fnA==#JF%0^l%5+VQwk{tL=0v{RS|%@_$kz_GS1w%`~3i(h>XSP*_nTo+8&O4=Zzu1A<-&z;2C5u6ZfNaSk??=}&DmHhiD`VUE( zwWndtC%L)Ght47&=3&h(sO%|~81Vq{*p(HSWTh36;ouY$`H|w*bYBz=Wg|gc5*xn1 zhH9ZM@VA@VIj`S<)wi$L9aDJDY7vO4&8c={LeowA2tHK_vcj|&S?~q?-N-QmJQ;^z z697(n{>3#2@?e<@_y*_Bq(DyYpnu^;LZswn-aY5Bq}C$YaaMxRG`*Z@{=RcXexd#?Fkz^@MbDFfu~^Y{az5b|eF*A3NO zAMTjzU0;>wdGgf`Zp}-Oayuz&WQq{J@5*pLoi>yi;`4CnBC-s>5^hCwBaL=FtMWxy zANw}nN|&L3nudVy((_G7Oy|F3SVut?1a>#Z_kDWcH2!qNBMv%b84>ntV6=n?Tw2ln z2)Q@%wtr(F9|QQV6O5^;jf^3}DcqlQ`RXkpG$WiLN&mdc`EmQ8P7tpu)em&$!__jZ zoG17)j;ryIGN7St^K%aRQ@vjuU?ZYB6mOd_JpnQ|vuQ}HIozYcZ-aR3-)zJ3*1lVqJ%2>ub!=G zU^V>Fvim;on-R{BU8ik{Hr{?hID58z4avuxl{J6Cj`cL6KD6q9g1BdNEYzCTXbJ1-OOM)G{(?pI-sD zGYG6N>zR&KnhLVCdc3{4mpa97*v-Myuj!BGAdKyRD&-mR*!&yTx;Miq-1LW|hA!uj z8{|{wrt~Pxj+ny&u>zDPk()Z6^0y;UHq0@)nQzF!?0<{149O4fC26px2-jcjOj+gW zL#7%pRQjndHKzey-J0j_-)E%V6tEGU58P~#oBaF&j7?W@*K{GFtqHu5{H}9>3mAsO z0asb@I{LFV=c`ZP3_3$KpH%t^!X!1EU?7 z2c&LIu0ANzOU5155^!241gZ6KJ z3jbsCaikIi>H`Zq8mEZ+M>fG~T(9xGuj4Sw1b7^aZ1V4R5B5t29@Y##-S~-q^o|3* z(R{q^`tXYq)UeKtMv$;V4)lS3A6HoN4vecga=?P*8heR8;|FyOR?>Kp3-+ye`FX$_ zan*(hbiiuK29S`_O(I{$r+ikx`cB>7L^*oTEzD3M&fhT*cXdS?fZmBO@0D~|ZY;z4 zoF7UuOU_fo1XiXx9d#>nQ*_$)$w zenTWleuxVZcIfXI&ru(D#Dy04lz4WCTDxx||A0Iax21ZkyerPs0jm#9{?)#jl64lq zpBed{wWB{Odnj z0$P@y?FaShi>dwGXI+dIoJ@LHXU7iZv~e|f-vVWVQ^90UI{-4=^Iwe9>K1}G;2bF$ zsav7P_UaBZfy&>TGo1g;YjBP#@vQic`S>`TR`3@3M8)qSWiQ}yTstfK>@AS_3t*k3 zMEKV`G;#OgEM0qHtcz1iWdOH_A2!VzdsFD>201sU=C-pR8=HNB6IxDT5tsDu45K(T?}pJ%%Li^*TA1@8zDZjoxDNwn1lQA{r7L2Ns1?_j{5 zQ*oaEsGP~2B{6R`$3Ab}h<`pf z-L1I%c9A-N&jftvIridlw{@&SRjx|;5~Qj-UF`vX6ud=M4Cp`9`9aMP4&!U<x@_kBFDj>8IA78U8=AFuKfGj+yXLmZcJ=Yg$53TX@EHdaT_zfK z;GKai<6wVmhNI_wz_%wZ+l~~Zz59Ilk)KGldp+xly zET{KL(Pkx2SwnET*@(OgOOU472I!3@7dd$RuR;^B`!8E=<<~o8@D(cmy8>RG4J-2& zh$R)N)86EY(IU)?&ZGWomGS6;8qR0GYOHG+P3i=&`@2{lgHi-8UI9d^{1MyGw_EuP z#7Sj8y4w|^0aiMpyiwRMcTQCj{FPf$WEib>U!h-^oK9QA`jRdJV0(G}MF_uqOvoGL zf^adEk~df5(GQ$%()fB|M|f&efL$n1nSS_$l#vi3!!-q|Xv|8L0{=TcAA&c&^vvM! ze(+ZJ2lOCYDbxy^^iy$>%5lG72hmKzJT_l5Oa+l9Q%-;WgyyX;jA8AgUp9q^k{eFi zJ>UH)#C9{SFt75ulXa7$ls-go>p@BB$)K5EX%4^*ITz@@F=WwWUPuZHSnr`*w#YivPK$BGR}I4t3R(GaV;od?**7sDbx4O=YRBN8o+= z4;zGiK*n_nyE!z8`Q{&amT6!c4ZS1yua_5T1}pip*-((*l(~t(uCUtek;lH24yxJv zb+d1$C}g<-)r4Gm6SJF|D9Cd}g-!dWqy|G&Q?z`T?B#Aa$pHXNS;Dz~hv%MkW~>KY$Yo z^|@75sAC@#?1HtUP*vb< ze@H{(Nvl?1)hj!c1OTz>wfTvrr1d*3IdwDG2lj`d-DC{^%h5}f( zze*z;jxe5NILYzGr8?vXS%n(=l`-*ktaIyI1~~cRwIG1CO!LdcSn+r{k;HA zGWU0W`fob34`A1RUQ6wK%p`05Q@7i8XDEK?+`ta~&Fmq1nQb1*|xNQhbM$L%df6O!-wwL1O@TndUCRpi)Sk@;ID60khnUV!w;;4 zng5u1ja;V1y+B=%d7$4s)(kI!h_dFr#Cf8wB zZD6qdN(O4d1n|27^^L;s&tw;svswb2W6uQBmM7{E7-fVd_F{szaKWC zK)g^q!h5D0)lM0JW*2Ic&M!`{Ct-GScolL{arX#F^Seq`yc4?z9|U&yVTm_cY9=zmQ~It*G70uK6p>9H1STt7Eh zXXG-3+r@&P8p6EjM_(?H%|E^Y)khbKB-70nToP&yyd}#cYI%?usJMvA`3ui*M#cbc zWWm=qEL|jH51hdu3-~Ud@z(GkQhpQBbG>tz;HH1SVYy+&$y4EWoHMg*0*fSNZa%k5?c9j5K zK%&1O-#+%qE#>5DicmfH7m3ThX1cq;y6e)4{bwmB@?l|)@p7~7*NsvYf%BUk_aMzH zA%Vt_KObs3t`%O(q|k8cwAyT&!uwk~!#v?Zk$UEwue<_r${wUMbCK$~z-NAVo^?Dy zmevepKkS6}t_OK}UpOHJJ^107z4ex$O5{si8e}~x8{NQXk2yUaPeUZe1IT|z$AHwk zp&>Bd-+yfR3vpDc;4PlXQ9P&cnrFkA@+i7v7W+f9rv$hW^2sd@LcUWioW>|UQ(FF- zW;;Nh(AFCzH1ADhA7C5pm6h$gj3NQNq9xu5iL=lsICDIqzl&2x zC68C&srZE$>ir#%e<8%*UwcC_WEDNP8s04PjY^zVBu5z3-g)KUlpA!7AUz4fmsOI8SY&Jz3~NKh@zxB$*i4J~Dm`A)Zp)4LRz5zkx_%dMKcIOgf+`txr3Q-j)wXK^h=lv8w3-g;rPL^$fO zo1+mjyg!<`zbN*pBScQX+22efs6s`+gdNVOds!&07_U;HK>m3Qw@eWEX0PBpTseCZ zGw1!ZgHt{?&s@4i`{emsh2LCSr|6{t$$_Wpu5ZU+hW;~Fz|92d6t3v9*>44PA<*@3 z$teor7}!QJ`5NlJskMg_7OehV`Tk~xaRd+vWus8-@r`bKkYP5A#hs2kKr9>fJ}i!I zyJq=apw@lz_pga?2s|Z%-(~lqeY?-XMG~BXk$glaIrcpM!h9@Q>*4eyd%b~(K&#(H z>zK}ULd$Wn%VP{wXoVDHT>mH?^`$J-B`OeiZ=_t~1r^In-?@k=GdcwP?(lo| zm6&wI=)h{Y)8Bt(u0Ib%g4>5!MeOs()?_`xPOjkzUT?%uWE(`sE^B`%PO$F{p23&@ zu&23p>H$0DrC&kDn{sG158{O~vI3@A4}3mg)t@TgSh;0CNO z>FRBok<)+gUQbnP@~$7PY+=P-{0A z2DEo})9fCw`_;ZQqLr62s{vLJm`{8tEk^Sx@MUs+9`{P1n;wBPsI-aP?9J}89^mas ztG=7`rYav!aaEdZRu1ym_Yn3VNOfUnzc2EI{p{#ISD)XHsV4?ttha=kM24I^z^+xY z@I)33IPLC0?7Vj5T^AoarhKSu8TZq^*zc%@dNR{m^Y6b^|NWpUNQ7~xy7O_~z{=Z1 zk$pxvV=jUE8)0+{RDPBDB*NNSVUdpDRfcs2BB0NsCG>hwEx&+oj-&3I)KAW|2C!IN zOR)fbCR*`;)%_ij$0x+L*B97XtTrzBxTvSXctPpa;-u3^`OdIb9OE#xN{_^H02loU z$Zi~7F1HJ;&v|~TMI&MITmTu`sxRjCdrKBn{`b|Zjnr9?-Xq`)<}rO=wWlH*RMBsF zj-0(6Gk*s7=EHu1Pr*!?tw1fBo&9({mjCJooZoW(bCT~u@;G?=k7MnGO|w29F8E!E zE-Jj|n4q1&@6wN(qmR>8vjmYajgR@K5v&6z&JzNWQj^P&+Y8nqU%%@;M<%ty?By7A zN9ouvQiy@oacQu!%R}MG0B6}3V;dfU+~YOCjdk5n;Z;a?0I|;GskUM!WziX^9eua< zIeg?of)&mrr4xwh5G+;$i#5uhY{_MTF9OJH_GTsD*T0cY!UeOKP9v`90oChd!R zRZKTlIuIWfUPw6B;$=hyEcR(ir24vvo4~%s;noQ`p3E4BH3@&g;bdaFnSMiX%H|js z)#mF+kqUCEvSyyIjjVrn4v^nYuuRy{Aix6f*;d2F?L+ST18cXwdfuJybuoMzF!Ohq z6)8;*2)BYPgyv)Y{`*z?O~cA+4w0Nse0`z^peR9$zKec|-^W)*q1dz!H5rSmzu)D5ShR;uYSFM-m`QU0yu*# z6WLq&7LuC+Hzpta72P(#q{KfM3I z4&UW9aW6^l2dHj$ee3V+2cw+A-1YA-0>qE&(7#agR>VVs3?xQbNWcm054{fQ;0l`y zPUsNh)St^`H-!dq3Z>z$zOU+E@C;T`ohtt54cTaTuvYqel|?uHBg#AQR-;1hQ53{Dh`!iFt2vxYlhIziTX|ekkelt!^9VwG4 zyo;e?UhQ{}${iN0vn4ZaZ#N{>IAHg!ub}g5p|6Gr)mMnuca~S_+!Q$Rhjw^$@by3WvD(`% zSm&lqpLkYRHIsbc*<2#DuNz*kKgduC^4?en^0u1-Y*Us-@~u z0d~+5PV~)p((lCsB>cf_Wk~lO1~}3}WJD4tTzI!2TdR4=#rVCgf-#7H=ZGt%R-Q?H zg#G*Gj&#SyJ#+ML^{9RBvtNf*lN%nEG2hrr}h8 z-u&?Tot&7=QwO|rx>wjZ2Z8=hILLFbaOjuq2PV-Z?rEsTp9g@NsEu%HB12Hy2I5e$eF+aL7!JaN z{WY(9PF}o}9u`30Nj9RGd6@+Tb$a__`L4CZmo^Gw=U;JLGsc%=o4_1YbwsUxz4%rI zT@@zDczBt(=v;&MrJeZfp80b|IoMz4%#3eD_s*{Y&y4snC8dRL)(H4(kubFKPNj&4 z{pH(a zIAsscpJ~W<2iwWe+OwlVE7uHe5H0>aj6GGwd&yG3W6zz8KgUw?;Q``MHi%f|hYS%4 zr%%>)Bm5FwI1bpWb@CVaLuYTHMPNDUb>-Zupt}4hvN@PDp_hQ z@J1x|6jfkfw;E(!%lVKY@8^Q{k4hH6V&@{GPHSJ540gP#5t2vioRU85 zI`8fEv(4sCem>x@pXwKne*`}W5tyybhkUktw^t!I!>v+9T_>BZ75K8>d~?p^k7`f> zzhHU!?>(1dJ3Zic>ycEV(Y}Ys2Yln@+4sAW&7F`zej^`;ER;^J4FzBu2AgSXrM`r? z0%u|Qp$Xed`v-+J%%gl!IE$5B9RHjBO}5MMp7K3}J-oemvmCDW2JABU^DOA0&bign zAU_$Fta#FUcU3I#bfjdFmqT*pDuU0N@rrMFT|57#w_~i%pSDLgu?CT$YyKkg$D=+5 zxOe{cK{}ZVs?$8+gg^GE#B2}yyaX#LEdCmY+Iu~EIIVB|qJ?W@lb!*aY=%S_>Wk>| z3GCqGH8e)vIaWcvplNxJWVQ|z@&>yvw9cR!mqL~Zz;-%lu!)+{K)3*Z7G*{M3l9>p zPJpMIUR@GnW_XMfuq%{C3x2RDVS%+wtAw#vKnp@6g8XFa?C4MVJNicjXT1&cMPicu z8)4RkME?R-d$VN$cCYXW+J6$8>msOaXhd_iSXsGFa1uJMZl6F;K5N?p?ya$M%d)69 zp#s#L*OqU2zc-YIsvv!By+o1YiWqi|do+I!Zs1MI8?vCCuo!Hz7#^y;3O`M1?D$B@ zFTAP23)5=%V0t3(%w$fI-N&k}F9%L2v-Mi>v&|pn15|OuT16$V@Rb_e4v!P=MGMug zBvdS4lR&LQ;rKc@KvB-Vzj$g7M(Tq-`W|trrfF$_#L*vmr)5r)QxIKHhbp!a#-tJF z+av!}^l$0K?a3J)P%rnZ1%Wi7To8d=P@UNALQx$}5WwmPMG}We{)_ckf1z-|MtGhIl#oJ#ssYgiW(A(!PanH@z^!zczmW*3 zsqgFhry}>A3qG^bF_e|B7R?pS5*X}5B^$nFM`0$`mrN8y-uLqI{YQw-~fL_ktV;K zT@)D*2~iDg$RI$Dc?Ik2T9#*OE*%o@sfdG*cFcI$K4$#3ox0+C<#H+=0B4JI4K55 zoK=e89p8Z6V!BGsHNZX~BGgMSVKN>8Csd}|;`XI8jbJ4kAzM*^j9Ah^Mfww2)MlJK zw}l->EsifiuXjri>+94cn%RaflN-)xwo@rF5Gy|dsHD9!vlz7n;iVjn!#7_-r@~#9thP(6Iz|A9o_*Y4GV-;B--mwPsVy`kn6Kkr?x@ID2(yC5oFq|H)bj|8hPkx02BBLRFeMQTgoWPW{J;OxIN;V%|^ zU()pe24(iY_J_Us<$8lXiYgVSP8(TDSlbi(+>Tec&XNOQsywNR2>%kj?*`71^Zqzr z>(KeZ2D^}zit?O$x6(Pl=k*>!vn0wl9YgKP>O=a?OutpA+|r;0-n2Z4u`9sI4F6Gx zeGCiBfH(5S0<#bHBttkUn|ejyIv}X*zEYKGCBWFoE z--?D@#~=%$vhhwb=Iv#0daTp>si>RU`~l}Eh*zY;^R^oakSn0qcno=pkkb+%L&#zR z>1TtfZUC>MpHP1S)AvSLwW|?$AS8}lBQxL(!f*QxmvGk@>`j~9KYn7qpH)|1AUgiWuGP22GMWppI^Rk@ zPfnDPje__6G?d}9d)Ai{uq$&x%wZsx%tS!Mch2l#3O?cG2w;7j@85^C|8adEd~=7a zAsOxiL%=B*_L2y|6GoB*kf9{nPvUqdy2APm>9xJ z5VWe6CKx>#Cr19tw;V4bU?U5A{@hOfmK+KdCX@8!Ki5M#8F(Y~;zQ4M5p$=&T8Y!* zjPd)tx&z!wcOk8=j>3GF^Pfu9yHPcQ8d0cYlZA?3{Y7SF3v)6Bsv1Tc5w{S5-PaJU z7pcqoZ7Mi}tZfQ^{7ZEA4%Tkvl$6h$YtwM9r5v`MvS#Pij8M%0U3_JhDYS$cj1L(t z<}tgr1gnPf56jKhx_-SAa23KIS#BZT*d>Frf2yoR`;WeEF^H|?w=3=Carqon<`I)S ze;-ty%{l@75hdVUcAmivXBR&1vKMmxx6t5Taz+h>{@HSi!X5-oD2@GAvl~gk4sv)U z^vBn(SJ*L^Chd^k4Z?>NVD_YZtmZAU{oBx7XPnuFdGZ0x%?Ar-hk5hgdtVv+T z^n4jdm4)D&DYZy@g=KIbY8|u+zeS0MCWZlLpq!)qwAaMHOYqIX+!9qo+4fDr4p2cE z(xaYbGa{=+2W;2F@bEbeXV`jhtYofX6dA z-Tiq^2hMiKYBbnRBaD~=9BL_{M;*26o3aSP6os<7Fp01JwHIb}s{4oWyj>}56?T8(lHvlq3`H-MYTRW}`=f&8H z`l*Ah`e7ilwpfEnSLUF5I1h-$D&a^%NjZ#vHO%&bL8B`ZM4;sNtBMa~6O88E}5@9+08Lgzk%hv(PXVqUG5;aNoddOsX@_x${a=s3N$y z5w#)TGRAX|SJ}As+Rpm1dN^;TSCZa&_XDfahqU8$*7_r9;4u$j{wp)G`iu0w)Xx zwpmo4@*pr6r=YIitGRyX4Pa0zBA-l16Mc(=r}~a+99n_w^B<_##!61F95ic2a28l@ ztWD$ZH}h|{-Gtu#Wsf4?z_?6ytS0r$_x~0>*gu?qb<2Zhc@MpO@c? zZ4_m%A|S&&s(utm&%GWaxDChsmKo5tb{Pq3I(=dro916#;NW+qjxwk}0OzwA+~TEa z_R`DUh~gSp-A|?Ok*FV@uL0kvGV-9kATSUe#**>T>i$IRVFR8DA<=oLl=n`+d|lql zW51k_A*G+!Z?5JW(n-z;JgoxdD}5|fWJ0(tO!!8AsYpAs^=t!PeJ5q4%V6Y zoqfD;FYzy=2i*G?rxj&n*aw9=CnNg=tN46A2AmG;cIU4})H(h%kkzM`gbA;Nra-I_ zzmy5t!o}`VfbFaB<|(VMT@--|8z1s1hb4Dg|I!QX!3Zss4zgKt&{wM6UhZSrvP z4(ql4nH7xH4FtS(CwV6mM((0r(9(?oL7rNihROJRI&}np81YZ9b9e?Y_LK&^3;k(J;3POVw(&n-RhcTB#uySKy33+h9xaSh zzGa=}f`fcrXp{NpO|DksqicHUCOrzpo#)5bszhVNc%@Eob`@nj$Mcswr73cU*1LwDE?opRHD?@VdzM~LD z)BW0Y4fY)uQ-JG#NBl*#z=v*2rsf4c#LfhsIYqTUQdg;CQUX*F)ghV3zhnEefG^W^ z!r`O4)f^LWB;GfJWy-m*AfWO;y3Y=~cm@S?$n)q0af0td4ySIhXDcN$@9Clm&QbIG zwIMYgcMh41D09qM?z3-UHN@B<*%rDv2+2-F3c)BiqpTBFDiU3wRao<1Yf@hvR`cTcjVD1-hoB{$TcX%d} z*-xA;W&}Q4JCn>V=DD~8%(!aO!fMxFgjE2`!QBf*X@RFS9jc(%73s|no02K;bmV~` z!>Vp$+5$glcRFJkt8eluV7am6*sIFSO~8R2Ox}9eX(|(|aOT>5bkb=rgz%$*|IM5n zH=ACrZ4KlKK0~rw^1G+m0d{lrFQmLjE8KC|r)kS`E8G06n&6uW)ox4;J5_N2Or|=A z1ZU>_^?N|<9AMVt9P;p8dvGg#pXvFNM{j(?9W3?iXu`b!g?`|T=;=Y(D5$v~ylEXW zxBH}Qp!R^P$N_G2@8-b|8tg(du%5**sK-LhYWaNfxTh~OrNK&0TrB-a;=t>~$ori7p@h@HJe_+X~^7vPEj3G-B$P~}_o2UJRL zWkz;PT=jGT*cJL`Zq&R<8ae?^h)>L4IP9A%{{o2gvcfN&3ZJ!vQTPQqlbYJmc= zWEHGReA+54Kz)WL%!u+!$9O}7T~KauF^zA3#0KD^^EC7FkH;eg+N9|^lXFW9X4hb? zY9$qa=~IJRa^PWG?vsA{U1$`5X5y51!dsL>(*Z2#`FpW&J(eb<0X~za-4mF~b2$Tk zm(P`;`6Z2l`VjdiHSLS_lW`=#tHQW+YdItAa={MXN83@tGVvw}wb1X!t+_}w$QZ6voTJXBJ6cI~+{Krc$SJn;AdWI4G$_ttC^(qeL8GMx{$uPE;5ppy4 zE{inl4Cea=*8U*`R3_iD**^doNFH^*r`$aWtYiH9{XY_%lHX4U_!TpBFWsf~Y_S0c zULXC>>Djt8>lpOT^HrmjO%pHRHIf$^(&N1v1PyW&F;AK3tub-F0#u=om9z8_&9npH z^CH)`_U69qfdOk*^$0sn^T8KbSsmi8N~XWnf9t?&cuLmqC5}lS5BMYNOROYfPt-r; zzcf4lP>kuV2e7MHv+0NI+z5g5txA4$b+^DApC@4aO9UGt>Bf5pnB%7xx(ql{CM}$i z;WpN%mZLu>0-ov?yY|mS1$sEaT8ZeW%p-&K^bIRgkU!Yu_==(#aLR-V`<$=cVaN{T zas!s&72CwW;R$EjE_?L}RohEKcv3=rCKIOg$6$q?u08x}@hqzZ*q*)opLRjcVj-C2G)7+(U5nukJ0gP7B-IAKi1WcMFso&Hm>^oezxkL?#C*yn%J+)X8nL| zAkkp;eQ$e+3YaQS+QGxkEQ>=`kl2pYpB#I6;KE8a>@*B)+Q=8|^+>xlHvdk}cxkZr zP`t*!Xrx~c3`Tr8U)W-#w><&&_X@2)5Bcc_O@xzKxT#yLLuii$yszo)Nf}G>;(2hU z?N(X@HGe7j1K1axf9iL09e-;A_Gl5th?X@Yr7nOu4!Jkei_JFa0c(}6ck}jon@nM6 z1UI{-krR2pz5l6?lHtn|vkz7Q+jt_W&)$!3*-(A-Xaxe}$WOkjfFZx#X2Yrg8#$;o z#AWoeuVF_TP&bczDYN;#nFhbWXA6679l^|G8P3EEYdXBps$WqIJk?p$n}2Qbk`Lep zA(uQG7iH&qd0-{OtzZjJJ!5GHtUyO&RV5$nbsE5~5MI8jX1lR50SFvp8{<8{bGdI| zIp4C9yE|8S0_rmHjfsR+?e2*Q?g;W3x&Ok@s>^M#8jE;3uQzw+UIjZ(A75}{-suUb z^*71%FR3uBi#9kfb-qvEbNGO$0h*x;p~OMzGz{E94wp;}bx~C=L4-S8g^IVK{Q9Rn z91g-Sq9tZ2;XG?`G5*%}GQS)TJe@7OLHoMX_y@J$D+A{lR`{SjtlYa~@g6R!JAw{a ztST+p@t{2RIl%edk41Fw_Afw!eG}RuJ&EIdR~zP4qT!o?0%#H^3%mTyEZqbDgA-A&m>YFQuBjgE{%bC#7wy{A+Xq?V+IW|X<%RER z0Q*~I&v#>~ToW>|M?n;#8W9hTn8EyHvM+*;9e61?&|4vI|0bE1c>&zG>O|C&S?5&& z;AHV3-qIw7*T4W2Wpu%QV>Pyn1I)=JFK0jU=KaPph~7OLxS~^pILvKYBl2<{9bG~= ztw3ZrnTwCyt3l@EDi9|5qx>IGn)rvY4lPBs-!BxLa)MnG{tdik)@|^+Y2xv?U3}*W z2YgazA9B&kpk^#^LTNS_M?+k6l7&?kUZ<9yuh|h$iKu?A${yU0*@nO-A4i@IdHMz3 z4{GmhWG*&HAg3=0o`vfC&A;~;mT+nw{pYGnZlNVOQ=nDYZOk=1@ZMl0nN$7zv`|hl zs3#MJ>Lz10?~(P6DxpLInfz-E3xxz-I%o(2kLGKa~ksUuBN|+59$g zJHh+Tx0lY!m8v?dVl`i$MD@7jQ#QQ0@DfeSuARRE@Kj#QHN=3}tqoCBB!?t8Il)l` zSbg_L?)S;<0uT0xW%%G}pSWVw2Jj6t%_H6ZGb9<#ZJA!&uQG8>t$x5_Xh-*UZsI=QEWySm(7~xYw-<=>|1X&0Bw?;_Fjj zA?zbCh^Jc>Nf)91#{2U=v*EY)HH_#}bq)VKUfgEs zRKUu4&VJY9`wTQVb!%|muAC^bp%AcMrO-9oFx+{AzHF3ux5{`c@S#?A{K_fQF_-<< zg43;;k-KSb{ueI-%elIJ&_-MpQvy75Dn-PQU3Qac0KNCAqNX+Lj$Z|A@-OT(Ey|DY z70wb0ObQ#TU72VS__9V}qxDm!o&Nwdb8(W^lV;$97sy{d!EYJrp0*@7EeM-bm3x!+ z3#q}qWU&cm#Nc0wpTQgPNcd|0c*EjYU>B z*HEeI0uX6It;c>Xnvuh`l2N57GslTuG00HWVL}$)=2Q&?Rt{jBB9OrpmTzDi5`L5W zCv1xwstU9zk?ID@W!)F}{jHFw`3NfYp`d~p+m}f0NNGvJS;-`&ydp!D4h_y{KirJG z9fb@$fX~7z&1-W~4VS=t4&4vpAav{!0RM|@y7)yIL3)dDvID(~gF}gyGXOR+i^M#w zK~)_-K;Yc}%?hzKcy2)Da79nI-VW>%&WKdKTF1l{DPJ(lgsdE~o39p~DR`gK+&`ac z!ndWuC^exickC~(birBpsC^eIqpfpq;LBc2pNM1@$O8`E2+vM5Ak8Y7VV%rC>h>Si z>M{d^cYI@&qR+m0_Y3%a_Qk6glc*)nfv57u3ro_Dm$DmVUF>`a&X+nk+8fR>;j?X) z(T(F_>^#2Q0{PY3AIpcCd`|q>2;s<83p+snLWxn}3ybeTUR3GhWZDV-FJuN!wGK=< zSVsGCO0fH(u1?s1ezHvN`ED|OoOM2NUMK#a}iTG8Qj{ICpE4Op-b4=G<+3Z z`$gZsUkC95XP(Z-!8XSLp3dJ+bE5~Q%~RO(7@}Uann|0YAeQ`cC$W5!@0#F{AuCDx z(3kFxEx>0*F2u*AbvA|iX6q0)UB5_I1~a|IBwPFBNFsUyPxt$ayT~y&>Jir0sWYQ? z&h|c42E;fNnOoGOx0dnmv%03qPFD#woCvchxG~3L@);|DIe#WMSY#7S))#R8sNJ<5 z(Zzj)TK8QNqe$@O0|t+w?`GIcQoi()0jAm}p_SR}?4dlI2(v8tC&FG*13#o!cdSz&;CHn=pF7K~tQ!Tnf+kxMbs6Wzgp=-nw@oI& zk+#JIrv#P-o~u&amI>5h-rj8)y6sh9AR93H)F0bNGKtJV&fE~+c7ge%F!>;AyG)Wa zltg++SnJYcS8Z;HqlO>&yJl6UwXAVF1DK3@uR)xZsh4~KzZ#4TV;hpE+Ya_wi+>~r zIrtZy0+#D*HNx%DTstS=8}Hq>=4Y@N5(W6o%E~#(FEYPrz@YB;Y<&NAIK(1w|LcYX zip*Bzejv6}tJIZU=)JZTd~@i^Z&MHo)meeHFT`KW!;D{Rgxstp97N?rQaRw1-bp8P zRKv~Ac%U|E&7kE?j;%O>XC7vRRXu+f3>xHPZ&8%+Qz>2~2l8eTf%8xJ)33HJ;QJ!u zDei|PdoZuE&8XiwT0Gleog+VQn@FmWfdi2=k-s)|jJmjrPW$y#`hoMU_RQba&cbIBD#Z^lRz{o&`%t z;s;CV7wl)>-89XscHlX%lJ$zCCMQ3{Dub1@PVBuk!}5MX{YlazM>;(BL-&Bi_G_U_ zl8X^$0&;x|GsM|3%7FwY(Wt`fC^TWhy$AfRmIudn6W8yv1LW_?O>DWH719;KU9bGr&9Vv?@hCu2X^dFO%RW+$Vh{CI{a4Z$m_t zJdgMX)%;$WW)O_0E5aM(&Ax`#A(PVdWezasX9h!uzy5g61HB~rM~B86`_?h2{dkC~ zLspTg5(LgKbC^F*{L0&_0Z-)y#k^+edvRCrM(RSSZ(|7(Mu(B+x>?_^sksRQCzN$R zId{0?-K+pbvtT>xt|3OI1B_y+y4hoV{Jl-U|7KG8j!6df$P>;hFYSJ-TifGwfGWN! zSie7RJtXj!=Og^#xWNQ14y|255$~+SA|`EM8|YaU$TvPMVuXFi!&@6_oxybz&Q79( zV_q?DyCT4^ruZp~yZ*Uj2J-F5Q|5~OeKIQpPj&TcI^?A81RXdjM|x(t8U^SGIk0Hs z;z)Us(f;fHwv4;ylkhw(fU&N=*vqhgsfGmp_a~vu9TX1#-oEV=JGq^(;S@Qsdo zk7F}${z3vzr`WQNk=@UEG{C*N91pDpx3{DQoFPK*1(W<_xlS0BKm2AB$l{%d33Vi}k)l{o;P?8o3u+IF= z_~g+U!ZIS@Ed02MTK$1cQ3Yh=)<46RAK^9RKd{b3@s+EMND2#sDsv~5H@)_HMKP?a z4~HSDudEmx@Yzc!OW{e9ULm1!DP`Ks`IUvm2U&4UZj|j^;ckNg-i~88@}8@nSa-lw z*}~_zK-T3;1jtaBrNnc{%+)0DbniUW{wL`=wq3=Q=)d&%4Z!3fIUAG1j9@aDoWA}Y z>8_si>eIGCs<3ydR6BKg$=-T+AJ$F~QyGaN`U1X?Xl-#FSL9nf$Ys8mG>Vr@QD*^0 z?^1lysy-9TIbeJocE%gSwYgDC37DRq9nSw?LDPdbw|GvnZG^agK_R%wkUUrnidz<`z~u@cQRlS2jX zyV2=;es@A;7$CDta<7>-P}+Tgi1cy`{?R^}=X?N9IdO&`zI)m=8i>#OheDGCmmDny zv3>d7zhNvQ^Ef~)*HfwaOY255ya5LO+1=OSx=u0%@XYt5aFle9?D@djh>Ui*l9g0G zLY3Y=uY7G)a35;<@{5ukFDy<`r%gwbN4()+8HSy5pbLrKH1p5hi+zr zsKR3L#NCmseMqnxhO!Fv7%-c0as z^9G-_%!~JKVc>cb#MrBG&^!20nKJ$W8Y!R!P{7I5Uw>dH=0(02yAD;emLwld?|R&t|Gts@rGXt=YCxM;rvch zQKH;s}Re+2P;%1(<0;cU8oIYItO{2OAIkfGl5;vTgv|8?|2&p$f0JIvu2SB z+ED|(Q15*DgyvOkZ}7}5^9*m4SHCzscUJkB#F3&+uLf#=>#akjdH2Vkfz?TV#~|hT zDXSMeKN|67)im!TQs9|Ml%N^qx9DgEs$1Xhs*8%C)e`#x$}sOm;s!SbE}f!@a~wk;5?=4Zb|03H@SM?jf5vg z1@7=PV}s|R@!1w%@=-%ry;MK%7m5atn42IX?d`D9g_-1E_}OMGRs2k1)z<;`?jKL? zudS@f0$@VhnrZh|kA?EU8{H;~#%_v`1Ows*|0<06qb<>bfI5;iRFAh6hyTR@ayzE} zcHgb~SvU|yH#|k9_+a^zfp@huz2uVccy}bQy4f>j>AD1LG=YbHTjQ;#ULI)|@O|!7 zX$s9gh9m(t!L_7N+dHf3a6W^M56hGiQt|u1IiK~t$kcX?P73^YoBr6-r!Xsi1D{Q% zB&pa^H##2Pm|KgTFzCp_Xn;n{O2rF&_i8T&-yEvd-CR8{0m*sd;}0;@gF5MGQx%9oJBd&eqi5P@&1wF zZ8(=0jj5>_stotsjo-T5EO$IwCG&!vh_VkPl@RXxklJBZb!lQ#5H_Gi}$nl|( z8OGT8B;^x*G_3aE`9kJhS!5Y_rUSgO-gV`V$3Fh?6%f6rI@}P8&)Eo8rvn3FzMeq8 zToApL%+Pk!PIW~E_{ua3%TZ_Kr#P_pL#o19RCep%eRgTn_t<|sb1uRg>*hAwigvRc zR2cl0Wr{E*@oX8KhkR~Coo%skC}5AwOG6rUPsOnTXr!&bgps8Q|CvA(HIVQ3-LkI; zO+mJj#lB6I^Mk4($VcbqhlX9)(|iLQ%PNI=+<~L}8ThR0xRurSs{jh2pbKvMV>^p_ zvN*u8{Cm}PO<+h4);1Y?L~Npb+HeG`K`IuiStQ+mTVNZMpwfj)=!ONW;%_alyJ7Gg z9^Q8jur#(No?J);)MHb%;x@`>ydMqx7kMy$_2rS)5nvnS@*~qn{bxSb^o_w;jyfOgQ<%2J zuY}r3Hy&Ba?A)XTB13o!_S=?Ok{rP|U-hr~wqZ9>1Dsl1C}w|Oi|rC1hvx6QP|j14 z1`VD8`9aTgGt-|ez_GiCQ$#a*zl{Jnh13K^J!`vdULdNZYqTfIX*`B@Yxz61G3ocY-~Nu+vi2v#nPP?%?*i-q-us7X=`hOn|}^bro`x@3TPeG0|m6qXf2c;d zUNflnZNQ$ZN@)F@aK;(V3Ts~xQ?72RMX*EC&LW<`s!`|~z;V!&wJ{3mesKdeBeKxJ zL{sKB93To*kL~#RFS{>n{+CQ@4gV5xoZ{4dj4@j@Yg?hE9$$%%9x>FPzUXYos)<)N`IQ@a}~{PyM5K8I^%O`tEi6 zi_=9`lLK08GyDbF%Q1dXSDIuZt||l^C*f0()NAZ0ub5!ZcENv>Kd|<$$qk;wg~yjZ zWqS-szzEJL+mUC8FdNP_rS0#sRFCc15%7hvXL`S?jWNQ3r+kf=t+KUJ!~)%_<$H|kDO5}^ZtAsV3V9m&u_F$Zd?POwYhTt zgEDNr!o1*E)L40*^|RpZhG1D2iX`{|fzzjv5n{G<2Nr#RgOXj2J{Ir5QY7E4jEtO(k+A-Qo0KUqtQgEceCTrNOq-dVe zKgEw=;3t z_xDfHLuFEKGh{<4e(xFsd(?);VM`_utp?t0myvNh7B|a1*!@yT&^dpXpBUb#vc)~^ z%^)Z=s7bxHZ9qR#G~KWl@nmnK&PUG8USO?0@0%s%FmI0y_)%PNyxA|F*9PFTT|oJf zd-3%IRrBKCUpS(%mX0>?yE7j!+`z^5hlDB^^G**abAS34)>VGFe%zlk$q~SvpL~e< zA#Y4Q2j6@r^rTz%?*L)a!%&#lqc_1?M+vXV>Q7MhoR*K3}EjTf?Hp#ceY3tR3%pPS0uo2>>%(NDw*1Um_t_ zfOACgm)ZzDOBn)lS^v>jeUo%C0zO!eZu~|g_brqF=lpR$P4!YEKQw@H=@#KGXUOT| z0NHA*__zBcL*q*SvXzY8eK#xi3!aCD%#`WcA3mEvK3c!V3sva!jdFmq|6W%+wyR;; z2H=tjCV9^vzqE-D@RX0@Tn!R>MAgGd>3xo5(=teg1|m`#TD9hxK~x=JHD=+!=ZG;w z7xofw{jHia-hO0Qb*a!i^fO&bZVapj_X$aB#$F5prx=}7Q9;H8*4gh^QOHw_~z!IaMir}V1e^q0cY>x;y1cH>#gv1uq51dsU|*ue}Ki(K}ZJq zpF@}r$aKRyw2II4rX3mlu5`I>E*-8J+2ENIn)i((LwFtDAGEfgB4w?1DKc2eZ)pCK z8PA$H2hl7ecfLBO4gZXQFLWf`oaS%id>A+Qgw(==zC&jPf8}V?535i`^Ah;r#`59c z+PU8i_KdmMc_HSkP(OGtRZc$P@OPD5OzYu2+?WrT$oS{j zQ{oa7`44Rt=0xun!b}c$BgDf@(hWa^bOC$LeUfHs=Hb@@VDIN-=qTMPLF+)a61>m# z_O6)MNMO$v%?*;c6LMXGJra^Qd4_wV$r@Ol-g{bf2qrc`U9G@5DdAg7UN^!ib3u<4 zBBj>$1X2CN)?$Rbv>E0UlM1-cmr(WL1@e*7CLB!;6qDC2%vO|NDnd9HK6onQcmd*O zTEhiQsGa!T5SN~AN zU)VvmNG@;xW7<-5g5M2p3eO%Uu`+mjp z_P3xpJh+9+I-ripTB)~qY^*Y>P>Dt^(zE6t?t(a0wb465hTyT_B+ptI_Lo`9q5@~5 zwUijqz4mquu7iBRo~_!uT@&6QL!x6%cmGnKFPtaCX?Zg_Js-d+RmAHVr<~{6@dfL^ zVTKg+8i{xZSHq49g=UbEg#DAqZV!aPv47DEu*En}5AnRlq;x@swcHxBw0V_YEkMYz z|43eqchZxAI)ghUKElKyX1_oLc0;j8|Kg%KIUskFbhjgvKo|}Ou$dQ{iZEmECSic5 zJfq~d(yW}a1}YdAO6X+GFWyRm8Y6qOn?PUM8o=DW>=sV>+OSZ7J(&8V=cVt`%B zLHua0^7fnXR3W#XgP1qZs zY`Z*paylX+hzxhccVaij+Z+Ph5cl!M2H$xh6tGxDtYqGOXZY(4zWF1%*SKONucyGv zstL7UmCf9b2X>#lr;DeVzr0bwi4$tHAYZSkD+2gJD>(Ju68ZhPL9BD*@79m#YvmZg zVY9ADiAKS&djm*StI6?sne2o@RPe)(w)b^~5O82uUVC*y`_3*r7GzB}Az!&iFgP|``ra9P0!MpQ(u{e{`0r=*3d#9DCUqpn0 zj)k&K_VY3qn`XfYV5YDLn!GP!O){9-DRw_cL4RVf3!iHnldi5O_6D);tdZ(3fjQ@U zg!2l*{n^b$PWJ{NM!HM+d`(O2+X8I%-b_kEf)B&wAYKiJu6%c{tk?dSayPHDa2kpH)r^a?xv9EA1>;N6`XgnWEc4)v{FC(G*|+2;3-E+LtqPJPlNCOCfRPbUkJ})==9wA z%=P2~e6xmxlq?f0kB9ISU_>9Z!w#l{Y7~XBy1Qx=pWB9aT2E&S@3uWW8(>jFJZxv* z#Nph*?$^%|-E3!eY6d&3Hp;yXEEz@>L{Wv(waRj}CLq9CnJ7^*6)F7L9>5H_n~iUT zH^vA~<0LWxrIsM~s}59(4t3|}Mz5j>PC)9MS6O8kCs!PZz*#JkT2QZJ&w{FpQJX&x z|FfzOJOhdpb_%a~7x)AGF1lb}x>CIBfKxHsqWVbK;XjM`PrDHNB}xDJW01fmv%?S8 zz8q^FcI_s^A3o+=QSwvpS?r}c&SJK))PuaANxsiWw{X-@aRB?HX^uv^d%VLQDwo!* zW9P5}-is*|v$h!e;P4+=y1-h6pHD`;6MisJ5E%;AaD;+%-&hFmXjf$G zsrvk?2k=G_RtkrthCyqA+6ZxJ`>gUx*`Z(;EY=I%lPFgjDwRYFDP+$q`@#%ogo=f@ z{8)Em;r-C}IxtLvx5lpopOwkDKTYJLJt*v-bc*gY?)xw*u>0yRs^97tiH+zl$TrxvbPdJ?Fu!QdGySH&%dSOJ%*2 zkWAVn2L8*W&v@p{t$6{6{9F-IMQ?jc*@C}f<`z!$qSz$ViE9@$Cwh~Z{zwz}UGh%N z!#r{@BIYkU4>PlfW9BU$*af0zkX0ung6zRl$$N`u9|zn2{0rp$F63Utray=R^;0%9 zG>mzVDmVd{SJ2@rN2I`CV4d+Gy5)~iPagc;5_h)p#fc2A(nQ9-Vy6jMyHhTu zhV443!n3C>m>O=yBNLB7WS}=yxH&}$37Dr%r!^Xy)zK^6jekjzqwoy_c)IgkUf^2{5o!Kd7aJ(MrByjpAvL zcd7-;U()^$X!&7iWps%fz?0?g=XWILPpB0Kc&PVU1RYJ^tos6MHAlK*IMArTblWGFIxFU3an7I@s$zx_SSuPzMt8s_+{i@`hvZPPdfBBXConz0~Br!ui&r-mN_J0&Jj;N(A2@>@c9Lm}&1h7RmFIV*@%*_VcG%`;-)v#ECZ zY!Wmz%EJjrzf3R@ES~)tFuoZt%lbn&H5P*1*H#UeV5 zj??LI2tftIGl%=`^-DWb!06rANH$%fVYC3)MD1NQ`$}V$;ej6o)%4YV<{1trtT4ac zG$uT(##`W|rt>tUD>(Vb-Qcr6=6>Ek)Lvs9*cEY2?pl(Y{uckuyH*9=35~sJ|J}28 zN4q?pAL+t-<+9Z+j{KLwCh)rkrZ_+Sw^+6fva`VSmZ%vgZ^7xKxuFZ8RK%jO0ha1{ z<{t@v3mamA&njpmFoi~8%nA^r_erB<(G(?vJ+70N%<9(?dN%+u_Bl0f%%=WXIS_M{ zUQS)h*R3gp)vak(I%_ed<_&mC{k1nKKHIs2nrjlvdRXBes0VM#2U%4gGWXjV4eW0g zBkW`hNtjtt2JKfjOGHqSw$I@4V(2+S%7jAq4N7~^AiT%Fxrvn zOrP>o;ym0zdNMTcj%ZZ@)ypz=q<7D_v;)r;{byfotQ*910Ws%TO6fLpbH6w6MvJnA z<%sZT0&h|iBB}{SOzcYqFn_i#EEmh&RXQN5G<>?Ja!QTF3|0~=;_0R9Efq(=f8U>` z@Wj23D;b;*)(tWTZoQb~4l191WwCO>&2$1!!&QUoffa{Q4 z{-|Tj*8|iIKMV{V#*X+iFR;JM>)IGAd6-H8QDu+HpE|z1+OD8}Xkb3qT7HG^3sl8X z-tpco!Q(LkA`)HoS7T~9g7Q#H_njFyGP7-|I53*g@m^5G|_Vyzpn`;kU+^!KZ9^#~&a zhFKzW2(1Tur!VRb1BJQz3Qpwn@E!ZJBRfxdfJRshA+!TCg6{;X5N8esa5r~;@KBLl zUsXrgRws!el5r<Jcoj zhHj`MuP7g^xc>#v2Z)Rv!SJl-%h~C@sCcoOnm^lV2W2B!6$b_Z~qEQe( zo6OA0lGlEK)j5ZGrK+kiZ`fh= z^UJ3P=Y6hMRu< zN=tg7e&Jw`P|-GxKpI)c2H6>xEqiE}O_OB6_l@`!q$*8)Fb1lNx<@RyS3aB{Q0>7x zi*o`htw+B2Wi+Wonoj+*f!MI&aOYX1W}ZFEW*+bM}G>CaoQ4p z$J5xyNCq-2$-2ilYqrCzr@PgG-b>m)LD+ntNtwWy~8Q5;Txm#pZ(G|9cqq~ z_d|IvPa+iH3zYM<$7XhRiU3%&+=t06zU!%bU>6vA%SG}u&guuejIrom_NGj$U%=Xz zppG137Xwd*_fm`1HK@kGQ+P+rStjps+2_+HP>pdT5536A`_{l}aDv-zjv;GI4r+ZJ zTRlZvd*Th1-@~4*0;#X)0>*YUAe4;ILAd zm79d4m~sOT?ewFOFS!ZUAFw)w6NajD6EhV+ta~!LT}}RGCjwM@D=b!>Eml?Z0%w{@ zZV93Nsu&Dv2hW1O;jXYb;}1ms^l*iIQX}0B!Rf=?yb8Twm(C8M9#GC?+V@+!AIM=* z+u?(4M2+PQA|Zi@-}3Y)Hh}s#KhD7pv;HCD3a4V$rGZ&mKACWG+IK$LFLj{P>jEoz z3pp7h#+Kj))LnW>2d!A+jo9FgTB^`W2RYxU3u2DW`7x>NigE;S!gG{qabFXLM#GNo zHE#D6v}VGYU3*7x{e4Whw1dhRs-uZS<7IR~j`JnxwEDCSBd%b773u8KI7)^X1!%-> z@UO7D(>6>{k6_!{-q&*ad&8-xZ0FTksOuTLHxW1jbrU%{T<|=_uxN)b`BcZ?J+D~h z*2CNs-6UX-+-!TPfUyfv1KPpz`%|lYsh>!1puCy^){r^6v}k;cnZ7pLahvGd!0hJ~?wx*6KDHL?d!0 z79XPVC$I}!cm#Fj3E}+$-z*I6UH)0AxHGW6p{?kt&i2@U!2T+=F=1XdoNWSZvNryh zauzHeg8&cpN0T7NX-_>0cy~%xn^*W>HsYYg((7NsaaFU1^HilFjQkJo|B(uiVRMI2 zJ2Md-1PANP{sj?DHRC?5!Dp$6(2(@aTMJYS*$v-c+}A`0D2W;X&bgdEWk?l)H5Rg%c;c$kA z)B4L1zZPkjq@IVCQP-r7@8BImKy39=;C zU`V!p`CoZ}IC&h^Fx{Hxk2{<(IIS<-!SHhRVeiM>va|9sQM3U0h?xxWxChfkCy4mBDG})?c#v3YKfkFo$~0yuQ$ho8hb>TI5*Y{lh043*zKk z{U}Cp{Z3VeGf}lNJUjjDIyfzAQp@ZWNpD8Bq5gu{{GQDZpJxPpLC#gn9HCw(M*(}b zSOtB8a#s2e$O|3z%_wIUhVTS-MYwb3PHcg`1c0C{m%x92@avm1AWri6ry?ouh)D$S zBh*bkobwjRn*t~4OFjt8){n{$1@(=D;LV9Ehwg;k{wL!!XFDv_PX&LKT4VQGPIGhE z%Y>0-EQOlIzdW!D?|gl3Ed08n5AcS`th8v_w7*k;vkyUu{IcpxQ*Z)dqf&1YU93N( z0KDw7A78>r`x1E&RZjft9hfWbA(laVev@(dG5-K5II|vnGwRlF?`WlH4VdCkC&RyO7nnKr@$ z@}r+5KBpwPcTIup%t!_;Pm7p_1=wE>@ngxmhoM8kUwe@vCyioJmIKT>qqDd2d6C1? zg8iiq`p=^MI$bN+V}tQHl{We=swK>@V_Z0a)nYc_`<9VSleNu^YXKg*+k>pMx=`LX z*x&f|$>~eGW88D>9-=5K%-wiu z0H=7F&madPgq9hDwc-Z*u60b=QUpZrKN@8e#gVL}4(Hgs6hn!=E}e;RYT`UkpVilD z49>t&UehPWhfh?T@SJYTQMB?4X*K{RJZS#1#9M!~62wXQb-vod5|JFnZtw0e$dNwl$*$ci$$mlp#S}E&TvY% z12xwQ;wz~IE>(P%I)rhzFB`Y6Y0w+{Ry??oGLEHS$V+A2uw_KT}Fq^1+gwhTe9BL z(S2lKv8zfoE9WS74^_r=$IFM*NlhsQ{e)cXEBh6;#fJpXOuODg{HQOH#$cUKk;FqX zoa+vr5qNEa?MC?e#ZYPJX5IRgP(WYPhjDW9T%^rd0#4VN1hOp#Db{~4=z~^H9Bj*X zIRfme!IJMAajR8O0GHf#Gt&GnBY!N&upVn+^pPI|t%2VikzabhyRslOV9(iu<+2zJ zDUJi|9n0*mM?C!+JFtVo)SjMCaFY!yknZf19!H+V4)-XVeg9E@OeXXo0)O1Ab0}-} z5fyMNv(xDp&XOW}0MzGw$cVG)*@-)F)^>KA+{K?bw0sP``J&LN?(pOFB@RV2|LLD{kdv$>NY@2Z&LwIC*tZ zLm7TB&&OLJ+-mOXeP$Lfi;Ws|a7MTQpagmo=~}*$S~D%RB3_SK*z<z-*zlV#0vFOvae-GC`Acr1bQ%9Ltwwb z#FKdryo|}CeAE5!!9t}la-Xf4rcU+rz7RhTr*YS2WDp?o-=R>B3r)U^6ZU?*^qn)s zG22Vs59Kcs18_Nc6fgfw`W&phS{0ecr-2K$b?;v!pln2 zhTMn702znZiD;5vj1<9%d@`e7vI0o;5kLAT4cNJ`z-OQM;;wMmmeT>=-L6;c zSijYZPml+->}FzYmXG5A8K;{A%a-H5BWuAfvj9Z&I83WZH7(mye zBJcj!k|u!wdCOt;?7FWC5I0`gB?e2Lu094L18Wtn7HBD{HAOdT5|0yWqCyE@%lJuLoHk?h16Y3u=tMh)_9(#}k?5ht%D-^n-utpfK zF89r}z07xDB(@fG-N z>YVJiAEdv)3sA1jaq23Ru`;?~e}kBmr~8M=lnVQS9}5qfwbVi%u!&7mW>J|$L3n`W zxEMmm+--}XRm(;kZ}$j7Y0hWQvzym z*WCG%MuW&)3A`_XU_&~8S5*u_<&$ns*L>^A?839Q>%rD_dM zXn*yFRxY*0x**1iqGDjDp&|?C zGh9VvZI?vOJH(<=f;?yY@)&0VXA|HaNBQ+=_A7u)=d{K9i+t!ghqwIX7z-MG6hjND zP?-)v#erot{s!=dDl})+oF5{2pdT@#u(DCxzi*In@Q*^XYB@BO1NcJUFE}dC5+6d1 z8)fzMr45l4gR`W_a7BIp0)o}Bav}wcVsT&FltEQ(p?OoQe&i9Bum%;|e-`&g%d!qs zYmun-N9*4H2>k~0ub)jyjZ6%j*mg8+z=e44h!H?R9d4&svZbe|gM9Q6USspFvv?vFqz^N@RSELY<%!}li+||rJWUx-RrlJFW?K8k}KA6V)q}w z0w_qho#JGLqiwd=bbhNs#t)Duo3c#?{EBO zC^!eh{k1@h!BXIC@E4z^vCS(67)1QP|DsyuD*bc)Xn0$ebeB@W{~q&6Kx{7y>*o+R zg@+li9KxFJI!1=hGC)3Zy{L!~l&)8(bP&i~jzv|g|9DW(nYPJZZ}$F%d7}pxZ|K0u-b+-~MusEQ7O+Q3;FkO>>*$7oJ_@r^GNkKgArxRO*OG%!lfq+x)9fSX+Qv^y zymF{cc$Z5>iVi~15~yH&VywJXcQP{A@!POC)_nVMBQK~V^?7zBh^iqoKvY2pDUj{I z0I$NnuUY2yz3W{0GXv&TmG^+2MHCAIsMs*6az}?Kb<+a&_lG~E_(Z8a27nJ*J-yI* zjF_kl)>)()@sHMAi3)YKB$^V0g+K0n0&!zYW3R$fMavBE%omB5?@h1&Z~|B>i7M(9tRcxw63rD}rr?Po5TubGUI40v~_oQ6D1i1v05LpFQ~HkRe!SGdniHY#57F*8X{Fj5;DeN>|GX{uV|g%MNnuK3 z*UQW!3U>T5l~C_{fcS8p+e*?EjjiyMS7OILB(i z+E@36h+^u!*%pgLEmH8i_RQ+cgs-2X0@iN5N#*`~U&4Ptyh8ubfg7&tx4hu=?@X1* z%V)`$hZW{4elqEgBF^xH*L=S6x-^Tdk^o<6gwy8c;reR})@m1TmL>4+s(HXB2+okPz&vR6k%oe4Z8+&rH|(wFPNxgWl92&9OYy~IM@2ho^~ z@@*3|2O|=enNlLJUCBb-(#=|Xd3(r<1Q<#00-kNYFYD}K6lMFw9~>tM6>zpVP2}8F zcS=znzzjd^s<&@o{0j~oZhW@G0k;l?+NUJz{FbcYw*K`s+R#e{>4e*InW8< z9P#BC=$f7>BR4Qk8hK=rQfRo~G@Qo`2QeO`z&;@F`*m;kf*g+xWXFACEOA4)(F8MH zxp>(j{5_j20Y*?D{-@g7y>bkAPDk7Xqt1pPz?J;DU49hSC1(!6W|}57`Onmjk_GiT z@$o3R_{#Wu1uIFdrE@H{KJyuz*0}!d_2zA;jRQ}aOJ9uRXbxPcl-+XK(!Nut#^Eh6 zEaP4WE{84&rzmh0TJbW^mbwmDIiY!IaY&`y2(UYv*}kOuqMQdZzKNOB7?C28q=7Fm zIo^ClpDGp zV>XgErN_<=a{`EwZ^L8FqF<;+P)lg{_+V!n_49yrp6!pxt9)5bJ=7E!G9|Q9;*AyH zeNmINAB+kg11eX>40b9McNHt-8oC^?==eby1%;gwFJUe5pU50rcIw}oVm4p7ii?1DT!E-!9S zFZDEWZ9Pf05CH!rrALk3%9F+iL~riy-YX?sI(qBl)ZF4s7^;M`dEL~>SqRs zIi^;#r@xkb#DiQ$3@!6A_W!eVU0JRIIdm_x0y1X)NG2Oh#((6TGpnDjdUN{I$8M-n zU0tc9E9&hPpo+C%Cicb>G+5tI(<#p`0l|< zR#Ld6$k^{4RJHXPL0n5W@f-oE~(@wxph?)L|)v&_VD=z#RU6Vx_5 zRNgkG#Q9NhmLKJ4C660|wZ1?l%pp&GVt&IAAHn-l{E)s%Dq}GW-4H6_v3)4Dz3l@5hGP?s3_9K zwIv1PmU#zY*AZsgd&Sh$oCVN~7t)he*by>d_G-T(Qp9OQzu-?zeqMxg&z5d7bdf!n*wnnDfE zAj41;OX`ZTj)1wTZJHDPzLxq4&i;fO-#=^rpmqX~P$l^(ey34O!TQNx)SrrL2c`z6 zs^Qxq^@5hKPYe(^dDs}C#bT1-3?sJ35Onb(Dq{iXe>F)f4SCOVaF*Xb1aO zr{UpYY0WW4zyrou4AbdFeV0-wu;-&Lnr^I|#2NwecP9U9l~Yu9IM>6b{P#1c!kWOz zvnS5q;c^h=BEcNv{Ne}PPwX@WyO8n3S>=0{@f5I)VAYPkM0%&7p~j%l?H=*q+)09J zhc_E{+ilpb6oY5hr1A*#zf>X*jQY8)$Duv{g~~hIf13|f zwzOC!!qXaIt_~oQA(5hkot!5>;MU_p&=WaLRuX&Q%P7rnScnCy#@_hJMo7>@{Yua3C@C~&_z?&Ylp$u5`YEoMk!T>Ox_e=zZH4$-Vtr`aD<1MBOYlkYoi-aYpL@ljlShaacL!81ZNgD5=*yIRo= zG747Tt=6|c{XGH92`hv44|esE6nytfaX&M;nD|P7#g4M?y-n&bI6vVeR@9$gA+^j1 zoD1)un&1sPD!x{L8yvd{2pd)63~yRPv!ZV&Rb{<|yZ@5M-_(#ri35veT;=KuLc47X z;4|A)f17eMp$NObA8pm>p~Qn~2Dq^)njvv!mtQTsnPU5Hx%r=L(BK?tn4rxWEB}RN zAm^q|YuR6&a+eFh_NcPzYI2hpfyw}e*;d5ra_1z#3%cCgM|)U#ZrvL6*z zIP0}QBkENTaSgC8V1tJLqizYcGmsPBPCri{is``nK5A4oY4eRF%wG55rP zKlj@jYe)DjWe!%dy+`RU2=y}>&Q5xVp7OW(eLzBntYdoTVd^u*8O-&ixnFd9((N0Z zvpl=ZVlU1qVBndHGTe$hte5%+n0dV1de|wXU0hIY_0mmD-nNjZ!R{}}54+MTD=0X_ z*LsStmzKX{9|1?QymBEfzMvPVEbTGXS!v@MM+xkBHPJF+)b};QGuU2HV3WaD_e~JR zq#-G<2&3dW)b{_9R`QBd^71ptkc}KyKkiYB3CLZa#PsE2=8`iSWaRW<|3tAvN|^vG zC!HOJOY!q&ae#zRRDXkY_r5@)4a~C7*CG4#Z}$awY&|D-OrIK#L|`QqJdSyJij@a? ztFT~sbl%EY|2I3B5j!npRmEpPTz1Wq)@7M**&WQ9&U<8}@()`buo|_vkaYLMxSa#< zdzf#BS=fPGarnN<`|ndhNmw{ZDxgVEbkbOfU07*+3`C@6TeGmh+SNuZ0#2a=&H^Y} z8G<@Va*^S%CLvssk7K;&n+Snzkb*+{tF)ts309JR`+aDk$KQH^Q&ul|Dn>FBixZqU z@P35iUCoy^0n6!Uq?U|aF3}Hos`uA7Q{gTY5e2@ibkb8UJWJwXm!BaXZQm@0mu=vL zW@mPz9WvMc0(Rjy8!d@Sznp^X+OP3|DVmWyU4ZT9(B58DjgJ8DfY3HfJ;{w*8Fr3~ zDM7z{y~Pp-WL-F<hGndG~Su^)dx%8hABMnqrJ;LONt|Ijdz<0%) z0E#CI<#Hg8R9w$*9KFjnC~yLgB+u^ z2Kv{#1mVcRGYflLY0FjFvk7+L#y-oe$Fl6)AUZaTlgVRBlZOI!>#U(6JNnqF1bC{; zJ?D>3_u1J3M53ybs|)p-_6DqTe-`=IoBuYn2k)!K8lxb+jU5EQNuJ?J&F^JJfr=t1 zY6>ssbtU&$^gyF}a0`Uc_m9)3;B*90Ke< zhZ!|tjcsMXY>%cUx^AiGDZWAMOvQB9u$Oxe37iZbJKyrc&|aiKEIH%Be4*9*b;ZCo z939&?gJ>fHDgw3DNE1~?5RwP(aQiDT{{DP(4`3y^(PsSD_nxW-Pi0yoF=y^uIZVLo z7$>7O!bp{~2i!aHOCkLkDv~>}*Q3T~FSi+cM}a*{zbPwbiB~-d+#sxu*!K%Pzb+rn zTyys}|6t!ff&I>nuhl7A_DR@X*khbLwb$tv&|A5IKx8(a0E+nE z|HzdghDYWzo(9%A?saaOMuBW#U)%Ymd-1nj-<5{h>2L6{s!b7d4Mdt4k*b#veZJEL zcE6x?77v!H1QmCu@({V%b#8xK4o@9B&@BK`)TEk0ZpFB3{TjPMe zOGrL_=#%R+DF!zAnv}M&ndlBQz=3B4`IIJ7nI{8prRniI0Rh!l1J8mVpb3I8=a&NO z9CPo=HB>iGXOMAi1-B2|@srZ9n*;Y-?eCrBje))4*>nWvbi2bKf(X}EH7C$=|8p^b zw?DB~9#=YI37jwa2^93eB`rZ25D}=pr*R&u{dOMU#;HQ;NF%Uz7*lCmJbp|F7Oa>1`A_(r&6IDred|ihNU68iZ2(kZ?D}1uQH8SvtnBK%jX3F)3*Laq6s^zB>UKGMv=ix3sWAhbY{kVHt`|f4 zP;Uh1rM$T3ZKPlv>aE*W67HaR4%`Lj*JZPS?i~e{!?$03{*jI?6anV=8Hv1g#xhJ2 z?0)NWyuF%)A$`F4Mg89<_R;z9Bfu+`HoeYx(p&k!zP67L&nz_;HV@X>X)J%pMB!Z? zFw#uf<0@`ZOG2>w_K|(~v2e500rqUJyW^J<{d+ecgRzb)_C_Qe+qr+;lvZCAFEMLj zwZlxQwR)x9yNCcc`_=BZ%iK(tIhYNoho`r?fO5DG^uPU*P@3t9KRCk(CAh!iZTk^a zeKB}F83;MV^b**!=AP9`%evTmUjldYACI|a z+=O|4%^Y4yD6|Qj|I2xmEH+2Iw}s37@SaAo-$&iNHdZE z_ZC|6I4O|`-Zt=(-9!=hb~c98dpQBHxOw)L?(DbuUW$Y zcHw>ps3o#Fdc(X*7=3jrv-w{R>yfHPw`l)lnUD8xA`Ctv!OxZg2QarW&Q;IFu4G+6 zyugxi7w#Q*?yxds!7Ar$*lm3rnA=pE#G5t?&ji33qI>yqEz8r(4l-lx3m3R~x`g@% za=B(+j&9*6EduA%d|vU?88ymwDDbd?xhBS+f%GAq)G0GB?-zYu%s>L0tO;LYPN$Y7 zsIG%8D1xr|fye}maWXP>B=7h5E8vrYyvH9maQ_w$oD|oK5`-n??oc4F+22?UJ<%2kuZOv~M<`~W)N)&P%WcoG$ zM+)7yweqX|hxRakr3p%gQZJ5!vlGMujRAg9CQ;-bOI zu4#*rWA;)k%W;Un5te9}xOWBYhn0#{#FQxi5WvH7?)^d+m0x=W*d!)bQj%6$D$3xQ z?Mr-eKDBpthpaxUhhOnnYVU&c`yzd`Ddf3f7=VOv!x-{=W8eA#kZ{Tm(hFbMPdNb3 z*{dV$!|wOwBKT#NuhWy_mf?gI3yI^Ej5K(5l|t21G2)MwJ?z2*)ebZEyrOw^8V&=u z9zwhgq%=j+=))Nqm0Kcr!!`{AmEr`=`4CHIJ}$tkLbY#hGUHG(VBYLu33OAoY`!73 z6TjEWVbtzrVE3t?wz)Nda<}ahkpS- z_+`||Q7#i2n*v#J!MRySc@GW=)uHu8|08YV%IgonjR<)dxu)43(cnEDoBnMeqLPFS z-nU$E-P&c!2qk#aI!?srqfKTYfM0I%#&?s6_Zisv;`*YMp#*8MaH`AH5fV;Z)>iod z2_Gt~tBxYYRsddOAw>Z5)*3|Ay(lsQn6vfoCZhQu%pm8VyqH&u!HtA$Z;k^?g3TuD1NaUc$b(q7UM- z{*L^H!$;F!!CCm-TK-!)>&|;P0d`EbrZc8GZNLew73Ghp=daqNL7d|E=_)LxpxR=*7@#$;Li_@8-fYv`tK9;|WfjXKFOQf`|Lgfc4o#k9avj zUZ)3VV!HD(debky9@z7UOc(P`-$Z)?+>m~y?SIqq_`P5>!A#9-N@gd4o$@{TTn}0# zO*Vsyh3wkpx8OzNHv@hFUu-p2ddKc)V3Whn`?22^$qeV1=;gCeUTEb{3UZ9{8}Eu) zrmn9B7?k)yzU|4{UJkPm(aUIG#1xn->`7OMZD5(vQY{H&0>v_?UhMa7rW*JZGsM@@ z-nw~#lSx_%ekh5AIt2>R`*1}q zD3$63bx!u6WHKSZx)oquMcXRsko=p5nW9iGqeRJa>-U1)lzLLGGs`n`0~p1_iOU}@ z9R2GD&Vr2gVU*oooHwwZfn&ci`}V5O8*u(R&B-Aq>sdUZ2Awc8R%`qP{VCXeQHlxL z)Hd=r0akC1jrHw6`P41|36J6S+d%tcy*EHJk;aZ+sym`p0luMw;h{yO{|4BqRBYkB^LUHNDta=*g8dDD-z#KUnUMnUY4AB- z?7}Rh5BqWYu+)%5Pb`TBxq^sms=8e&NpWCTvb*)x+mS--0c%xz2}g-)ysR!bzpGoz z3s3xhR|NH+Q=J=R8Ml2LU~G_`Q(SECR{*DN{zbBjloE=R?0|bGLOEJn+b0>+9LNMU z>;eS8DX7PI7O$p>Sb;b-U>o-}fBQQ4vv(0h1l>E1dVh_cH=MMqSSQx6cHnVv_R5;B zK0#_;RlrF!H@!4?-H#d_gD7=U8{@Ql8$mCC41JWfpREM0Z}}oqXx2+?DD2iC#EvlR;lEEq6?+s#`C%bg4bn`$$8~wp0_zxqY$u+9!u=wKoIgHN zL&KZ5(t-cmr?V-E!}~Jftyab?i9B0uzQTI5_gxRkuWTrr1J*uW+|F|^<;l+)vfSM_ ziPtA2F6J48fKw6@XJ8~B5oLJ$&&PLh{2FvJVfV_rP^d7E*<@z{^5dT+ zt!WFDZVjwt^4z|A3ezrq04p$N;wL{7vAYZ8gziPnWrDPW3|P>>)sg=jf9lTxk@cr1 zT+;D-wr;_987)tC#WVO8b~fRE9N;D>l73AfN)0LX{v}(^@UZ^b5|DYAhX_Gk5Qnyw zy5!r;<5mc`nMFp`M>+Sg?}4?y4kE>ZLVi05@Ho!P9;d5a>Q(}La-P~%>Icow0)Vj= z{V5!(4U=&P`274>uRgI~c8b7vx4)zR`~@3T<-w}#+hKTOh{yc|wQ9m_Nn4sas0Z!J zmCg2!%WRb34gRX`E}Lwbc&UIDsG)%TLc7ej3FLCQ;eF7a(toG`-c6+GT%}EpOfs;# zfpXjNRe^$F@J6&98p(h}3SOXh`WgP^pnCZdI={9ds_nbQVL5_F&LM5a$fw5<1f$_!5NHXnq)LCtqN#$ zR$Q%fjc9^V!iush9;TPRiKYgg*|Pb(!(aY9&#-oj9usx>j+6suV*Yx&Du{LDJ0Bpw z+f6y|=zLo)AU>js7|`}>BXPiiXROg zzqmT+*p0Pn*rA`KhKTl`zqlQ+>o40>+NHN-4SS^pqZ>SHdVf_CPK{UQWNk~VQwET| z{9%)l3d&9QP$|8R&>^%Gin)K_EaW&Z?r!MT1Dwef_QHFJ1venR!0)dfc4p(cXctt& z-rW)ByuQ;%AG}c_c|YYZsw*TLL|*7e4r9Ym>mTfg<^H^H5GAfAKy5<|LD!7xY2md4 zkCSTzxQRpbDuLN}9kErREUQiX|HQp1@R?UIMc}C(x9B5XR|Uj_T8@*^nw;ZGXAgYJ z-F{bW7T<~rbuZD^{!%KF{Jv7CRpQmpBQIKCt8iL<7FWM*Mf%qZX4Kb5u!PI_k`Z9Y zLK=9w{Nk7yX1BuXLznjTUVa0tgx|4=#iyw}E{40xmXqMyQ;tHPSG18h#;EjCGJNH1hN(N3j5%9-4zotv22-Ji*(@9+^{m-$0lk%eJ z={%VGkl-AXz!}9uimPXW6Ml7;=&~yjrG^C2)2GgYmMq2Jj{rN!9QS4g)R)03z@Q@a z-B*V39vB38oVZ{I1pU2SFXbU_1m&bSPk5hz=fr0k_U@PVoCNlWC3pEcl3D!(0P9?C zW7l}$nB)N%`^9g=9%|M=I;hcInd^GRt1L_~rYj3fTl81ouyD==*=U>gWe*-su0(D- zXsM-R4-K57Yjf~z96ADn^Vu&QD>Oj2cLMw}#?%JaoWfb40CTD!ayEJG|NI+>M27b# zv1{eKbZ^+REc_9SuY!;-sBGD5(rgD`8zWxeQ=atPA*)9N@4-rX7#Cw^8ImOm&H|%Y zmyC6(h6i95R7uo0jWn(w3E0RiEc`}`AuYmAOz~OilGx}k&H$X;w<%Ntap1TM#NBBm z@Pzl(wt$9R6~1WE$N27j8ALI%6Eg4C-Y=qqIv5-Fc*C3Sd=*ZDyZy`_NnZrRDF3__ zd*0h~uzCj-fCtLN@5d`4b2Qr;wX7n^&1B{~6J;ZN`Vhi8EuE_r0aM_o8wt%`! zxIts#l)E#`*P-jXytHt)YaZ&Tuaci&y*z(OQ>$7e1ZaE5l&V-{mS$_8(=^{>DdzB}z54lLH1?Zh*XXMZZdpa$oaiM~9!hXkzd zZ4A>E$J%4mfaMy-Yxvl`Su+JVp;Lxn3NkU@^9J9Q`TT9FjcfkB2=tQap}qQA)+DIX zY~6(vwmTVVfN#9ZpNUr%kP8MUw9g+Rx{o{kI)LTw?-!}2Ld4!7ut^+Ap2B2^daD5& zd7oT~Ihklmu;cZZ9oenbFaFyA`=ZJ?8)wyKPzhwH>ZVD5JSi@w2rKrDZ9Xi@C?y2! z!sBJirP7Ah?Q0zsm}~ixtx6#~e!j`2w3n-hYTCQh1)X zP}5k~-9JLHJuVHr#_kv8i9MIrz^RDJ`FZ-P68oQWBwVK-+^hH+z;V za6(=0`*Ic5d1Fxf&bvwfg$dQm)WH6dDNgt)hZSQEZULH4y^skbG%}1*F|w?`vU)8i z3QkI<&z|pDC-zBzht>DxKFnyicbJ2c^-A0<*I6Dob&KfD`KreCiXNz3YN7~En)};^ zeT!W${dr>%eTg=#Cf(CducN+JR^XSN!l_vFqb=+kcq`#N%9u89uQ>r{AWka&viLkO z@cxKF`lzRw!z*Csvonz5ZCe$8W8j&uRgF^u9TepO+&kUG)nZiJ&3}O9M)8vGXKsH8 z4eb87owT1l^j8+(yqI8TwMNt>0jf1lpCDxoatjNnC}L(cL4G#pvNzzJ8|Tbt{V_xg zR?%Ezl5n0^ejW|>P2AV9Xn*0*D1bd;5p-1E^qG8IfOSRx!V)z^_ZfkeihHo{)BG$q z2JCsM(dnyKmG#Ns1S>l%>+EkQFb?=K%B5o$PwKbs1AEphYa@rcjY#+@=x$cbc;n;? z_#?km`Ld_DWsyPjq&*L+w}C5AaMItyc!P6YQP~?%W&IjHODl#}1v9QFbx&g3gl7AI zj7=?X6f;JXUckGF0;A8t;SVc7fXDfja@GvXYYO2UK(7t9FdmksDL~GAioi5jRp1RD zpeQ=b?!?$rXnX*AJIJ8+%O3t77Us;0_>GqJd1x580W1jr@9E<-jy*W##KZ8#x{WV2 zfKzt**cAz=99bziM;=3{c=4^+3o*AK+Ph$QPKvxzntYODT;67 z!#+Ox+I^2qV*X2lwK@x(vKxAzN@u3Fy{_%3a>s-W883KP8 z~z4AuO*u=BC~++_P>oT8{=Pi zjRBjyq^%tX{JrxpfJi^SC0jjh!>IwQkz)Ky@?4+xB#?1^le^*C^%H&+SkGT>SUu2n zt`)$ZyPYFPf}y4oDz|uRcIk22X04R_JL3b2kAORtWk zcdN3%FFd{eM>u=gJTwq5bZXc6l9$oH06g=rM;escSUu{1#adlmpo$YjRtqpTXPNfn z+WH5BRl8_T96jr>Z3g?wb+1)E!=z4z1MInG36I9hqH#i~i?{^F@D&ZplYrG3>8Pi_ z>y}yAo5q~eMTKpoIk0!BT%zbBf zR2ISE?XYT=yvaq8{+CNh( z3>Tfjx?K6|Sllnvh!*U^G-1C-BYNNVfv3wfRrLjn*b5V2o#6?oYhM!DxWKN|cuW@q z<>h99^F-ozHL*FeYXn%ya2Jh+`&(omDu+*1#rpOcZ4bOj7he(cTfR9@!)Za}iH7b? z$~o}@PZb}yEVPQY%Ngv}X)SSSzxrvw`3vdI3J5B{lS~J!zNf@d5fZ|Xp>AH))_>%1 zO*=IM9>;$t99kAJ^+~`D(J!liA&Jf2pa9nQ>@M#av&ls|L2QMY!EPVcV{ST#7RRf! zVaPguUhRkM|*=3TU1c0amtI%EO4jP#whKzbP>Q)>l^n z9y-{sWia5&SpD^VP;ccvKft{)pJXJqy76xg&5zS}~UGn_&tMadjv;wOk_fU(adT%lUW$QJ|g z(Rhn)r)1ZXKOkPHyFYq3GX7Hekk>gq?GQa*a1nTBOu*Kx+Eg~Afwiw9`PQtSOU)6^ z5=sp(+K)8m;XQjk6uyDDJ4zJbnGs%+UPUOp9H<$hp4t8rIm%K$0CNVN_tdrDUgHKV zmUsyq&CR}scHo(RMN=rcMr1AqSP63>AwowUOWjuuKbu7rMT$}!N8t?wY z063+067e7sNt6v?_X@EYpT$L9z5!0zSxnpOFl$qo0W+VFlRBmODhQ~xYd5cSucw!V zLrn=&?mP6;k`b+d^GionkE%g7qY>c1QoE?6Q?v)m0?et=@KZLwJhEYzUuQ}Iv0F>o z`rxT(Oh=JxzrEc9r|f99doZ@2E5-mf2Bu?$ozMzY10F~1gX13VWPg2uO-|+8FYoRZ zRbPM`n_=R|-#?!nSR+@U7+2T*C(wP^oiu*M$3?$d0HZ~;bue3(CffZk zm3I)QF#6)CJe_&S2C$AqPMnQWda%E6`qkUokp06Gv6geCct4R~2Ez=vk*o$i@W2~|-8(&0lkbfJ z_J;q(w!|}CIP(JE6$OX*v%%*tJOWR3sVp6RsV+MWfRkOXblr}W(=P^|{rl<6bd+(~ zPr-ePs88`0Ojnt#;C+d(4Y+}vg%SfdaW*z7t}_-67r-g5uQ?}ZQAFDgWSDkTO+wx)=A7;F5LN_r9c&;zXNeC1K{PE8UTSlw`lPmtTD zetTf8Mt)npavbf~1@MYx(2FVw`QldKolQrp5GxLs8#0*$yPCh{dK^ZF_s*+s@G0)T zGZoHPEpIl>W<<|)nyyd2`C2mL;kQ}ChxoY7_6U^Rw{g{)~m)@aQmN&h|DO8 zQGaQuJ&O`-NPL|;R{=L8Co-i-)4drVumS;fM<>Et>4CiuJgfZ9_MHkn2F^k+*{u^d z{76B?r@$RjS`IzSU;%T(-c5Kb(-6oXunV;(1e+M-$M1U2tpYz8CTU&>iR;Hoo-+D^Ype%_+R?GNmcBV@B1 zV(cKpTb_^d#hUeuv}XmMp3@{{=QqQ+9x}JytE)Ql-vCtq&i?zcl@~M97{m>X*n+0{ zu*NY1drsq`{JFfEKd^I6jEv9A*vo>#;0=Dny2u{$ z*Lw}HNy41p`RB1PKLqHFp8Z(cp@Ux=Ktl0vkrdkg87Ayq!tmid1Lcqf5qvuEZbFsO zl&-L*Xj)?4acQwX7!VPBnL^*`aTBlyAR*QDjuc0&w881^vzDepEnZ5LS#bAftN%l| zys81lCepy8Pa&~8)EOJIdIuvf2x~#COOONt->ibCc?_85@%*xf=_W&otyOjp5q62SUP=6)t7S7 z83jnlMsldGf$YXm^|YF;ges(Y>RWJrk+lCB{;Ti<*hhb?hP;>Ue4DQD#cm}7q5C;e3~j?yj5$-NHG!SQ>vbI8N_8~x2kQzxI6}vpEx!bCH}MwnM8YNR zYeTiw9b zo%P>r9p{HWbfzXH*dqk(x#k<8xB&Z)ydB}`D=OG`0Q)p;T4m6s2%0yrNnZHenjrmt zsSkcR`=}X5o~z8le9k5*0`qj|-o;RD=ECz5%%a&!fDHJyy%zd)T8;_)U^=&HrOW)+ zg&B-r-jOody(;U0>h5hg;aTw0lOCMz$b4(xnIy=E1>fDnq-#eHIYwA9cwsUb5ZyhQ zu$O1T?7A=N$tZ9*qgg9a!95*wg7s$RTco{ndT8?mH#NDLw;k4YCV>FXAlfl?u3NdN zI(X)W*e@@lRmA%De_tt)-vhx=3^)rH*~en0y*mz0+oT$!ejK*LGX${uC$-tLU<84Y zKyHN3^i>RPG%?0s2&@ED-Cru(Spx4N^h zz}mm4nGf~*j#wNpsMoam2x5@b5QCh#6z%Ub#Km@1fTwH38^!DQd+ZYsFE|ldMoKIP z83I)V1xwmaanvmlWb&O==!%z}*B%bmiemLE5aOdWJMhc3tGzXqpx3{k7Zz;D0FZy>Um;rg4{p4{`JI_TP_B6hgj2~2un4b5~4H|b8 zz!^l=r~VS@p}gQE)(?-M{>w%2JAfKiU*Y)Mgn=nDz&FQjvh4ndN!Bmdo8nxWMX0^(}q+ z#>oH8A&R<(YOI3Q=N{^u{E=DAg za1>T7{BVr=rj|6o+ce9Wm~35VrhuKrNQY%QJ2gRxg7b@dTXmTR9w;*Kp(zYLtVV5_Ed%FwI~e!3#(ny7flsl@zmp(g z5l?XduRhB1%bBT==@js~@wvnaD;Qqff#3i8rez`byq%C0d`!?Z;dikM`>e|Z>ydWI%p4!y(pFG7H)5*2*^hPm^l7Z5wwU#UVd z&EYE>e2PSp{70uIY(zlLynpfC0!@E@f4Eg%~u+fVH@9Py-sGlYh#&BMF;wF0h zbx+r`0O!x_-;d(96NxrhMI()konR~*VZb&jLLVQc5b`Ym$j^Pw_DjfNKU5$h_=Nj) z_&w#W1=P^6`_=JQzx~%)oQ3N5`+m~WBjGft4t>6_D@wBg&Re9+$vf(=`luQ7>@kJ^ zKH`E{z&lsjlr&pL(tP{SL7pb)J9%IYyz>mutw=eZE2Ni+jSLJX9*4zreHC)1d71 zi)_A7%h4LTnGPDk;Ni59Q?Q*3^YOx)smq$skob#MUGPo+4ag0V_(g4 zBSAfis^bprCl{+b1I{l_)gM`ue!|-Ve!&uc%W%%dnL-^%c3a*mRK+IPuTS`AL- zmwpt}hxSu-MShcDxQCbQdW|(C&@w(tM zro98=g>)hH$NpHk)Pp!w|C)6b@ej)PU>78oP=L_d_fes)T9z;SMR6K&gOzk%%Bz~& zMlTUi>w-1?%cKRlykg)(<-qrov=aqYhP@u_?|GV03UxT;b4qH;OTR4kg;lH%f`9(} zu`)O+_^!C{{g!ba$*5n*8MH!F`0e}s00t%5{#Raf-v0fMq^sC=6bPcfgv%0#kl?<< z-Gk-p=XKAS#Vm4?2i+yN>{bMFUzcOy`1jAUzeVsyuiL?w%k8fV`m$*=0@GwmAq;^< zQq57#vg7putE2vIaI4s#L#WtZg7?+p)*uh{sgN)5?1^}mF-B661ixD-=)!zxt&)Qg z+R27gDx2x@3!tyBD|R^&(l>%H@||B0hy8#jQ=C&ZoV1JT4l1R1JeZd9&&RhZ}j zR9}96d53iQ`5M4k9U@uZrMmy>7-U^E#wPL4n8p{}@tW1YBN?@>%OG-FUXlG8**D)( zzz@=;wDgDRHyZ_a>AKyZo08~YC!BcA^Z8iE>ND~nm+Qm<^6_EvCL~g)bl6L$ycXO1bMI-&MiKuRlV8RkwhSqj-{5EV*cX# z09K`8!aqE;>rWTL>9hA?_sypl`T*FCZe(i4I3FERo`lT-rdQS z2Inm8EJDY)TAU*6pyST);AFeZAm&f;BQd>=~T7^?@)He$|yv3Cn zXqlBsonmt%e!#7!GWSC1fT1<)2iXg0M`)#YYH*Ofzo!Wry2JT0^Vcrlxgy3GgM2}$=QO@Uq0$DbvWgI zfnPpXW4&}@F0>8&a{G|N`#2gihW&(&X+`NJ{pJnEDJa8r{YA~{0ef6COZ>Q$QLh=~ zC=(;`N(?^t{xBE7NKfkg>FfDtE&-mTktkf_SXVcQuP&nqL8kv!9FPkt%T9A}Iz3Cc zBXUB-h!$kti+MPk=5f!o{N57Pf;Ykm8~uaBLHZux?glI>W#{hB00S1OG}Tei^tc%q z@XWeC=^@|rZY+WPb7x5*;3v%f0PEkUOlyPzt)+^LgD7>1(S>~_t1-h(G>!i4sX?Zz z6K-aiKXce?RJA83%zhk%D$m#Sn6josvJ{f4;6qb*X%>QtpCiwN zg#s4o%&2*c31Z$Sa8}QD(`SOa2_M5P%za%v-!kxz9DI78N_UK3)haF6_eDy3KdRA{ zR1lkyR>*hd`{k1$&ycoMXPmEF3<+?9`Akb5icGE!nOlgj>DYm`E_V(qQ)#!!m+Pqx zoR*z7N;35X@6Q>auZ+L9uX2<`P1_JLvhjG$t&q+@7qHsFTTAIoiE5=InpOTPq5el?uabkgC@KEZj~cIGVjqf4Obo($pA6zpOZG!zemhW z4{qGE8z~zman>X7%R#E_XyKjO&2Ilfkmtv_hn{CwbXYQolXdSebB zvaPae)dvUynGD`N$!A}H#mq{2b_^Rvp z3V>{US3M$#;N0v2pxo2qO#R^AWNO2R&!V50!1GSGf!CnIc*oWc^CyPDPL9qTPk)$e zc2}TfmRCk|tkA|r!>RLDA6KST3s`TZ;f`T5^R>Id4U#Q(=N`A3 z44kv3-4FHkvMT4HT$$N-eVN*MBrtoK8M<_NgzCOvUi5V*F?Ji-??6EA>kn2t?_^-# zp$Yp`&8vuV%Q%`H?jor|%`Ar~LmnWL+m*bk>Seq+*thu#`=8|qUyR1U8@bJ9pPI&8 z9PIaASVVt3%q>tG+(Lw(N}g-C@W3gOc`bjhx63#h?7VH2=4K03Mnv?2__^VF;wPN~qbX7Sf<<^AQy9@K1{ATEvZ z3o3y5%@Bx^q2_CXIjEO>UZyBL*9$}n*C0q9Rb7Y+XQNfVtb+60xTeX39zs3G5V!MA}0zkPrdG9CBAyyCdcRjLT!v%-; zOn_ARzhIpcG^WQ?kdp~NRh`rA*dz$tv}EzMN?m%{H9CP>m&Udw@VN@=N+H=!Q zazj+_g@?6~eR44!+>etjbe<4s8Ll9Q%(7lP?NtoODXOav8X8=Xjp}V)-{y_=YKbhDuc98Q#IpB?W%fUt;Asf*C{rBk>z4BaH z#9IN+tRQ6Ib=K<3D)0;BAO2(gCe>mO+#sQyfw!45&7vKA-!CKDLK1&CV4tJ=_ha1V z+i+hX?Q!-f?KFl4twDzNHx^Q5XlwHduo;(hI{z*%*FC^@Tc>>~ef6%10zC7ui*_fJ zhoO@&6KJYVHn6Rq65yO?XV!^&z3X8DSr-A_Mxm98kWWTqcZfK%d}#-{@S&v^q%#0;Fyz)OmVF;{%Ac{`6O+ zUr7GJ_|*XV>s&XpEaA*Wv@a*jk!333#aiBQT#q#O?WklT+@$Jk;8;uly3H<>aNRjlA)K-SdP zb64kuKd^OzbAE6vJak=VHn?><@m$Yq$V#K(GwU`!_P^sa9~iZ*B68NADTF}#npF^8!*WIm+wQJ1Oy3x-JnA5=$Z24!Ch20R@$HNqNYGL^#Jqj_Jv zg-8_pUI6b)4n?Dr8WL%+^9R2q6y0B+=LhR40roO|OTXLH29mR1%3udd%2&+=C3c!j zai7mvg#FJpR(&m3auT@bQG9tpV6ks2^g%>WDrkEZ>bkWkxP4Y{*_3{HWDEJt9PJ>s zNYJzkGPNew=$MO`jtaF@uGsY}dI4HCNVYNT*K}Vuz;$DF8oujQ)476Q{=U#|p*htld4Qj}FZN-* z2)9Exq2S)JaoGa4TySINb6NS-=tjxF3Q>Bl+n#eTrOSae^JRUR-Bx&$Hh3!3%&ZS* zVDB{mCrQ@?J`tVr>?}AdWf^F}9cZtEoG`}6<|fx_3W)_0i7%1;q91|&gSAE6HRR&wkJaRWDgfdp1(p0ch7QgEqUU^Lm7At2waGwd3l8v$`w^@uVH@NMw$` zYlnNLRBYwCvqrQ*ft&-HL_BKH6+P@{&@|2_>E2tk0QiNV55IGn#=iqHTkigdIA^9* z(Fr$6;X<)&^E?tHi1%%F)9X9oxD8rSB}q_Z#y7;Ff&NbYFH3hJ_&jh2=)uP%M=hKY zl)%IGE;s3a!Abfoz;1M@p-~?^y%7%})oM}S)*%!4dxbo5@qUEH>lZvRtPcNq6dF0Z zQ-u4hgEXDw%18eqJb+{QR_dIRyWQ6toTPk}+73Gcm9w$6!n#26&PmjKEmk^25jPcFP zRklGj%`>{!I7E9Kz^=|Cbng?7?>n4;)M?95FS3SbQV7sjSU>9d(Sm?}0n{hq3~SI* zN5pW_CnGWbx;{gO!70ugm4w~+3~Xb<*?;6xDpQ;f7w*PV7iVKQMA=Qq8IqNO-Cro1 zDK+p`EOYz}ogF;~Zk?WDJeN1ZT~XLc9=AC2<&Xda6q<0HHxm<}M z4)Pylh`mW-wU8{)1K@x2;7w=66+Y@4_=RFdjL1Le?1r^eZcnq>Qb)HzA^S>+MQf&TD-5_!~#Fuz~=nHEn=$QUCy$=@{3bG{(%Uy`^Lc21>9?# zjWsBBs44wmymIxSS-t?M-gTtP``&+|BtXU(N3Y{Xj9c*wv(uzfcUG2_5u9gt@<6S! zw`%pUmkE{KcHsP2*jVt)kBJVLwFi}b0KcFyRbTN^9kn@}-(QDRv-D#G=qtLqoAb*-0_Zd%tlqrh29ha+)+kJ`Tj2H*YcHX@ux7{Fd)%`6t< zIRyEA!%sc=vp4I9_rE|k!eW{e%`|x=2hZFnyZ+jk>vyH#B$+=e(3mn=M9?B-nkufJ z5VbJ4k0AM-cfgmpVUi%TeN20`M6B3Q6{rA;29YarWJlr(vUzM;yqwu7v#bMJCgUIU zATX;gMexg?&%<&wSKwLzZb9;XDX%VDd+OkR8$GUSYiCUt1E`=#|I7>P|86V+rxB8G z{xZ#On&1{!doxd4BydznfYh~|lg#ZmQV|-Q#@+ThFNSOEYrs2)O=TV%eV-EKMx*sZ zG2VD5ohqz7y~2B{*m68fU_qgsd0>%fqq}y76$1K5#K7&b_7T0s0cx z`Y@i3Sw9@enl?=o#%o2Xk_3FWlLY3kY{JhD*<~$N$zJ{+_8i+6v~|QMW50R-vVi`& z1TV19RcjCAk>lPwEe;Ypm<71~!ZmOzqNXE<+v|dZJ%9TCO7R-#Q6+5sp)4KiYj8JK zKg3m1U>k7sfAQd&@88tDBMIiO*jCh2&MDeM0KG2T%OBR)>5ltm+6R|R(p zRCXN?^zllb06bN1iLJ=q!Sqc5t_x-7r^Z>WoH3kRWRuKReRtx zFvc)#?LzPRfwPvOM+=SqMSm^GBdLR2wq89wUlC}EQ-;*|`F`%#11j2`mlY9_CuzC^ z{SC@NHWJ;G5y-cR%2L~a{Z0Bm1Dx}A3D`FdX?utMcMWqtM~b--zM#r;_dnvCjDEa1 zfUbMxPoF2tOcD?1KAT?#LyX^vaey9)bM;0Eo@tFeSwsZewiPx!oE1 z3Rs{E2-3&V6y8G!`PWy(ca!O(^^+XU;66>W9u0L1F61D=8(~3wJu%Wq zZ4Y~FUc_bcL=rC{kmuoh*1h1i21&u_7>NmI8Y-RTA-nqrp^p7g#!LV{^zH7`zSlD@ z3m~uZ_lIy^JBFKs-S0G21)S@!)^`GWM6PZA*;B;nW8h&=o(ZN`ON<%ZkMkQHTAI7B zm&2`y3tG0>>n(@n3t$z&O}?y$vs$!b}6iYN7-Nx zYRH@>uWPDqmG8n1=kJpLlqV-=&TaljB0F0exUa(bh2^1KJq){JyW!+1-S0ny2#CIb zy9=?m|ND*IkHvwPq%>t9?BY2V$iVOW)>2i%_-Ua9j>F#zH_OdvaJZ#6_X;(hC@+FN zuB3)He?bwi|00;@*SM+6c{>{^aLybvl_sHWO!{1Gx(PWS4fA zIT;lA1)byg&5o3nggeJ0521!5qm#A-H<;rKH#vlSyDj9*Wb80&Qf3i0klSqIcg7kw zF%TQT3(eE4!VDf0x@jH>UJ8Ifj8Yw)Sg;qsdQ zNJ0z&j-B#EJkm5fZv*IWp1r>H5I39%=QTuTCI#_`vv zIlW_0Az~@D%IAmo%mPH3S4QK^hFZl9d2AY4aedXu&^`y=+0^`_F|FS!Pyi#%F+~V| zC_lmk`zKE`97|5tn3oFg_d|E=UOL2z{6DLs|0#mQ!ko-eKLi`AznM7TzT<59%7)fy zD-C;V{SCpjWa&R0up0@LxrUjd#U#QCkw6qrt?#3bf?wvAy+ds)^7IZ!`=Ypgr(4|A z(7@vaHm7^7|8dM4WH4mLF6w4=9IgcKn`>jux}S*GI>;upD)G{0(eHutWy-Uc1#fZX z0=MT7Xh80wS15c4{%%&i09`<$zq6-Huv{&`cOCZ43X7t&Oah*{5cEL&zH+T}fTyEd zJW%L>TqXx*nX-VbiLiGB$YJ$kqeS+Gwx|n`DWc^!eX)pgF+bo_@N@nHx!L%BP{;zR zCbEMPPb2+c-`9EEM!UDy1gE0RSMN+8E{w1kAelYn%ukH8uf+u3d5$=1z>~MALWwmV z{i2O;9|aMJ=&v9Y{QN`Sz74#_?Ruy==#>yh**V$rKmu>X2tO=H)LJV#fcmVNckH3Rh4Kv|g2_RTvGjOAa|^85 zi;++Xja>W-Yv*qA#2GA5^ zozM67D!fJje&NP)F8cCFMzr80X)-JRjP9dw4?tgnajKMQNtF!eaBrWI^Ss(#`5SUO z*iYh+zRJH1fJV4%)=QiFwgnHcciGH}ZVB;}P{1M)WMZOcbf8KGVht^44LS=Nc|u_p zBD0(@cG+^tfezNHQ_J+JHXPhJ9w+LnQIqHPe*Zh1OHxn` zlz7OSUH=#!xPAHdw;vX3=nZ=VTqGQ}loVC>1kqxDvC&9IT2k5oA*(y@2cOr)(gcv_ zlF9Cu=CO%{g6P$F|IqMTH-PK0@=9LhiuQc?J#MWh%1(1Lv3WIy+7a>J73c-oHz(#3XS{ z;8W1~ECw~c+ZImB2TNuJ=hF8loDyP~!zP$iBMit!VvVv$a(4Hf1=u$-BZP4A?0mgJ z%r1dw*e$EiTmy+sYsVivZhM3jV1|g$uaz+Ebbxc^2&Hb{&i@5y9YdSb<&5xNxzPmp z$~HCkTUfL9W*-=rDegB*{=&E$+DW2AIpR_6(|yAm{Jr|F=?mI{O!#ciW70pw?a}?)eV59QS_7JrOIX~7-`l)(8tQN2`$J{DG{|Oer{86y?IuzxnB7YM zJdSn-BL}_J)AF*7zr4_8ft~!*FkDhnu`3X8Rsm`K1u&X*3>0L?YDSWy&45N>Ha?57 znG=7uEMMUES4=-<>MDB^0T$_<#{9>?aMU1x{+8lfzgX02q6hfF%@J1S)8we(0_*K! z4PTLIR+j|$6g>`Fl}{o~8W6L4;~gDFzza(TeD@Wj(e~8uT(p2pnqFJ4!<{=V0W<|I zt1VbDO$uN)ON2{-8q$c9DF89{+?SPjipu5-MAr52JA5DaYBGX5BT)0$SKPK2IEP!= z2jk_u?&&hXlT)A#VT<^rhrn~r=k$CqOdK@0UFEQ){ryoKHUu~}E&i@Yl43RZ0eq#d z=y{9SOYh(ox#<%Z!u!$;1nx2@i#wSn%}MwjoMdPnj)HorZX0lS(&^+;m+%*o!M@Gl zEt6*K3NqX!q%>2X<&X6DADnyY9}mMtml!mV>Gfleu%**t7y+CH*G=u12Xz%gPShnu z<`9n*L5^UL&4h6@Eg01B0=b~5&Kb4eU*xWV@5V+uYt#4TU@@%kH_X;%VPzI7Qx(@f z=H=Q(VhE&tJJsJ`;6^1O0=b310Z!hvmmmtr_Ef3x?!F{{xf!_M(o=@Mms#XkAxHPN z{UMjt8!yPwJ*%^~yD#i_!8lanm=cMfd+lg|pHqXHh+CWHFWiggR|fks-~8#p$tJDK zg3!Fu9&WY2A@h^ z2I9Nd=jp&rQhA}{{)eGm$WO>WQJA}w+J_Uc8)JlR!=t5C8363PwtvpLdLfg+fwLlZ zk&f*l5LH;Wiu)kU5Ukz#708D0`sROE>M2$X@<_W;-1;m97h(RN94D*iFZPW28&19` z%p;~u#a=i>s=={lYazGt7vNatGv6bhC)$e#aSF0j)NDLW6h6R*icX2D7sd0D3;gdC zoE_~7Q(Aq&Sv4P$?vKio2e==06zY~mjA{}~pk+qQadmYp`+`hsT`@4GAVUv#1_kgH(#h4aPTOELm)#k-6#Qqf8@7|^oB z^uFR7Qwlo)KD1{md{%o;Iytz>kwU6dOozOMF)SePUGPnlW+)poaS!3sRUx9jmCN8zZV29g9ne45zYd)R?kQ|i=*>7X;2n89R-u_~Y z@yCp87+Ig5j#RC;x+|PnM!G8ge)E^VVc_;nOI~diktT5jIJU3m9K%mR<$B=RTV+t0IOVE_eoCdDo+YTKr!nkkVk)of*j@_UKDlJglI` z*+bDbmb?1Gz~8FTJx>j1g3NcDRl zbJM9O$hy2NE`D>f-CU3rr1;oAvtcZOz97f1qh6>|a@%hQmXJ*IWlAq?Vs8-P@(0s9 z=j-S<0`%4{&aycL`;FcRh!&TV4SF(RcTWTo%j%t^E*Kl)6VS3O*`MWX(dpZPv$~TC zRj9lCIXJjMxM+C8?L}#27#lpBi4reUO)_JYVuzmxnD~LbiY^Lm2g&p1EtZQ*ttbd^$h@Mt^ zjU97h?ymweWA4$LR`Gg1HwqcrH8tlmb>es)^te72SADk9@Bterm016PynA4si#7;yVK{aJadUWD=sPUB)YOu}#c+IApUd{~n2vuaEm2N40$ zBS{|7#;n!goR{Xy<7B;$+<#lQ&D8c2e!mR%do!hnEm>MowFJ49R7~#-oNC`9@F~Ax zkAo&4v;Up9e4U(zNRDeqLKgiNYZ8}T&OaOiqL?!GkZt)2E}ReLM;j3}UzuaL9hj6H z)a@(g<8+V{wIBjtC-!5XVJ@gVPgOhHwuJRx#c#c{3=C?9^Hzx$(-YfLzfc91uzjj8 z*UW#$1o9zMQ@R@)m2?H1#){DGjb?w&OpJl$cLbHFTU4J0h>(9jC8xB9Xid1WE89_Q zccy(ZR3|*7uQcR#Le)Iuh=Dp*387 z9?GLvnD_n|mq}F`GY2vFZpEQd|M2tMr(i{Uot$6N9OGrdo-waEy8Y2gtOfeZ7ppRC z(&&G45Ve)ab6SKi^~@Wb)t@tx!!P@eIcR~yhPJBwlr&IE2D>?qF>{S>wQcZJ4ubjI z?L5nn0bNKL0w>?>M3HcJ1NIt+qq9p(O=0)W_{Q9J(fAnlIkbSAK7Hkhawx=*|4z)P0S)W80o6zx{<%Ww1jhlh&w8@>T@(?0UI zs!{~Q1AzHu)1a(A*hK#YbLMiOo0VnmqXm(w60wpXZtVcsD#9JBCEG7p-2@WbopF5} zyIW!~yR}a)Pv7g5-LP}sTO#~=vETmB>H^)5TWM`;yO#{0N5j{^b*+by1UK)BE zNT^sR-1&kDZ-!tpaiUz{L+P_f9r-QEUJl-<`HAMXvPMq&;EfIf=gk)_+yd;QxW3D7 zTBt<{2FNmXsib(`XYwS-;T$bzSrFb_Z6f4SM&b)s2ei>Dkb|;_%lM#y>Nq-hU+Mm$ zRkIy0vIOXQ>iw=(%iZ!&xChXBsJ?P5#i-!?QR_HAJmWq%oB<3^_b(pE?%aMrZsd5h z(e6EYE?+>8m@3`2*|km*_HGS)t_@df`XdEy;TmKub4omM4)EQ({O+sW>17?myh_5X zSQYu$c!PS1BW~AV4A#}djriS4- zk`8oaqk%6Qlo1)#;*D(tkV&1%Y-9FU!kr)kVIuVT#!UTG12jUfWAnrDvrlsn5uAB0 zeV=ZOkQ1CnuFHpr-u15+fu=CRV~m8%O40yg4cV?qWAL-*136*TlnXQ~DKQ*Q3S@7F z{4)jQ_JSK>&V!E;8cE zH*_<8Q>FBP-S`Z+Qq_gOUeG%S=$gf$T}hPZh=ScgacKOVIaGG*H zmBcdrb&)&pMv~Gg&9^Ndnst@u{nRo+xv+VP3dd)v>zO98dBzzOwD&>r*Mjd`%nX(?Lz8#AXk5`ZkRIc$=WZV z`%9^82XD4b;D9&=@!*OQztCvL=!&vMsdn2au|NUn5QK_MkT) z%fyW{;)KR)6Mt})XVPAj;vcamf>=XB6bJ7!nYa=Xyuq&)9MS%`Fy z!R&hcyxOH2>7Xv?3-xJ!d@iv7Upd9ir)r^*r3?2>%(ETzXJW0e*F_*54Sfe)jq|`h zt6`^8WK)Vt3Zk~`_i%QsSl%81nZz+Y&af}3xelm3@y9sGO1zA713cZwePM)iCeNh< zyn!!ID_F>93=z274nM2-H#Dc1gWOl&2CngkWcJm7>^iIb$u2uoNFQWeKXGa9O(4*8 zxvl?{G1(;efOsbP=6`!lFCm z2iE(|H$NlhPmoWhsiphlyfpuqLH3e7K3yWLt&gT~rp8)kf{JjqI>GI0PsVX4E4euZ zB$T;vo9rN zZMuf(d=E*SH3h7QiGFt6$N0M#;6rWPpNgs9OM(aX>J{xf?gnpc-hd9G?r&4%&$dx0 zh@DZ6UW#6?eO3ecjl-jKxBghUbOLKOn=XYM3WJy@@a*9cRcL|cJ-Pur`O|ai#F?2q z10Xr^_0c%$dn0lV^H;Mn*W|CMC>7)iF3O%ZwQo_bgIE;BU9R|Y_5y1nj6yv+fw*51 z?rB|z1lU|FIbg5&Vd(xJpb(GS1@_8I-c_zXKC6C#EH^ruNZ#<@fb zc%y1=hLzK%v3&!}5VVOr33*{Yu#2WIY4QBpf1xuAcW{T;kr+y18wuQS6fiFGwtNHe zVTA}a3!&~mSjhwH{bv4f%H4*4;R&$q{n8Y9_$?_3)^JnoP&K>8z6}HC+UzB=Qes>> z72x(*swTh|BC zpnkzKV+zk)fAM`HhLFwg>2|BNlZba=y_@<_bQHK2^8)9bdbjy()K?MT;Jeu-aKH7w z-;4~bnfn(*rpT7oQV4PswXF?PyoB%71XA=8Cv71ZlE zH=2F{pJMMD*>YGyITEl}?~lQ*FS^0I6GSoOx7O?DM7U4^f46EVxsQAiWmU-9)TqQz zUFdkjIleC~FZNfE#rgz@qNcEKv`&>W!I=vT9mluUK55$m1l2qa=M$MCH*ivbpuG7V zrVkgf;GCOlyHP%kx6XxIid2lOL~;76G~^74tb9Fcg_=cx%}|FMAJGL{xxoFdKiun> zJP;As2c`FJ${3&Z?ah!GzQbxY@pSxi18ar^sCQeBG}CYfL9@Aw5NsjdA^XbSZ_%p% z1V!W^pG^CTA}h+7Ne54*o%)^bo^^8?$P!=d>R;uV{iy)lZkDEqfVJHHO5u)I%ug^iyqO&a0onNPyzr@HjJQ)nHcnb4afIYQ!U(h*y?6dz zc;C2wASa_JgKxC7^^@R4RUs+kC=(i!m>`;%DC27?g}}8c@RC}(?mx@H=|4vSY>tCc zMau*q*#?;Kms`Jwsp|NNU}ntui&V@%4A`=eH~t6`Ju}TL{DRJqm?6PVwqHj%;Eg^C zQ74MkhP4gig|<P$tx}E%HprrH#SE@J2=gHtfOCYz zCiVq=5Xy(vEKsfUc;QZ@0;|HL+kn@~BmQwjifwVw!!Y=6MWYu za!fAU>}*dES-V5MOl9@j`V(LkuIc4xP#%_qvv{Zw83PaF59?KBIU}^+ZBVC!51nRAzwpDY5td(l)=x8k2ilfX{0itBDW?>~75G_)nnXbI#c^uOS{ znC$*JdiVDsDR949$(y*xGr#u?bYYs}S1h>Ns<^Q4YqVb@@xqabgnI$5A>ed&q`MpL z5H#nLx((xdLIy&Nvk=DEYJTv5ZTHPNOVQ&Zc?;zE35SXljEkpV2Wnod5(e49Ew5Mw z_9|2{`g0FCr8W>Fd6+5P)!0bTmnp>(2k#+bTn3;KCvf6p`Z@c>fE?r26GCc>dFsG! z((}D~d;BY26$P+2`Kt;B#W9S5Gx*=9qS)I+3JM3(uE{2axJ+Z+6VT8g&oKI(U3C@# z^!50B&-lKUdXUFef10oos>7ErxXID03hT#(F=ha-L8l7W;M`THA;6O(hvRCMGG7PI zhLglvvFmDF)(R{`o*}EQ=#t9LFxDXTJiLu(s9K1x8txDM?k}NW;ok7jl%2tAyh;JT ztlojlN=>$Yb#Ri@^QV%$D+~2tK{Q(s2FbB%x6ho`{}|(kQ>=~zB}CgdTt!p zSadmA;dP%s`VBdpuY>etlp;JG=sp{{VLjz4e~zG9dNEYjJ$t5eC(JRL(~tUL=UEi6 z`@NO;i^TNck^n~1(Y0C|%0N)Kb*tIs^!`Q-UG*>?wEkonn@8GSfUU#GAY{fOwEY2O zsF1(l^@CS`!9ScU2erU7GQ49~U~PgNgqvZ)CQ5;)6M6FIiB##PFvn<~*XsS*phWfH zd^e6qHYXULK!)Am9^)?v|A%vMaKAs^)oYfF5q1V%(ozZBoTg6|!~ItF`sdBgAgPBN zShK&&MwP$t8RfnJKezN6J1!lz3hXDWKT&rvuG%;?U|{e9qg5{5bNvnGy%FoS^v>?1 z3No}Kxsn;gyZgYN{5z@(s}BdG$w5ZWBgT?4o#U7jAa&c{eeF8hZGY$&V8XTf`TKd< zqX*FD7}kFfSgG540>8YzNIz5pxA{R7bgVY@p-)K)7$B3@uN+K@>WlXPKGjwFk=Er3 zY8h0Bgf;Jkr&-DS05;Yulggsszf^=>tnCp*Yb%&<9rgs0(pR^OOLW-<^o?NEP-8>9 zlN|*jFZNiHi&S!JhI;_#Uhw9@x}16k*{ulqGdP>x{bClpQ6%JH+{y%Y(~zw~EcE*i zG8KyhY`aG)fPATwR0DWeK^n(UeAL%OK#rp%6#Wgylq&l_(@K`6h#+3YfZON9k;V1i z*;Tkh&@%quFcPlCSwLoTWHdl#&_lt495Uj^R zgc7Jr{s9%M>6*wa;Ewfu&=#3Zxo^RP8#H}9%6{iNqHFMX{au~U>Pm@b2XZy%YEs-k z35h6xM&9L2;x>{!%nWmk(O($ZAH?81z^VkY6J(1QR1yy{(o)atIlPJ!^5i$-B6I%V z52FY8yMmQRQu^^f?ia+)^{g)SyX|lK0Dk|?UII7tN%eUF^wp$inWn5RP%n_(+L(Tf zUBxS&4&-BlO78_TEpr~Stk27cneXHsq$QBaMC&i_E$6~{LVkYh^iVUn{WJ%7V@krB z=FJn=VEwnRTTD%j*AIbxUpDF#gTdHXpFqA%)_zZaVGB+az;|z3Zr%D=f0qm7>c_D4 zmCHZWu+m|iaw-Moi-Y0=gq&7poBwnVOmhNnC0K#Qyw$&O4Oj;AxEyQ#(LZ?xnWC4m zT2h?c`Nsv;yDtbd@V=XgV^Dt)?z`r?I;qgcinXtG=FiNs8+^B;IIjEp&(l7@TNN?k zF!k;lpBCIgs;C>kos@KN;C<1{jk&c8=;sY{xn8nmrrgcx5B&0j-aqXhN!O9!suBb5 z@=rhxOAIFG3_G&P!9<__Pxo6h9zwTDCACy~{mT0?FnF~=Udg*NeFdtW8`j&!aGI0_ zU`KQoL{rYl{DXrP)LtWjbCLNo8@NUvdrbC5A1s)$N$|V=$_!hlP$gqnm7~|D!NWu-_j2WoV0_x!r7G4J7QJ0sAmo^nn<_<=8}ZcW{4$o8wD z(sD)*o4O);7#rZeR-w4uFSIL~gHtd@yWvRZG3Ph1U(z05Bh%s*$AbG->F4XX>1^{* ztr3~u;yQT*b3q-OR^$BntguwBL4-?E!}AxEe@GEll<5jzKm7dK#{qn+ka%)ikfJAn z-Lm2R(}vOQ4K$G<3nHx>=UzB>fUjXnM>IL!`HWC`NnA7;Z4+ugO<)TFN*A_@JWGIs z)8UsKzUyGn8T)}cR6ZW7h&9RyoDDs#6)){gNK8Gf_U}wvXRD|B3z@*)5Z@8u+8h?c z-QHv0`jvi)Aa}r3_s4B2hg*XPwGK#kJ4?i6Nc-~Giw4?WoyXYC4ZzM zq#$#vG{vqwmEse?Cyl>wMx0&&7Qu7pFPiM1bMdQg1Sd62a*)xf`v&Cz8+>zwaer^x zm(>Ht3+(x4>c*Ps4f2G{La%PL8sUfnyka=}E6UxVx)1ozg@n&;FOt6jYWoXuHoL#0 zGsg$uRogn_sXr)M(O?y@ga5pA<-{EpcpNH5Lhay}NooOZcn6#C$-+z}0sKM|stbwF z6dQWL4_a=1JPxAH=m`+1X163-y4d-h8P@JvhAVV6c_9mByK)rKwk8to*%=G7Q zxLDQ=9K=V1Yp244Bst;%P8f-@MdshdH#}g!`C(C+t{!>cfjH%z`!k=X@<>5FbJMxL9M+WG2rIgy6KK|Ew_6>I3C-}4r zsakKx1!sIeQJdI=czE>z&nypgUuCZ@DPgt$f!Jmh&1YK>P&J}R5>D&QH-iGa@?yl% zJ$8@2|J3d5IvXstW_}!4g;*d1#Ut56pTT+e^_EdC-r2w*09Q%+Ir)8XqA4AaXZYS7 z$<1ao@gbalMCTX9=J|Vs+R?-FYLi)8wE}AHwU5#->hS%EAFwB}HS~nH_vgZ(p7|`q z`?RQkobX@%S?jHX_D0O!z#HXQ`%sUzue}dqy3LXi#hY`pnZVviadM))TY2mas#KCs11yDuq^@V+A9YLt1XerTds&;;Fv~{(>#vdz zzsNoDS~|d0`pMh=V&%{z6yOIPtI>!jqDC}@iUjS>`h7a19@JIy=mF7N?&EIoq}9Ni z(-g&XiG?LgTItL?340x#(d zmH5df5qpiW;;3cpU%=1G3--3y15O@q;luMWKwxoU%M1Bg{k{R8;yHgXz@pusNrV4< zQB_xq{gC0XqU=N?;u=@C^c&z)sQ8nfLlD|&1GV2*t{V-6qeB&B@`+UbF=2(U4+-|h zLDxSr;C-ca-BU9`$FZ3*#%8tm(BcVfyNvj%5j zbF01lvO$_{@U3bqPcZdpv}S{C5YUk3xLVZG$cago10BXS*okx1bA2IiKu&+AtDd*tBebOH|9p3h=vM9&4l@@rb z=EDUOJc?M=K+n=Y)6iFrOTCZ16QsgQYSKG57#xKD+n3Y^CX7|3xB6 zfXScbM^fqz`+p5<2u)AL(Fq_!PkayhI(sI4V7wpO=_|h&x5B}FdqC z$V>V6x>INazffPZK~;VI<`l5oe}WW0SB5Ih2Ka_+w3RAStoM6^tA#XXnO$gs6+oRL zcQE{y<5v~)PqWKW&~mf{16FoPt!L=%A(iKJr-py%4X|C- zcwWMOx1qvGG@&D8XE5=~5WpRKlo5(`-*h(MDNl@weMBzEA_Ej9r}WQ)2Z?V+IImnJ zi!RlhqnZE zolRc9R=eQz$)@gye%v$f4-o)ve5!go&3EU(7d_(3Pw-=Q@>CJsBf#(JU=ri)Q0(KG=1|dkSlnQ5XCN>}b$ShiseJUFj6YIOCgq$Mc7Rv!cXE zVcxEnAphn(qIhK&o8x}JZ;*8nzTB_nD-PY?AbaW9SopHPc=k&HGUU;Rvy`u34e)D} zp3&@u5q78qIKRIuvXFjUCxTg*Yp93WFLjoqpc0WDe#+nXt~aRB{S=)N*i1myD`dwin2`btK9PHMX4?0j{=1 z^~Bya&}j}bkQ488pKo$>2b>Sxnmc9+h<))Jpd@m znzN`+8|NR;x`{uBq<`vwmLh<_{CZJiwdHVgwXgtIa16P-3 zM+I!ytxg4Yl=4WzgvO_O!QKZEJ-BB))NDS%)rZzrig>;J4-bAzh@*lntC{gM$jGV3 zy~!=5$9V>F6oXU|Ig4Ovs=?m05mQ@g|K&*q^L5W>z$buzJZbI=YfeS)l7_iH(+r#t=L;AyxZMP6Q;Z03O#oOF@&d6R7-8M5nc zOzc`T$yKIlW$YF+oLXBKHFBfhdE>!TmB#eNOA&2q86f|F zkR~5aLFk{b#{|1pT;jU(4QHLRWSvl-cw$}*_-#~a`}V#k6JcPdZB(UYUYrDP!w%oS zC=@xr4AWYWZ`_V6Fhjgqu%bJ(|A?A&;pPKpf*f5KX=Q2YiUZzANQ1)1lJxgafxpw~ z@00%4O16O4NEt1m-8e@s9o*Lxm0@wRA~Rj!yB)gLx$CGna{yS^701|1W%iXtfM%on z@>uO)=m$=N;)E!~-;pSs4Zsb%@eMl)2G4}kfq8}ZVyS7j5cWHVuU~4Pi8r4Yh%|Mn z6)a77_6_z+x+JOufo>)RoMAK!1t%mPfxZ=RRaUFF_=wc9!`kWQS=0UN<}(5-Bqh}8 zvYa82ya6XQ29H_iIO<}<1N+rYik#}`kJi*+w}*w3znQ>$tQzXM{c?aaM5G^ih zX!KEIN&E(K1x@vxZ01sncLi%rC+Eu&r#Jltx`3-R?VVeW`TaPsHb9JX#-Ie6#DFcF zlwtfKaC-lA*iYxQ%;WMW`-8rlq41KR2I9owbh8F!et-TtOLrgOGjqyD!34ps$`^GHSj4} zcKTK?YqB$d-=>0k@VDTvBs>q@8P0An=?*5Sz_8OTpZvwz%_Tz(I&@qqJj84|Z|LAiMm1ZzlZTq!>gPeJ;QWlbC`mXK3j>z@G4jh+yIR;r5tnXHvELbFg=fBqvO?~f9;*x;z zkz!nm@kcLN0@yz1+?f;(z96vh6kgn;i?Cf!hrR!PTO~8ak1 z#tJY?veq?b1@Zp*ngo0((#%UiPSu>;O)p!^Ku3@lB}yd>BI+}-C%DS$>n&}Sh+HA~ z&LP4r>B7^Q6a&`xWeV&~dp*&>ug$vW2l!S;l18-0kk*~U zjCvT`o#IDY0&BNEX6GjPcMD%I^ZCbG?PK5R94_K~-srXoAzw?G& zZ_FBYpVUICAOLox?a_if)j={QxNqHApP796`vbp~8=L}4-QV(L0k0dF)0Zhh(!Nkh zn@O!#lz#H@v>xc4nN)D6f+kYn_n*VloHcYZ1FBTX=llCPD6uM`{_|ge_s1occ(-BC zl!VjSTq^5EqF@!eZ&|9lPy71}_Ot&}MdvEkG-KiHGuv99YOvO3gX-UM@8qK>Q)UX4 z9`iM)7WZo^EASdG!PJ9evrJw9@&2xHpVBlR9W?+$ma*F2mSWLc5uCP6?A1}J^&|qU zIl*7Sc{C22-#v&2UzGb&`bf;z1MI8CnOPoV67GWmTX4_>|9;d9jS3JSO-bkaSjmWt z3)Tq75cIiBW$+V#?bj!NXA3C{r2)J%gWM+a1m|MH48{W{P7$*)Xe-Df{*;cO6o-%K z89bF8DdX&O)-=4qcW#8_YonYlZ5GI@(3kL`jZhVn4R}dgzlv|+mPOkF6eV_R$0w8Q zUOMd3)%SJIqxa^*t|(ggHLQr+tgHjRVP92NyH>Z$u-Y&oMXnA6rBi3{t%@rmJ}u+M z^$Fro=6mS=oBkLyjOipNZ2goka}L(!9v(Y&ua=_J9DFPFTw3&)Z@k%|4L&#FevV{o z0#KpxG=Z6Jqi8G}@RBb?+_$pIMdJWZ#av8qa!o(&a6-2}d6thDlIVpX3vqaNP~3cG z9U+L?jPr^QvnL{92hV)+Tq4DvqVqI3`|L)319@(g0PC+J#io8MTN!E(-bl~+*=*~= zA|^P+HH``9$_Kx8f!9zD$8MsRivoe`Ka3U1qf{pjGr}3hDXB$#Ib3LPu!5ta+nr7x zK0PovTPbQ=!yZkD^Muu_qhxNPlB<#}VBD3noKd%DDF@QS8P{YwD zy+jgV<O*W6wUj-Ea=VbTw$_pH{*GjCGYaTC{Rt@fkqTFxI@ z7TqC0GiA1hdRv2B#6c#33m)lf`THXy;2c)}m1|`t@4~Ra`NC&Q>^)Rd357A;s!&^} zCw8bpow2te9gs`?WoTPjz+As}X#|Ch=-Gx>IF?64qSk zHO;F4dP^fAOrD%6Uk%{os~xw?B_WGPzWk4yvSY7O5{H)Imy!-WGtG~DrjLh);6u7%66fD0Kaf2r@F->+K3FujmZ4$R&~5o#s8(?J>x#MJk7=)*QY#tf3xy!G1G8n*8I^ODk z^J2EL0T|;sn^JZULwv!`h@@2QdnxA|8^OLhC!f??JIXUSV_lV8VNQHKQ(<;Xb9YRL zGrhN5;6o3cdjBNzE9D344&m+6+SSVe&vE>_AD6eD@hXVvG8Q+= zMU~2g0E|&PB?1c!&WKx(8@bCT6ziRI5E10P*_@+PXZ%fW0d~%x1;)M=yvdP<{h`Gq zY4g>NmJjgRxWeg8w4NKlYQs2M)49_RzcirwS@ANBYi9fl>Q1-4irzLp3hw}LBn|b~ zz6;oqe#7&@GueVUio(YS)jPj;OFD)@;&}!#Hj8X?k*%A#z5_JdvB`;zFfRHB>Zy|6 zOQ7q%z$$RHAF$gzN&nkNaJnew1h4X?@8%A^)!?ktY99fK{fm#hOrttJlz9Wr9z`ln zufm-fc7P0m&Nan1-LO>$ejgRgIWx?;5ozFIX_4a{@%y%T0V-^)%yo0(6BaB$v*c;= znYSjMyFe5Z?EC4_E+x#cFD82x=MYX$*=TTDWa2& zns-!KDZvU(HlMv6VDJoAEkE{r{Mb-{Jw&eb7y7bYabG{kb5^w-gqdFX(AW8yXS`;5n4_ppxWF zXaXl3jgg-Ww}#D358mj79z)rG3cWyq?=Hfyc1oi7@)(HtM)Y?FGF}ikoW@946o0(d z*LsIgf0D|Pfg`vslEH4jo>6Dyk6`mCxUX5iO8(f|tkwYnKWg+QS=-dw6e)7~_|MuTBB>tzq!76-Bys0!qRhApreoVz;sOGWwfzz*$oR;&a z6>?DmyN;Cx-|m*F@DkW%AV2=HJL@MAf!{YqLgXEKxwr)Ql#p!w5>>t)4^JOdToO=H ze4)7n*a(5ReMbEJTiXB&!r%1|>0aqGtAI~_ej4dqtbbic!m+Ey?k)(L%lp>tYfez+0RZf z6Xt$H14d8ZMj|Zqnc5im!3ymq_T_(T9#*1OK+~i05#NfTB2XJtVY$yX?}453M;DI5 zR+T~c0IxAOgx?s0;mQp_ezdb+Uw>q2*8uFA=bmF}V?^aGs99ZFY39`pYr=@&FO83`l4T) zzhSiuy`&_Vr6BM}o^-(f=4aym(jg}js7`6S?>=bQjI3*bv7F7+-o(xvR{{&wuTk;! z^E=u$U~bAD=hSt%zqkS1dnI{sIM;c*HaG`C`->0M-0sE`us-5x)YmDf-Sq>$`|AYs zOMAaxZ>aH`SooGcw-xYEBjw80qX-xLH>$9!BEikqUzp+wunVmD{E?cUr{qcqRO?tj5V7d2?kluSzeL|S&MM5G)uX}8?1FWwhx{ffJ4Ww|nLW!ja+(B3uW@``+`h8pYu} z+$sADjYTV0Rlqheit6YfY-4E!u~l{PQT`Y)7%mO)%AaV3SdrL;wGe+{)Gv(%?jUTy z>YD^Dr34FT5>DB^u|NK>$GUGkAa?f0KQc-m>-mM}-7%RA!S}cZ7itV*n~T`OrK)HN z{X+ctjrZ`aB>{LVZVbrFM?|Y?ft6|PB?Jj)?)?CeUqdwGQp0zE!CX)wZ~Q?#6y8Ej zHn|OARdIsBkAasI3z9a+;6o?~*c)Cv60uqt;r@VCs1PDSXr*k!2}GJ>Pt#;^_>2at zSdp>Wzl6OMfdyhZX^n-*7M=GSR!9cEd$YG|@(Ao~l74$Hs6-yKIQWt(BK!1e6x{%O z;fLZ~PB^ZPzZ4?FDw^8GQ%-F_K3TPslNU>dFg=V2j&b~5KWv8`g6^g!@<6>l9~x9U z_-$1+sL|Mi4|scD23E>o{Nr}uJCCj6^OQ+;(F*qSH**7|&YQH=04L-qx>Ka*e%>E| z41<&KOepE93s3)1MCgTOwAG&hc9F_dILo_4RK!} zQ>3L~B@_*JvT!n*DtK&-#6Ok*!0hZ<$Ojj0^_ayiQezN{H55A|;}jyV{$&C-F- zKUQim*kw@kAr{(6{Dqwn>Yka$*~ClV0lYFP-1>TAW^I}cS>I?N2Sfgn3!LHlm{o*& zeU~OYr&Aek_qgM`eZas zcBuWc0cK9hv+a;+y3rWmgp|h`j8*l8L;|j&(SmqOfgn@~@K*9GK_q29atzKAVtuXn zV=`B3p-yl_RN`XE2T_}7e|KjOo0O(!6_ea)to+>(kDkrO+ z8=*XAIl*im){}S>8FT1@_a!FMz7XfJo&?~erBD8;b85>;AXgy%qV0ta18Il=`NuBC zkHCRf93G)n>k6rQ@IIF zr`pyHj{_>`5>sURRe#z-fKxvNk@}Fhm_~4Fyp><3zE7r@%W%3`t<~|x7R6cs59=ky zMj9T9Ejd_Uq!LuMx_YDBVTFdKeiRhXoPY(p-NW?d9Vb>tJ1`QlsIzSAiREFw{m|xU zBMXZ4I)Dtgr~CnF=1SrUHDSi2QXCOQiUoX)Q=HU^S$>Sh!b}3blWJP4%m7th4L1Dh zNL{=wi0#C$OnzVbMa(R)GBfA-uY?WlyuixLz_3ZbGr5X{dbwXDiGJnpbyeU$Tb~4X zyp|Ctn2oO}8{f6+*GwLqk0VK(Mj+y0B7ige(dmb}@l?Gg@U3Qbdj-_1?Y<@K(EpG( zeNnF@ZUJwfG)j@z?s?ul*f~rm9aLbAN?<~rqAHz)n#<5xgfaWUuYC0fNO}aSO6XdT zUXBo*{REY1JEGwtY(M2M%+}f>B?Qyc%Lh1HL<5FRrLIRU*!8vsw|OOWQ~Gd{)T_HA z-3li${(=a1o~XC;ayyaNK@@}Oaq3}{8G0GOjg9fK(nuiCgdV$(iVdI25Fr(Q`JUM0QfVeZzg*ZGB`E>%+2{o zPhAQdR)Q!d%f+o_SlGkUWcR9!Oi7+gUP7~O%*SvnPzJ^e;5MZXmnkY_-j zVfj@WCd4I(k5qZw-zG*PKrd?pj<}PaNY#I zZ0TGp2vUN5^={Nu=ql>5VV55|zn?+!=~08-vZ|?spR(g~+yx%?Bkase{7U$u0F&=s0Wu)X@B7JE23HCY;UXSC(*YSt{suM5 z2DchKf>}Ntocr+HtJ|9a_xphiWOw!2!a1i;+xiG*)xJXb9Jp95mp zKto7OBXY$0LWRjPy5sN1Lj(_S26|Zzk4^QiWkHY^)ZWQz+RDYD7my6>=bG(=Pj!n)u>ihd zY;!ckmi;b%@bvKAI=54Z_`JaGhGIKj71i<)oSc=@0`2H0a=AG0gCaxvKhgP~R1e;l zX9RPyXo6!F@Fk0;Yg9weeQX1JLnLptoUKGYW`JhZu8tF-kRuU+H9{D5>Hcm?4>$N4 zN!OjosisujRntqspz&{-Xd-bU=-P|+qI^k!E6DZ z(`4Mb6&$8dFvrLWUkeeY+^SF5rEAI|THK-#_uxwo%!}g){%INvT6ed9v>SD1LIrsB zhw%;9k|i5aAVY<{?1L0*M)BZOMBiTzmmI&r!o%JN(Tha?jnO3r`~r?ho6@uEN=YDw zU1Tobr)Tfe5MXS&C6?jpxlolJv_YA*+xgXJB*14$7=LXiuVYs@@^7r>0G2rP^*`)uTV6TK9?By|^NQ?E0ZD9}K zG7*fF7Mi{xAYQoALH@jMmHiQLF2Hn_m{>i|?1RkM`*KQi$T^ps0J|>T+11)VBRd#? z&&^VHu*fE^!ek`yGvhKagRE;7E)<9;jKLG3QJ4&F= zwk(z?dF(`j$H4!F-rL|}JVi7(w}qkbKI?n!=@$@*5OTm$)cuop53sK)px9p*;kl;6 zYEt+0S`Q;cOQ?m8E1z>~Jg&rHhkh$qMIK@DLqn$edex)A*NK8=!1mX7Jfqph?VbtV zH$ex5q(&tZf4~p2TTB{Rlg^d{tNp##Y8CayTQxwWzgTr6FqiqG1^}-TLVaTG6MDD} zc3u4X{Bby?*g3dHil4sf7y8HbC-6p*#0JqtuAX85+h>&k7wP!K;tTjAUU}p(idL`2 zz`mM^Tp{E1`gJ)t4{Zanv=02|m=v%g9My@7>BWtJqvUgz`zusvsh$08>K}&cw{AjoBpD!cX!|ol#WqDiLgt-H6#~0-U(|4vIvd6= zJpUzx{L|QU!*?RgUs?3>{<7F2ov_afcf$3k>%YJkAj9>pGb9_Ul-EHP(cSpn5k$uw z2*}&>jK?=r^@tQ!qDpgF)TD)K2-sIMvA=toqxO~syIm$UJ1jTeIp8@gSz+qXeeI)% zs^eZv`Re@WlMWSQ2(DxjDmv8@cD`^ifn-LRY4Myx*7vQYrTPqI1M*h}>FBSL6vp&` z`Wq9|cPMcpSP%Aw(Z}&|(-tz+;6Gc|@Ao-aQDJnzpeTPJe{%1Z=?ypo_2r%T;GA~= zvzI@Qb9R%S)$R=}v|zp*r;CEf!E>u96p-bt;zRmEJ>&v6hP&;{^Is>3^+&9&l(UZ# zpczkool!E?Ka&TD^cT>)Ub4%F(gDzH(8CxJn#KLRd(y(1;}sojn?pgpvx~cI1>>+rjU)8 zba)%o4QMIDvTP%aeZcwKMqA&NYi1do);CqQ5m$~nHU-E*am1{7bebi022UQx9bLmG zbR<|w-sLv6jzuAe894nfsV(bEF3}za?2Ts|3AgD8y!ZjH(NHUG`$j;T0eC8(5L5M- zv89or?#E!hcwyzdss%R4|G8B9(zHUQf&D7X_E3-B>@Uc3o@26WOFOk6oa@nlW>E|E zQ@~z;iw1LWImJ@_9H{pttp(@yeQBIA#8{=iUlSRTiHqfInwOSE~^h zz84Jkv)j8E4t)>DAtFBGv!;iZYfhHPRR0{-fL9T!-_WcR7#WtWA{~R6>|yRp-9* zqINl)6gCciR>Ygji+~e4eU=266Y8r0^$KoV31ekv(l6{@Dc&|8l9l^7z?TIonxt0J zy#?4w?f4q9th6~sFf$gk??12B%@J5Fw7@{@s?2F<6<|Jgc43B#T_&%-SAa?Jn2&_0FLlBa*g{`;v5^@0jxMMQad-%wpA_i&1&SliMWuw!-B!ae$D zi=GHP9sTKJlIZr|%mMFg;Uls#=^R@+z^hS_S(8?a&wB%3Bk;utC&b!MOmJ3yS?2OZB^-zpcorR}|Q>voD_Cjq83T1^C8@>~fc~;~r2T=cdv@ zRIKPr5JvFK?~ihhm1Atq1Zn~?B68+x*0{C;UxOt~)&3BBCb1v_lAA(dncr%x7kFk+ zl1`cV=*d4AJD2Afsm@pW8o>6456LI~(98S;r%sVGp>lWMnd$&= z{_7_l6EXb-ei8W2!rB+cCt}-l2U&=7FOdFpicqqFAH-+v;j)yPa}BJ18NOWw?Q`|} zf$VFkRAQ;?v}wWWkG3kfN0U%J2P_nvq-G%|o+ebe8TrjOUjB6Lr49WN`3TR3tN{bo z7pWBrU2UJi5U?i|Gi@3|K2-Jrod4bMN08ol{TJtgXBJTJ>y(JSLmkLYxlg%Q%PWB0 z?%lhHHos-)Zw@Q0q|%uBdEz|`*gh_PwEgycS%ZqHp}V?OZz}h)1Fs>BBOlbaz$hHR zs~1W}BDI=_Vhc$`lowhO*qdL)7MWl9lgld)8I2CQJ_GBOfZ0WxV& zD=bDZlcL_;k$~Sy8#;=fcfW!Uh$V*#netHayA4i7M8#r!kIs-)BG}J)PvC5-6Hg9j z=^kADCxANMzI6Y!=8QEN|)B!g#xo7{m*&rc4a-aTh!S z?~CN}wg?!(RtvB)VWDHOQb*y&z|~Ac5!qv&zh8jwykuhZliJryfOSD^YZ{s9ewq6O z-207@vcpLzD(1lN*G%&v-`A}QFj^!syZ)%JRVpJGYp4$Qs@OFzNvI93CWuhwU-=aS zWU#Nn*65O_TR0t9=1h)4(;@*W^uIN7a!L86m^VmJCve+|a@wBwfZnPKo8#&YY%+An zR7d=kZ2IpBTi_*YoV}XQ+KPX0_ILGWzm0GQr(Q%Y z>@3(Dv4(T19T?V%0Zyp0touYMBhxHk6!nn1iIK}L8UQvDYG=d7@0W5l0CO~Ho?ZsB zHXH}ompOlX{Up$zZ2>fUBWuV<4U#iIunI=KHwo7;MGHGJimrIIv7fRo1)l1SjWu;M z$4SGfwQ~Mojic=I%KcN(Pw=vc`rEz}7?+t3Ilhn)huNO(n>IXcGzbf)*U>bkYis;9 z`vCX_bV{~0=(dPYK`vKlh#(8?(ls#<;~a^t@u6z1qXyn6NCdk6j+M*8`boqhlahV= z5>CN9L+3N>h+5P707TNg-bGO>d<7@`8hS`Jm?b8=3A>>+&7C5%7CRT_7&(C|j?(__ zuuB(fqhTTLeM8|)0Ro6OdU#m*4ams|g1}ka{`D6baPOMo(>CL`=nJPIZ%2(|Qre;? z11I1(2J0HHwOk4~iIo+}+AOE4B><|3fvZSgehc)>E&J1W$RkF2D5Ik6I;% zItg$4;pu>mTsWl&k$!bk|A?Vm!1|VjjG8R!lA;K#OidDj!2Er8JXm|F&RsynIfmRI z_Z2ht_XuD9P9)$vzn7ABQ%qvX5@dU5{8{X6;na(QlREL#43EBgkvu?tH`5SvXl%=d z^I{@~b^qeK&#l2(1_7tO?{`#h!yEkPjQLeoJeH?v0Q+4)D++Duk<)=4+lERa&mO7Q zI9PpAY;G4R)>q^ME33Nqui-QQ%j&?F6)#4MUS4||Jy=0k#kA?2_OFi%;!q^w5A015 zzh(sQ>*Zhbp)O{j4Y2yrSKro)h&q3Ss+hO!e9&kQd4%enl z9#l$SI@$iBIE`Z))OJu1B&*up;0$oaH_RW~X)SL^WxnMPps1lm)(8X- z9t?b|x04>u_(g(9100EWW=-g_qWQu9JV~g6WsUrvd=QtFE?aaV-r_t|KFqLc^{8=; z?GD)BXuNAvbILaZr`KH}$JN2dz`7Usl8%91sC;rghXeLSKcb37RkG+UhzQId<+@8m z&Ib$jq^%?STlpm&_6D(JBGRQ*zpl=LT|!3f28d~*`(I!SSbd3wOq7dWDFW`Da&BYt z(Tn?wynzqhS7XcVWD7sAd(<)FO+wzz3F|gPK30y!x4oAFY_Rd)!k@#~8yBuZX_D(A z#Qd~F+jn{Xjf$T+@NVGQCjuX-UHuv14RVZ~Qq;(tXI$xlTu}3s+Vdk|^505;RX_u$ zxH*BWH&|Ejs3;k~O={)9eMQP>?m?Tb8_qs!(QocAc5;~=z^fKx(;&QqyAy$jEwp|) zwDaCl6l8l|#l3ClA1AS0s6khJ6Gg-&OjZEquwKflN5_7c7{stNU8zdsBJT`VD$Z5$ z*`2pMWIe$4N~fMLf1^PO^P-|=t!GU8qjZAx4P&uTn14PsiDXWjQw^!4w4bHib;TqioNf^{hZd(ET;7xqS zmOQQW*a5q?y15FI`$G*QU^3#@p(~21)$a^=ogPzVPL0YEOmN=fLXmH4bNs)*0v766 z3!^jQxQ`yUC$B;{4`vOa= z`=MK7*8}9=HuaBDtWEkQU|s!UksDxv(K>i!I zBy)8S^^1V}IwLaeuh=@s9e7E;^$u&t+PZ1scecg45t&c7L5(96>uBrtUtjA65kdTr zE%}mfvABn^6FYluY{cn2C z(I21aY~LM-_kH5J#qf_@S3bb@Z*3$xip;$gfct*^6R)cYSrj;x$-$2=@@J)a7Xu3| zxOavuwyrrbU@}(w79FnJw)_R_WP~`=KEIbz)!?^(5vxJa-%UYnaP}mvUnx(i+@0Yx z)lf$Ay~n%xSb!~*k*rNJ^7{BVScRE&CgYUZVuwETV=29|C5U3cj#n#q{pw=Hjxz>` z^j_Wiwx*;Xp{l@-(dc=2A4y%oj&-tmy-WUQz2P({m755S=6eLW;TaGe>j)J(y4FJ_ z{DK{ltB_v{1(iM8)&c`n%vk`|y>|?Ogz;*=G&tM+_?Q7>_TD~%=y)Hnd6vF??VB(T zWy~b`1cY~1;C+$4ByTi&0(^lLun*C^n@{GV8}NexuF1K`w)hmYgvji$Wcnk`DvrBWMYX%S2>64dr%gUj_H| zeI$|Sm(YBRI zH_TI(eQ^`)$kfuyfW%x5&M={%7er7G1?*=r7R;OL`|E zbawRKYxw%P_M0_I{ zz$&R>m`z)l#-qY6-5&SwJN~>^9cYI6xc02wupa}n!)%la&N*iE3^TmJ=o>Qo8E+rX zKpAL{(9pPG@;6vXt=n}cdnw%hnS6@1hg5gyD!1Lt6nL9>`$Ui*4p6R3< z$kEjsY1$h|+C|dfM(b0+ zzGD;@hPv!Wj)5{rQc@P5FS4M3l?>w4@G7snJ6K`WDuMETGBht>XX1z8|6n?f(5Da9 zYMp(pFSy)N7!Vg-ig|0;k`j&jg1*L=MWpqeVJxsXr_1@%JN|h)%xft5D8E(*<#||X z9QWf(?*3dHL3|aJS?Zq+RcxG69-=6vAS}Dt`E?nJ|ek+$^^9YfY>#eB?tPAgs*PE z`YWpW!)?LeuUEDI1vduV1Ln?)7LQnLktT%8>Qaj=*^ls3%*yK^YqL9xg`ml zeCHKosHN#N)zDu!u{RRCe>$jy+)BE--h5k0{h->dHXpbZll?(aW07 z6y}el!qK0yGZh7VFZ1)IG~T21z`!mKH$PncVWMQYne5DpQ zI(1;_NG<+&_vs1|2F}&wwp5;3f{rd=t!!K>6wb>;(E%P%qhxJ9$C8R@z#~A=&TMZf zD64`ouoYZJb^F6D(eToJGuXSj9z!I<)41KXWkKH^rK zg4zr~o6Ix5@^49!GxXU#DjE|vq^Jg>pdkNECNnd>(E!b$jk11iyMb&s>?0^{Qx<#r zvrFJS_og&lU+qVbGx(xdw?tzs3ju|dFcV=V>C+{{Jsi*u{*qa69b$w0&zciYMd}iC zlY^^Bpq)4t=bzXH_Q)P4_B-3{xKuTS^94?NEOnF;02$l>k}rtay(5KOFCzQ0LfRZXLMj zrB&d`5%H6yw~<97?2EZ4c1E{18vlv=-&IFr68X{MGJ_nUcVd3LEZNh{2NAi)w#PSP z=;UL;TxxEhr@J>qB!Y9blKUMc#)NPmAPZX}hwQXC$Gm|&ov4nw)vR%nz$rzh(|zfe zTU+J5K+KOjO={p>@B;rEepAjhJ5rY%fa_SK^d2Or8T$qBhQ@c_{p#Cnf5F}d>vF8n zLFW1kb^)~mgFZ(6`a;C0REQts&YY?`_}`xx;nwxzP2mOXpijn|XucDo%Arj;1~Ji7 zDWYKI&sUMsTg0zCslZ#wqV_``Im%KS>>!tq_dppR^t27K=bna_*zk#-N=qAKWYA_B6f79kXCYO!}6C-;d`a!fDspd$P;N zm(I8X9$yydrpBAN9l}VF_Z=r6$4*jz1M8f&MjuFvnKf`O!17DUo-eyUGX!jCC8Cb^ z(r6pWz+0(QdmDJQIEf2R&hARdjksGGqL80ZEqZ%18EaEuKIJ13q>B70nH22r<8v!t zxY$y_$%f{PQvq>w(TfKwnVCOwF_Zz1;rydkvR4zOP43u0G$5{IJ{o`YdHKLf-nrp% z`1?3B5#XHi9bni-vf9jB80AQ#Q=+=^yOuUmxgY|W-wGUuE3Cm`KAw?5LK z(&B*vTlPXi@A;w6j@;mT_pYJqdp5frG7?blZR>53oJJV0JAc#5X)uqpM{sp}JA{MF zD#9{ge{lo70tA(ve|mBu&0uIGjIiK5ukUkx<<+vu+&n<4YlbTfiMn4Jhci#-_}R#GpH~BT<->8~f1pj+{S#mnU!s;i zZqKY^z&fiOvotxe>W>TOvx^sh_=RvHF7Q)^Sw>O>(*+&{yMKPSH$GTd%0m`?Mn^Nc zGOp)<9T`F2aHqcQq~d}&Qdvpw(rz%{YapLnR=#x!*)t0A1oGOnJ3H3ShY0L%XsYsO zv@p%EfONZ3$Jy@Xj9SD%FwVV=Wv_fPU?`F(&WI7*Bq z?@x(N7r<8wQ!FH2uk8jI`A(0aWb{q-u>j7-(GF+1<$GPhQ%{!gry1sqqm%xirPF16~-<)c2s!Ngc2$%J@GQduGtF~fw-rnXj!%1*sT?bts zbMgct>T;r@{40`sN&q>aocH{VQ!}}5-~?FKc`B{J3%Ldn_57vRy6o3@NrAOOW=ceU zw^;HttQHOe6mj?$Q6s=32;J)?|H12O_yNtZ@k}bm`x}eqJ>|P(l_6 z8m-HN1!FSHk4D$&`(>*U_AgxW-G2&U!X8+=wchM!K@AT$FWdbJ_FCFV=lVq+Z0BwqcslT+vly(gAeXU%4 zlNHTua6ZoT`dZZBQ3wTjY&tyIa%Q$W`vVZgGU)!>KUv(?0iuv`E3k)nH;NQ81H89N z@7tIOVeerrklw?x3dqOp1(J`^dF$jT4o;f zc?&6|fL$cVy?hp75Bh(ThGI^m^0;JV*!`W6XYadxkF7SS7rjW?BJ$B$m<)VTx>*I< zip6u1Al7%X!Ar3`TGC-9>RZQ5x~XonqrqF@pSW~aiyIQxh5o{&JZSTZZyV^18!ZN< zL?!mz{%2@^pZarNxB_I~TT3!uyZ6(taK?@BUc*mt2^B;^-FGXe*Z#`O?S>w~5LlyF zJx&B{sI=uMacXSL}o$RYtQSHSu!;u1iYQxL zE>v0|Wns>+eQkfr)CO9GejY>C-KM*K!2a6(7%l!`l_dxE*BW|m<*qm-G2ktZ*j^Hj z6?|hH?1E&tY`Bp3xE)~k7u?{hOw|`f0w?EpQa%@*ZlC%9Q7|R?cH>9Q&lE@~PQLx$ z%vrK4!KqBV`w{S1RUHJZ)md{}6=G(&z^NbYyC+zsq=fbddoB>27KLQPzK~-u>Vx@^ z3`0gCyKLa9-&c4gehFv3Bwy9YTm;Kn2WS<3oE7e-Rxx0Ko-A0=Df^ZhOvo%v=G^N~ z>tR=4fG78{WpB;%PK%p_c;i*XuDbhO1mt&G(Q!WHf=5M|#cOwV9nqQ$Aa8undhT#m zn3%v>_U-j%iX_XWDg}tK)Xov7UcPa|Zc3#ott!Ut&qx7T*h}`}TiL=m6zm|$kWW~L zxui)z6G{T(jFgVq?g%V99U0b#c<6RhfZj+ERK&Q=qOSwUf@E6ca)opLhUg3P2-^Ltdv z+dmd?a;}Ol75(rYl!LR*2~FZFn&lJ+$gd*2vhYZj{ecysI*QG@n8#gl0pFQjR@%PB zBma9iKz;M7f93DHykt;u6kONzF8>@v5^`6rB+oY|P2X+-p3IB{auI=2GcoW($G7uN zV;-%;4(z@|*b)`fHSL?=D#y9{pHfWGe^xU81wJxW4O1AvU+BG$r1gUlR4KUksPkfo zqy5h<1y?oOz?*VUx8?_@6~ueP$7k(XO90<_I}YL76x0bK>ICD{WzCr;sR1h~@xl3# zuhdv7fWD^X$d_;b8BEbAj#6FL< z6O8l&_&J|sb8T+L=>>rKZ^@MIEk11Tfl&w%|HFr8(ik_f%tG2Ql(MZjqkj6BLs z+ESbh_9&Kd4Sg90QZxiSldeP|+0`Pjc8fI?qib2yGDF~7bq2LP$|+F-?7=6jEm-lc zc=HTcXS&9aaQMSx>;l&6*5<#DI*a|a0fby21+_#fxlXWp2c21x{3_B96@mAJxokfZ z0ZuI~h>PNfTj+XgJHX%qwu&Aj%eX_y4Xh+VMizc)?^h>5Uow4dJE33Y7uLtV=^J$u z**r!OR^aeX`mC9t8qkZ$14j0%!cYFpBRJ3EI7^4+lnV!OjyC=NG~DHd7eoD`3*rASUqI1Ti2*0yz|3hy7OU&X4=hx|0g|D5BbL``6}+unxJDzhn76 zk((g^=Fh}3exvpW8Htsp`*VN&E93So^2zzhYI|H-mb#1EXt$fIld z<;hopz?t$(b67>b>ZbPrD7XAG0Qer_s{`wT!p~q;%TXcE7d&}Q>#jT=N@7%?`L~X* z4?MDX1_ipEMKtMnPb9kuU^SA=K9Ss)(hXKC#VM7sp>b^pjK|LW@FT5Nq^}xiLSJ3` z%9_Tyfs*o#l|?lYO(Edyq|{nZADh2wSOFayQtrIHD6je2;9R|m!(G)t6-dagV@`JG z>e+ew%MswH=AI71MBbtK*5e_N%3^So2PqEPPS-9?Z)nxq_h3)~M6D~-!l zri$Yoc%2Vc1Ftd09zI7`z;_xQ-8#D5ewnJ_4ts}~a6it{U!)0#wWfu! zZbFRv`w;^vV{mVGk{WNB0qDAQ7r5ruO-g%UmDIzoXQ~+Kdcmpjm#Zo{&Ri-)1*Z38 zba4OPyASMOvgWZ>Sn68e;9eJVuwO)Fy!QsH;cQ#D*Oyvb3hY{K8PcYMKO|oOODC~c zth=4?Q!?mzvAVotjuw|NW{w|!2NunH1aW{I^%?&=YS&*s0kBqaNov?W32L+eY(^m= zI&)I7Q#`3~hgN|Tt z3}t+gF9GZVauhozIH#?9;NC(jCPldopMjmW3F%X(p5EQ#f)h*S2Jx!DTv&7f<$__o z4mH_yYQu`7NvEkolfFhiu*M%tcwu6h>0?Xj3) zZ%u5^1y*R-HXCZ19cj}8BHIevoAf(I7S;yV*;QmKGuZfT-oR@M!>_2>zl3acI8)w@ z#+35cjME@@$GvMAO-+u>1I>R{ZGv-;@BH9Aplr1kW&1O_)&cZnZ4bA;)%c0V#6Qf? zYxL6|xCPcqtg3_~Rn%fWu%6IhUVWmu{I~&BzPB0A9ka9uT; zJz7?uCjEl9BHb{fDs|2I8Q7FC zsU$@vB@H<2OxU+M4wEV|U}Q?L8ip~CLB)n04Qp#@ zZn0^u3Vv+_G?GcWIa6K;7MNfc-p?r>2rk=I1}A5oWO8b$){?SH|?o02KH;WT8rQWSq-JoChWZZBD+kNzZdAEB=y z%$^V*v?f#$oZUd4OL3%w-U{Gc9r{Ioz6bi}cLQ5yxZ;(s8_6%QUNjDMOnlu~ke}eH zC)CWlbH(7|fhG(sDlKFrerqkjgyh>AR_P=;@REPu8~<&u!>r>1yZnO2uoZ+rsTl*f zt}UeYY5o*g+yTumd`fhdh1$eW5Wz?gBfoEJtO7Vcg?h!2x{6(C6X2?qf02*aDOH6T zPy-j6QC9osabXvUDa^(z7n+X;?ltvs(3IgB(E*^KTBddG<)n)609-dz{Y-~~e(D#{ z{JTAeL#g2ulfarW{53fe+57=Xpr6yHtYd_?DdqwvhZWE{_s*61s^H|jgslwNCmB5q za&mRIq<3=nU><9!iPl(7g{WAi5PC#|eo40yQC=B(M$H#CMH zz|X{^I8?{sa>l`k4OwH!dw*!IhtYs!O?PrfGdY2CmgTlI!ynCPr3rC+ACwteIh6_g zl;S1g`Eptq-oXgu@7ySUv?uQkERHoS=IFTY=iR`Wn2sb>tp`}&z?bk!MSf`l0=JWAv^R3Z(nbc?uj4)=($)cJSsFJ+fuN?*Aga{*~o6h#mOefJ3*g>qm>Z0UFuXWAZen z$zK7G(ABm5>(8;ULmudjd>2&fM;BzUgST?n;1B=8 z`#VOP3u~D1HX*OnEl&kb?XjE><|jWZ9>EtCxlg@$?I=e$oe;C1?i+N&lSJTb{JFwY z=jF-9t{1%54A`*15xxS}Ir7Q&&8SbkB|x`dl9l}VZ`IQ^Fe9dIq`D`IHBlgDuD`H@ zN_uf;NH_;U=EC1k!h}YLRgMzZPQrGcES%{h>Sq|)w$Uu13R{V<@+8kiNbAL68)f4pn9N?{-D4)(Y3lG@^nt!Rk1Y_u8cAY@Fz0)Mb zOt^|7gB_s7PVz@3{R$iGLLcZ`C4V=4w}6!-AN%!dwqrw77*kDs;pcGl^`~0FTCwb- zVvR-eu=Df}A$kKUD8mi29#8%usaQ;i?1ojWnXQ^zIsKjlyjA)ArJ=^9+sg)79$H<= z-shZ859h@^nme((;%MI$##D!pij`w!vkjo2nY~6*Cy|)0!M(-(nH!QvIv+B6Axw~D zJ4JdKj1uFWuQ{dgIT<*w?e*DP<$Q~zgaA#rb{8qfB#l`soM_y+o|@FiM)%-sd~@q> z$40!N5`a}!*2>(^&)5FB|=s^AxqV`>&}FA)X0k9$;7S> z%zmQY8*<*Jpp!B{1!6p8M7cFF}cnX=4`oCMO{2;7d+!NocRh{=4b@U^_x31eVq@j?G7-oEUwj<$5QZxT+= zagU8KaQ5IHIP2~B9hs_LnDGVve!<6l_8@t|!CD9{nni1wtvsqApIgi5uKiVW6M8`1 z&sgug*K+g+B2+1LzthPqZ=nJn0V^SdZEw?Eo&cGvpMzIt|IeD0;Hu_`Kh?jSwe~>V z?A5$KInhf=2RVK(gSka8GwutyhBz%Au0Q9p%L=dy34^tB-8^h^fVI*h#X=a;XBRjv zh~8G+(se}r!YOjsJ=A^5@Tg}2RIiE>W+NsQ1uU??&PlyYe&W}c1M{KOz^@L4?FkPw zLoI)GTlEuaHNXxc?czom@+V0%c(NOA+B!=gMfAbBI*acly~SQyA@)`RQp8qc?++LW zOlsT@p3Akg6ZX?pcWI~LlZO@f-%s&*{lX+TwG3EiX*zh_lJYyhz?pmx5AI=f^9Q4#7Gx%#)HdrrtWdyWJEeeY0ct1XR z0N(g>cNb>n;`WrlJ6FtyFaz6?G!5vSyML2ElKjnU2>e0aPLtbbKN?j4ouhUirbX%m zPkeyfh>tE=10~D}2e9a1ImG9>?a@2H7oGH{DA&GB^9P(*4t0EE7+vE7Cxg54C*6vw z_*@*2g=O0}%0^dPfED}Uv2)zkWo6F6)zE(~vP=8=(_z&;nG^!&q+8Sg?Jd@KYc&PN zI5fzJy#_lcY|CQl2p|fEtjNz;U%FuJ!9EehO0KOs#|4{NNS_K?n(d&0!KBAd_pc|a_OlhuRmv4lQz`eXD#Rb~9 zyN83^gh($+sy~C~pO7z?i;?UxR(*hzvUx%z_F!x4l820%#YgS=X?jWqqWb3bLnO{M zO2}_E9IF1)g4hq`j5@c%qT1JCM-TVuHP2v2bM@2rX zCCEQHVaqGX#y9h$FHuP(MhGZiVdZ!k;+LaUCHa-b>Tw zGZ)TJk$GF4e^2%KG{7q_MyA@tP`23-;8^$cb%xgS$b!{|Lhc?Jp?l5S0Z7#suZWQ1 zi4kUS@8CP1Nq0#r(13?4&q?_eMY5kDv*ob!txEPOkD0(Oh@}|fI3Zb24R&AS9Kj_n zg>e@+yYM41y~(A={eUOm$SiF~@w^o{J2+iDHMY+`^ez9JC(@0 z6FQiCsv7ko&w5Og9C-9%5LC74NTO>4Ot?3%SNI$rHW@JE*;NhoC(@cNf^4|&tfiHU zhT7i1E?A#d!Z)fB<`n43!9`sK3m7MaaqmA5*Kx7}?-368uyscNZMyKVugF<{e@Yq1zF}k0x$~piejxgC`q=J|Isd@!Gd>WCqJC^Dyn$|ibHVtv zk(7Q8pxak=4TzZ-j`{f``ZK&-!^{Cxkw3b1AQ{_Vt}9J~&kSQT%6CXS0a*Mi;mCy{zRWU;SsUYl&+wl)Qi zg$=-8IMh3=$@gh{D#Wp9*;xyRuOAM`Lgiw6fM47)pFktY&luZ|fv8?};F66DXuOZt|)JR~YcmKTJ=-hOyiUUvcV?@L&BmiIrr#;hE|ClFH ztuLVY8@6K-tPLch0;kTh_C8@zgY^XnEmiteFUaz`yj{?b&^G}O`<~|6exIpV zs|v^-o`J-6N%rRa0LX8&N^HHn?LKS4I!7+M8LE%ej0f!g(3piG#x#1E0Le^yCVeqJ z4jtIBjwf>D7M~$gUf{G($Mt8M$(?=^AO^)HYJ9}3EbwsFDl_Dke~dx)gaGqTzx@(^ z55MdqKqHQ+y>J%0Y4!vpQSkrGtJ= z5=r_`33j0*E9Pao2W!CTv4_9tud}IG%>-v-Bo95P+JVhQaMiM1c?iF%jzYfrGIES6 z50J_<0V-J4mEsktB5@AZxMKMq_q&L0-0*sbeO2bLGnBRw(O;#Qxq#z@Yeptb1Hvj zTqi&Jf72NGJRCY~|5M+CEBqN%zMm*FRV!*qf854 zdzB|N%q*{EQjyg4qkaIZyhO!y4x3L`Sglmr$G0kstd0brMe`$cv^g^MU;_wBsdxSL zX&Obifz>$5P$&7ZpFo9=_R4_lK zv`;1%VCT!J7|V?pCzG@b#QcPX3qcUPIk3OpO_%I58lwQ&q5ocJj{-_L)E?+7Gfo2^ zJ1bi6fDg-5N$W<+Q%^qRHcZgBtUuwln?P?ks8>9?;2e7jcE4S!VBgo)ykTwa5!9o# z2?W9TaP~J#UG#74w1N58O^NK$$({aXPY|h^gi14brSCwS-3f`7)_n_o0OS|D^%D*5 z0mTN`y^{527wIyKgmCgss7?80GM@MY`pO%wnAA^l*$nW`R#|$BWw^mC037?{KLb@< z1DZrYd(Q|X)5W}0VGQixRjola(t+ad=nQu?V=cN6D6ym2`&3a`|#~RDL%mbxGU!_x_1ekgL_d`!g+~rgTe$)X2Kdv ziTw{!B>>0v86UEL(2~In;IoIs+Nr@-w)O(LU3JV&ZF5y)YB;A=e#PiV%fsUhB9NUJ z{~6h)=a2$iU6x3ljz^|Qm}j3#IeJpvzt9pyFuuA%Zy#Hy(hXq3#xOrA`RnI=1^;V` z^*2<+PDOWcFH0c!D7R-Nhya;CrQtM-xqBSU586%VEJh>KYXiG=1~YKN`^w!3GKXUc z_3ga3cRLX0_(PoUBaU?zv4@Xnms6P@fPwqQ?-PG@Trq@tlI43d z_(Ult07P*z9D?@T^tXoq*Cnfm5+6-_o6xrs4M931jr}ojVs#VDiqMS#roMp;o_{bm zXK<%`Y*>qkRh9VrSwfwHb^chBgrG#=d;_3!#4j@7JdIO4%!y1iX^Toh2wxZ(BMMB9 zW7nrC1?qO6XlE@?OB-q=?D2oz8CU%dC;Uz`uM;non}-S9J0RHE)kk|3I?zZ$@=wJv~0_}68NOL1=>64)b}jw)P?e?@^qE&3&^Nn!ZyfRPi%B#>6_ z)q9MeS9a2JhZ#j64g2+=H1Z^Kb-x(SJV}{czVPO#ik`2`b2}WoT={2ix_)%FOHf*g{pR zqYD{R5iPQf+Gx`@0-B*|4h&`At=XQ?4~=9dV2HD@AcG7G z2hK7`%t9Of@YVfhzz)VL9$#13MbZVUSWS)3ZNp!E4qQcF2}2q6yDmN84|4IVLmjO~ zu?3)!{1daMVNaS)06BW0lH>MKfZGx9yASXDj;e#{;R0)1JM#1@Oh~FX^pECMr^Dc9 zFZ~Gj_mzsMl?{FeB;~g)p?s#w&$@thj=U+j@u^lh;F8z?mPN_I`tNRkpW<(j(XLkgp&a=R2A&%4lYAuEN0CEpyB_ zQ3e>;M{i^4YVNBla02W}-jtB8{@TMn-1!@4L+`7J2O`^i00so00;|J}$t7EvxxV`^ z3+E5wV@-69dit&b{`bR#`(ANHI(Fc#h>jXFZPO4I13UP9s%KNa%zOO;eZ^;4@h#tv z6KDX{quE7mcrHdU10)o+7%$%XsNrR>3)jfB(;TW)`+zzM>hhfL@Dv=a0}H$Hk0>q4 zXnh~Z%#)Z#{X&~qf%T#h`&IEatrwAl?6Nu=i%4~%tqb?}Pi+ZXR-z^`L4Po{P5=F| zY6Rw<>QN^IM$(5FctD|_y!g5N^mQthAqr$C&+8csFO;yh42*ai0Ms>t_k z$IUZ{HwcCB(t>;za5hlWrC6d~Fv*8~seG`u;$F~551t&>Q*3_cR;ePb19Bo2IZHSD~a4N()JtBjbq5}1mO_ie2`koTO=+;8c72O?Q z5`)p6o5XnM&+QB>4dCa;e{F=?M4YPw%x~RY@TzRWQ1p;(s9@IP1z^I#>PV~3_0ol%#7hdwjpG z<(o(>>@98N0rL`eoMKpI!QcfV5Eb>EVI75TIUeFa_$MjAJM)!xpq;zETn$z%B!AK^ zxtJC6&?}FOThnB%m34q)v+eh1ZL$2%v;oZj!l25Kq1P-4_qgSG1cx+ zV>14xzEiCrVuKS?SV;yh=Ns5TJS0MeCCU8`AcG3UDehMZWJ3g4bhiY>`THk15P(Js z>fWVBbBAn_w=+exLiF(=)C11~k9K zR`G>->q07EB`GBff_TuAf(7534{zpkJ5{Koz_%)jh*Ybcw^JKj^&j*Pxy#q5YJqQs z4Cj__W6h0ls%geVryBOPD78Qq*5a%ZOF=5EfYriUeW?nu7>o$;B(2NpK&`V#cpz@Z z9jiNGb`vMHyy^0SZXfH~6gZT5Z{%z*Iv_|oP z)9Uj!8DjH;-Y)Pp_;fL1iP_$#2DJBg%@eyiRrUoVpPnQ87+*5TuoAWhLvpP=JD}c2qQ-T zn$Uh1xrR&0r5(Tn+LVI6T@tl66QIrEPc`6(6&nZwJg@s(kyXlz!XyH#p+5)qp>wHY zIdFA+wnve5{5yHTc8h{lBD2!g9Q1L>&>VtB%U<~nFj6^^O-FmL)*&G$`Gs4*+F_!< zvjWzN4=)=%T_R|KCVZa*qdo5+UIg$(Bo=Q>Oeu9Gz`1E}G2)`$BZD`v-9Mw~nwnHjvDUSmZ-I> z%;4k*?a+(IP+-3T)VWpVpYPtk`{{(4$Czyv)D{NChSS@1y0z5!bx}IxHarSS9KwJe zeK`G@)G6VupEs}fKqK)7`l)xBj86yr?-2E;KgogY!-*1oF)@fG@_`BMU{^ko{~P+m zEddIOUn?Qw`IoN_u+H6jKC`+1x$SRoHT{hG$El+E19>3nS33M2HFSswXkanp1_@?efc>?fg1Uo#dS5e$UnySEhj*aA`Uc2;)394P zw7$AxFh6*NXe1NAV#)!oTL*M$8y+QY53KWEv$$OxR{Vi|PnEK6<`u9k8U$H z>XQqR2emi9cRZbhLIx+`So@z(bK9W<gVqvSK~s*iGTCjs(dxX*FaaWlbVd#x|#X+s|0IB`p1_U@nF<%*!%D&Z7L&v zejV&=l1k1v=vg5<*ez>5q(C)P!5SNg*eJAU(&@=5C9H#58>7@k5zBGdUFZ(;ERSCznJ1j#8&W5VX9~9}z zp)|oB#n-Yi#pPhG4(G*$JG0y~&SoEAt)4xWgmU^@ZWlzh9T`RJ>B9AVgqk5<9jcuy zq=69(S@UexSQ+F%fR(hFuheYfc1j%djy*fpJFz)B9LNIUIK^O)nz2IG@#hb+#Stf* zBb>;Ftca6T-voJJ2EUUqgF={!zW&YsO)X3PTQ1#&{p_8J525%6Duy2TDeU9^S?;r% z@h{l@cT<0zmGZYlfqeuA;brPb$2UaRWAE8lnaG0DK_qke{qSC7#~6TbRcA^#a)0Vf z<{;nKhWv(tMy(yz0~?)e$oAgEcnhbE@KzG<|FLu(*{%XPbT7REgNZ#On4C?Xk%P$@ zR^PAc_wb!}Y(ptssidnPl3B2O_D0z~3o}8yMR1a+7X76bY1a(}yi4_dCxUUQ_>?g3 z#!p8)isFlkz)~pOe_g|$=!F|#@3ig<@7xJ4f}GXlerHpq)=3WMe-8p>v|Y!wy8yRK zLC+`XY3LUwf%-G1huS6huL3)PC*=4nEb-tlUpqJrc{z&b>CpJ>K-?E?W4Nk?QQkg~ z;CodogNftRBS4jD$na@btMBAT00Re=q4-AHC6@v76nF4>H3^e`1}MmyeYw=lapEhO z(_zH%;|#jTU~S~j1=UKHd^xNG5{&iuJtDnmiN8bJ2`W*<$m4~WNvv*E(02~A}}Sh!Uj`{1qlwBt0x35B|GxI*faQh}RF zP^nBssj$T$2Q_5Ytk#d%YdsG63DwFRtX>$(9L^qo_)T4>Qd*A+R+ul2l(XSy2n4(n z@#&yXNcxN$aLzhLfA@CW|)*^tNe zK^5oo&{vCnKvo{VXU8j~V_>1{j1HgWoIfJu=)STfuu3udX&Z>YL$VRpiF{Z;11MMAwgjJ_w~Irr zY&r}XlyOew-2&aHTv5RPQdaDf!9BbTzYIUMMn5HZs;Xz(PM+!OVu1I~ey-o}e7{_f zSDe*6#=AB=iW{JlqWI?%oN4uC*cFz^-MLv<_$gi>*T9>m8s_a*9SV4rN{h5@S-(jj zgU`zM%bFFP41yh;WMd3o(mwBcdjsrUYa$(St2g~29q_v`s}JrPxpfZS7grI($jM`p zN>E1{-l4q==S|cTtRW+bjn)kv>JmUf2qPm3-HStF0Vz2Ans5x|b=v6!<`i!9=!p?yti>|?st3B`F z?65I5yw*>je1?3CPEKjA`3WL8!JQ~PZjh&Nt_|opNy}5%)uusi*qgUCt-RImn^tF- z!$u4u*naAp1B~4}E8N)6e7|50%Sw~bvV%&$8dw##-jj}9D`l48sW#Qjxbyp5feq>m zQlDx9S5EKs1M{*b>A3NWsSWH{Xwl8>Ed|p{9>}*f@71HtxJ_XfT*&@V-XGD{m_g>H z*0zqSqqw$TfRO@gsz2wrMFC`sI<8vJpLln!1ZYn1msF!7MV$rQ%p%2RxiU*s=df$Y zW#!AdeEtY`fUd(&GF*SyM_6W{?RK)>Z|osC1hVO(_xJTsN)iu{k)C%x=x%AGQ1hUd z>7s@;7)k=2;Dmy@2Wy7-JhCtFE|u`>MZ{a5OyQ2#+Y>siOr5O*QrJT?wiWIDW8mJy zzhqxLvFG|4&=xSdYZAGv!>9mWlq_C>EAcU+C@y^FXi%c=bN3tEeP-O$kB@LCP{23y zpTtok#cIPJ>|j^syC)wkxkupJ^Pe^|*GM?=7sLgMvKZu8YhQCg#fHcUy^ap=y@=qM z`^Y5nkdXJn2PcU|+RMXwU$P*(d)m(yHHJsi>;Uucy!~}Tn z#I8&`)ma^#f#$G^d%d1K%@GuGbvCs8m!?KX3pWfFpksthHIK;vZ6E6wslURxFCS243T{K&{VR16IMqlwFS1FQ#4KUY z$@Tfm=)7^~HP}Iyo@eaPLLdlmE{6Cd&o)*jEx{SUiZSlL)Y2BT5$Hxnd^)}nnH7Wm zgs-t~cteOD74BbfrY392ZCV1@oke8tkmA0T{s&IMX=oSLb>dSW3h?}4EOK;gzZiE1 zn)Cjw3E2qAQ9%apsSSrj{s``N!yOrdr&R(LDjE+gC2-p8Iiyq`;WQ=Z=jnEE^31Q` zsicE^au5FrFQ^-z+voSE!i^IH2r6u1^1as@bMfG;K5Hav7wuvlw1o)Kdu>5dWrMlK zY=p%aF5Kk&fORu*yG)b0%$ovGpH;DzZ-=r%rl1;N{73wa;6xe<)E<|;84|=fRzp4E&xUJo2&B1E? z`-|sqvE7dvpph-U^*|mO;uio3Zi67Ki9=B@9ZvW%?>RO@H=Jf5eZJsh;V0Bntpja0 zMwWa((}OJ=)SOw<-)A|P_Zx0FQr(gIbj=@<0Wn3tgXqNhu&PAJ3~(;E8kxTN?~Z<% zjpy=Ne<~`t`;1TOY`}eefcMT4l{kS%h#Oe~tpfvcYD^-lxC5+0>uXN^ddtyjIB!+; zjF~)rI6$85d`3UWYKkaN!H#{;{0#>+au?ipjMqr7@we3%GVrks*;E-pR}n`8E6e-Q z(kt@jXAam=g?)yhNyc@Ab?>E&Dbw)-%sjxY^kzI^Dg2m`nStlemHjBM`e*;4K=4Lt z_qHmhQwq2d^&Z{D7B_bZWl&=z&3bAMe;~;ioTUF}BlH>ZbGd*hDI9C{`jlEqLVmN2 z|K(AA>2h*_r&^?>mfoM=>$d>^+)C?ezd8>6cRQR;YEND-Yvd)k&+9%qoSbh{zQONS z%W!M#dHQJxV(3mr&f1x7$HM-);Lr7#jV6Cr5@?Q*NXzyaev%vko%F+J#|EkYZa;uz z@O8jsx9;Dw24sW@f7t`+kILQw3nhkS>(QrCM(kg{Pos+2vRFU^f5ql((-pR2-Z?nQ zoxf%F4&_aPTgDz6TP(iNb5;OYB`^oQG=lnD&;Zx1i-t@VtyMi_r5>*}3kY7a8@T&> zudelz=G9&6psGfx9;P{wELJqoI%}bxw*D%f+5zkC5W4vaB#LPesS=&wbvM~WDFObQ zFWB#);_L|^L*4b(g{B&9D(KhHT0&5BlZU*PsW{AlGZ;u|%($WX=G-i25AD|mn z<{Nld`P3J3;1EOXQY)u=0<5VLqn+@b-?eoEIdGl_v8Mhb8D0)^y2T2lMi3+o-j%18 z=A)YXd^B)Y%12sK!MFv>0T!xcvGUzhWU}FY=j*;Gg={{B3OQj?iVOqu+tbtzH%Man z^hIk1|7swnJf`{zJ6aom2SDbCk$P*8Z%G#dokUkJ`%BD@^r>JEGb3HhwVismLzd=Y zAM9mTXUYN?Y2|2K_>{9X@iN5i3*!*|YD5xozh7miqKR*f%1+HQ}^YCx^8!D)6^wJ7gmhAbW7fqq88gopr-$yI>Rg z`sLSJ46OTh(C_9T%JXv|Qbib?MgOpm%)m`F11BOM$CyqFattB{N&CM#ZWN&HUo6KM zqtSI81t_RgKC{WZ;}EGqH6UQKDA0VFdZYV7+MfrhQ6PSmew7)EVpOo&y2s%L4KL{G+wi`E44zr* z-0pgQK29tEw?8*26S3KoZU-4AS$z~88?huCP70VeG3ZRlijXOt9x6uKh6#-|$o0qB zVZHc&j-`iOVU@3Ji!AlI4!PeI$tb%~^lS#;4Jo9IUq*g$16DB98o?_{JLVQ{-4d}c zBaSLITt8q($*L@M#c)N6zzS8wi`oP$q{^QQ0Q#(-{>xrNnom{87DbJZ9M$ftyCF{zvZJE)r&wkO9eN zDT=8TqACt-&=LA9(A+X)Hee|}UYm(iA`K;g=xm{?u11T$t0(YCE;$DCj1)`j0qHYE zeb!a=qbhihL#q{`Rr>UJ1n_3+UF?lW)Y*)H_l+9Xt%EA=3_V zA$hFD1Z1^cWuN!rW-eYRcq6)9Yl|wV-}eoC&WN3tx+gJHW#F8zu=CIN+aD(dyir6M z%=aV@4qS2m_dm71a<><`1djr(OA%jJ$fOi68TiS7_vVoW$1fB3E6Jn>?P`+i3wO(U8DYPW!~_e! zz-QyLxQ3Vztpa$4pCo2~LH^CT8#rfL&$zeWR?a_eQaP8nvh2LJf?I13V|BKB#Hwrt zIJROb%sZ=ftZwkT^!1KraYuyA1yRGPCuO+m_)U;N3hOzE^>5#;yoPt>S@ijBJcdgQ zK)GlxvV`E`+Y0;n>$lLQb#EqL4ET-j(+dP0u@4Ko-;+Pgrleg1>J{~ z`Qw*?+lRuI2vX=uUr~TZB2(p|xxfF~%LnFVRY+7FCE##}U_`}Q!7CEYN#LCG08>bo zOBTBVXH`=7p!0Zh|GN?E__$#rsb5(QSc-2?ydA3Kw}dqvoceOX}; z6u|}hykN;dg#KxeFOX}LpTH?9%ZYT@O^P-)H?h*#val-dI{K^Xomnvrc&AzK-0<#k zr%8bnBHn-T!t>>o3&j0Pj9G_cB~d{@{;MdokZg08TNRvGzq@xxJrW95lKpva;u(p% zNr>zXIR+`0KkZH7JQ;j*l{pu}-onw+(6?)^_!vXAusD#l&B)97i}V^*^Ber#V#irU zm{$>e^P$r2$LIO$Hv{>4@pu`k{UkvLWJCt}!&mgP5Ebm8n^YoWZ*hGwz_+K`^p{Eh zzM%wf|2sRdX!02mb_aT;`tM!7yOqH7^tZ&qao~5qvVMoh%k621&7wn0>6X3X zNdW()zYQL+Nb?G25ck6-3cFQ32t5IL+1`vTacsZ$4H?V#mRf@Og-+uKoU@fvt*YRL z=s>Pc%2gN{m;W6956Bn)V5yWv81KT#ru`|eN%b6}Iv`u}IRVnAJYE#IedEzp)A^Wv zkO052DHV+lnBoXOIIS}dYIn2mM1vd}@^zMWaJZew0nZ>{rCKV{o#1fljSR-Z$LT^G z;65)FHG{uAQna)d?i2aT?5UykgG~Ww^HLb2%{c}q;Jl={*oYUW8zQ&>^V64ve8#UB zEDW%+&&nftO()B&!G2M*&ISjYQmX@zy`7s=qD!j`;Do;7e%62<4|ZDslKJSEQ|~0| z^l<;e)V``iUvW%@+@$Sy>;?Rmb>jo#U{`h#(S#A<2rz4N=$}5{;aX+D7V1KeblS(P zfC09k?kH<-4pvrQ@XVW6lku|QVmkr7a{0f|<9$qLsNvRtiTO)1^>cbdT(>xDqW0xi zJ-{!x)rR^_x=G}ku;{Hxa&I2-<9P#Fs+vP2I8=hufD5eLw zcqphM{;A1Co}*`%4R|UJ7h~b~CW$hFU94XW!3XMNkvNFIZ72&HZH8!TfRhZ9zRRhY z#yJXTEXIj<#^GEn`5-R%NA8Fg%Q_XDNmr;uQVCVY|EwRJbAt1_T)(vg1=js;(eGU} z9=cP&w1Vxs0pxNu|Ui&NZa^Ws<)078~{?T3={HJes)68`|;5}y~u|}l|k0=ASgGY zo4;QL&frf=MR-Xn5$px}H`*UX^75|744nSncR~ELWWD@WfW0$+8P_aR!khtdU;oU1 zi0jXS)gPQZJ-k4Zzsyi|zyiUb2W$MepsS2%I zUxuZ&>kG1w)sCUQd#8NpIe}=C%p9reO&9Jf_Z`PhUmdkJH~6gTt$W?__n!p=-4Mkr zsq&_rWe1#w);~yDxaqf|z#V}WJ!7z%uh%+3{@Ci+cAd!fFYE?yZz2l47vu7fM?GQg zrJjPgqDNreenGvy>Dci$tef%V*UEhs`;snzeAnPyy7s%_=K%D1EINOlt^7;WKx3J8VUlD)Syu-hSmVUpk;ZM^4e(j~ z)E4RwG*7$)xrNCv#=|E$NXTnyl0VvHX-wD(5P$c-#5&ddnmR@x-|O1nTWYGSRDrzg z$H{R)wY(k{;J=+K^V`kL$FqQEE~j;z_?EzN6Zm!kk-6#3V7Lu;Qd>ukmQQT_?*0F} z3@&4cQ07el1ZB6Z$GC@z9XRl!N$&U!PphBU0I2Wwnq5qF{AmM_;c~x}u%Gp#2PZg5 z1T;6C8e7Y7GEvD_JL08{d&6m+zsS5tOV(Q{-0p2n8BvM-_gi5g(z(Omzb)a&dbr{D zbCMbnc5&jB;F;@&F7DZ9R1*WX@TmA$N49wE4&2dP2}ZPlcDz@b(r}kh z_+#aCbah_G0p_=~d|%9Bxv4MEjs7hJCXp56I|VW2FGJNz+7@e_15Xvt<4Zm_l&Ll# z{na@0s>!!893f|jKMj?`%GkP#a-7m221c7Hk=) zGlb49Or+BbaSC+fDdQk;(x+raI1%Y4l{g-vBv}8@^+)f%7!@BnLPG}BJ_Y)XX;kC|Ya}BxR z%9#ry+@&ZMobyI&Y#Yn0xSs&28k=a{qmR6`6?ouDJo0>OCe)CC7rk35bo9TMuyOFr zyilOtmE~*VfEuGz{_^R){uGS?l>~QpURvJgmqY^1ak}Tssb0`lIG<8mM5b<|9GxOS zeeo721Sf*q8jz=a3tw2sZm)$4e0ElTn$4+bbi!JnH6RMJvO*)(zHkWWu=&-DBY%^U9%CdESUP)26s<;icP5f66Sn>yT6Z@UUEz$V6dXT z;+=Jg2KxQvAoB_+`F;6@dJztIW|!q#aV@OXg}pr%onr1Oo>~p-gsa*%bT{_4YeM@a zkR#D~DEoS$8P^mmClBHTOd zecX(XF~sx1Sp}$=W#8OW#1nE>kCDION&dw*(7`?nzPCDUNvN>?tlUM8C6Z?-HOOJ> zXO7grbXqJ(a3^9~Xu=i9&!;tjHWg0oV{IVqJb+sR2HnqM=f<}Op!#=g3j-mW+l&MM z95{7C#%N~aU!YgzC7w|+^6D3bz2e!<6`xsrhZWozp}YmMioI{s0!vxqPQE{Vvb!$G zo=&9^#YB8#s06&q{URmCmptnSIR>luBXHEooHDHR%GBqcOIB#93T_PHMwO6_9%JF0 zwUU;@FH7xenIXHoE*#D1DpjL`rz&&1CT2m_eaO<>6l#oF(ym@E$gBnW4-Se^AD=hK zVQG_oK7XRvrUCNTrGh!S2BnsX2EFK0EYoc}4hDKKSjYPb)V?N51u9hhh2yPO4z~%J zT32$Y*rQR#=m(zp3{>)!Buq5GoAh<}(I`N=9E0qIM8y&A5>cGif;TEZGTAr99kw3u zIVWpa^cXA5Sppv$+#NfGj_*n~Kwm?J_pZnpAM1ddXjBxv&hhIVHh3yWCiy@11X%%7?!B5#%&M0_ePLGX^VGLP@q=Nvs6_~svsLI z`0O{8I(b%ATAqO4xc}bJvh-MsXn^Wj_uz$?u0LOxrM|*PSeKAUzL3Y}m7+uZ)>P~b zr?E=CKbF>iEA#>UM%rbnF2Am&EkR^o?}ohp^2ytMfm-gs5t&hUWF~w-zQ20a>x{Ap z4Ix*yMBfg5&gVkJz{h?hMQ(Jj6KlA?tPz9aqB{SbW8kw?Pf2E>SOV988xw(hRO%y{ z`56G)&%!Lkx=loL8{izY3107t6NNy9`;RVuma!;)CD32(l>B<<)O2<`_+}T?pTde1 z<*S0T(utqiAR|4xF^Ee8?@MD* zISx}DoYi&qru6*_PNN9kcV@7Z^fzOR;Lg)Uzv_i4P|5TFD&YK0%JnD}suS{E5m$l2{p>!5POfXCKNa573G5}}#lGO50alpVn=owE zRL&BdDpbm& zvic>!e)*{z`5;e^qXQUtxa|k$f4@bBoNT|*FavZhUk$8ISGYg--FJ{e4*c%LM@yO% zc_+Y)5)HA5OCy~l69GTDYt54jPK)XU(00T=?-qX{2cSIqlY-Js8W#p%9|uxkehX^l zH8NQ%h`-CS?9_8mJ(XDwPi>Ol1pHOfPY2tPmGcXLSJ9pH z&p>S@S`QFIqi7=Ew5X|00Q{99wY65gyb?Kq*7>V8wZYAI6zn*vuD7nRS>zmVAm3CN zOd*)5d6WZ&R9i%}s2qq-F$tZgQA zvVV+>Mn7=#`xy(xgU!*AQPY7)PpwbdwSh3+?&q=d) zhTNGKda{s(Y&x>lx^^8EK`rQqjHGb5O5V$`|0vKlcot{ z{h=gQIs)*`Ya9GtVe-@k+#*L&2U>_BjS4)lP`7(KSsM>{1N{}URoYo2Z1$buK7vf0 zD2kHgr2y#K@_AC*cJ6869B%p<^XWOnWtc%W@xI8?SkH0u;Vghse{~A!y{rg;&rxp6 zd{2U{kdPZ~(99ln!^K--a2g`^at5S!O<{ywLyosGvy(r;12i_|pVwC%mLFpQo&3gl zvu!fNiSQO4Ay={j4IL?DZ901%kWM!rNdt~gcT8G6z$O}ZHEErZ+obc-)57Of8fayjyw zAisI0t9fvjdMd7xjk#*1JV2X2I>X6mwc|<#CyCK360eLkeHqxnuCN4Eo<{SROu~GS zu=G+WT@G$2W4HwkFhEhUg1VVai9tN=5iOU%0|$z;XrZ_+v<;p)HdhxP?{M35c%$9O z3u&hY|7M||GXT+8B>eI)-QqZsc z{dt1y(J{~syL<7U(hE=dg1Z{MgZ2sjT~|BEG*N3|5ZMx~Uek3#;WVWuI2Td}#-)6KzfuA#Iqi<|R~o#LaOW2m@l$F{kQ@B? z)O6`{GzYg|mDG&1_voDb18mSu1$wEBbnswx`tz0gyzJ`l2)E}PB2VGphEcu>c;9{A zE+edeO@jc0Om*2SQiFgqFrcvp}q3i=SPps3xnu-=0DAd%*Qg@;G54$H86Rsw?Fp{ez*2s zu_@E6o&&!T&3WBmDZvs6WQWc+rkDA?Kvj?rUdB;N9ru&B4#-zskP!E&KhZ#rl=}*r z)$4N^g&gb_D%_nizVVTT%X+Ec0x*1X)n-d0Y){PAHX!9I(#okk$027|0@6VyUGi z4TAVNh~3x^*+e6qKG*}K-^?vhl(Fr*CBSt#-?V(rjg+1O+c(tc&)hBP;dRjqg)-0Q*lrk7)Bd}AcYy#8$J#J8}eCj!owIU`5P zh#An3XDk>t_xJpgwQbb<%eS$`~^(bKvuexPkZkjD4rw^>YX;0pI*?tM~Fw-U$uaWy!7ZNa?nij6#$9xXdy5N|M8KNCUQ4cr5_BK`$e_vO8A1P3@aW|DU! z{@PQGK^=*Ggc2JIBoad)g=pvcpTKL>YX;BUlw6JpgcPZn6X*;uJs1Xj^fo78>ZrK*vt`wsy~h+Fl;=TVH;!ce;QqMtonC zWvi{%!pR8DE9I?sh#yJ=9~(R#YyR@pWn|!iSBImYoacmq0#7x(C->M5iD}{e(Td}p z61Z~FdLaI)BCq-5>zjQL5H+rEFq(I@Z=4P=KVO!)vUhADYq0yBP3IZ6@B}e zzr4|R#xaoPwfswA@RYOOIqaZQm;Q;!ePU&}HIE$!C%VSOfouj6Q@(Cv$}>`j9D~<< z{`v_$sjof-W-_;Y~(Q3(29 zOt`<=fnl(+{UP&a9BrwB9U4!|qa~-0Odf(L`Fl}~SWzL>{^OtIQ@ve$W}4xCcBx`a z^YjOVhFP0a{e;Tya>P17op3jJxlEX}k{-~JB2P1ClAmtEJD`&bE=rR77Fh-benV_t ze`&}!RhSM~io078^8Sz?JB1bXYf!SwWXutPd!-4F@;>z{D;GdP?Vtc#K%~DUeE54+ ziv@H;xK1I)l=C1VgD5>%FMFs+sWd@dw4*27m?QH3mH=I!-{|>ynba5=K)HkSs#|rj z4>SZinFLieq*(FVN|3ef%3E~=nwbv;_-B)xWIMaF<$(+gmQ6oD!Wgm<2bpzHsTA!q z)P4QCcdqZq6DWJu9iWq4En$~#=P$j0Ov{OxWySnu%YQZV*ubKE*4ifn{y97XyI%MP z*=4xPzK@4UG|CuMVHR0pl2Wu!X=+F zIf37h-)-@^Dv1(f$cHRZgMnPyq2#b0tCUeQ+ivQs;3V-+X_LHIE+!7@bwz9xxccal zI)ZO@UFG#gtDjGJaNor1sdM`Bk1GdSXH|(=jtbe`2e|Xnv?2=AsToSRQ@}TWPHw02 z>88LxPqP2>j;_DX1Ly|hEhi~T1trfQhSIv-lq2jW5yXsE45-u;i|l`$-jtI5D5H1Jdp+m@HL6z^gNzCF%-4Rb_N zY!y(UvOL;0tfW+j0N}cK%_Z9~cq0jcl@YDV7{!$bGh~a3UNblAcSJK^xIgsn4R_xn zF8qP)N&i&UR!2g4Kt_6>q_&3QsxL|dPuOun*1o>sYIFd5kHI^6`5f++2gsg&a-#ck z+|_gnzIhd^vv$N_rywul=fNzu)6(*iK$M){fBvS_LJei%KHQ(o;aboI2&{~4GyAab z-@14kxU+5<3GE!t6PY)-x7tXic6pPO78cHEi_M;AGSAT{$R@7z>7~Zak5L1WJz8Jg z`%%r#f}4hrFVi^_XE7$6nQ~dDO6Yx&zXxPoyel~+vgSwcAeJ2l{;{+8ym$`e-6chk zSoh6ihXgfqe9`%EQ#}1ef^RO*ifL!b{MbB@FFv8}&o;xofF0chA+voV?qLl33Uu^R z)htQYfCKlT`fmTyvvdmw<|#Bk9WfIY;|m8^MRDwcpzBvYqQC}Khr3hSU}Aj$PbDUM zJ)0sQ+>o7vdTv5pZLnDx*im9PVu>0&GBMyJU-KuBe<^1uI;glhsfqo@Z%In9d#AVr z4B?I?+ixgA%T25hw_OZ!&QB(SNp+6=&II`9vtIg~dZ$DQ_jmuKKyDa=xt#!RkNv&| z?5f`7U-JF;U#*b4Fp((Y@qne2Y7tj?6dgSQG}imWw+vC*Y@7p)jT{aOmm_-$5q3D! zmiqo`(n>TS9v!>6zw*Ete=FPvq?f8bq7*{#@ZP!p=I*!O!#AuU_oAdyA1+im9N2!W zHj+$ywVqc%jS)-jPk3Ya(L(!G92v80@3Vc2P8Nr4RZdRdvtg>0PJ zrWf-c1}^mkZX`!s<1hT~xC8t8&Qyti`CR++4Qi@MxodxkMwk+?%dsnvVNWo0XHDQm zRb-*RbJ|=U?CbkTU3pXQYck=4QDFGPLciC5KS6#pZAsDj)3ux@WbsY7Jj;zVSm0Ju zj-^gUX9AOFz<;~8uo@m6BaH$W2}`okX$<~R{AJ#2gOvJf&xFu1iPZ;qmR}xz*iwzCx@MOv);n4 z>@RJE1SxuU3$j%FxsEu(`lg2y&AA^{X!}(Jhl9+A5xvzIcXvM%*x>O#do;SSOgP|H zaYjOjFVP^y2sgp4+)Ji}Ef8Ry(h|b&4{MbsA3~-_KXimumBS_hpJh2SWyhBoIv0?_ z%d)CL5F^QhthV&j4iVdZvE7H269pyTtn*$N5=0GTy9lcnUhJhb(7HENIZsr6eSsbQ zkf~A7@7gad$eq7m#XBf+5=j$yh8y+zf(&ZEff1)fdJC&jEsh}bx(&D)F>dzn(cJPXl;T4<`N@f8ImG-r7M;-A*~3z=t~peppgFSGuGw0hunS zZDhpG$6|OhwFkw+*$ImA6!0p|YrJTa3G&hh8IYlqUrb?(S7F2XP`u!j{ykF*4`O$r z>{py)Jw5ZlLT{wLA{D1eRm1`n)xf%=`JJooX(~ThM;c2*6Z8u|RSQnpYpJO*t?O9{Q4 z_=7s6R6)izoI}Vy`Mip{jiBE+ggHD|_G5u~^ggstlAJq>>foF!9C?@VtNo^s!&zRB zA{(iM;Rnd{i1QNqqZpciw_5%BexCsq;@AKptgSw*t$xJ2ZNW2B&G8j1&6wK~+8}a8 zS!u~E3cDlM?~1(|cbp4Qa9G258-oSoGLd62U6qB+Z_> zpE6x_-vSam844p4N;LJJ*aKm7Js+#|0Kjt>TP6=W~M(!O>V+Zo?x5cdt zl{WO5gDmFvBQ={8NIdvAm+BVT{-DBIb|B(hrQ#2yi_&ZiJW_-lN79bGoxK2pvKF^P zxIS}L$lH^UXm~z}6yGw4WoVY~QHaI)2sbL`J|7=UcpAG6JQ8gq%ll8(Twwv79P0ST z%jcY1a0eMfRXoG*tL7UcQp_R=12U1KDTC+5wpU@uMdzQ-F4CNka-}&=|)NKg*s7nQMEI$3c3m$OwHHOPrYK(;7rz7Pcd)yE|G>>%;4FUlNGdVtuyzgxEs z&gSEH00Rqat=?!a{5TF`(cg+EAKOY^C$P||kG#OwWs;E~>)ImR62|S{5CbQvZXp_b zQ|GoZu%pVot9Nn<+e-nS;r-`KiQ7R8eE`{U6HvrQ{Usazf}EMJK{{4*r_Kk|8SG3t zn3sQJ4BYVB?;D4=3|GG_xIK0VrW?m`>M%gQkd0|gJxkWp3P4bAEyR-iJIgrKcH%9R zsY#bov4Gk&ok?EY(g9;KK5Rgpjevw zfmav24{Bcz5y^&RKVFPLrgWchG4jtrtI(UZm!U<79)6e-oJK^h;!abq1haq?h*;~l z=eHtk1|qxZoy0F*3`1~1zMm*I>6M+anpoe5t=QdK7bZD1}t=9v;;i`o_zAc0G-oQe)sD0FPq+0}TzPs-A zrHaz+H3)d$D*C>s;~D-^e1LN__4>J4o9EI6WW=}Mx3Y^n^Ll`V9=uyhLmRO}1#|=N z-8Nkm9Y^4-$Bqu!kM_A&IYUP4g}R$)?t~lmLWrGYX2y9qPYY+^rOy15y?wo)UYWCq zJ-$)07wm7}Bn?es`EwT%#5sw4QOLW}YzA&}Gz5$(GK}X0LvUTd# ziNf&6kdN{HbnD5pbCB(z-d>r6+~L0}nnI8da=FQWgr`-=5_lEd?ev&D5MzLQF4|HG zkJ7Rip$6wHDEOIZ@jJyJSIO21xi|Tm9)5xSCWtGaJauC!1}wA}(yB_tAQyJn^U2M( zS&k|mRlq{KJHRQ|`B6Ut?o51LbQ0y{du~A9-AOB}2PmRsFcWza=BA&a_LKuy8B+6_ z_4zE?r-l=AuD%!OXBRsi$T!xjuXeqvr+I*UU(uI#RLpE;^n%EIIkxOn$pCH{i}iN7 z+1TDg8FtY1@5%G_aiky*vvVD^J83?md_dF~3)egEtDY!WE0DTo(Kf2t_7TMWU|x77 z63EkALB+<4mXY4uaoS<`9hrx9x;p%Bb+9h#W$~>eENbf@AC&f$xc7Q(PXlg~F~4n; z&a@O$0DZNTM$GlKRH+Dj4*vdWI!oa{)PxHKx0Ge zc~?7N))QMSNjz|p<=bG-?)70~6l9BJ zW5>s(qlWCkNxjivDJ$s674DlT-IlH9kB{Ru@G5ISP>g`?*Plp%6sqhOm5eiwaKcy2 zSb_h``S=HJ3;K%=#`oPHsPsU_r*HM6^jS#s8NBb~^2tS&YJUg7LWA!aNN>J${>RdF zEIXlM~8l0fXm|NkqyTfMSx2#*_0q>A}{{r#g=*P3!zp;SKL3Q-tNb?pORs8)|g-*y_ zvawaJ(l8qzEe#rl0qRO&>XpAYU&3`Q(?S2_*q}r|Y+?_i=sYtA3-kb`+4SlgmcVVv;p)P1?MC;&-8h)Bo zP)klhj^A^cZ{NiV_D6$kz|PN>?44_m>cBpqjx$U9RRuBw-utfb?}D-JmZAXV`pXwn zvY_n<$Ox2>yfM9JW)XTIla7q=#2J6`V~2dmuiN?dMnpg4J~vhfp&Ndqk5yKn4%A@o_u08&jc(;fmh*jPBDYN$72 z7KH7-;iRFBXO!xPx@HI2q9ROvriG5)whwMhLg9;(NQoON%(&K+$=eiPr+;P%{B|XM z&(=GP8X$hABmDY{v(aS+xsi48$Y*5Tp9?EONr#*GKO|Vi9H@l|+li@Kmxu~Db?cmK zA$WgE+=MaCDJHndL>~sd;a;)!=g0M7A*#UgTU{Ogu0JzHLiUE1d`-_4HE&V}b&TO( ze6|k!yI>$I<~lR%mpZ8fg|XEuC#JLQY3)aWef9{2fBm)~l1Z?WwQn2hrf90YhOG>ll&~=9nEF-~jcBS@%^(gzWbRL?Ue= zvGg8&#RBr>{06PO-NoUoWpw@-RE_QUP1#) z$Zn~3>c!Qb@RnzwzLi|}9En3dC`3p*L;Wb$q(SD=tHb}K!`%e|WD%rV@!`h&Jg(;{!AegjPC`=bKW$kyp|%#a}7K}uHsLon&=Cl zpdcyVtAg+JRs+kBsme!gxCyaf4Wx#Mb0^OEx;7w3(XkndoDs^695`Q7G*5S#%EGdN zHCtczPfQN=G+w|D3RGd_nYD2*$n0UzRn_3f6~`&CX4BNwia8km_kuIm1a!WSubf>G z$P>znBnl^ABe7E!6y|vn5vY2JG`P_gG*mjDf%}qW5=rMO&T! zg!a@JJIhlwO+gk(6v>F4x`R-dpW>*8=5~!=f{^# zIP>)UsZJ)w^8dN|XA=A4@jgy`gNWXCHk95^!SrEw;d4C?_j7`Sg)_Jp)U5=Y#Ik4w zrx3~0ezQXDaU;kCx-KJb#2&no5#+wg!%61{dDf|c_6kSN&a}@q=m7ePA75sc*7_9; z(BDVUyt*RI{R5}wk=|98uRg-L4QL8gbBq7+7~aCbs-pNrY@?&jIRn1C7Yz5~w`qRE z%%??hzndd9f*}p~7O7%H@u-g$2|UiH@N7D-UJMe0 zh|j=SgHK;`qPal3V`e7A%JPbM0q5I@k!X0Lw<15-vrLhW7Tk_$n!whP--pE!BDH0h zW2~8=mS(Hj{RP;K$iqapo`-k&0r7$)Fm_Uzi(Ny8*wwR@*$R%1oB_%e0zu%DdZl6u zTK>Fu%5Q3P1PeRIopw~J*CQ`)AUV(cMg9B_M3K;Ub05z39Lvo@0^mBI+X7AG@lJ-A z&~l|+X+ZOr6`Zug+$habth>xA*u#0505>8*Pw~tpU9%SLB3FhxO@p8$)s)8f-UV$vr2AtNX*ngG{r$2srfK^42k6LZ-X9c`1 zy&s~dkBmi#8P=;Hw1u!u>Z_0$Prx|}D@H@w-T=3=r2Z>@Ph$YGEWos^5(d|GCIkBi zeF|@NmkzKm%$wo*^xn>-P00^f)z?})ColB=y#QpMZO_1=R#Vmo>>;YZN-7}VS%WC| z*U)ZOZxyOA&@Y_zgUh;xB`Sy){9vM}#^q;|2CE{*@Ag8Lh)y*U+70Xvew=M5ULf-7 zT%T<7?Lv+c&M&izl&(+B$$0SOnf_*^pv+x)f#2SV6Pj#aXTu86CU?C5j>!vt>j!wN za8~%vCQ9Y^1%G9xdu^ghQE|wnY|%~co0B97u;+0n2Xc{r_|sr;Lg;{fDeN}yss>r6 zuQ+-h%hL9z2dIy6R{d383`M}sM4oBL#j^SnBfviAR7Oyh`yN&oXjxKs2mhN6vDYA1 zr;QxPu7{~g!y5!{$$M?<#&-_vq)=(LChd!4EI`Y=YSYR`ddL)VXKhzeYJ8k{qYeAZ zIJ?B4u}!a$>hZltN$`c$IN@KGG7&f-Hi>mzN}~d$kvw-4K#^>7yw*d;kiv z*FSNW+%kW`?%?Te%{r?Tyt#nasB<})yqLfn3OrfmWpyL?Mfef_dhmH=&!rbZ$-uKC zlumSuv@;X}&NnT?C*iH;@pC>B(0#Hwt)+9*aDvI}u$AHria7G4Ej`aCimNEeEmGmcbJdaXb9L{{9 zyQp&NuA5wFb22t)uO6!&31nTAa4cKem+26)uMGQCFf%6FmkTSqhB=Ctt(Sk0`QPd% ziza5mA!YErs2!Dc+3!|b0L18?m*Q2!mbx&9-0}OLZKMWz3&BoqdZ|px%xA|25e4F7 z=n$E^5W+sqc?o_xX5vT&vP^Tl9UrIRX!ioU(W(v-ud`wtko#Tlu~C0#!kZ0Yx2!do zQAOc4fq{6?K9pTP)tX7+gzh=@m`^)xM{WWPEGGIWxi9Qzz?tLA=U0%D=qDc&SW(U1 z)#=(&y_!IFOF;{B7(&MW6+o^kt!*zqFkjXV?j^h5s)xi&wCe!q{x%ARP34xSJU}+a zW+)_OH$8HPyry+6rJ?R4l?<$kNh7=b@EGSpMlbdCNEt1QN?ihq+*k*7lgz@Kl9bFr22G-^k1ZDPX*p~*#imz4Vhn5=_b@lH~ z#BAwR7HBR4k%+(hDU~MuF7?1mifg@~>hz@P2=KG~&Rg$fc!u(UOeTi)=*VBhb3<+x zQe*vWi)_^6U=Pt06?@mE>M{VIf;HE>IG$9(;KW;Gpg&o%>G2W3u9-4MZrzFXVg#o@ z&e8p=)nr3Y9>zx}#eR#CdyBw_%DVa&MTTk146tHf5CvLH26l46ZyQwgN^&6<2Il%M zTzxOzioaeIh>xPek2z$O*9qR2A$+)d+7b>G0V_k6quh|XMUEVJ$?lX|KBR=QXn<{R z<3sJccnk3_qdAsbO0AFTdS(BGrp0O~;Xoo0!vmA2o-1sUnd zW{ab?Arr`-L%m}vOqJg?z`nLB`+JWmoG1B)RYTTF_D$p`?*QIa!oRH!O2*;`IR6UT<>*A1%TL1o?Cgi@$XBTlr`Kn=N%==X3 z@&~Q)1Xj_+uS3ez_4Rgs5Ch+pWUD!IeQzMKg25kYzRN#V0Fr~L3MRih+3*{np>7t4 z^M=^!w8L3oc%^sYD)MCkG___J z;P6HIK)k`3Uv46|e!74>M}1A)jUYJ#583SR-8+%LuvCaaY~?SSx>t*dj4NdErReDQ zRTN5wO!)YhI-H4be|rTYO(XR_o78QUPk=RlhyA`6ikAf#|EkT^y{Pfb}eq9Ug4?* zPOevmP(U_nt%^9NI9 zkc+wmyvCBQ?KoP^=A-bobXnXZ8QCp2!9M?mIv(F))1U7GmSIKg<7UJv#$it8!G#y@ zFm@)>z)r5;q>y55b|^SQVf%CYm=V+!C&A8QTSbgr{!4SZpTIapNm{B) z>*mV?FKL8c{?44RTzpu|r0!l-Oyi5uIe7YLzhf^m$X7ULdC#m&^+Jki0KQsYTq&aN zHqnrqMNo+JZe>z33-G=8$~l*kufA=px@6^I!8^abUd{iTjK;pRl6@Ebui1-KvD_ zfx_%Z^RcWiZRzay1tcfy5q-6Hv+hT5Qh;MlF#@g z7zN-{Y}=d6n)(hdtj!}w?2R_1OS~trSLyV<+ln}^-xr|1H)Z|&dXhh$1J3uWe1iGc zRb&Y#&eNX5cz=49Vj7T*g$?qi3*W*(z-+)AAlnBq3Z?}9h!E5GCRnj94S+@-F~Vlb z5mG6I)&Avo-5uc^ECu*(ymT*@Dhqp6z^d#tMJ*%xg)|0aztGNPK`x7u=84Qd z5fRsc51koAb+m8R6+G-gz|%ARB|fj~a1uH#sd{!#$f|?5j8Tee7C!cy{+H)Zk({aW z?ZP>bNr;|W*=tw4ZXRY$z3{qGLe%{c_)wJGh1oF9uQ$PbEQt&(^XY;;0P;*UKKosU z_z%xQ&aPr%35@ya6ue*9e*Hy?Ymm>dZiEf8HkJ$T{aS#gusq6@K7%wjoX8f;G2vbE zhL;=2j1lW*yR|YW&jTwZy1y95Yqu_koe{3z;9@^cD?)%fud8G$O$a}}z5z}7$_wtY zcl>)aAd}+db6WJ;lx73C{m%uEm9o05od6%IeXGGUaVz@>;1mWeGV4W(R+a|$gUJ5+ zWi=|8(FM?^$vxlKb5Ne#LMEaR|8$!7cXD44S-zo z$$r0<5*P&NFH2C|PMs6yKqeCr8%Fw4^F4tTDO;Z%6Joa}NddXa)lHbDm-)O*@LPoq z5P_mvx2=Is$-0vnP)tDH70}DwXp*-iDvrWk0-hd2deP4(GwU{6h( zm|C*gmluOmsN-V;)uvUd!CW8y{_E^%%5x+mR>VRd?XXWjoo>E6H_+I}y zKVSLKT>b{0-P=#%7MsD?AaXON4sRGY?i?R@D=jA;mU#VY%5~s-x9@lEmioH_-~AQK z*=C&Srz-#W3H5I)viIX_K74G<1I8Q+UtNmvn6YVcP^ ztPLc0k;t-u-=FX?iVx)`{Q*0wx;8rSUZ@on#=krM zGNLQ4vRQ%^p<=;J-<5n*60DKSIU!~TpH?A54jEc^+W%BkeS@8RND2QHJM}qA*hS*$ zEGtD5`99zc{x4M7SJrO>0xScG+u>WuRk7*d+{2=Im6vtDWmx$`PVIZf?%0_paEllG z#oI4j8)zGHS0405#*(|aQ4Q|91GzSuul{#baCV`aAhRW{NU0gn<~;0ic-D1T1)QyO z{-I4jsi>j*Hy0qXPi&Ai0`?A*^Sj=WE`2p8_-j5R+UAbrFMa{suC=@_$EVE)8#qC} zq(4$p{7k2Va}a9njk^A@dKR$!9v3$BmOIC>f%jh9#r=h*W?R5HQzJ*!?;?18#1NuQ zqPrVF0%F~e(Ku_VuM)(t9met;-BX1>N>GoY z0C8U*&0pc1sc&z+3$fmc0o-cg_31R~&5->MVtywnbgftid;?nMeyzLo(@1nl*e5az z#l|V>y_g`IHyU`(n3jn*3GDQVk#{ay@8E&;NE|&CQg{|zih}pP`EX`686V3xSQRPc zjBtLj{ocVBS*FC$rLG~>4_KttKu2Psnsxp+lMB0tv-JrttU$aF`X^?;d1CqCK(3;r z+nqEFkywBeyRfbF%zQS@2IxMTFLW*5_q9WQGgHb7Zj2sX*n$4eQru#yh!iRTyv9SM z1`$T%*CT+`p?yey`|K162}JZwEXUt(>F3i4GR$KAsdbxe0@9Hn>NEFLw2)maf!!eY zA#iZY(nok-rq|_M55i}5e~^QnLDRna;A|R$_l~rOw}}$t;tN*KvW0~x6oHnIQAGL$ zzxRL?W3T~KKvI8Rt!JuiKtQfQpDOO};H^(fgXrn~_rX1(TmA+!VZO|zW-u$+Bw!5c-Y`%f7V$w3J)jG zCh-qV+dk)I9CG~LYj*s|zqq{E5T z1FG}(q&Y}mgH>^;$-TwDBfUx3gZ~%mG*7ZzHq3rxvKIzon`R1cLW?AR(VTxkQ>cKE1unL?6hczucGT`N1Z-o@HUOUeCKSw*wTO}7g#-Bj(j~a2cA58 z9wvDkqc|kwR+5v=3_2Mve1Hm&@kcq|p#1%XQ9xqda6{Mi4}82J8wvT9XHLr%f&_Z> zEZsQ%g#`DVfV`RYORC-bJnEK#RUHL`d`vZcY?zN7D96A9_-%D_62z79%E&jY#C94@xmxH`62dyzu7_dl24b`XPbtWdf-#WPl%q^CVpfY zPIkBzoM@PzIY746M@~$p_AK@Jf!%O@gZP+c!KNF?1h&%8Yy8Nsav9F5Py;vG6#2LQ zfIqs#-1Hc~#WDt*!fHv5o8vk87J;VJMUgfp%}N*KeqXP2R%ww}TO8O8=BL$jWJ(%B zLpCs>vBXf1RP+aso6%#nh!fKNH4%t{jCtp)m?(G1dTO;^fw;lx77$;#8#&8=z<7kR z!M?{le)vcgL$Ky^H$LIIm%n-iR&>%_0Y8bHAWabQ?H-bPU(TQyIQ_~XB-JjXIz_&a zbDn*_nOJLHKM!bkK>mgLil3yu2+jz(i%*b;WvId`$I_b`O}BnEX9M4@j>&lczN`13 zK%VPY|D~2ka$RV>^=_)9#Aj>n2W}5});e^4lGUC9(*Bh^ZIaN(_7;E%-}w{;?fNT< z8t74yW9o+N_4Gg2C7A$HN4Qok8O~eC zKj0M7dx=ytXWtg={%(2x4_dyqy>S8Nw~|WYO`=CGIO`m@muvVqb6LG0x6;@MdxTSA z$pBxbe6=W|=AJYPP|=;T_RN-v=r}Oa^t@kjP4d=-B=9)m=_K5zBH|o+$vjj&MnhdU zNq`PE*J@d{BS=OEJ0ialIe%WG$j`vT>XKsr1u(W=&fpY&33-3S{uiS=uywlvIIZ6% z>uq4KMA}~?)A5G}1-X$(mZhH4!+3hLDZlV zr~v5T#oitFJ6rk;09N^USGL_`t$lzur_9wF70LOmTbwl!{VA&h&)uEZGx~!|Z zKj6vDWnGL*k%BbU;P@fUS1WB_>}ajJ_8!W_*PtYy`%N zrXZ7l=58iVlJ;l6z;EA*d>!S?VF?Pkc6WVXZF6c<1o*Sc$OnlpnnwFNs5} z6p-mP-{;h8C)eEs?8w-k0JDT6FH*?li6&-^Td7itz;~Z^qn>o->Ieh8M)+9+$6ved zZtH*g+fgf`(*Yvs zrvlqP{sM>R<5xLrAon%cw!?X)l%fZ)gz+pPh-EAm0hz>3W2D#mxPk-nGoXLoR*~G+ z>)_nO4y$ge@3i9saoyVym_T@h{mVj|gG;+^F?w_Ez?yl5XywxV=*a{!HoR*;J>?rx z{(#yK?z&<&|N9>?fOcCf_dQ5W`4}zm`?S;U@&{buq}_QmsPRB^ zeTNayrff_-rSGy|!TG+LmyRs!CTS#)oN*v)u5Zqfhcme2E|HspHjJhK{wP2bs*ASk z_II$VNk>Q)p;-NboYji2{UPxiQTh>B!f~|i;-hE&VfLtp z-wj%R0^gKB*+9G#qU&1kHrde7pA4sLpZJ>$UR$AlG9a2#z{z*#NK!>SL=hOe{dfA(WE7NF zS2pB>a*oWJ{~~%GrGTAm>xaDy|8l7mNRDe7&XMYjBag6xJ+4c|o7(up0&BK(Bz$(~#GS*swdyUsR%(8G}7YQeWv+nPc-=~alIKa!YFKv_y9c{LyjR)VGov zNbN+Pm~ zrbEEY_G`^8CiD@z0Barx*?Ah?M{ZcLFT|xIO5Q8sVb{#kG>U>cIwnB|{#Z8OJCki=*BX$Vik#=S%wChY%_8wL29NAes2%|H=8~@O=lXq;{oODPd#L z3EX%Nzxy(N#;_~J2kzv;euz|-{RzDH^YZGSWrgJ%Rvp;>7#2wP>DVun*pw@eiVw2o z2B^>EU$cP3BH}~dj~`)dj81qh)&n$xH&n2rFX<~SAhtsLT&^g6Hf7k$v+mwvF?E~K zkgcL4E%I8D&FEQy7 zfSr6w=7cB0(pwAuXShqXcH6U%k8oEmq0Ld3UrXKTdJM>DgH-i zSs;@;&aljF=;~jP548KOq}AfOP6KB|j+nLz!(W6Wc`*AiVA+nwALWC?8dtBlElFMj zX@nE!4P&BwmApL>obN!yRpk5#^$REOD9DV;6Z)tUoN9`BUweDi^Mf3~hkj=MXAlc1 zn+CisRr&HY*@1Ck06|@Xr~Xb`_a7A4I-)X2iC9w)9@7FI=f2U*c_H~azPGC-KOxG za6u#;kU7aHZKUUnm0uJ%{mT0+ALYheCxjEL_b(p=?Pw+@%=VXCOUz^nb zAo?0%aAFs~^6Jb}N}d6EM$o_KYCpWpaG*zljSuwL+{&LEgH^qnhQUACjYhySaNVD^ zyIzdT!P{Zk{NY4Fvkv*4A+BSpqQ|h@U4Rv(KZ)pSzEMX#crRyMlio)X(l>B|q=B%; z!gHeALYaKyW5^rCna7ar?Qhc*jyCMw0lSgdm&-L#mS(WKL4S}2@0pXuIDmrip(#T< zu-(ar*#NA`CHWz2{$FOh5sPo2|9QF<@-uuEjIq~^X&@*0pQ#p|;6g6d2U*1EInQs7 zJ_QAD!&{lEu=63BFT6j(runXurX>uRaou&bb`gvs76eWV(aS6O(udx9EwmdthpRS) zjRTP9LL6rDOR~Wgfp|aZdZ$oWJ1^i3@3;NDia$W1t~l^k(^sj~*?+O}1u_`LLQyD& zhHeQbICFmZB}lbyBoRatD@*4~{K7>JR2~HuKJ`acKU%F}m1~%jx6X`1Z{9}wkMFWkcFWu&lMPIs5YyIfh zC_|=+BOyfP|(XT5t^u)D$L;^@6yjeEP`drkEw+MwZ^xCa{g-OEyp3;r+!T<`}Z{(@eJpuVG>{5jdbJp^kuUrBOi!5``eI42Ry`A>`}Du8v!qMJ|; z-4$yM`>i_seOB0v<|mw&`V7O0>R6+NFCaN}Rh2SnqKI69d#m`3{&`i#XS*C=VCHt_ zl`NgP`GUyHoN{mbJ&9kH0DYn8bm@_4OOpcD?C8XWTNRR1H}I0xFM8ImGrwni5ySsWdKm0?VI*2B^;&a!?s9 zyH^$5xlJF)#w@?xH+Pz%1}m)G_?}AiO>WEv`^t;zGQRVJArY{I=1;fPni;o5g<5ut z5_4vmE_?x^7&cSdnwD{|6*4Vz(&t_kOdeGb;c^6W3lbr%2b_-6>-gFtWCviX?H7ILr#>>q>t1 zzmFX4DDZE%5afV4lc+pn!UyD!M2ZmEh* zZYyQ_EI=}mo*FLeak4H0X+KLrj&rv&Z4^`~w@1jQnDi=z8?umXMOj^f#o;XQ8u!F= zfuT_^;|7>NnS*BLtBXG2d%s$sy1J#WbqG!$L)ru5x7V@3xoKDY!^FjL^6~>#C6FVU z@#Rlz450g8qMBpjy^rz(a_09VzVDQZ@l6Ncn;+YW<61dcFW_OrzRB$1&*3g7@UVfT zN6Sx~?5_YBVySQOtrhZ4H-OBWgBqsO78uO{PhJ$iu9WEWCPUy;l4p+ZGS0^fTJQ9w zD3zC|vIlQ2R-#t)cdXtK>`O)S)bt6*u2ndl{EPA)Un^6>NGE*^t#X;pD+m*Y;(CGZLP{ zXM!-o(+b#j?CK+uo*DXi!#e`$t9eo9DUk(m-Gp!AuG7D~yTD)Xy)?dYiAMtgGOpS? zs>$12cVq$9Y$GY#{Mf;8!Mo%5iVAOLwW)*^&S-8=^F;s0PK?JdNMDx2oQiqFsm0|R!v8|19M;F9~Q%iVJ9VEkz9Q(o`S)7$pfn* zjx;t#>-eZXkeqC~>t>`VY1Ogv%vbL)SI;s!d%TxT3d9Ql(PAXiy*)&?U)d=LRl z7@p@h`&u^u| zw(s=kkN^JqV;q$K8V@CEz1q{~2Fr88;XZyDs>!~90C#+MT_b@p#wxya}Ii_WF-gMf^B>C0`6mWS%+ARA9K zn%udLxc)^%z&;PNJL-4Yq7kenjjT207^i&XAN1Wq(})jUhAGfNvTCv9oT{&-fb&f@ zdZDX93V#VWK~3MuxY5Zrh1|1YwOpZQ#^eIKz%Yj2KM~XO8w#0A4OG|4Ki@UN8Ii(W z^-dW` z?ZuQKVnx6LCy(l!*6*&j72u8jFRH;2O3M!yJlQeIyi-oqQ(*UsP>X3m&Bc-9&|du* z)oS*x{Dt5Y7@_NnveU*c0T%c!ae|583WN0kQFv-IyLh6H6|Af-wuC#!wBer%R_)pe zku$vQUhsA)8gHb!5&w8auEE4*M zM{nt5vIF28)*P&DphfW*;2d58wds2dh%p42B1|e$UACLI2Ya-=;`^Il#2@N$A)m~2 zhB8TQv*Cd6#jp9Mo;O7%1<-CT!da#6s85Xn{be2F92eq50|Z2=ZoO0Th1*67_;i0?<%W)tiawD-nuVW{Bl|ZXTH#5gEXp!{!V~_zwSPXYT3SB4oF>? zEG3a{TQsn+Vgcc-XMVSxaR7`IdU2t<*=t)!$iER^K|wzL@M(d^Aziax9GT8p$a=b$ zjyW->Sp0Ng>pXvm2{YaYyaspWo>`@Tc!Koa5}XA_YoBwX-+#stX!kI6lXvtt!gOFa zZvSNFoNJ8v0*Ipjh~{_RPG!`ARpB3xd2_nlP>`X{k~#`=813E}VC$$X%~a5X+?*g^ zSAH0I8BHW%dXV`PuYTNQC;iGkh$f_J7>elqXJeq2c~2-%rQYONCPKN=i0U&6Cc(kk zqo!Rj*!9`e0_@}#7}!8OEOx^?T%NsDHA_mCzrY#k_Lwo;TZNd#%3oF^#t7i{ z)TPF@iAmPXA#Xrqi|uC*h}{61vIxVOc`fgnFCJRL)l4+GE_fGaO&_g^=-)jLDv;-k z(6ugBT0CALlUSKc@_px>?1H>X`*~50KgsD0W7y9%hd)VwNpBZm(a`uLamSqe2;+rL z96v8(sGFDOL8ST@l?kmYbx;SXAI~L%JsboA{GhqIN>328s7@`^G8IFKK3Iwfa-<|* z4z;?k`>!%&v=KsY>E~D^pk>L2?IJp&n*oIr=(-nQ(oL9U2<);K{5Y=++karUofBUt zvK^qu5FjW<`mR+vD^+U)9n|7O?w#k;<}s`|;vT&gKVO@uK^|!o8#BI*#94pf$-e_7 z%L&uu$pM+7OwoCMvgsmMpbuS3@%#%GMLmO4P2ZBH$$5e2JE+Tbw6zt-u+ARHGWV!2 zVp6KcX(6lL{c;vTA(Bdx0b;z1KZlQp{g5AE%|d1Om{>xD9Ny0|)hb0nCL%q`fB0&@Sq%1iG}CK0v0mVx3i!dKMO^&4oM%md{w6w^ zUwkUN5uC+ISeh+Q;)k|opeX_=5iQ5{OHXzXKY#A_yPL@uPCB3z2j6Lp)%F_rluEQa z=Ae2d6G4pQ-#9jFd}H({*k?B@aeW~Ef`8y#vLcZIoc#u zI&8Tw#{4gnZ%7@g>Tkycc%vzGWXsP-Z4{85ZoU2wZD4rtk>M;7-dp4Cy$S3KM90(d zw8mo$90g~B$kk}e+%-fcjM}QRdgbYJ(sBc0_D?14TF&^B$AX(FH6J3Yaj0C7z!y0f zDS3()wnaliaySQU!RV4k#|W^5dHL1knYFW2gH{D4 z*ce0T7Kh#6A0@vmr2V~u2b_L#$l*;Vp=7~HyJw-K(Tm~SMh4z0+T1hoP^>)(a7NuU z`j+!+zM}>(KR;Z5>kp&j2dAsN(sRLSY!eCr&a*D=?`Yp1<`%HuN=l<=FHk!DLQX{; zbv3CS9%KXf$~37|y;YaAU`G|-;ok-QzHMp(mZAK<3wL2{WoZDCK{%l-9P1fu8{n(! z$-J|-1XP97pY=14PWPBDO#{}9Y4X;Gb>LPY^aii45&o})TiSOw=YqpW?NOuS_{MO~d@M&{BaWr1u2 zYoMqOYX@lpbTE#(507wTg~FMb_2VYFo#*Q71>Sp5Y5XpkoBA~%Pe`>TsU4i343KwP zoXI%*S)mkgAa=%2BOXY@KKc*9-iqdH*Glf@4|47msZpU>%;2a8Z(D@(`R%0ZTm(3U zCcRvmk4mjmz&;yAH5S-`Z2_#=mXad;;ixVL6!16$^>_NBySf(xr;Pa_U1*<=xHQ23 z%3-~)g{IZX59CIoPpFDf7Im)$_>@0`VX&sR$?F78VRCiGK>zezXTh4A!zUu0F4UU` z`5fJg?Ze24^P|ChtoMyZoqDOb18YA0@s!e+{OJ@pp=XTSc`9(K*JbLzk1gN=`fQoIyKnmoWT;$IW(3Q zfYe=aO|y5TiU_=k%j8yR)ahN=6VO3+=kf(DM&p*8sJsun|ZyplD3 zKsMm6%jnJdH~NP2a9{Eh7iA`;jR&ww9b)c_+$MuSL9}S5_tl*KEQb<^fV$Gu%gVukn1toYf3e-t_YD#Rx<=oX|(=>mDQHyr+DNdmIWvMi3f%x0a1H9dg8?u@0AUmoj3 z$O*G1=&q9o;arfz%2C&)dF-@JUtq5cK`2;%5c_fm=sF7X<6fFpUnuasbyHPN)DH}v z0f|+oj>(;Y{)3DFZ>*tF^esZ>Wej^Be|uLOdW3yo&HUeMdV zfmIcc-b|#i={MvS?vv6LX*}?r3838k9{yIs#dIHoeJ+Jcmh_7iBRKa^%H4r|7bX`C zz&kG`$=-C9x2OlZ84KPFDy}gjv)tuM>-awu&ewwB&s<2CU*#>3I4Hr>D zV9iL+@;NT$%h3RG_3j_u8beXz;Q2C5S<^==axYnz#>DkP8%^AD8JfnwDq z2lS}6_uSf;ulRzzYO>HriTSpQ`vYfj;vaugFa2}EIq7@#A4%7-?WnRt|K*L}z+@Pb zlZhtJ0E5XnfBijGJ?pjH$KWbyYfDwya)gc_yQU$5U4>!vh_dXk8UkYXZ*Mj2>#3;* zbzGP6&r8_!Jzp32y-oIYSM532w1V@z++c04RrWqMh_LB6hw(NGYz{oDvk=PIy#7h>-tNUaY}P11Qr`!MxY%ZL9#Qz3Yz|vB{=G@Z2+3k2vm| zI^luUotx-qxh6nW%EU$2<6&-mvEi+4ntR!iNXd(SgS`)Dk~aeIbTwTp~A3@!@)Z@ynP98+3XV+a1|kq{HI8oEqs905r-r$YC?3Y z3VtsoktfE|L6NWEol!1sYjRjB<_0#YWw=DVG)){LP-kd!#1pHy+T$;rEo;d(U18?L zT;S992UkMxEfF2;Jne}!O)Y9sQwE+8{dvgbsVE+>0IzC~M*2UiwJr?AP=m#}B;@M= zpTTn@N68%d=LeV#`14=B_J;|j*?r+Ob2TfCkaRwk0Bf7petxj;Lj7eNz@FFmw{Q8A z=`*a0E(Iyt#J#Ty4suv$kDaC-u3Ug~!!^y71!48Z6ly7#=N0as*Le00V5*tcZlUjY z8P$S{Ycv1Ycy5#C2bF39R!zA~uzU*k0a@0!H=5beJa~i7NU_ViD=D&JFKw0hj7uHT z9pNA!?B1urzc&B&MtJgAj%L2-9i^_I3L!V^$NsZAn@%AIj_XJ_Y@I(OfbB!F#bi0A zIo|>gmD6vjc88eo6r85oS5@=rsYkjY&*7U*m9edQs(-yaWXq!c6-V$a28%e{vVE!1 zQK+%+3Id59DN8eejSN0HxJDoMI|noRoF?iYs!4AJ;PcjPd+^xFUc#wcEB(h{yVM*g zSm|{c`=0mUjn8o26Kc*Fa#*Bq!kN@9)>f#RBba`GT+$;6vc{LKXK2`yZmJXiD^=fx zC#~yjBr~yS;)6ilyl7IMYj^Lv1{v;3F1Ev+$nt@6TXx>CDr1a|5}tTwgzFtd+5dtI zd~-Hdb^p@@SEa#Q-PEYAm!KW)7vP2vvaCxbxD~;fFYhrn-+S+@jXfEU-spGDq^q9|ENXjPWJ}Y|z{zVmN?izsSv}JF8JQ zgSi#?B~WWvG(v-#18E&EpMi_Z26Euam#q7b2`C|`$*89MzKxO?s}<}*E+^hn=x8&- zI|(FpVMN89{vLs~vRPab56(BO6|haqe^R8GsSWR;{-pJ|yA;zRIfHCbN&Oc|7SeZ2 z!CFNzcLmodo97SIH}0*f@jP$(u!MD_oxktDL}S1;z@KIG&#^{&w|LlNf>C>eA|D|u zN3er+;|Q7^a;O=AicR6r&7m6+^Y=6mB{}s*_g(Mt6x27eHNwis%E;3KtZxo}>&=W? z6vFBUIg;Grvaaf{fXOf=w-eS7Oe_I%I?ihfe01dgR^iQo>6*O#srSVKD;aESVv&EW zu{mG{Bv3Tb5wZJr0Gc5R`-}X9R;&h|N^imW&K7I3VQj4`T7q zL@xiu-_s)a^qg_1XibcxGMtB0Yrt}_8^uPn*9R z0V4IB7-Gx#!7ZpdE@pP-neC+Z@MfliUkx5blaW{eV-@QU#dr6GATfvnnA|Wd{BT(c}z7=rp%m!j3@u~Lv z!3vdRVeEs`1h&9Cfu3cz1lbUOi~^h>2<@g>wO1+03s{|I`sa(}e0y&I5}L?TY%0r< zB%B$6c-&?2FG{Xc*rESZ$V7PPzi13O684Q|^sV#n2~LmwrHw!JM`mHL%Yf?H34k@7^=897O!(I;O!brPRP$s}Jy5JlTj65NH1?U^N((c#-;S zIU>}r`#Mzr`Qs5-#zFnMTpDMeMH!6(b%y1tZ^LLa|3?GPzjmLKOR}A0Qt(#(bGf&T ztKtXt4sWUZ2#4*eE}T+i)3cuLy6@#*uo|cpHLBR-t5-u!@sP!ooyMS+);gVRI685$ca5;`Q$W(6FHcb~{n(O~Ak@b=x#$vM_6uHyqlqHSf1 z)b(8>Ux3eiPRNPC?)MA ztS~z)K*VWnK~vJ7KMchr&GFL-VrOfrM8#!IdM3mX0NEdSDOLr4LmAgz51 zo=G`Rs3TWO{t#LGx6e4JRgze)eE8~L-V1g?!K|<#J{;e{X$AHYDi<1fA5;hXTc{*G zh|JdTER5aUMrX|4g9qUeBPa-q&fAqgkxt`vX}_K!&feWf=E%Ko(;;FTyme-DDN09sQGe zCalHffH`cXHmA+;KAkC`Uiaia$;arYE^Xiolk)bwihs>r4OZiFFGXx>XDS>}VcxV4 z#xlxiodJlyQhBDg*Y1S>z&?6Q@*OcBPwzGjt~1Rng}A2%}3 zY8KQ7PW(Cf*q)Rxx^Fy)-O<3)Vakd{g#+7=k&8ey+oL_G=%wk1f?Cykmu9HhmBiVj z)qBx%;8Wggozxj9+k^LzF?aPD!rNL>1}I9t%Y!7cyD*RAtN2-xP)&!?A> zn{c;)F*=V?VIeB>FF5C7RMhnja|SUfVC{HYX2H1#E;oH3680sIhwS8BP+_tkb@E%y zlnL1;Riwi4XMwsw0rW2Dn&BNkBa#o;h3iE`j}Y0>2>Wom(s)UeD628l_YU87ucH&q z-Ee~Q{qcJfQ=HH72In{?$=CyVFu&yAOlor$ITZIRp$AM=|KzGDjY$(i6*4y8=&<8OAmn-6MZAu*vzb2+l6w z3<>9Ya6#`61$r1=2tMT~jZg(bRX;eWKNDzZC7GvsKM#0Hpk&+kh09*o0IQoc&mX=_ zlD&U0r_*oUeaH5XTj9<5w%?qaIR6+3)Zd8OoJ?|B?OwpkXg8F9DR0ZR26o|Xzjpug zXvs!G_B9CP{Zu|j!V}MC5Jz&8yY-iXb*^}Zf7_kLDH7a4jwPbP?ZShCm9c!p*en|# zw+Cpp;`-_lE_VH34vSg8v2)6sLRVn1e+ke#dakWF;t?i5H`xa#n3Gy=c6gpveCk*?5YEOI0eSs0B zFtX2P7^FR#V>9^_{?0N-$57=3#Y;WaZr6*;4@HzDw` z348H&to^;mAkcEC`m+7<4}Hb;+MaMe``uT&t)82(0VZRj<=Pe)Lxdi%=Q+ybH1!6x z3jiyKY{=LV-uKwZ;M&>9-?F&`D`Pp0EC3r)uH zs18^G=@=-3HJG6o09EqK!uP{Si!TLmaxC=_+2n-AU_FQX8hw|QkHqW%f#1{_O&`%O z8>r`IHA5|N+c`@Uuq%snRH;@th1CEXiQ}oJrhC`EF^o82p!PqVdOXO!4ErSsXTq~F z1Kvt3QEWH2HhjSz&+jt4s%iAz$_+3U$Ao>&wGVPeRbG#8h z2Am=IXV43EG=Fgia5HRc$G^0E)4y;&ENu@y6LsIaAp!EMIki(s`o7BpJU7i4_I&J* zgp~j%M+}+ea5=gP-U^EitHsGO#Uuev`a9mWPWk0k=;i_il=;Fif(o<9Fb z-wf(kXb{+6q_rFt&g9D9@sf2lHV+2ib*6-`{>oK#4|&dCGWSU@=Lm=sWKV{kj9*E1 z8YBYt{L^3eS{%#PA^@+v&@81idjCvVb*b(3Y4TnW-U~n#b;_wJj3hP*KyLLEw@BbZ zg|t6#Dm@dZaD9%*P9lKb4IfqVNlUl;g}0O$_FJ}UGyOR~j44FL>AO^AHedy1TZczg zx9yRF^Myai`)ZT>j`$9+f-Oa#ArW;$fci)zTD?cX*=G{=ho+Z?Bf=@U#pi%=LC_nj zh+_E!c%}KSS@RNe7&(ZNG8&m5C6GoQVk}3UUZ;K%vduv5TxGxCF_G%87l3Ujig!;x z_9bsR@WCOe!in4#0trFJw+J8ZBaz-AkCKoztl@oo7;fpWrLp4GejvVL7<2r4$p-&>g@_qi4nSlv64oKwLNqOU>4=C^jq zeKgaAv%pgZ!<=ey4tm@JHu=OM5xh=~|3Ez``$;ae4Bv@&f^$jpr_-umUj{{i$o?(S z?j3EuwOU|*Pu!r&-&&?$`Kw`2iAd1Zl*0&$pGm+OdiHpy5rfXY0qi;Vyh|eyFB@P-70Xgt z-MP~*=YXdOw4XjLS(u>;Vv5T##A@yK-JIZW{hs1Q)TWSj05Qe5*IQq$up?t&Ij$gG zTI+e50cT?RkBrir6-_z3nJHP?8|z-5mF+-eXO~UsS5a<05n$JNXf5HGDtrw)1gp93 zegsv1=oNVPk+q`DW=KUsoj_$M#j~=F#YsSgnI6armFA&v0+@GGO7ZopVQP7>`*jyt z#?3_^D+0D5{!zZe(4R1*8W>aDf==^{RDE~@wv>reZuPW;-AQpuz4hp`#UBg!;FP&2 z`emZLB*Do=bC14^{RM2hf?C-u6K~7BPV5aQci7YC6FcjPy}_qTD5eExH3%3w_J`i8 zB~08)|AarlHai*V)+s;F2v(;hb|GboPw=?~SXWYxCw`mFjCH_NLqbr3{ukxc3RpqE ze^SfXIZMt#UiM+MIt{nIw+pZuUYC}R^+Wv;YO{3aSuDvBJzWgGnJXx+Uaae7I#suTUC_Di50iBB##8X=cwt%?#`eufAg0hy$OI~NeW@8_^vF`o^X->Ptbvns zllbv{J4eWygty;A0yTzmqH__%P`|Jot48iEpkXXieqX{BVox-IA0hJbzE>TqCJ&%W zmRe^X82Mm6Hq6?xMH)CYJU)N}n;!O-B~f1@*ja2Q4oiq^i~nK@M%W0m2|fL(J3NO? zxB8cLwFO-nb9)oJqy`}hp%wK2C{bZH0G45C*m(Xq(RI@E-b zdzWXioQOnV?a^N{NR&2H_&HSZz47^c-q;&WU=}0&t|j9?;R+Rif0BXDKkhf=I?U)* z^K;VY&HceJ$QS6)bycavUjbm(L!#?tVAB={yZoBZ!=Ujv@>>nN3;B9~nOf#&Ciq2T zY?mp6pQ>zt+a1kyR`n=~*#%jjSpJBZd}=N2fv2Qr_xpUVuY%gZ+RtluPF6m3U9SVpk z==nz6rj4$h29?h-Z}|4P!sBP0MD>4I^~uubb53aST>mZ<*uhcvWc zk93NotzuU4d;v^`c67AN2??Dz@Xf)auI+rAEDozZd1w6gn9z%00=#a-St6T={ig-s z_Xcsp>+|ZSISM>;ayUcGU=LSB92rN(P^Ve@@!kXLKaFTr}R>}`xC8cSO=d!jBrhz#u zF+9BB$T$i+*H|wfMhg=d76qRM0V3nefxhh#_`>dS)Ir4dwL1U_18kG>#1lyM0ba(M z*cY{k!FOhmr)b*SJ?u~3d~SeOZ24@8Xq?TNfgS7>_e#0Zt!N*7^Ae3;*P@Wz;=rf8 z7jv@h<_gaMFIz7f>BPh9g%d>B_A*uGjS^=MZE|l2>4~dJ?YdoITO-#6{`TX3I~M(&c*ufZwEj5v;^?nCbbxKj z_$8&Qj5qEFtfc!R&U`%&#(2q$Prg zqaDv{CBiyiV9(Sew!@1zC&v^4dRveEl`V2`@h`~u*2>?$1zD*kjNMkM-!YZbQ~1=7 zt9)Mw_AR>{D%5RMax5{<4x!@WGG=GP%l+NKes8n8Z_#Kun#PS_tRW_V3DveHv7u*tkxz7E3(P5?EI-ft8SjUl7x8u;Mt zeCu)5#Kg~Gf2ifRh5S>yC<6ET>J_~%3(>>|-cf&D=$Bd=)2@10yS5hQO+6Zw!m8== z2V3i!&rjyB^L@{fjP+!>Ef<0;xbv|j~d2c9S z=3|F&d;PH+LjlaKXvWh2-0V2K0Y10SO!Icz%i#%j;Tsmj9=_&5^?}uGH}_`B%+nS) zkMGZ&=4p!K=z$7#KLXLR@FAEl)aQ5hB%i;(^?Sgo>9uBgo*s-bV^CSEb{4}gkxOVn zEw@}>3^hta#oiz;5buLw6(ht|*j@NpZ&^n7%c8V9kl{(3%f%0_{B2u<1(1DBZ}YW2PHh5IX@|hG_q}M=8r&&LhWBQMZnA79 zJeOQiDky3zAJ*k#Zkf?bu#^_P5s-9PM?I9Vz78Y-|0-%qlWW*r;| z4S4KyPg~7?`d0?$)G#NqiQl;6H52$?l8-;?(95w>K{cQng0a=rXVAj;e z2f!G05mPTQm(LcS;0rBE;9r)MYaUb~@VS=f=H=pi3eIq2RxOWyvEn;{T8`QD&^s?p z69O1Av)d<@3@mNBKm95#=7<;bK^Wnc~~B=5HF%2g)d zJOb{LS@gvrjG^-|Ur2ARj)(Ry`~3Tq{6i{rUrJgMAZM5rBML@&ci#Y!h#oaKLfBXP zhUe^-OPFQx3=epD(<{KeO(1qXjVMX!Y~H%-{ve(f|LS-Po4Rj_A8)z?}r8@4UmO zeUz(U=eX)7ui)pjD(vFK#F7<0uCTd2%m*3h3ftCgVEUQ9ZT?DADc_r+cu<0@4)^(KFL*6 zTcCpmwGMb>&Gwjz?hZt{_lOt7X>Grr09JSAm5vA*=dLWkI=$1<4;C>JO@g%|h#**k z>e~OP{@>rM9zspi)C+(;3kPzd$($F{?!b5cl~?zOR4l`)3+-uo z#dVxEf?vdUx^B&g=6J9x`6tU$MkNi=zqgGhtSVQIO^13=y)x0K z;yiQ*s#}z5rlzM&vjdg1`5fmTUZ&@6fE8x$bta+P{N5*sM^pcqU$S%uYz)uo`u0Yd zXps@93o)ELr$yRU{Vae;)PXQFg?wub-pQxd5ksTw_lqxp8&M`rd$R`a`U3T>O`Qn!`S%k?C*z3x8{XV={JX+- zwRj~Tu)k!Rciy{Mw>Ju^A1=2fKdH4mQ3jTioHb^uO{c7|uY9}sQkOi7N@Gyl^e3~_ z8b`$69#qtfuCAe7`3X|MDE#G*@#rUprUmd60;d!OVZRCwZ?Vp#+E`zMS;!E0_o}XY zu=9Uhmjo3IHj8Y5et)UM0Wl?WaYmzlYaFTo2@8A9g)E7(3ihYG3xxe!wxQ2>fX}O7 zm>N*r`20wSqS7qYr<8~zcy3`)_@#Y0?SyKa$LhN;l1d#90ba(8INmD0@MU2ipTc*w z^|giCfu1t(6hD@lH0K*&$T7-biE45l>w!&!Dq1Y8C*2` z;S7|ARi=1$?ioXcS7-uX_-O7+DVl>!;5iO!c(FS(F5AGnJxHGPvhRe0gF*!)w{6Ff zxJV-be4~Ej8eJNKYCv5zM$K5Hw@G$v;e-?om8|8*yM_S!+GJ)FZj`mZ2Z$Q(_{G^y zIu8pfF6xdD*{d#$RR?MX?9cqD#dr68csJmXZyxV=)}|rL)rz0C28@C$4zRja{Nqn* zz7xv?*a+XWjqf+K5LUo{sf}C>dFD=8hWG25M)`!w`=b|NHH=|><&7}B<{yZIoZ$)E zd(l_n0~lkj=FhN*CF0vqe{!q>X9;jEMF3}DhCwqD=6SLhoDn32fM<+M3N@U*(V|Cl zrw`Y*7O>dRiC96d84HD)iX{4LI9uvE8nQ2I2$f5Wh@1QXRBca;Ob_R<#fNw}sKdD2MW(u5_>WN8!fA0HwesE4)r5TS-U~)o(Y{E|> zZmtA=zZGEZCDpJNU!;EI!Ok_tu#-b~&<=-pY`&R9rNx5MBk<5iwW*7#zpom0QZvE( zi@k7%RVxsWGP@N$qApmZ1D~?-rFZF+_#+K6`baCNPkAS}MF5Jp~}pUGV`*7f$CPk&Sc7o{zbVUn~?W$&LZ^V9=6I-VXRJw>= z1%La8w}qN#3;KhdO(@eo1Lm~K!~o=f7l%L44T9tzu$bab$iKRo;32$YiA4$GQmZ5m^-!~g|^Qn$&hxtO1(8RectZV_?&}+^Q zCFe+50oe06JeWqW!!E${Zr(CmZqFE3>)_i|1A<7l z0#V{K7yK`g&y$ zOIrMTu?nK3X)gs4khAxK>N@%N%@e_F9X^~B7kNeIQ)I4T1Nd9(MAwt>CZwlE zppVvd!il#w%VF%i??RY>Uv#1Q(We@j{-8a7N_wc9*yt)2DyC{BMzo|7doOr*Iyjdx zxIbh60-yF*+w=I6jARApcsiq6`OJyfxHh(x@Jo!{%^4j=?FFLDZY;0G!O6qgzsQYaJHU8I*5PQT(ZH|K^9{lerm> zX>fB4;(nlu9?IQvw5(vQCQ84Miqv$A0G@(V``~{ZLcbfpzUm@tqa(P<-2%CW_|QJr z1hKZm`M;K#AJl%4bGCqdAK_o(w-PI?I>B1u89uqK9kNCbF!p$7WzFb(oibpZyRIlA z=WjWzTm_GcsQ$~5f$U8w#Ytir~=AMORT-vmxzIT<_)dA z-k;Q-KN-jt=TTs=zYn<&2fJnGdg)wVs*fLt-D~O<&xjf0r9eg8fY^ztL1!0oB>X$n zReSzo^Z+rmt?$CWrHrF(ut&{oBJ`o$#+8G(phU?i4r!R5Pzi86>tbE16zN2ODg;{# zIU=pIN&r?6w)2hWB;7qe*xwOTFQWDbiw;3taH6%jMhkV!2ry(##RuwLDN;6q$|t5A zRDZ^a*zJHLDSqfL7qWL5yg#WsG1U_V)`Tz)R{6PRZaxVO4Vc>#duadu{tOib>wKw! zL=k0ThaEuC5uHrw6u+~KLACQlCM5Tnz2O6A>(C9kJ9#ya4D20lD&v{siB=x4NB8_> zNA_Uu`35x#eGX^Nox~cWL7svHj77!e zG@Z$`q6MBWBxw^+(>Et!H6Wu~^1?858DJerzm|KLgCx%y@VC`C<@Rs>f58lppB|aMW|Y9KFMte}`+cW8J^m6Lc-f|`b|d_4uFHYC_e*la zh7L+|oq)xnmj({y?MT7k^ql@tG%qH&j0d}qWE^WSt4aq0@T1J;eKj(ehW>y(8j46W zwWc>YsQJUatCi!E!Jq}OzXJ9Y3GKLx4rd771X+o1Y_Mz#eEKq#x{YKye^l7fOr*qs zkGlRyQ1Lifq|T9BgZu){z+}}W9wIN4H`qaSBp;0vyRQK!3-{XJx>@nKJP3$5LV>RH zZqO+XpUb;d+XP&Ag|MT_+ds0e-`Ik~EC%Hll}e;hivob{ElK*N{l=M~2RBj(q^sR` zvK-X`cCh|?#IHWGk70w|_hcNkQH{RdaNdMiqwKg7AUcf;aohL%-on0 zO9jo~dD$Ki$;Z(sj{#n0INXaX^3|bt*q_pp`6VLO$i6`3b30Ia?aRL$AI<`Eq&%8k zsdQoza1}&RVxf)dtT;dn9gy%F-$}+cKFCBuY7Hi*;FTSs=y;Q^@}Todyn)pP;6J;1 zL?$&@4X;meO(y>AumoO~vDa@A_)Rn6j5*@vVd#qs_?iP)x4x^7j8Wl!!)e#(-kay| z%nuF)(MtTOjJSxKf3P6Zy+4A{gwrbTGMuY*9cO(GdX+V-n z-p~|Owp)UpO47=aADq-VZOgJ=4|j|$yxSuwbGowX+MjUlp+>m{ zr40KDwH-8UJDy1S(bgN}p+1T)82weu90B;e3P(R+UeE3}u*o}R{Nl~w-xrKlm>rOg z#~Ds?!;TCQv#|=51^*4!S-I7iKqtD<1He?nrjP1jG|o{5wvisCx|dzNT-3h_zrNGX zSbyCeU_tnRW6L;@)nNl9ydJc&)^s`@7x2kGIPPINX?Ns-hfZRAlBY=(wgOMJc*=cK zi8loT*af@@&N4%$sb`?_q5gH$L^E#V0JiaA&Al0MoVg^{Y3!z_l%9d z!=G;#6If?z^-8NM6zZqJ2s?HH9|+#PHQ=p?%jC0&B3 zqsZjH15m~1U-z9%#Abk81FdD% z{i6XB4l9uD9n;k3tV$i;*k4xZo3B4-=p(TEa$anB6EYuRhBKQw;hXP^V$TYw25>mK zrK|K=$qM$RzSd+p2W9VVz;a(U7FY;Hao!az&HVx}$5t@WwaUDJlsK*X1 zYERB$conRT1i6svwB7i54)7{+HoKnsIx|;zn`Qj0i7iQX1Zz+!UYe|@m4*a$O(iO> z>yXrUJqK&`{4^q9wmwTa;N8~MSm}48N}2$Eloec^Xx>5(0>~EoSJegnr%+Sq`|qTX zfudscg4!L-gs$pb49+hCoS``i*S#v0@N}?N0hqVY%H#D>UAU4=M+Z_QdMcbw*j5c% zr1+Ol0JaCqf+qPZUNae11C9$*R33X37>K`Q6&bfmZO9dY=Qg$V@PnX#&==r!hB=#i zk`dbldrbadUC4 z;6@kQ+-3-fZfN29MuH_{lJNeKbF=Teu}sY{9a|z zYKcpJaRFzJn?+0f#ne4h3J~eSVUChj4+UHYe)Js96X)zfK2T@OAd*}`qXdzmLi@zi zFBVP6NB`6+W_k$Y@x=bpK!Cu0+HZyO=XNff=0-a5URhP(H!6s*VlqFJ`Kjb6he~mY z;W+ZOHaAoi2(H@V{pG&N1cw=JcQ=d0AqNUILd`37Kjf=-EI4&bd^V95N$Z67u1`~~ zehXVaLjz(;5t}R>6BOsnfN!W%^anI-WTQT)q0ELjnYt=N8J_mnBUvGkU?D7-|o0IuSv<_%^x2}E5wpN0SUE* zTmI`1wH})!oWd+!IT4_fwy_b^_D4yX!ykuUS>V5Ocq2bbPpj__M2)$9s>?V$R#Twn z{N`7Q8T-8jZ^3;%mS*GNFK>k!>^DM0w@_*_%Y&M#roY6zjmdOw;p`Ri#}0(9HZcwO z#%5#pZb@$agS8Qch;gQse)MmIIwxxQJ+#IY=Ns%%{%x=J-V{b&!Acr(5lHJ9CKH@L zNLY(6*s=RZ@PA#U};hPP<;z1o+f2)BuV zbwW~dIrTGlQV3X(iZFDqntAQQ69i>r~#5fB#O>)3#Tw)ExrgDK6b^?7#+I1iANX={PS~wclTI z1(5Ip^KN>{JriKh$$S0wdG&ecC-5U=N`j<#e-sx1nRV({q?fFp&sG5c4L&+?;epNtDaA9P-o!Yw8O4~x?wt;ox~Job90CCf|Z0*aRt1o+wqZL{N>Qrc$Q^W zG{B#6B1c!$M^AeORS2H_9+Ih&f9L>EbXwkjz&*I49DzNOO2tSL&1UNYumY=b;)79C z4(kCv2O}-`fhCd}Tq{J7X*s+K8HYTUCQOA1Tbbif@XaxGY9m>ELq!B{l_SOO`p=cC zKCtJ8*=oAI{D(MT#&`HWwYD1RK=lUZ46p29KE_x;L_)IQFnyCXSx{w4KV=mq)@yGD zU^z}+4JIz$8+XBp)hdTyCP{u12E-$SkQl{{#4muaKYrEX>z=zUy}){%PX?k8$lDp$ zAcrk|?p=D=%l_sdU&zY%Et9N-g&n}jji3>JZS!Q>0TPDzTDh4K3k6iRL@zG=CSw@B zp$_vRr;R~vK}s9|pY69U@09V*e5kx+8(P0CTCq_&*!_xY{>)Ri*EdwBoShKgZ2kS& z7JygIN`~Es#I)=L7W-p^oLMfM5?K%>L%$?G+f;O|0^Z7uACoIOw=EP9>9A3eP88!8 z!v-9Q{&amig~p$g!l@tc4ow)D%r_Q1mq`$YM7neCHjvYy>Nn{qqNcn7;D+Ss1186u zCsKgP1PW_t(p<$hRJZdBS2f2_wQ~{hI_0IBMMH>#4SRUiDTt#`5YHUmZ%-V)VAqj9 zc^>R9hc<34?pyC8z*F3p`->YlXww-yw|(WGKlW6J3=NPU9cZG6Q^qz#fWTqElmvyi zLQVpVUBA4eT+E9NV!&ftJ+Vx5*{FYWYTU>y;vXXH2GrdWHs@6Ht?@)yjaQ@M@Ao;s zqCmhmAD;2k@hHM8sAz55jP9V9gmoG4BmYRF)3mox_n_kOtLcfV9M$&+>U^^3Z=t=1 z)*f(k;B>-73|UE9p~d#wu=gw9`(pukEG?;c&(@v(7C`R2{C3Ho!U(ruwI_-159jD{ zWeOnUbG>(5eztOY;M}xOrHX4(#m1~awkY;@INGSC(>ICK0^ux(qY z_sGoP7x6@MZ&w|tX$ES2-XpQS!piIe)hhTh(6*1UJ!B7JXsBFoQ=vPlf*tFtWd}d} zXhvL>jy1Rc1+g3TvYy>|+N>#<(SO5VNgxcqJb;_=^*QBQlzrR=_TuUM%kIBrJyjs4 zXoaKF+J>O!4o^(z6urLL{`*1|(AMt0N#z{0g+j)7KktkZrI^ORX}E2vxIq^k8Rk&I z8`Dj>p-e>8;f+B``7yeiVQdcYxlxe%U6|2r!RPLLnNyGcb~~sT^X@(OebOUhLH$WK zJxA>RqpG3=`$U|69=`RDt~H3Uxt*M|?>Qr^^JA#3Tf}!(T&TlrZr;(vujaCMIEht{ zeNpQr>k2`&hvbn%W6|e+J0Ch3aq`3-%Ue3`IjXD&w0lyQXzBjktwi)>u=L7-CL^{)Xza1 zdU8ZH$aM_dSm^e@5Tm#Yfk`A>=TAV;@|Gr0+n@S-t6A>qP=J=xDj`d_=5Z`Dz}Sla zFc!UbBN+lznXONwzBIw44G_!hqIAE^I`N&-W9lnEg?_rjfztFr#g9GAzuM**W+=$@aaOTTBYfZQ~owxx6EFGA8&CI#1wHP{0vDHfBm;+?cm{kz|$=rjhuG6&$@7=3Vc*;Cgi0DFZ0 zWntR+7LR@h-tD=LdQe-MnJ@6SDuEo=H4z|pw!{92>K&;P1D=R2`Q)aQ>+-O#+--QQYg<3#;O*$| zjM19s6iEtI=DvSy??=B6RDS?Y?x(pZ#w1r2ob2#NB;z5>mR%9RFN)spcib%0hf*Qi zZ0$NVL*J9X!1vAkLe(M&*Vh-U#-ibGQ5Flf7eF02V_m@*U-n+z;H~!AcjX6{k;Oc-vEQEeViMQ>o2lY!0N1$YKHNk2($z2I!A?8J@+3f&mb!=wdDCR`K^8h zfJkGAPs)r=sXqcgl8-|v5+(K~9A*e?9e-&wBBHU z^Ca;55k;9DddlBxd?`LFUY!bd5dTX#>F#kE6jp2VhZKyUXMF?q;i@gASyIWf1PWCm zSF-gL9WxFep6{27{9y~kpJKp8zm1w_CW*##3w+@<{pPk)tS5LwWy>=VoNPya%K+*s zjeg&@I7(eH|LX;a_cYuPGm1gwWV~w9=zoWEz!UA|vb>MyET~ii%=rm|J=toPttDW& zv=}b0iu=56IN4B{x9-Sf;L3K+KNIzY7{;ms9uUjc8&U*SS0;%vnYZvb+!&~B% zY4Cd|9V52?NV<+KM`0lNOJI^Yl5++VZe)YW8NPl;+Uxk)15$_TR;!A}YH5YKr7rC% z>VYmJWdYx(jOg{v4vE5IP-%X`L@^TCS*ROYyQLuW_1R4iD( zhi>k_dJxS}wza-N7+Mu%;kMFd+{BM1s}H;f)E898|5mCKK)){4y;9WE8R>Pwhmxl@ogb-$(3dFUYOivk%z8Uc9snxis_-N`RQN zbA6(Q@Aeac3aD8;Bx=xEAfQ@7zRXOeo^K@JKxY2~^|;O;sa}yFdixJu&&ct0T*xZF z%|J0N|1tItaymuMji4@DUdbks0dB7cK${53G5O8K*9YoK zqy6izK1k*K1v&Pcsy?sRbi8jLcqo~<6c)gShbu8y`h0BM3}*J9wZGz1xFc&7dBEfeUn#am*i*1o4W=`6xz^POzc2 z9p~eH`pYk*0vPz+#4=Oues(&b0vc&5#a$0!&r=uj;UZp-fv-+oWX^_OH{PO!|1fcHc)PF1?s{TJ)u ztQyjK?{4d|h+4odm^xDrPW3T{1mM`U$`!jxH^~gB_5P{ z)&PB3f{{lSok{WlHMxZNvdF1#_y_c4K7z_4r$jmU2ARWi-O9SAx=jJZ=a}s=k{7Go z>p)bo&|sVpesw)K5o)o5HMgS;?%e=;UP*nvQZ3kz&R*nGE%)thz_ zU{~e&RrlTCvw#M@pe*+3Ldp=qhqoyaTmAqzagKUfKVv%> zz;dvx)^ATkgINZM!rD*C3o)ykQs9Fb)=w`+Ztj`}^>3cqWXQatmiYi2D>JM?WG=Rv z5uEz-3ACDGA^ZcKf1i$N#OSCbw}lV<*Ap?JZne(DH(---s77z1C|9)wZ=_RbD*l0b zH6@|)&aWO;^?3{X2r$F1w_`^vtL2RVKeBqaimJnVZwb8RH|SDQ{3V&61e;u;iDY*70Vfx@&C0=SeasFjp<{&> zS^ikIMF`#~_oa;6)rLtesJ&vn#ys^amcu~ptdvPCe1mtBB_OHcqS?$n$9?)AfqWb7w(5QYJKrZCVPOAK0Tz zLs04L>8{e@eT_FOv#NUwxd7ruZ}ww{s1Ke*phNZAoAoXS>0?u17mSPe{>ZCd8x4GS z-bie%^d!nsV0B*+*EV0?=r#nFvtuZpBU@WxP^D-Z(}WMKEB7yWH;szk>84O954GLH z)23yFrf@s~|5q1l|8nT|&-FmwufF*rD_HZ2;f*`wef~ zDJ1QDcnOguSS>oQ%68e!6*~sl0i?Hbgq>(A0|bE(W-6SjIr+O``T>;Gx(;{h`9U-k1`2 zcW{jhhZpGY=K!0$W8+rFkn89W#H-6&owZg~DJ8)ht*PD_ElFy(j@;$P++gOyC4%lh%ju>9pAka5-?yQ4Ut7nmj87^kk^@FYA6 zFtBbu)_Xs{z6DwJ42ulHvb8B@gz9EvjkVRcA9xZVsP!?LjLtD{VgLr7-!HY&lyg=l zfUe)>ELtzI47wIFOE2l2*TsmI13*Df`v=X@@`VT#unirZQRzcnWfzsO*0>054VTQ@ zAcwQuP8Y`_{%(MEPFr&G$NsS$8|3{S{Sf7)e9_SWv3;}6Du18;9|DKCeU?H=@&yCQ zLCn$58c%eRNV5Y@Dthgq@&3-05O>MUD+NJvf zG&0ul;c_!Ulql$LVCmhUv?TxX2F?_b9jnvg% z1?O~x@NEn`$rPdl6>g{K7duh9$Mzua*PU1F+f|=E5A6950CDeC`61{V?80CA)CBbp zPV0OD(WYpU-)fcL#!tFh06c{dyE6n&i2t?1*I!5G`2Wt~{OH_IN_qsA4s>CL$d zQi6Iv4)AL9Kf~I|k*LFa<=1E3e681)1Kzi)4GilQuKf)r$SIU9Pcx4p zzvl(-{-f_GFg+4`BB-A-DVZg`aVhygB(s<3^;*7{3DslI>o=7cQg1&JWDNmT_|J}7 z#MlF@g7+uqP=0G@30MtXqt`w{6hnkPMv|`9P~AzCQ9)h^`k0Yu&-bkr#JW3=yY%C? z`uhd%ce~531RT~&8OXmHV>yV@s00&$lPNRPy3ieU!%x6>3yYVn*Md`?18P{*xX%#z z4U+^@vB!@HOf= zGlv-0E7(?ScnpXEku&=HRT+pSc0_l~yUrD)INv3jRJVu-^YJ zNg31}BuLq?j z+JdEke8jfsD?#Y5Id{Nfb!v4cEauLg0;d4mZ`R~5zT~zHus1`V##ia(!zqCuT}GSP z^&PS%?2LVqK#|0+f+0QFg<&R?JxVGa5N-Y0#)cl{)xUzGW#XXR1<1x(HOx9h*&4z8yXGd7^?#6m>S4dGcf9r8 zy@IJ6AZ9?bYZ^UbNzAudw>&FCJx!KO$y!@pMgqBZzpWrg8j4B_z|Y1P)#IA@ zkO4eBloOLE#v|mL5ac7L|EW=1NL2_UgYFfG?lOn==Ago$PheEQHx+_|dSMiGIk>7j z4DQHIy2m+xyBWhoRG~6hU-Bz~R8Y{{wDH%~uWlri9aMHGmK`ax1%IHbI7wy~+Kenu zqQEBCDwV&(D%3g-R%6k)KJP2{56ggPw$2D87}nL5P?<%xM4MYbdzn_?42b@fU%H8v zQ#Cw1fS*ENUYJghf`0@8_CHVm0oFy4=Z5)ibGr;}|toHkP zC*BY~h=jIj2O+_RxN(A5XXY(kq1Q}pE99T7n!3&#wmKvbuhQ%y?JewT403}@sKby{ zyZZA1Vh*p>)R#5bfI%To?-704rb%T=hko=Dtv3=mo0))muzlU9Fs$)-86f{U8Jd5o zB=1idvY#z~^?`hEZexOYbxq>)(0SHRKdAe_e23>f1toKXc-1d{m$QGbbd{j~y~Tby zlzqB!cn^2BtV3xqqOIXs>P)yMiF<81hyWEdh=abkQ{J--^a_Z-gyfu|^SKUCO(<5b zex<`Q<}avmYWm3oj*D?(*#)nNCtt6XMW(Ra>-%nziJs5!OfD%93duaejtPX0qX0M}`5 zLUiHVtuq4F&etMXGS#g|1|q-oYxAXxZNG;cN1Z%WcSX{6^@7TV`yhIv!3i~P;g=9=@T);C&&p}JgG3MtNWGgK? z-H0Vi1;?S5pIs-zNg4_Pv5NeM0AE`D831ncaJ?Wydeq_XRR=Mg>)dZr6!ql zmaGFBG$0ZNXWF>MpDA81kYNqyd^aBY9zPFc0Ttfi)mUWYsUYU~WpZN5icqr#EY_o= zAFoIXTEp8|3Es!sI~Djp3{CWesVipwnAZmf*7wAu( z$ab*JP#z&X4ROogQq5Qs&w@kQx#VNT$Ef7Hro?uSU+4D69K zSx9&d@AykV?NPfio!2_bX9>Lf5Y8-l#Ls&dz&fWsH*FUeQRoPAs3@v}zHkKg+d+)= z_VN362;=uba~PlPkUZ&14`0B4TZj8KlE<@g1}EsIawGrX@sjf3ed{UjO^)nw6>@Y_ zM8)wdZcB6nP{HY{$-1&l7Dg7`TVQcLm!Q*QUGxyKHp=4&+0trkO3IKxHdTcBK!ot`}y@7Tl~tuHG>+j z>qa*u8-+^*o_TqF-=~?>l=*w5!W2{J2--s{eh=S_TwQ_){VWoMI zmqF!k-%CJ-RT+F49*>pJ04lMTlku}Mq{wi1i{v}TTu|4KtAPlNN^>lK4v!2%kR?gs zMI<^ge`wgB)NC6Ovo{_VCx~XIR{zj&$7qHD`RJilylkj~JO)t3;7{k^haHq&2;#=) z49n0BcuHI#yInHkcyVLH19jooQA(S__Zknf_;QrVdU zzry%VaSey+S9Zm8ri3Cpu%NqVV!tl>Mh7;JcfXe}!FGBYSP-R<7 z59PMr-VT{PQf()k)J_-mn zX=$(_gAB3XBWJSvYd^;V(e-Y08pE11DFK^Y+av8vUYRBzD&9Vk$4Ln`dJXV0c^BHB zg-(P+KouKB@=}N5h&_OFssl2A1#A&B9c0*?`F^QCxQ)|a=w<6&C|pHn9tqjbjmUpS zu_>|yM#AeCcD{>k3k#Xjr=Ync9M^~s)WZ#P+mi7tsv%!c{}fZUrAzjK)suv|L4^v0 zwL`80bfoRfp7B1yfVHo*f_ll>`vePCQodqQqNSjrAd?Au`$^#Y{)=Zp^(0sRUoae` zbqWEl3rLKg7o<5Sco$wNE|j;&g62&t)R!~mZvC8Va;@Juo{=zRr5#~sh7iegviI+i(Cp|_%6Ii!I74aA~0!tG8(lLhmPNb{04}T{j@?;dH7=MpkC0tW-7zRveXBhq?0D4_c-lY%L(uC?PaJU zfyI|lC!Gng*~cV}%^Apgy6F{$wUzkW!5b0x*8Sx#?rpz8MC$FhNAIESi~n~m`)?fd z-ixI|unWtVxOd!fp5_8pSK21C^@4<#0{Fij;&Y#^{rlk_SoD+fp&)~FhSGg$X<{z|5L2XswH7j%E zEUs{m(Ami7_ra3y74#X(Pn?B+$ai>6pu)Wpxt?14q6|1ci3u)_FB@0Vko%7BV)gor z@!wzJDbH0z)|I-w z`m@s@Ztt-9*tzFWHVvSlSa=`$_*MyF0N&jeq_8w})_oVKV{-Gffb@-FM(~cdQ=6Q3 zF%J#(t=Ky7!r-(>LxylXmBdtbOz@x&?jj*Sx%(o?kcS3w2von{p0SAJP~2u3twA zQK-B|pJ4a(8NsE`Jybs%A)C_xI@$#??lS$9$Ptnt#k;s-pH?S>DbRas?V0DFt4 zG*egF9IXMmwQ``>xVLhf0ITwnZf#_0WA3v+7T>;R5HkCsrVT9i9W2Bfo%==$Dp-m9 z<;-Lb{TSZG(_VSJXVt@{CwS&-A%3DJrjIB>9>}1G4*#cez5;Uh%#N?0>Us~_JrLEW zE>c;{n7}?EJ}_PuYdsf`V1LopXoqxLDJlnb*|yaYb`~@_8z5_tns;(bTZHKfKDCIb zHLoG2iWc%gc?bFjo{B2?z!{7#jGxGn$K(Lrt#Fl)I5+e1>RSTgWO%py|q5znN1U4bJx{1s|Mbk`t_^XvS|}?kW&!0 zL)^fQ)Y=D#qKM@}%+=uKgy7R8nDIYwmaIMlPU6V#`&m_^&_@wGvlUcX9velSl>kqU zTD-@}l6-3oqHC9nYWMY|@fT#A{741fD7~H&0dgzxS2?be=l?{=zS1K+@{4xyg0bd0ocg3hlpTb=z+hvv|7(uIGhVH!|)fB)R~F`C^qf~Tcid|4;?JKy>U)(Rc^ zLmcL?5TQD7#^Ta)(@3U3B@2W9nvWEcnfnGAhe}(%#h$O`Ismu7+XtU|#-Dy8s0Z!$ z{y7xu*b9hc&S-Cy$N$TJ80;Z)tgwrb^id^Pamj#ls^;1% z63GS60?@U#*2BjOrK^FvuZFUR5_(&rEr<*m%}hsI4t*#B%jtXPB)oE)r5!wTz`xkk zc=l6kLGCt^4|P)*f{1V$O~%fI@piUGHSpb?ph@0*ZB@vDobtZL>vaTwl^yI7M=7^ny`#5fW^*^vjvgVMwN7rJDLnfki)ae9Gf~Erang8W@ zLRD?C{GfiQUY3YT4k7yk{SBfy&Nn$B;=zE*YX_~VDvkCBhk6q+p?F$3J`@i8sG07( zC%Ai{2(XeL^N8aY77#uLy0vRq@t;pveR6mcQ>bMU%bf0J8mLUF5U)5PMS_F#3_N#9 zjU+vd2^BPSN6E!?K3o@v?1gTEkgAa^I#l@0j7OJ@n0MD2_yQ^kXi7>}=|&)@G_otZ zSt`Fr0aVt5*L|bc%f`bP;7Rk(P+ntVsn`!hm6wEjzV(OAa5#N*mC-bbjibN(6ITn!&b8#=C!L59_6D&o+X;l>v^&0Qcwa;P zt682bTOtwQ=c&W*EiBN*fI5$a?|Ju5Z0!mAz-fol+eEjh+&~ZQX59}wc}iOl&9Ei& zCeP`nSp}XlnmBIg(q~;2u!CG0GF1?SqMCpl`a3^8B0aw5t&kaD`G(4PszZW;9W*g< zO@7Gqw+i5Wxr4LDq4Uuh&bs7TZ+yDPofL@rs@^J(CFLR)R+D5*Ii=-yRY=uZCWpvA!gA1SXIGr3*~NG$c%U6*i2D>LEDbt6dYcy zQ_IxZbpY>fPqgpMjXszUsDN(wN62)slpPDLoxSnbFBiES0XErcfxQu8%y&QV%bH1HtOvY1jqNFN1bZLg%ywg>gIrhp=Y))WgKz0cVmsvDKL)XG5-yuCm&=1pHCf%8 z$V+$$RSOUl8-J$lH$Fb@fKNrmeRq_Cp05nlIA+(GO#72>gaX|j`^jmKp>6!7gZ>7w zW;=DHlyjNDQ(oh7xnwp4%?>9tmVzzicN13}yj6j`O3g8X8HMw}8BKLwzMI;Df^I-W zVifZFiplSRlY7qRk+ahva5!5_pX&$b8sbY=kgejqOFtR={(KK~^VG>9+5W@3*a0lZ zM%A79J$LPOz(cRQV|prPUM&LpNKQCJ6mxdtn}Mgp2=0>$H~)AaWSm_Vi|Vzo6Ae-B zEf9Lrcxy~U9iq~BnOgF>lH~%m#%bh5P`BT(J3xP9kqmSIO`&31i}tY5i$_< zMX2#H#LxC~^CmTMg_vou$fg&_2CkeN++c{bjb=86n5f ziWR6MA}5&}&^D-XB<`sG%no?wk-|)#muSg{To$=2lRWnAu~!Z9Z+;+UJ9NW_9l*N{ z%|!@eDwZq+E9uw_vpx$SjURZ@8h(?LDfMexK+Fkr2Y-`aleQrzc@hgu@)H`}{;z=Z zdDhA3+c=OxUTE%`p=>W{^b$NX`S(Cxcx=8Ag5AH`;I$y!dZZ6PLHd~V!n8*GO2Zra zzrPKgB|iUu!?)^2mG!(L__QFJ6@x*Iy4eTdQ11`(f3ZUfo5#gRfX&1=7QTWrQdg*R z!Oz^7ETgBa7@P|V(}A^AF`Y`NX#AtUPi^~kH-Jc({>+Dvwp&LXkW&J4{L4L8HdQ6a z3#oCogiUuW+Cw$fRCHUj8lSNR-kljlV(JEp5Ifl4?p1U3dt)%>25}OT@S>sD-@74z zhyH^1_}tt$-%us6pf_zZKdIxpkO}YQPX z`0p@ZgdQ(XwL&iR8jp!N3D;;Mz#HXS`sZ)=Jozi|g^@Yme4(D7?S|T;!Yvwv>K>mI z*1s=G)xO#Awjg87C>(*Gw7Ft7z}kxzi>yU>#r*`8hL)yuGp5hq5uCejACt=;%5CAS zsm8l5hdn6v^l%zHvlB`@qb~)|7hJ{km=L9TY5@BiwWp8sif{@vyuVQ#6wK@+n8>wcBzl9qfXdSC;LgWeGkA{=qd)3Jliw72Xqgz)9Z`Ln1YjlW zSpRrz6#w}!j12Qjo}F4DDaaKTvuFJ#@IL%-@R`}}B9toBBOUBM{YGfI^>fix0b*Pm zwNGY-4NS zLbw~6ttTh~_J|75&!l}x{hahuw4-VZyAIwc zGWj2&V)d{FV4d56lLxoEsqF%9v?BTRt`YoIX`m`Mam#kkt-L;vPj#@o*YeINyt_ax z`B#E<-GcRkMZ*)`?3(+rk4y}5g{h5s`oY|Z_XIvQufj3D=Og|Vpnsn}?IO~SkK!{1 zYC0?#ZiFpqUR(hh5k3@?eN?M_^I#=e{!`oz(W{3I@*v*Zeg5F$$wF;eg8jy(%cZh7 zf>^im)b?YPlz1>u<7COZV&b=d1SvpnN2~`*^?oc$2l;oaSNpV*ldWxlkZ-5MQP!)9 z*8tELN`z{bU|c~%p1@jV*bQ%cTrYrKNo0mxGkpte2N1=gSbl?R^x;6}|5hX)D}CqK z^#&-&M+!EP zd%Qt}T)b`UckKhLHR7?=?!(&JMFOW<(rBVDJ+>-?0al0Q3GtxKpHrcr7xXEPw>Uh! zB$eR1&N5Mfo6x5M`9|&-kI6E}(UAqHpxhQ2pFP6jJb;k-iL;Yy)|XcY;uYUL%9^^5 zd#M2RJz-R7`1gJk5v(K;Pi^$Kff4avH_a=IH7>Ht>JijhqZI0Q&jg+Yy$CtwcX+6H4?0v%hB=?#J1g!H^xRTTHhxpI znWzWv;U1V~EaqQ*`+}9`u4`|%btC;|eSO zwPII8Yd?*IjK7ku0=(gn zcGHJ}+-M5uP{liq*@{(uP68lvFFaK@s3af%0GuQE&$5izmiJH{DVdPrK(;R14|rQA zVYRQvio3Q0yQ2Dd@pBfNT^gXEog>3YknP)nHzP!gqAGI9@dX2sa8chkCuDmuiJ%jR zW$8Klw7rZW=&8=9f{s(tejNjHzssoosWMwW;2A;By@%6H3A`RaS4|7z&^xA^M*4qLV5HD}G%wz>gLC#ydP^N=y{3eDIN0Jr%I*!56`VFcl z6;0@dOs5sV9>8{gN(zxBNRQQ`D^!e->VzbxVf`D0V|512)G(=!pAe@5F}9pif0-k?hTGOr%14!epR(4)}P zZ~7f;`AKQ0T04F^rJPUGg^I>HW=mhAYwy~E^L25gR_++{1qU@0yz$XquV%1zfO5@} zxveu~RkH6KU{e)S5~pZ6@a|4h zX~oHHJ?KESNQU)a-7=r~&_I^CjCv#$|2&HdD*Ck0NMmjZO*^5Mff|1zogqa6GKv^Y zKvXA&8~?TZs<3EKKtLp@DZWu9srUpbu3%kle_p^|0z@O%Nw^;xiA7D2OMCBv7A z3;8#uSpnpfI%{r0`@^y<<4e47oO@JBP z-&Q_kjcFAFdn5KSHBQ`{uL;yvQiAfFMEvdnhfD}*`|GyhbMpl7lsVm=p(xojN#XtO zg$;aFT&NIEhNP9SS}5}u>?^Rp-ED5JdVIyog_E~S@CpAS-N}+*C1t)7CM!CUmk1G* zKl0Nz46fA$JBV-LJn)EN_5@ff-DCAJXpHugLsfBZ-q~dm)B?`+iCS}?Msy2h3>n+p zZv9*4()Sb)z17S4CT;h~Ne5MmzFag2*&|Mn^GDQZQ@*y(dfC8#m;MhLAO7=t8<6Qy zr6lchcoYHEWNP)ZD%Kf?H@sz^W&Jz;oz*gAka?-%`r3=jHGF*azMU(n4d|Q% zQ(nc6oN;pwP*59nu7mEK-?Jdot<>rbdhC%OsMIN7!Jn^WGf`>4ChN5?oM_&b8qUTe zc0!c)iLZ1C@zt|9Rd!V0lZN-LQhO}guvqO7M6+d;$$Q>)Vuq8MnHLMJ6gs*NIR^JK zXLG%kHVX2`B121DQC!o%0jhrJ#HIM-mOLKtQ0%Z4VwP=Og1l~E-Z zzHY4A*S|m{JRBE~>zqr1A3*ir-YZD_8L}0gm23PdeX=*Q7d+Sn^|dYyRt*&mQ7%<) z*g#djqwTOm_4P3vJrRs_Kt!^iZHpgzyaO9VQO?7XlKC^ePX+HwvJJ||)k`x!u;Lq^ z4`;{UA%M~BBbYzg*&JGrftNX?`bs_2pDz>GmD~)w;9K8rbs%^2lJZO1d>u*vKIoGp zwUmMPw&8qE^!D0pV0nrufYp)1&K;kj(_a-J3ULZlbx-f8fp;Dow!2Wmt1?0dS+aa+#iNu=urd&11;VU)32PZr0`d8N z`Tj~*gAziGDnhZ0nP;T-Q-RYoYI`{2I=MR*!7j9kl#<>e^*r*0b?8{P^>;0HsMPtZ zaXry&pDcP{?a{WTBV}eU6;5Nl~4j22wvH+XK z-SGOR4T&`Hj##*=?KhmBqyztVe(R;jysfNNL4O0IGwn++j+KXy%h5GXOeH9C9^k|v zmR;+(C>;3$^%456!u$_XDHRF)Xttur&&n6eK}Py4*1Rs&yhhK#Y9N-@R=y;x)em^L z{tkjG!Xsb$f5t~@c@R){w<-W%1qhPk(zfm>yu+JqZ**yuB4usxe_6uo&fA;5Ndw-O zOCIx+ah3a7Ay=3a99U|^^wt5KLw?AzUc z?UiLkg&R;Rh?8cXsaWCZhhl^G<(fg8stW-- zX#Kdi!crM-z}a}J$`W%j?YCwDt7GMo^bR&hmIe5NOE|m5^ORz;zz5}IZkC>PkrM^6 zotEFh>eBuD>Ol^*Gp@%l#4Tn8>S)XEWK&v$compc)7lTY+lO@C5{PwgXFXqRV5Ef! z`gI?c%_P&CkoJNabAK4roD;2AJP_;L>|N{ZrOOn|3pNtF))l5Z`2dD46f>HQn9IF;~nA@P==J8g(r3m7)(r!qx4vr|J0M+-VuHE7%l~LHM zCtKQNMCV+S6*9!WnxcvjBbsKYZ#91T?!9`{n1kIv>>_VgUG26B)S*?oJi;%ha#IHH zTMtrScB(s3P^*Ia!zq%imreDCx3NBQs}IaBW>BqOY=+Hgk=Ih2L0M%UOjz-HqW)cwykqBjM3 zP1oy0GVFe)1#-|ORUFSgZ_g%FaIO@WK+@=kLCv+92zXofIn!Hi#G7V z>#u55d{cfe(4Ozh^QvZ)QS=Rd`725Y*KISk!ZX}poHya9Z{GcZ-EX7*)sBsET_*5B zSGIYN`;E*7S#Dn1CeDGI4m%CLn@FdZ1_A#)CQx_JF8N)3gVx?5K&rIxM%apz*boIc zR=K}+_onTLO`syVG}G3;c+Dw+p84R76s0)m$4)>!$UjGg@?Y7jc<{dM5MDE?l~*J| zy_io|)vq<3GaF>9hoh<=lCFrwf%lbIKQ7EcKeh(cI9T_G@X=b577WDatuF@!Rb{t? zjC^5$?mZ)!0uH%JrPs*Yxe^#(8f2W`N;dH+mYfdft_xRUSK}{vn+Eu9rM<*0MgM?5 zoak=#Q7F?ZOj8M7JsanpI$Z$4oi3UC7ZtpX4?q9d}1$cw-@hTVC^G!*>_fOevs)qR- zRRTW!D_*b2rzF*;K^>}G_+pNaHEb1}COxJ)4^H;S3b6l-RZ<)fN*5;}#$KE+RiaV7 zN;usSd6h8#mcJ67gdD#VMv76Xns)_u;k73=JGbBZ)j+k8T^~Nxj`!OSU{OW2Sy!{2 z>l?%SWs{7oA2j;i4ag~q|0|vOe!a#ooOYl*mh9gH9q+(4yuY%%Cp}6C-~{_Se`{W# zytxeCO0GEp7jUwvN!VlLv~wS0{Ky4(3+( z``u)Ka(#cu-!0xrQUJ1ZcwGBmxK7JAymOH_EHxP2$W+RIma4JiQ;+_<$^Do)cy$Y*cCZu?9)EqAS^)W|4BMEywYPyoj=>;*5$8Z{at}L2;f8-( z6?2YD1;6}_7-GC@oC$NV8mFTa>dkhR2Qz!QS%NX>Ug@zQYs5Cqd7=LLC_iBBr`;qs z`tlSP?$MO^e~9iKIv1Qn)((5^vG(oou(vs06IShi2C3UD^Tsx#XnJVv+@_`fELez3>i-?0y(N>n1s zmM8h^ftgNJ$WQ;-UpT!3eC78OMWe%c965;XwM|;iuyhN%!bvtq@DtqM3n~Gh`X1Kk zoJC$d1y-`1d7KO~?Tj|Czj};W9xmSNX9Q10IfqY_zFy87$YtlU3rOBDua67XsyfW# zNB8;hnn0FBus@@lRQ#zja6+VSy{&(fY>7VrL2akUX;j5(eFnU2dfacn(2xAt;4D+D zwbMkKl}3RxdLgz{z3&K7-NFCmwMGrc!5uM(MJH$cb{FPZas~FcNuyWxs`JIz0g_pH zx~MA+J*E}B5qT6tzuoojK%PL1O5dF}F@Xj(n~ZH!MY&17?*@4H*BF9lth?pEPR*i? zvo#tL@wGslEHggVqV9_+u)9TeSWYFDiQjNSgGc#SRw~l-y`dI%kGCr)JX6qv9UK^< z;;ZG?-aY7>P3C3BsmAXsk+7s?z)03c?aGu}yvGBpY;mZI?K(@dC z0HRP1+y6|(OtK}|L5|D^s^QGH3fVZZz#>vfBqd&k`s}*MR0Jces0i{x#{L4dj~w<2 zL8i;UBEI0!5+^W<#$UudY%?850?yW6vFTtEE((w%v@f`<(~B1;)$ome5i46ZQpGS! zUYa)x6?tke*jH)If%sLKFN9EM+52{tMaQ+)kdU{wwPo(lyIBuTI9p{GI-Wud>laSl zb3Nx)!4M7zuy&*V@=rvUL;%mM6;Jo1nlz2Rg51JYb|Y?VeMJ%2#=D+#%RV26y1ko$ukR=-2eTM~i2!zxB>Hh0XCeU5-%3ks22ctXS zVf9yNaN&IiE98;;cH%|6TJ~snfa)c5h{n9JKWYSI9V#ppkmGRB;rc%fRY3W2?P^Ijfty0kSi?8<)dzL1ug)>nYss8KX}uPek? z33>Cb>+{-FdP?D38@{Gmas*;gS(iX>B2Avp^Ttvn(@5*A5E-_iN@fuJK-qCM-Y&Wn8|N zevX_TcCkj1$7H2K`x^>m;}vf6bUs5EL-Z9AO%Rl|LTEeigEi8%F>d}@PZ{{os<{3z zqa}xUd_q6S{^1ZiatFwd^l3QO=4o{*Dj=~fItaa8w}Uyt%`8_uRH)CpKIDYy8eW~8 zXUR{np=G$q#}g(0H3kriPGYR< z2}i2HZmi2DoYU%(IRo@}N?+9_Cj|cRAcpNW2UV%R&@1d<1%K>&R9*w_UCf@V;m@GO+EM{0FaH?m)o2SDU zRU})U1hG|Q*A&H;O5K$}%i?8N%onnM!XNNuh0<2X$%dEKM8aue^te z#HcvT0HTpUBVyN_F6)>9a(!l1bZBOa1W|#L470>jUUNT(kYydy`rai5O+;Z1nIF%F zkr#?5Ww={*KG7b(KBNx!@ZPFBiec!bsRHDR*{61@wsYZOl~#`QHYM!e! zymbR=g3R!Lno6stAnhWYK@gYnCef6fU=@Jf1K%ae^ExdVdRRYx3-fpV!MIG9o$y*e z-fxFG9zd$4CE#Hy5#l$1JQz4Pc>ABVMp|%IQx`axAk6D?0WWzNRddQg zX{Rtgnx(3BlS&ngAJ7HkQrIxN{?4xf(%#*QLFCn9%PWu#LkQ;6R}6Z2f&3(LjTmL0 zLn)`Q)7bjOo`m2GgV=z*j2fD+HHeU0#8c+|c9vxn<9x z4S3%nh_SVP_u7L1WIj^ep>q*g4I!}nt08@k`};aGxGgB1|2%>o1nwJdkyB*8j0mY& zb^^%8H!dl|#ecX5dp}BMw*H`AdK5pHfm|PxvpmgXWDtowN``%;#Ij4M-SMgQl6z2> z1LtC}(Z1c3Vmr46=RC;M(rJYvVmZM4W!!J)i9Y+R0I4I&)FU_+?;9UTU4wJQMtLf~ znV?r(78E#3QP~7geee$W>$?zxR)NyZI03;Q0-Dc@kA`4}mq4)1xlb;C;!E(|E)e>LY(| z>6L=pZ~A*@Xz61NkOApV8Pjisru*t3?)Ep%!=*R1lqAgcsM$aD0Kz75~U+W zUJra3Svtb$$&-8`a4WI7%8h8F5s%;&G-mp0!B;9!xM8puZ-DW~bnH)3N>V+bvrW51vYRU3h?BZ8p3B&bd%iv?_;QMGwR&^xM0u z1_5pxMA$MJBgrfI~t6>bN1nQt{p zJVy8*xKn-%e)jSc-zy5)lhh(Eyj=8z3~0(nOs+R6+mEV%tSP2Rc1iFot3k%&untos zv3`GHI>;lLVKUYhlQ=^JH}N)tttA&?S3S`y% z8myTJZpby%T+v^MW_Vc!5VCu?K|%46d%`S)A}8vX%EnxDffa31y@AH3xKiE&W$+5drUQC*89f2MZM)}Pcy8nJ*XV+Ua zL?dcF`T6!RO0~|7I>#u>{%??cNBA5^pCtqFJ{!Ii<90;M3*i3HPZ2e{UCj3zPRe77 zOO+cx8j!hV9+HPfowYp&aQl_P#aEC~J_Bna)heEUUIA$*26A`wFYa1Kl9YL%zYglX zY~)m3v4`2Ms8)i`3rw8`@4L^2$E!;PH{ z?1QKo3%pS{K5CnZuYo#X@5g=RO0xcR+XHWO;hHTsyUUX#xP4TK6-RKX{tY|2n?Lo- zZ+$XWIMa&SXrUIbS5aob5-uwvHjk$C%@^qJOT$p(@LFAh%%x1{KS%a-Tgw6~I;RPm zB6{*lKEQgjd@Gcjn{9^xEI%gkms?Rm-+w^Nu1)=;m|3+x6Uf+@>Dv-8&e?AY3AZy;W`wh(FpLmCXGrx6TB4CL6xf`qX-S=wU7HTGgTzS;CJXG^dZ~hs3BHYSEo^vdH$4JiK0IMKgJO^xUeheIi?|VCS znHPcz=R-{{qw?XF*B8tZH(^BDWd2#B7IGXJN!*D#=lyaZb@t1OEc=~ZHSFpnwxcTy zJ}>(K_#^qJ>n`7+p11-XbS%qoUt4d7kZX59HHTiR-N4WPIjGgWVjTH10Ko4rb$;gk zRAbo#vX`}^bZ>$qZm9%T1ueVB){jn@V8^%?}WQ_B|(ul{3VtJWPXr&okrbq=JXc)uJ8wf z(~5a1g#{u4QA6GXJFxP=!_J?ceV=H-ggplL@+40aFZ^mR9*8t4x*YInQ^P|AmLW{z zd&gPggAc$WZCs<$9Xe?aP?^e`N}@6Y;+$q{4DZPiERUS!f;->NAPK6 z6x~+-n&&it?jIK2IUf<3!xY%7w<|I>?NLG`seUgX$X1nX?}bPO?gsb7C=lVh=QA{A1C-M;C(KY|DlBXWxP=}}%b>TtF+`mFfeom$|7a}KD!W=W--P8n#~nIqw+?PxV;Alf{C z#GBndGYg~g(3zS@TP95V!2QmJ(>&AmyK@{^mFH%cmDt`@Pe2}<=cFPTecLYFcZ^^J zk72r6Iv9xQMtvcS(4{qH26ELU9r`j}H`~EIVg_QrUg|g@%?4^QzCtG&n*9Y#Utl*% z?bBpjPKgZUp*lA$ zG~y*T`%>osO+k%a&g&_%yg(zeT)i336zk_bsOI#NIiWy(}D+JhYIk(+IK&xlPk2b($csL!+=> z%AW+jngRA;5anRtZ%b#*2v}g^&k4?tNp}j|Wbx+zOoOHj<>^2k=CH|nNB{Q24Se^* zqr4U*z5MGT@0KWNYrO8UH~<|q-)}DbObqJ64LI?RG{~WT*P zS<=6Vl7tim8RnYGL!<{x; zov^yV-I+6jds=H-A_n5Q#0+@Jdlf%o|%zbx|bz!ecOlvj{eGP6E zm%bAdgnwej!P%ubUd(*@dRhFXhiS|A>zRbl_Tn25CLY`Ec6xlj8Z)t zuna?&{b=i{cXI}IQvc@4i@FljTw!My!ijyinzYt{r>X_{=|fVaUQo-<_&Vn24A2yE z>^DDt7k>{D;BW`%M-K;**6oDift_SdSzi{!dYKSWkl$5`WNh2-AFvFy8i>AQqnUSu z)94INd7D?Xg#={vF{oqd81vFN$dz3*jy4ZgtH4xC|58}bV(dV?7T0*}d z$KW5VQ3M2Q*b1^n$hd?m^Vo3$Kz$^K#fxnI7F!4Zxptk05Imm?8-N&Z(GJv)^gS01 z?tIZMeX+;=bamkA7@`+r`fSJ%))p6~XPnRQrF0$K(Rs8JZoYlIcYv1^tGs*4w4TWk ze9F#rbUDaV1wQc34z63ei5j)cf~SgWZ7PE6C(f|q8PcfdzxVea1O{k?eT*wo2FV*j zAd?{?L_w<$WDVI!ve)%^9hdA?4mTVrDrJ^T!0ZvM4$lL1Szjc(JYaLeSU0fC?dEZY zRm;P@DwaO26i!w2w4&K1vE>&H;=vQAsO1kw{4N$~_gt%|cGbezd_cCRbzgGu>N6=^ z!5h8eBwl(YEQ1Ij)v*0pKF2-h3MVn^cWwq=j(&+7SO&~a+N~!_cff&6cF}x{TAfpR z1?2g0F#6`>i?!XN8f;UatK7 zyLj--pWSzg_qhay4&*A65^K|szdwf)f|cy?(U9Y8NW-Y@K$*&mXtAS#^^VgxNo40% zNysy{ZdLX^n~1*PzH*A~G{d+|XQ|;ymgJb3Z;FX55YrX7`FrM|$veoU>_~V_#_rb= z6>x(`<`Fl!X!!?rv-C$m+-mjR3Jv&Qe7Uyap*#N1(*x}Nz2a4jZKi0!X^0QSNB$nA zV4>BY6%7^CJHmb$`CBfSeM1X7g*?T9N@yV@sA?mOfsA zBmgr^mNwODNcSS-D043F&u{7@y*)68924qFyHSw9{mxl4BhLOpe?0~DC|UeDj(UcC z0lOjTCXbTipDsc6Gi)h^2*-H*bpXFm8RIsbd`5>W%zSEj)?-mnKF@hJ3jdEjEn8j?$|HmhcyC0?Yc|s(e8;&7J$cpd#}x ztOMuF=YQ9b9JD2!aO*VYQbB^N*nPqMDOc0cu56tX+)?!zDO0AukDc(~sZv=S2~L%+ z?*%H$GexptAGM|A0ok|(#$ax0lnI#WU8d=%!sX4VD$FviaaKNCuHY8%uyUMy(Uq|9 zGXf|18SJ&(%0X8(AUTQi_;p!Lk+cK3It?w2{ElUu2YlB@gE-FjOZrMct^#_EtAkBy zI+USIMv`dNpBn*^WB7B#U243U z9Pk>6*WTaDi9bdFqQ$_^b2eh9o0K80Q{V4M5Rc~Sz*C*^S3x?7m0xh*gmS+)oI@g| zgOh9c*!q|n8iD~gN$u-l(=5fFlM7V`7YR&%)z&9o+i_!&e z1pF@f3)NC##43gpMuyv{HDW6R!GrFsyzaN=B*^~hfwv<6?hYF-ruN{}YKWLLVK7o%j8~v@8N)4fj#`R`&1;8TFzY)`D>9Zj4eO3RP*{7WB#v9J0PxmU7L*UCk zsA@@nSDOq!0sZ~J9eLi$F2APJJr(Xv+o;R=3xm9O5kVh{yw5BucPfE12!?ZL!(Lif z3U>;mTkxlaUsr@Z2}e;ZiB*JHI>PCOVI6l2&#JitK6J!n(dH3p5g*_e^b2QlO!btB zhZTfu>PrbJNdbjugxQiS@?-{)!8tFe;(Ak@T=EApw0B$MjjM~!a9i%s`fiAlIfisV z%l^=BU%c&M)Hz@oE_1qw$qbXOgPJw z4B)E=u^2UVgp~JT=iZ4NsP@6N0|D}UqJLJQ)4Z;9z;{h%lS)L4gi8jfpd3st83`$6 zHt@{KuN?FINsn*_HWqItui&zbza(H|1!Nv#M_UC1?j5e!xNtg4`h7nD^ZWc0r2+N6 z5dz5bYtda!PxMrRT^8zB-q}dL2@BS7NYiNLUfl#0R;Gq4%stNg4pji;s);id`wO-> zWPv+C1x!GWki|O%Si%Dt(K>xBIf0We+3}I0QE;bF1lU_#f89A|5Bh;UpWT}k9p{x7 z+6XPf6J9T;-_abh>2AS~a)+oe+Xq&(8Mkzm@LHk{$d%&Kk%sQ0WWymVZ*Rd^)n)tvelCG3Sn>aM!g}rsvAy~as6IqI)7W7AJpH~;1=?{qaDSWFXqnh@! zgB=>;^sCBk^NRz>WIia@83#?a(F#PW(M^B$HXlo1Cw-(PKT6iJD?}9ME)^EfP=U@v z)`*~g&#Q=05A;_4pSgW+Clb&X$c^kHIcHY>XR$D#3qK~+qr=QA8!~y)e-^cko@Nv< z*olfWp1{)OBcEUvkNN{eA5TpLp9Akpe-0i)2wzqu$Qm)vTru}jYQTyZ@4LIY|A-Q? zK}Nlr8@@W}Z>7?Z7h-Kwr~C`F_7Yfz?Rb8=kLFxbg73c5cXq!u^c5N)5^<TRv z`nqABfsNl~av1KU0{h%n+E@gOCijrh`pD$74UsSPWnq1PLDuM=kH9~{8}UE$&@Us# zL=R@wEL7!=-?}FcoJ;+2@iq-EJzukzb2Vx82+muf-rxTc zm-e}1aL%u!FN^8oaLW1wTU0xfYZHNI@oZ0f?8%TA0J^4 zy)7VjC8j@me7u*ZgZ%vF^Ai=4Vluh_mS3hWgrV{0Yq-Eprk%PWN%r+73}6-dyNSm~ zd=r8L?ubnkwN`npxL_B0V(3v?q*3Y(;CJh`rvqB}ktzl7hL_g$$9T$Yvp^=0@IALM z9uw;mxcRQW3ctAe=|BL!O5!P#7CE>(xar{Byym#Jy6@q{I^Q2%=^>_c`XJKO=Uvav zB`>iC_|PAAaLu2m#89}8zC!TWm9dq?D!3sfE=@siy;gsL@6I_WeB-Fez`8~^4OUnV z>mT|IAV$K*F>!RBV}MoRy!@S5A>ONSvdQgllr;+PN56nPcL9GG)j=DkA3%R(lg8q3 z^ZbDuexKKX9}5zkB8a>1#Lh?ClR9aP8$IZ=lxwMQS8zaUI8C!-RMIOCjEXO>-g3x=(BZN-&6pL9@p>@wav|1*dvGCWcUX# z*^Gjnx8wemIRkNzTm)V++&|x?AE_LJoW>@jv12>h9kl@zv|8I?nOX2K!1}7qu+CD zy`>dcm42H1w2#=~u-eHOpRX4F@4p9A{3^h&s z)u!iweFgH5CRuW&7a3S@Um#BMg|_&B0#6rxxzcO1z;SWl_dQ!l_m9{8#iDRSSxRDe}+o>$rr!NI;LAUV3W#kPNaj~e!S4;+sf zVQ_T#36LAV;9+Mx-^<8=mvoR>ZrzvVsV49mk8ScXqhaDZ1h?bOm?gpei!DJti89zTG5FeTQv#^|kT?k|anV$ixX>l>w1>^|>A!9s?pQ0D!f-@HS zx?c1`)(@P-ToxWPtAfA`fRGI$uZ6e!GlUNOuI%{bt_6JB|L?KMi~U9-Ax0b^lRmG1 z3sfle?gQ*3@?wLJWoh**0bR=PV(85uMxh4~%9S@NXcK!W? zs`_${a2+pFib(*a_}vZrPWzCV%f^#BhqU zz3>M4bGTQ5~o<;U@b5=$%9x7!9G0@;AS zD|5s5tIlo?SfnlOn$&n@*bO&U$K@|qf{l0+Z}7e*;*_UD#6K49e6hAsM_NICO|Tvs zbZkXsnJMfwkUDB)txb-#K6oILi4bNx`NFgi162T`zUF5ONQQ%3K4+;ZvRV^FiUe^P zfn+S|&8Q^7-7ETh55lZUpTBQ_lf2*g2W=~Yf}OVlaUgRcHo^k?bH2RdGP@~l#s++f zOr+Pd)c0n;fn0s6a6cKtS!D*`jq*k5k^h{j1UDQ>HTBC^mkM*ZP3D}%S9l++JDngR z;NE4$CS@8||96oj*@49g75Wfu;t8Wa>11v~0#L!)8bL4NrO1RhsPI z;Jd6uUH<#YgzE=n1GKU9Mfh=F4%`k*47sr<o|BGqa_iyYwOsaAX$vzb`w1F~u;lgKAY)J*{Q0Dc1^RpO7Tiad~KmOux5k;gWL z{i2$cH&HX+kG=rikGu$H7<5Uj1>{Ch8J`kdZzo3qlCvPi__d=&jUFIZJhidcA-pOB z_Sj(N$1eH;L){Vh?zkFiIeTJ0hxOkot!l&@>^gJ6Y1ji1GQ}xL4P*`%?ZwIdVo`g= zKrK~WEXf!5eWGbt@2+LC{d)thCcrbBrV)DPnPFoJ{vf0<~ zPffw6Ez<4WAL>h7@Lg{EK8LyFvI%uC#Yd9ef^;_H*;p-ZY+V9>^>GMP6L>~632^81WYGp5XF@05Jm?_FB#l>$f(vUom{F2 z5AeQ&i?$_#H?$8~$E~5=O4^Tzw+}qdkJspMQ5s`Ufn2@+pp2oYYIR`%o2i94_{3C@ z2xMI=MZN759RGYEugl71xQEEe#c<%6yYO^7oOD!H1aVpWo!DEH+9$R^CLw%?+>86kA0o;{vgjV&8FsSM6(r+pe|nOONVZ zrNE(U+lE8t!azFy6q{$&x|r>OB8cSoQb|No6C* z5ygc0I^RidZxcdHEa5Y!Q^2DV;kzV21>UXQR=#GoQGz(7s>$B95d8gz=0FtlCZxA{ z#`t&Jp$^6bZsVSt{$MS}4ayWH^m~VVjH!XQ@kV7`5RmAx=QKaBmCWk7IBL1djuZ^g?w$EX+WfIe-}Li|H2OMSYSTJoD$yvp3E? z1jB;9KJ_I&hm3TL0CV*&XT0ye*ShThzpLnzz+G+YEFTcl&FPQ%wY-pD2JmI^AoKO( zcH9c>h9+1Qi^?RKeE=GfrgE>9yB*dJcCbsE#&dDLvkGKcCn6*=Zt*lzU{$U!QKBEs zvBd}EWIne3RnhDnYAisxWSACMyj$7z z;LSD%UgNmgW#ondi5-xC=DnJhT9*INaO(UM;DJO7<$6J`gL3Q~OmADz;9@@<>{#&ge5JW$ zKo*!QIE1V@3!DqE-GO+cNO_Az#!dnDS?`&lAUDDnO<313KGEqSseaawBQzRneigE) zgfXn02g53M{Z2XL}5X^VOg7 z1v3fu)#8pBe@DpBegz(L@mz##8Dy1z6ydn@gXDh@UEiwCeu*gm{Q$nIgTYaPaTnPE z=%801W{K=(?{P4O75hqG-g!Ki;6F>MN%wD=(G(0aY%Irh%2q{wRbW+)mv#P9X?9mQ z-M?a5z}l&vwK>3bY9G7UM6EB22ND}Z^-9XOt=aH2@=eFIzqndG81QKy=mj04LoSZM zTRGN=zxHN$;Uc(&!LWb6?<{zU0@?U8ag$CVxPE`Y4K8_}e9te6vLVog4S!vi5CN=k%0}k`sQ31dE^pE%wmcu)D;3W&$?Nqm%kC0czTY? z5^&B)QXeK7S=;Y~NR|7ZO3A!bAqKMX7ePBY9SXz@GdAip(#&X*_4|hLU~kNAE0#$p zgFHjdt&UX5&D_IT4`P?uN8^d=vVgSr!LR+CscX3rf3h%PR2 ze}Uad=_@NOJEvbiARBL_mja}GNk$3k8sBr*Z9bo30{VR^{j*P0$G@Wq=z>Ul)^!$_ zxCcPHofi?m*|civ0Mz)LDgbzQaI zECB;@)v^YJ9Y7}MZ=$_$#g;BOnK&JcPh#^?m^O$eJiKV?vQ+eL1UV?fy;Et+ zD_lT;E<7ByHIB7-7~~3jU1DKA-0J^{AG}|Y@JO$($q$f?Vr4YT$;Sgnfu`)ZFq-JV4d==g>PY{>lIGVy&Mtbq+HfV#(*m|`Vqz@vSC#sfkgY;X3ERe1 zA^Cx)dVNyi=2)ypFUS)p^3+6syzqb1xHih5@LrG8OC|f*E?eXqISV-Qhj7C=pkpwhe!i_GoE1qxq9=HzGef- z2RQ*~Q`}OTTi*xY5+Kj;T{RW!F>Vauo|>FJ&$oE7dI@b#HU6oLmzC}pa_vS6wPyO5 zSUwJPAyPhP#-F8$gpglUOVOn=GPkOM)S-13j2-6VqXSNo%*s1`yKZIBz;{;;8joR* zj;aJ%i;KVG$vG{K9dJi!LYw<8uAw-Cyoy7PRAvp^>gKSfIblQ<$)3JVa0=|L>G+%- zT5N!foNTN5!DE&mCZMX-65Y3Oh|%>$xSMidV_)oxplN~MPi1qw7~vO{6Wor(Jjj~m z58gmt#0;NICLXn9gHutPs0ZwnFdKitoLhDC)U7-0F@dLwEXu0#j{Lk}9Qvw#&Wgkt zk*0uXZt)I5Rc?~*qGHD5|_XO@}A+q9mr{Y&HL4@1t*_*k% z&EO;0jkar#sFGy6!P&!lO7oyLQ73tU`mbcDm$~-#6`{aRvd3eWddZchBx*fS!=s1*G2WZP zO;quqs|c*w8@(6meYOTaK|JZSe3UnfGoRpnc@w<`$2+Q2gS*e(;*E7jp{p%qeKCTA zE`&hfT3Cnm1GU(uQAt)1@tunk5YHZxQVx8|7UQ_i2YQI603p+ZlhyJ1p*J`!t6{#d zfADMIrXqdIbK`rv>;l1Y&IXqQ)agoX4L(r z4@OlNDhix4YS`*tv}}OVKqiBI?BZu;uUr7q?iSz4CC}}A1psekf~nHlTy+MF=w3KL$bsK+85s?)8j5)JFmDJFNc4N89H8f%^xwGsO%xu_;M{+hdUzZb~y_1_qEx zZ;xYAbd)`e0N#jF(SOK$n@|D7gGRNoM7M4ZNqwPSm>}s@Fp~KFf zH?lNuWhfiSj`fVM&&f4|TvFh7%arb@vuJPs4Nfwl%U|5`B+gKfFPGv!amBmB4m+&w zDEHBwb$Aipk*y|_o62~OH^3q#b%%?oPwQ6&Vs=tB@2asUkAnRCgl7AMmw4vO1@c^C z#=u8%AEyJz*kqb2GL-irIRx~pBp-h5fBRQfVgGZqkMnj!V+?4D!H$f+F!xFqW*yFH zew|M4P6L+h1GroSnu{yp1&)K{7F2pu`cbA5!uO!&;ws) zbAzⅇ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

#+Y!c# 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�r(|4R4j`0x~h^}8xmL`Gbh9_j+88r1MH`@%7 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 z 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%0AFH@rndh*2g#*mr@M<}qnka^#9V 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

U;G#3+HMtJ6;7W8X_t;$GQD(g8u=i-a7!%< zl7S5T9*?BuFq#n#PSS~Js|#~kUqxX1I&rN>$*IL!fSmp3wtiCEm?p;{N^-k`358A! zV*{cUd4I9pYJ7q%fIhFNOiiUxFCwg|YNxGjIkHw}1UfTo3E>HkxGhQt-^KjjRUb32 z^{~FdRnt?}AB+hIpc^zvgi6RWbru8ZAAhLC5*D@SNKn7RQqk253R7MK@EclBeOK(z z>(e@5EW7t9Of#PEAbV1Q7sS*!r#NqAIflHHl^tf7se4$ub@0+SN z?ik>A*@jlXi;mN)2`rS`z4z zh+=)!4E(OB%cydMVHDONYWUlmC$7?bb01*8w|h(&nwQq=0nhAIvS}Qr5wIxu?ps)r z&lZDS>cCPio6;JacdQO_IpV@d+%0j|L=P%sbUg5O#%9%>z&mS_i>fP_`+_8zl9i>OL*^N6tAxg@YOkr!+2RLX8%BUv=t+c zF8#>+(ZEwljdZ0dT6{t{Kd75@wfw3wkYL2YQQ7hjJWqTZSg2L}h(*g83K$$NC4iqvwKT()Fe?2@J4U1<7s7_ubl-psBXQ} zAKz7{3LwE)O=>aY|6Gm;o|)9^i47fP9WjuzJ7nd`^XHIf-SKjJ7u{yKzs zukPVoJOb><-UA~vBXT@p{TaLSZA*WuF~E7r11}y$tZ!$9cjaH+P-LFO+`b0yi+Dc< z4T<^0EP$U)lAFnuO1L}*ao_r(dov;%^En|8GZ|8m+bO+?fH4q6m5V=8-a8pZR=0{dQ88ty<5(Al~BKsW9kcm`g1i&^BF^aH!3sAW6I zEi`==atwZwuKxA);M1x#~Y%}Fg`nmgd{|N?IXhy4O zeXTNBy9}z+uRCmhd%wS+XE>eN-sj`|Zev#^!* zAu2qDo9=~8k;vGT*#Gw$v6^f4ruWa;0qm`mXG~YCKqw7B^@*$g-giO0o)CP>{mEze zTEF5Gz$htKg5!B)O~pXl`?|*8TzD!a1Ej!G$uQ!t$HiX&BNbz9gy$QV4Gyx}a)HQ~ zkGZ@Ti%==K; z7*ahzg85`dpKZbqk%61g*>YC=H6R2J*#7P8{U#E$jObZsVLB5C`2kDOts?Q7Z>tWkc>pSEk*h1R#BEn|yn#1b%Yh9X&m%&sm21MwIlD9+s7*7<`(N=lPe$=)D3t_63E)I`$Cz5_-azW`EqxIhdWLzw1JQpd{PJTD!f7V4doW`+Y1YipRZkoNIzeLc4@aI+hiiqAf zjx=xs4%K_UbqC3sz?ux}wdv;4_x*-@OzJ$Gg6-9Bj0_NkU8F(D+0|Eqor>%E8d5Fy zge?Mg^z@Pb`I!1mBjA0v@0#%KO%E~wIweAl{Fzzu1R1=uMurw|Oe=bD9oW&DiihQ{ z8Y1-|FZ=>Ic2*1h>ea;>Umt90g zk-*JLJyRa{Agd&t@*5WMD;0{`jRou^N1|gLzn9EoAnr@qFt%}?cRSyoSf|+=Sc)2)Msr4= z#$Q23usvK&F6SC0Dd;E6KhlEpFQ)%rgJP5HLlLB-Qv%Sd*9$k_6fQoF25cXBzhXXO zC1rr#+m-33QIS^I4uE6#Yy$iPJw_QIS~1Hdwu{>u5#;HWqF6Tkr(l^1+~GFPo_{%P zJ$(k~RUx|H1O1rj9s>`|$}96qOZG)T_LZkAZgk_0>=b}}+1eK`URs&d1-QLZN*Q4> zueC#k9uRZnndjnrj*+^L~A7$ckAgc#Kt8 z*7>me{rSYhTrrGo*6@AjnM>F|*GZaioB5EIgm9<`533)6nxkPm8|HgIGN|*P{y&ngW7%P`(dz0eR#+?23B(SGVz`5HuBW~&j~zVd^u&#tvX<;SA5%Z zt(zW41Kg1(voy$CpaG{Mi>5v99&z)HT1@muq&H;gl|$)7~p z>AZJkr~w4lSv_1|KhqvdutyFT^bN+I&1V5DS6j5>ct7R`N5P57M!iCL^ZbOofL(>( zUef+TbpO`i#66ED$M2AM3{)W_((Jfz*?!9uoLBBmGj;tL2(EyYoOkIQaEjbK6`TMP zip&c3!LWP+Y80=cThmwR9?=iPZq@nu=#1=4fI`-Hde*CR>}?pK3QCFGl*;g&sX>jh zwDIrMr&US>D|w_Ei4H`l1s2#}uOtGYw5Cai%J5MdDj@0tg!tyI>%dA1Wcx$ zX$8RxfAyf^#H7S#J?+9`z_|}j>zLR={Dn3Ge3w81&-EL5Y-13u%4p8XhbpH7s`=5p ziDu66m2CkkF9j{4+68Y(3;fIVEG0jF=IS@B^*LwV{Y>+2CQvD2(ewBj-n(dN;3?~u zclWI6Qx=8yahmfsJ9@fK3t+4)yQtaz_@7Ha%{?UUYrM&_Nd=#p=A*?ySADGo-a6Mu znz*A=j%L_fYwk#jXYGf`;Y^>Nb-K?jeNz;i;~4Xpld^qvOb>W$+7E7qCltQiu%iAt zZJc*VDx5)1_m}%3`R9C`_yVZ%Deyp@#lu2H;J^J9Nz;6Li>H8f_Ncgusw?u$f4(4! z>5n9Lw}unDPQ@Kp-^X704ks%W%yIfkF#RwPao$Ai6FgDZxeZps$XUt#uI@@*V1I@9 zBU|{bXKV*6Hhbd>{aKB^3%omB>ubEvr`}9Z!SI#pOHr7xvrx^TxXQ&KC$DMWfI-n) z?xOl+hJWD^*hVAFt1@u6_yIL!it-J^Y$IPYz^5uZrrmCPe+ejHLHC0%p|WF?x5251 z&gnD{Pkv4foTSssX&?Ad7$FAo?(cOk*GC~cTmz`mj?a&xw(JSu8zD!)`@NjLM-KS! z*S6lvEq&hP7hn#yGjtStPpC5>rsN(i=i`ce*$jAh<7oDH3E#_dpvo)L@l|u{ER6&9 zMHexm>AjOuA$Z?!bf*&czUbQn9BHCmOI@ub_cxFcewJZEp2i67&|(abO4 zDp*(9eeBdP_YHnGoZ94GmuJyW5K|bl^7bEpU?B!_973JA)NlpiP+&iQ@GINpWcKI{ z@0FKsmiC+35KzbFa7ue4M((!cC1{Q}JCPMXZ^kcq?= z*t7WJxqiaMi+%yl;1723O_cDY8`y#KxqrmWhI|Co-Vhi4d6s(83p`JW!dz0Mg_bc7 z?1F0@-e>$N1p)b0KQ({I7_dhngN#62#wc}Jf%_V;&&{9z_P_UCYX=r9KJiCyU4(XF zmxYfecBgi)%Dg}_;=(_l3X;w-0Qi)cv2W2zM&8 zz+$PK`U=tqi`5^z;T!$L8&SN!tQg?N$0BaW=b15u%)GBNgrXgfm^zRT+J=kb4^iwH z)Sk7%_mzmhE!b~(PxEWm7uuW~`2p+PgwyFsX8v7D5JQnCRGj*%@eiDLyn6XOIKt}j zE$H21miI5~KKO#_0Qr?rd(r#C*smV=LUBtCDSl#3fHPj3SNbiC#N4MEc&LD?zMkwa zQjuYWS-psGviRZG!FAR*&BoO{4qF(1QHNhiGnxW;UvetR!oG(2?Qviit|febk(9{` z3*gmfw8?DwOUw2XMk~*73CWr(`k$u=`n<1Xf4?@^yX8@zGmFR97y--4yI$6tkEYBY z;0uNn92>h9y*~b%rfR!Q#kE5NRU%IW;fb6!RDlEepvW_!@D5S6%YhFXN;9scWnIe% z^(avO$--DIRyYNNO2=JCaaK%Ve-1y?VOpN_OrgM2G>ha@`X`_D11H^wbfxk{^N1FB zBc|7DQ_aOc;{X_Y%Tnjy!{cKd?5|4?D%Dpn({0EoeC!*p2Eo1_@V@HjnQQcI2gL#Q z7w7+o=4D}zet>h>GY@i1^#Y`QfoGoklHTrzxDy#hc2ewSHpg z3;CHhST~>)#etp#mw1*j)rc2jftcbZjEvu(g+VVk7rsr?AHzkt2bBT#VT{<#;a=DU zemCIcZu>~&_a%VcpQD_z;#U-Y8rWS1Sl`70V{=2XSwnFkz6cfNmEx7z-_ z16J_yoeqnFJwM@8aSR(!!{lkVg8PPKAalwrZH6%rEydytg795E4}zP zF5`d&MHmu_*Jf`P54G=jb06z?$TepF}J10 zRvRAtWo@RShWm?HbqPKV@tYZsZRMf=YrOJsF zUY#SHgihz*E$LsGg28NJKX#j=`TBJMGz)si^QMcuLKJW_L=py5>74TJ0aK0MR_-A9 z&`xmX3wz%0<5zqKa{jn9*PL+=k#w9m)nRZAam>SV*Hlc zoYhdH+rVjcp(Ol}eW>?k%F|xhA$db<7e#jrdGRJy96s~#mqhaDBaRO^OnBNOu+D~N|M{p*r78kYgN&s(Q7(}jrxlw-0P!f6M7(9M z#@Z^dN6X-;FCZtX>3{_pbNc5>o2e@(c%zlh*un|ccSELdk47>$+$*bcu!AqgZW+an z)$)OJ;=0ee)~u1j5hP99!pqady$vaxq z8Kjnfh~yBYyJ#%3#Nd60l-<`!>-lDbaX%ra7iG}t>kVuYF+B`1V=RAZpjOZ*lm9$I zzKd|8VsAvjqxXLYW0|?LCkCi8MRZw6(W~Xd3gAZdn$tz}M|WibdcWQJSANapZeSfa>9{Pw zwB5sdP#1mH!Ia7F5k(2!rhFUN#3mH?7o@@d#&paq=2YXbPWbb5j3n(>ldIqqKy)%G zC){65K{ee!$d79QTo0W9gZivIAqmUVa`2Q#`S_U_^jm3n@UAq@%YGyELhl0xHRl+w zMvhse@SfL^7H1TeJ$dK=W52wgUA*z;a5%sFyDoQ2Z>@@)z{`f;Bp(ybxaR=u>TKG$ zF&ii0;ORqil%tFbiMJnc&f}MQ;%u+A-wyJlrA6yxOdVYu09UcTHFpFT**i6`SpO{_ zhj&;x4mI~odJBn^T$TC_yYILQJKtS)vLyIavV?t_jTb*{pdxo5$bcc_V{9_m1)~!m zJ{0tcgQoyTd<9^TmhYs%>Xt=ev&x-54*@E2;w^R&hQ7?L1@;_q8~)9GBp5#Mtc`c0 z@8DNj)`B;BnjrtATmO68pgzeKIT~t{o4kKeW8rq^Kjsn`hYrxp`?f2(Eaf)9``uCK zza2Mpv?~I&+~LiLh#-V&2KyNT^fMF)Vf-``SnQ)554qT=F4G`;@;c%zVzpP66r4cU z>XPyKe#P>DdYg2vNRq=>Dg&*~bgTT0tlOo7O2X(N=BD%4%ZHOJd|y05xt4$43AKe? zuEEeTZchwEX99DV$zno`dV|_mPV_n{bX@Pi)j+xMW$u`-r%(_1FM|GJ-LI(u&f~k# zy%Z8l(&QM#&=)qizK3EkiSQVnYGD;gu~r&2Yb}j z4ArRQDBbviIjrf>!{OgsuK{b9*w-a2NbnIvfE$^89EtdzEn|S{(CvA0zh`R}SkEb? zo>+_AVz~+Kk?!V#@AIA<0=%mF*AMq`Y8jyZ2C8?dGwPq}1E;GXX8w6E$rPU%K(oj* zWHp+6@_{`VIz}8)vh?iL!V{vygf&9T4RaxE1rua3?G(<&yYI*S1b=xY ze*LO@#J%`ntwJ-?ji6?|&jV1@`e~Q1T-V!D0b^9ldw!_?awd2~UlIf6&W|cBGO+tY z6`!(X5<6#s)A052#9DNu4KX>$fsN3qnCAHGz$OXi#eJzW?UEhTpg134>0hTTTnu*M z<>-Xcq;qI_;9P_G{O-3&`(r18%@N1armQt==S2dHu``cIe{4De0|)=m?7T=b;NLlo z07l``M&$qDB0oZW9urA99P#5v`4;e4n#211b@fKQtlRHu`b^W6?0(QCXCm z^8zu2FsA$(s-Mem0PCvPOO~{5yoD2<(KCM}edT8Bf*G!F&{lF0Oe+OokEFyLiTenp z^a9Upd|ei$bV8%vpaPjTTj(kX`*1Jdzp_AXZ5-@ZMFU=U+v4%{RQI#~n;Or|ojAD# zQX_zy-K+c2eYQ!i4P?hJZ}I)27f~EO72oCC-Za00gmZ^0)GQ==y;ARa+Cdb}p%LAuiwAVeiDzd^IdRy^vt0 zSzDJJtv|{8r|P6=-5!=N({B z>UG*5POzODRxmI`c`Q>Rd{hH#g*5C>3ov5$p!RI=UZ*7gvVS=S_;h7-Im1zm9#??C z#v3_4YA|pf2cD{*mQk8foiCu~d`&C|<{){O&+w*v;BcLqQOZex`o_}5a#D#(pJTw< zU4zXH^_4|T3vyVFE~z1;$%VB+#4&t{2~`Pub`t6XSB_E?oNVqi_|wEIUvw zc^`}8tGwQ#2>f^avPP37ss1GZipD?5y_Q&7WvGCZ{TY;qg?UQA+{#Hb{S?R6{1t%p zi68lA-?--YKk!CxqO9U{*F&!YF?1V@pwm8vcvt`llRg!Ka6#QOfb+@?e8aeH)l2l> zOue>ACH*do4Lma{bvv3V$KSpHW{&3EsI=QD`Yx~yS)B5c$vhRu;OwN&B&zFh)sG5z z?6+SA2fLKOZvi4@SJut-*H85iK+)qfN0HelGhP8!P=(6)p%0Rrp{`m)RB6Ow7(z!N zE{NG4{|p{iN(4^Xw!(tin{m4$&hy}Z z!rRMKQ-IZg*;9;pV1|c74 zAq2Imu7KsH3_9zv!Mm0WP}KCcAY`Ad&s$I_l3f2>u*+qK6Dsi%=&lQnQ-5l(k|*_1 zoY{zVb^=kuZ4CZy9p%p8v><(N>DpTc*LA=yEFMoUVM`?`3D}q15Jg09&-PNlE}%7z zY3b7XOAjnom@D!9w7h1)82ah3WZHypz`)tECb@S@HzZ^TXP*_nn-3i)=^Ozdu*OQy z{8IMCf@e>}V)>~!f0A_rzOQPQ_EoE~phdt5NzW|tUum6X1+p0JO@7J|=>zo#qDJXW zQed#+nI&Ks(mV@^}9-RrV;=r&6SAL6V;=!gB|Rt zj-#9wE;-bI?HMB{=XEk~0p!l8JJr&|^STF55DF_g!}&u$IJ^V66!a=@eAt{XP|d47 z%+cMDIrg~Wq8LspS-WBt8X1bu-_ z32%LUTii3?-8A}T_Iq#$ND9775hAV^KmNp2PzQd-HkVj4k2a_TD5EOXdf^gX@VxzbYeKNOI1XWP=Z-W}4=7G19K+!G=V_8w%T@;8Z2^AO&v@r2;_yYhEYFJUx zZSmEEMHI01i0Gf}QUry~q54_Kd2+-_#;<^PF23rn9N~-l%f`TWe>oR@^6@o59(%ip zsC<8~@4|z%Vn2703C@H&HrR!{7aE2YnkoGOPN?%6pC3=tDFck5)>1Iah?rpqaD$SP z$=&bsKmvdpdfmGPVgD`t1R{>wH+dumjkSD1>@LWA(1x`@c{pz|rP7b+cuFdqa1O%D z34-mi5((b6Ll)&PqjT4=glC$3RZoN#@_BH8jDAvfTffIq-o9`uQzhBV%W+p`hpN;= zk`mL@_RI(BemH~~$F2X!P&INC4Kk=~p*KkzQ8*^%P}z zwyc%C_ABr*J4NF2`MqwH0nvGH2tz@;o}8f)QEwIr-;_i~X;5?T5e4c-aV6D3zR6T9H!M zmp<|RN>mJyU(8+i&C|^c*2=QFh`e;gVlvPh&()@zm%b51KXBH@t19v$efhnM09F1n zSahu#cUvA1%Up-+QTDeLR5e*lwWjQXDN)1mAuBENEbwhSCn; zM`wq85`*6>H3E_SZU^42wvOx(u=`_l$;+tmdMSHU&=4o z@%wHxUd1d)ya3CMF+U*()@X4DYVN7gDVMK+d{BVTFOK@=3x=32yz9}tP%>UfvItp# zvAXEw7LBIY3(hOIi~EJOPu(-{EJi1Pm^|A)SA4t~2zmGb*5!56PnxC~S(5se$ zD$S@lnL&r<(+a1n9G8ICXc=!l;7E5s7Wp)V=6i?g!JiKqjMt-FaBAM+FT>U-sNg~d zbv5r#Cne)FeL*(y$==}*jVVRIxl8D?K9f)if}ewG{B&NF{}{1l3E(W%r)^!h-dXTG zFw%vLSs$B-fHAe;{;yD~cT_qvyuBhDwJVJEGR#nmCit|-$s2m2!hGN4>#;EBGD~7Uz`7zn8Ne@eKQiL4eM5mm6kFhf>zQMPE_S95X9pLiIHRth4DAcv zIw!-nzbUF8;0e+67u06Llh=a)NN7!SN%k+@{J3z=RO6wEEKDLAfE^r9^mD(PrqeVK z*#q8Rj6_$^q5(W-a+5+{vF9)%IQOA?Ui7i35du|D3o#2Ahj1+$cFrTH-hHn*k!2Qi zSj}rGn@YugekR~K^dE6|J}Q3~D4ez_azuY!tLm=c)8_5wM*HG@3HF*U*1+jYU_3|x zyjwX=s!NUiEn#3a*z|aQoPT;Kya9?ve<6}W0t{UN<|ws6WhUNrj|Jyh8yfKkuxPeU zpf2hO8!8hLhC3>#jPcXJE`xw|`wsHZldt!Y^^kK<0LG4nE7^FEtLg(P`5PC0kG1BPr$>Jz zNq{qa$*>7uEtmB#1>WTH8?U`uOq(Tu8*fc`vRf9Zwt{^!PgGO)A#g9)yT!bQy$i>M zd0tQ@gW>1e^aY*CfIT~fIdG4+{|0!A|va-6A5tpfUQV{XJS@}IwC1^ljKiQ?K1+}vDnCZ_Q^xn^(} z(*c#h!)>idvft~s2dL6-81Y3LDcf`4DWB?`&xuc@I|Sd=U*CAkjI9kWz$XnJ4`@0& zcn+#G7pZgHJ!yLctjN(4_j1kXVlE!AzFVSFQhmy8g>zdh!J4A?$O>OrMa=Sd%J8Z_ zXbP})ty)43wce4l!md9Z>jiI#{wNg4C6%#p#MM8>w*^=7U`~of*=Ioj_cqYj(Fx*A zx&ge=rxFMD^=tSM&ZYHLl$~==7<`C1lY{ZdAdDRBQKP9cJXJUzr7ZT~hmpNF7>KKM`=GFiVYJ{IUD?fw$f7p|BRp z8^RK>+(X#zH$?`G#sQpE@SoGZR(#JlIIE)SS2YYX^hp8MrMi4jAC~(0F^JB?ABtzi zJk5v+@*}sde#y1R*8pz`r4RC}r|T#t6g)G+JdPyRuim-A`(B9qZiVp`_E2lcycT}k z*vQ6FfTCToUi-B9qCUb|QAJqlGiU$tW_TAMNrvoZzdyDEcvZAKe_3Hjy9tO^e~c8_ z=jI?k6yVSEOXD;>VuBc+n8ZwMcDTn#?+5ID6vTN*NaFHLz*AK6YYt;P4OM)YVbzW?r5xx$BVv!r^+;gEZ@tDbp+VoJ@)BFU!i92Z8-5?W5`XrEBM^zO#+3?*z5mS!56aAq2%8!y$IwmMg0RD?S z3-jhJG%aI*8#@0fHq!i=8N7vUe3%URp#Awu!S6moD+Z5U4$BEAzhi!IF^JQC3gG)D zjn|~EdXAU_taFXHFPAzwLKf6E*SAa~U4KpwtRkK#j#~>mDl7#)4PTqJAI5p`3CQ?D zO=t&c+?wG57^_#u(G!-jw*$nS>Clv_iwgs)_e=LkxOgE~K~03zk3tq=l+Ia>z2n^E&~#Q(y|0kz*n zMpX2U4j{=NmMtTp0b2ydlVX8;gM zCMGj|T}W-1AlG;ojq2|OZ*?qS$bZIeUflG3p9JvG<;8j#yRbasK%Io@zKA9*V!;NM zLlCw%i9Av-7>FADGioX|%vSyZ*iJm=Dg7D#n!%Zg-C@!AY}M2wfIXs~4M(>he$p~n zXPgp{GP|f>4*9dd2s`6QJQWkba$cUcZx8avu{Dr8Yi56a5MoIw*a>s2)$1-zyd4;L zKXm<}zSq)+1#eoF!r3fh;jeLP-HJYQDnRrP<8oX_U^YDwNEUZ z|7%*&g3hP!p5Unldy__aoNW^UnTYbC(Y<&J$`t_g&ezwwUzZH|O;CR$6BLsn_Pe0J z5Je+Jh|Mfwe85$zbxuf{-`gJvB6~~bGb@Osroy{Ce=$QkEho+v5g;&{Y-S%+WTYqH znYnt$`S&7?JqMzs%LSanmZWvS`DIZ^{~E*hhMNaCiNs^GWLo?vZ>YJ)DgMvNITi~+ zlng4Fe2aLDJn&=+X=H^iyFaD^6;#-F+=hL^N|OmZMJjZyYqlSP?7%~>xZ=K|VBg&d z`+|N|%FcxKOb{ny>MM(~eRl5!M7pxWN%wE12@eBEsKj6VP8GeqVXt^zr?Pr}`yw#l zeY&uoZ93+tw+qh~et!L-Y321wfQK?@u(Cz2SB?QPKD62oeHfAPu)q!um+*Nz%ocuj zu+HDLT*-!@>;Y;=GrhwIAAZf46ZjFz<6a{Uk7>in4iwW5J^6&Qo&ev^xu6mxqahF& zL*IkJicsnV-mP+}x;y^+@3O#OGQNcmyL)7-iRtmuI&7dMFQA$;E%{oF~owh zAmWhs{*YKYzj6-5GAqp`nl|RDvO%Q#bfQTPs`qRvoPlDm+T&WaB*POE2bC*v)-}?# z!0+~B(Y#cj{WC3C&6E6k`C7Qp!l`-5tl&hjg+CL{!mjvZy9idR+5_D5IdCb7h6foM z72c!obbh=u3BhH^kQZ##a=jT+8~kNm5ok)B5pvU@((?4hD)E{6#{&$i0hjQ*Gt(I! z{I33JzgizwNrlrzA0t_gpSRjA)V#g6_x&Y&w*BH3j2d!G5vdX~Q2AkStPii4!D3Dz zmd$hZ(i6%2$_>s^l9&Q`GBd!)*W%1*z6-LqyQ4hdJBW{H4Ure6C~iN=>kVSg;UC01Qt*tc%s zO_0C5@WWAGVTFBtZ{Gamh0jbAoKV&nN94 z0M^x?ckN94s5B!${#uW2nn^yPK7&Zd2;CE#gmwJ|72qjsr|hU6-qZlrx%OChlDMzZ z1i+7|z^^YVJP!j0zHog#*18nLm{m9*=aJ}uR9@Kw)hcp35!5`M#L@#ET4!?bZR?!A zT~J3_xAif<*M*d@cgsd+OEGxIAPlgQ{yTm>bBJMO0ixvft8Pc_FI>dI`yS69?aQ1p zWLFsX*SARBc<^qZ23_O&(~yeTuqyzss8E{&U%vi=7n~{Jl9nzm=Tu_Aa+FysrVHUe zy9Jm`PHF6D+g~P>!BbsIH5FC5^79v*woHu`W_z`l8q{Sfdrp?BlC2v!`x}|+;6zm2 zY;aJGSNb;+CER_+6nNi#NBC1Z^|lN`=%JOc(5vob<_%*gLsZneci9T~QJ5xW*0T-$ zhQ6T2nkXvai}7$!uUjgk>nM*5!!Kaw(Jhj$Sd{DS!|6HZh7M&Q@H$kv@!IDa2h4DP z@b2(=`i9t5bIg5!O;%qke_d>!j2pHgF2gnEZ?&UW9TcpgOIS851fTiy6Kj{_dz`K9^9u!$P zdJT-f+96wlhIKwRK+Q}dR}Hr~$v@HneBY1OaU^`T&46ue@lQzEg|a$W7sV>}W%VK1 za}9W-&>;uJXqu_VK8-?3OK z%kKbxHd!r2T&DXr75H?%4%3*iuKLj6)MLucb|MAYQeYocYnQK_FUwYPK~E9;L3ozH z#y}K7&fa`BCn7wpdwP(k#2P-5XUe9x1}x_wrJ7u->>@hY{T`kuP0|Qj;J|V;uOhxv zOExVDb`YhOyb#5&BAUP^jp_AH))zJYaIhLC$C-q}$A7E@&i^?8O&od={(Z5VYa49 zrGIq^@*H+M#ti*-`VFj(6GWWHfAP%QP(SA!KQ$uN2oi%G#CX2_{R}2%1c0K7?o{t+ zSadxEZ}e23wsVx|w4v_wdEqDbR!oW#0UPkJ(u9LvJAhY=iqt$mVt17pjr;9&w?bB;PbZ2Ctz43vU;+_kc}uxop40@;NFN#D%x!V*$bzsK9|Y3Zy}` z=X3S59aQ9wGmw^2=EblF%sl#gI=(+owTHN|Db3cACJ}}Rh=a7!9^XMpQ4da%>QbUn zC;KPTunxQ`S#!>ZD>5uRU${qx71qE1{Q_U0K9?{fR?f%|s55XvXFqxxr&xEuxPRV? zbdX%DgB@hthYjS&cccX5R(1NVMdBVR24)0KFHf&kaCVCXXm);ZmmtO%f0y9Qx~=G! z)I|tJ!uq7Kd|ywo;^W?eJam!Gu-)rDK`c0@wPy44W1Lme!~0ebu0EMdzDTIrwAbcn z_|@O8L%pC2S?ISG`j?JF?p*{&D_%;(3NV|{IiU`Qoc{{{ZbM6S-;F~f0vgBS2_k*;t1+;UQ5;Qg}X_p zysZ-typ+Y|{;)Rel4{7(DwCJl!l{?(y~s$=lMZ>qZikZ4k#-TZFaRCSZyXc**J?)u z)UlbAIyUL2v5^Nnvv}M>f)SRi8o&qZL@-R3<94J4yYGfgtDQ7)ge|CyU9@^n&lfvB zu(J#MU|Jr89k;;wzcoI0i(BcF3Uwf*LKEnQO!Nx&s_F0KI&6~GB?iQ!*iJTT#IY{} z=Pp%aT}DV7`g#OV<(`@4Wc0pGQsCXXH4Ja*^UEfvdnq`zgZ@&R(tvekF^XhCE!Du3}Q1slK{g@j5*q@~X2 zsX&|zye605Whnr5&EyM1;M|euJgB<3<0B!v5Plyxc_%1+gHyd#*&V1~XY%Qc(`7k- z0cZIAaS!Lv=&Bo_7P?_Jcb*eoG=Pe_D@()2tw|LeorCjkQUkiqi(+y>vauwSLQxa#_DtRC-BBPHvln_-*$G6Ci!NKli1c>TfOAk)0i6%TJr zXd4mwQDAL*X4di!b*PSh&y`Bk4B-d-SF8y^ThMtyB-k^SeB4m)8IjQ)1ZuGIw8u|W~jBY!JBc5w2J*yAEoOzS#L zfKR?7N&H%7@y_AB^0Rl{;LTUO8-hO zrFOg_2y6d`>~9c{f~v+p^5>8iIAIVST&gMKy2yUO7t}7T#Pz(}7%GXCL@}-;^Lkbn zc<8nP*_pRRx=RB22CFD7cd!>yLk6WXN*Nv@<$yOz(ngsTSs6Uj3~0zkqaNpP(=GMQ2VFFRSz@`mAOz2M}XG7A3OL6i(s1@BuG5w-blKISNR zs^|}q@S=IK_5t=6@s1~))IREeuvT!miB(g-@P-rUrsb#9_VB|s93YaQ8!uXr4kv}{ z{KM>ZKA(kZppv$$ZCYX;dSt_jD@%x$?i%B#A{H3C|2*4NL+bf}H`22rNvU#*4FgtA zB1^r)!{odjU@Y3bgJ)at?+1f-(tC~3r_A7b;N zO-{ymo#sjT0zef_#~7CBw62KZU$zaNrsJS3Jm6(P^=R#v{(-qo05=9&^9L+QiyZK} zYTCp>oNS$dQv&xn|4Sc5_58Tteaj)v1MQWljRMo_T=P z(Fr4>QkEpO4R)d5GQ@9o7yqpQCqK)~?%~(RCk37^(Jy}#-(H@SfX9AYo?MM{uICke zmyABKU$VZWPp~)71S2UF=_F7I@Lx^(>1J1Aqy=xv zw-=YnuVOYF8&n|}wpcOT;e+S}yLM&PTx*u`{Tsxx>FSQ2u}1u+04H>;iF4KbAw3(a zW5p%QZG6;Tus1%$hGs_`gx*=ekq&E?h;QJQ3JdBg?PK@)$7Jgi-sS*xv(HD4t`l}0 z6jK*i81I-l3lM2FmsUa?Gh}&yS1X^^N>UR$KY^|x{*N8!!z4&f0VnTdv4JYnIhh0K z90wokoE+x^-cked)q^tvI}2pZRnV)K zK+aw=+bbad*pv=WYUqsXWZQOd`UNiKQRICdByhQ76l)Ra1wf5yp_^x!(@WD?770C^u9Fic>}wz#Um9O-*fIs zaQ4(A>JoVU)P7?S_i68ozW8Pxs221i&DqYL7-g2$4p2oK;(k1wn&;s8p!?_5Nn#nJ z1kaA?AmbMvVXaw&nm@85*+xqi5v*P&qR=ch=vIYYaGjIe55X6X2m2@{DY%1!VA3`L z_FU`bzWWR^<v9cp*r$gVW;V)SS$bg<^ay!H?YhdN1yPts>Jq?dy z$i6-{VHO|fF&2Qa_Qdb6U#w0G%#X6Sk>w~7=&=cMSdHGpj-)BWf!ect*8L?aNLqFh z~|K1-zZW?J`WZsnQyFN38b#*!H_`Dia`ZsOp0AuBzmD124NURF@tUHN^~S zSOsHIq2oUNpw^!@&%?*Z`m5A{hxSg|?u}sha|OPua%3rqgz=sv5G8wC)IS!*()Ix& zY)NDZ&yjq`z${fq71{MR+aU!IaXKa7B+@G)cLWyu%d~c4s`XYxfLC`-bje?eZg)Sx z3UG=x#bAoxxB;sl0V>n(Hw`_AqD2t@)>umyja_-w|T4OQg>JB_nHj{28tdT-8v z>h9OoJ8Jwhs}6YgAhP{?8zy8xfG^yi+pau9UnK+JqqQ>=XBeI05@tWNqLm5{%{fe<##znSJbZ* zkAU6J^*1&ZZ%0fJaMtE0zL9=}_e*0zlvIT{ODTc7E~py8f6-A}gj(i5AS1xbQ&s=? z8pqeb7aUez)lXRG?F7GDABvy;ycZb)Zd_o>vj= zcOU*^={go21#;lO?0FAl@R5v(CWjlrM3XaLzps1tI&W-4w^S;r)g|!Pw!zur?3X~v zK*Z^a-ZoF0D$oY_;BLh-O40GN?f|bS4Z&N_pqotn|FGoZkVq_wVmV+PBa7lu+s7BO%2Xy@gW+&+O4BKk~h7;SHQZC5ZUfEzNAC zL9|L)KKnSWLzEO?jEdDw=)P(P(g1u$%}Ui8@>pHiDdAQ!)r2FlX*r19+>uNIMl z0ISP+GikY3ry@|VkIFIg+g0iADIg(GkVeI7?;Xy!TZjNXn5kys}$^lJAVlAcXGG6cKu z-Q;{XBk+`veic)xRiy=|ng8W?iPGU#7WH6{dd~iwi6Qsh4&v|pp00Z;20KGx72sEGSJ>gO*PTs?Se=Gx|!_^K!)SQU)y)yrFy&hIi%?K!sI zs$buwA1L5QiLp#BSG%7DgYyVXk)!83G3W*GcE(Mq&*wZOvIa3lH$M`&?D4HQP#qe@ z`E^b13ws00dE17NY1%9O!U-w+z8qsL-L|-ZH*%e@q!ay~7Yj~DGWvUprOH+R&+4C- z^rgC}SOF4Z1@V{by^yc|1wOb}Ni>bIY?~SIGWOfx?HJM-PJ$fgA{ESNYY87n5b0d^ zmj-eFOInx#dHSDMD3X^FP#aCf{+9jTF;XPqB&maEA4jBD%L41%a)Rt@38hyF@S{-Q zt4mh>EFJ;BBFc%r-JzyG2B=WIjpTEd^B;YGz&Dqb=KWsj?NTi8UwT3NXxG2tX@m2! zq9RLGy^3G0g0;etZ!jUsVe%EoyuMUoSjxhXeFFaaI~!tdC2eDUU>osY?(2kSdsGDY z=H}DtSmccg3T@-t|B*u4er6piYOb0@@7Ss(Qv2^bh4Q2F3SDc3tRT-W!EV55I5^h` zSEaJKS~?gCM9Fe*iqG2bw|fBF$bVz%9UWanI>4(cKv_z%Rc3hu9y_%2Ui7Kvye^Ot z9BydQn7X1I%&bL5Pd?+K+4>i1zhg-Kjps)_Q1I6;C+dW;G%t(?7Rzvv6T8A@HZOp& zv3t$EG+^l10?c{sN++@dCgeOgeX#cSYD;i!PXcl9HF=}?bu7aQ0k(@4liF_KS|IKjMIA8~!G)$a@Tmn_Tq0*x!CLWI)W|Q>MH(4osZzsBAD^1ZGy?qDw_dyyQN-I9;C;I4V{^_Zd8`Dd zZ|sX}kKc8TA#+>ZRxEq}$jB7a%!=(iaN$B9fbaIx=%lJ3LME9qtHYM)occ%L*JfgECIrgN7Ns#)OkAy^|LTDi{ix zbS$A3Y)C?GcJE8@Q@hDm0QVj}Zu1_CiVCPD)qEXFO88$%H6WJp!;n=2=YObSe9bh|}6!r#ivRI!fes2G(W1y~5-_tfqSmWVesFSd1 zk{qS}Q^W(ON>?#a9G-b?CRNejRCZ_r?2(-2 zqBA0MCBqJ!46PMUvx(>%!|t7X4M$41YX$01ArHGy;mIIW2zDW)#ger2>~oN7|M~0hL5dj098Uk zm544s>e~mElbs@H#v-M2|EK+4PZKSUvckar_N60T?W&&DZ{Rwcm4{fdi4Za1z<;JH zuAgc8h43adbzj6MLZ=T+0e1bH1E=OY{SYT`%0sB77Uy4mKj6HlN|e2xRlcti-d-8) zB|a`sveyz+1N2st`9D;mdIy};G+WAk%sL z>CoGf7{N(EP8ium^fjw958(N}mT83WVp_cyY;W9%Mw}P^jJ0deCm;w3J0F2{4KwI2=8Z~KJdQP z({*ii9XdC{dtRTAIhy+(|IL~D)KuMudPRFSi0rq{AxGjm<`4F6EvNa7-kcTQ2Gn-o zr31~YJ`!-if?l7OXDsTdd9X|QkT#-H7eQJwIM2&`Bx9jtb>sjyLmPFl+DRiL9ITc3 zd0V5;=40wYz3YUmyve#0R|Iw?JOlCh9+Xw9aAri_uI~FUe|L0Xv8%P->(>er?EpOI z;QaI>-0l8?8iOM*{*W@1^LqmM;5!~LeAABY1J$8TLx{^U$QS}nfE~*|D%gAaO(clU z!Z=Ae@q|KJfwfw&rm@3pW+oJP*(%r>+Y`!r6F?k1FLWKU%ik*&Myr&1GxjjLstEpC zPQ*{{I)R;YsNVn76W7M^hIWAEdb#JR^H2X)4%F%lT2c8}R`I1l?52-2KS_W8VJ6_B zKuyq!AfUFkP-H)d|HWBi#O2_@P1kS`hDiu&Gt+KyMU9C=xfGhlyGLm z;7xP1b!y7pPzB{;UVlj^&`811XUw~@U{IWcCka?3rBMXj$P4p%mXj8 z|Dx%7PFtg^UP;i z-APBpIZr})RO)?2h7}- zg)I?rn>yeLuc3sNu?NZ%EMNzxe$XxRjl|yvypeDmbnk_a@)vRe##;O>-g+;GIjGoV zcJXr7pM1J-);YCbEH7}^({2)TLba;Ug-WKN2k6Wu-<-zJ6<~^9&TV4 zoOdG${_BVI4q#uJ!gG4sN9dad9GHTm+}RN4H( zDHy*X(xzdKzkLXHKd-Dqp1RveVo-5?p46SgOqGuTFmu(gF8)MDBQc;>c4bFrmbHhZ z!H!>nefYD{-)aE%Na|#^sf}ZpMVK#S!OisQ$Nmvut*meAKe>c{P!H<4r86GX0j6BA zUv%NwZdGa0c#GhheH`0wu{yDa1zfbEm^s7Le15?*puaq#j43>G7}z_l9`7cUnQInc zPoUbVjrh8=UcUeW8{e}l?7F3j1NOOzSWDK#EF%HDhZ|=5F@U8B0ryVRNDy0Q^C;M{ zz+$&RtA7NmSRrHV4mNHchBiA8yWeWmm(-OB$qw&#PnJL49bq&C*nQU8mz(OtQlg=f ziIB7}xl?}q1#t3Shii5xh9_mPRy!qywdn)h3U`3&+9zFq=9 zS|=vhtCBYjl*SZTw8|#7#P_(e-djyi1Exb*+ zaQUenRmBP+h|XQ+@rgP-L*>D_9xnEw)0N3p$gamw*z`v34l6vsWRp8a!Z8!yM1Ez|dY`!qDt3>cbyXIn{vG>4tYEaGl z)x%+=Qj#1M$R#&#*1I})do%}GIm_IryMLFy_yD{rT5DQms^Oj%&Uk&y+viam`4{Q< zMX=1)kirGtUPzWqk!`zKZW-eE_T>u*zIt? z-m>D0zGT51_6(npPle}_TsTLYN4d4dNb!W7#&g++bFxT zTiJfg9|Z+0$VFM9Z;@^9cvztdXm%L-eWrg^G+^$oN^rJ!m=Nli;V52m>+0P7+} zUoQezL<*jy?}<51gM(*_0#NiXX+=4I7JYXI47rH&rS_LA`15KIHLz7X$G;@$dxOuS zo*#PZkNmtx=)c`DV_B{D-U!w?upP`zjGcNH;C&zIFW;G`awsg2FWmZ-WI8c7SPx_9 z7*Snr?z0Pf#rc4=)-&>JgJ>l+7S-UX_Vo3l*-N!J1bnmmoYcC!dDUltr^vvDo^;$P0ZwzX zHQC}nUtDlNuHpZ(HHdpXM@sO`y>`;qOLgW#2Ydrb#6MzVP6^8cKe7iEeSHbrp&hW2 zEX&rXKQpUV!I@mtUwUvl?hxx>2W6oVCKp#R8_roST<1nIo6YPGsBaK7zI?6gm7Y)o z_PE5Z_z}2(C{XJ_UlLwS(Nl+WO#U*(&+_2=7Q)GB#x&b9kG_uQ2kgpkC1*tFub;#2 zyDqNHLou!sgA>Wq*W1^g(D0lY@Er84MyyUpq=J*9IaCSa@mm<34_5NK+Jx$puB)6- zLxW!X94*-}Y=J%JL;kHS&l!maFd51^*IFG{Wokecquk4H`u2st(;#Z>g%R$f>34Dk z5GkPI2yrrV9Z3-Bj#7MQgxH51oF*f&F;6B|`%E^-V%YgtONsFI{Q%fiinx}SuXb2F z!1rT^Zzes6xq1XKMRm==AY1*hP!Ln-Og+Mmj93&}Y~b;Opzuyy!+ue})?Ft`PSzeE zA~D66BHz)0CxF+z8-jM$W3ihX?80)^U$xJ$Yx2P!z31?4PnxU;DyT9&hG6szHkG0P zHM=rzzxJ15H5uTsHuAZX@L1Xzo)Dp*-FZ}ku2cjts5-yhj=Saz!GWg?14LvIa~q7NuE10E@e99yR=UY=unTO{&n!g`z2E|zbc(aON1oov4eDS>&s!yZ19hMh zAi*T_HcL@uCg6PoGnwP=jTNQ>SYPjFmAfvI@`BT!X{J#!*Lm9Z3s5CPu%$r6h{RzZ z^57VnwQph}4xqv;KU~mQnD<}^JlB{lrfQquGT_Zb_m{tdBik(s=H0Qxo0e?l$O=zP zO2J*dp%dm6-l+OI0XlRa#;^i_D&nk^A@B4&w?PdJ%{Ag2!HonSnQ?ROj|D=(jbw$6`&HRe-|v*kBgHlctZhwU%0#-wVeiSb7*Vx1h-K@Jb(BYYgq_yl(;K3JG5+149LP^&pW(Rq< zEylbls9uh9Apey&LX1%~s(l)KHZ1J>Kx%$35tw&(-gkGKyYFGI%kU0KLAo%yxxq94 zWuWV3uJ!z6pgPU13^NZZf*T{)!TXTG_|rC}DcGr~<*qMqWGRR67AKoUMz#0z$-;`< z2er6R3u?v$EBSPPlrZ-?+@}G5_Qy22W4axD1$ML0=d;<7MTdn`noO}su$uB9=qUBOrU2?e5r-XWDjEx13ib#g z$nUu>Tz$i8ZQgI{>I+DX=CCrhj!nn=UK}6*MT6Mt-F#?X*$mYilHG}%eH!i(_PO24 zZ>y!1>|P-Mjrqf8Z=4Vln3v_>G?9hVkt;a!h4~J}+ziU6f|I0dW1JK!kW7LF`BC;L z)OB9{*F*uMcz#PEb`kpHp>nuPo_4JvlQBW1bTO#9_3LL?e}dor715T>_PrwyoRzHI z!Vj5jKY_~sYyS-IeW6|-*h}muAL-9`j;>swa!WN;eN}1WD1luVOL@Gy`VRqh5H&iL zH`PN!EW-jB-}q^cw^${%8i3FG@^mQ&aW{1gXEiotI0(**-ZD_%SU&jlnxgYTU~fDn zHsi5V*Y0-Uo3E|loYb1O?*Zzu+Fqzc-~2^?3B1wglX{h0|A-5o@_b(7-r8pq3lCHe zF4VNo>z)Mc_xISj*>D-0m}gSoX0fuOgYY-=L;( zx)_d;J-11skOc|6`-uVx7oi@qq3}I%-c`M)fYryD-b`~b`Dg&xh$CvR&+|}O5$=%l zcX!jabiViibIi|eO6q%Rba>OJz)50VDkD1Jok!i^=IFvqH9){>G+JMhqNlyEp=X&o`c+WAwLwDGAuMI~B4wAtYHLU>DMv)B48l zS_9rqdo62A`ZLxN4tQo4NA@Phf>33^?n`NqeR>%oM3`wh+>bMgl{i}tpvrv~e%Mg9 zZQ)?8mNYaNBX=E9g8fKmCc=KH z-uM>G>1OrFR72BJlLY-at(P-G=o{rsf_xCwUhcI9H@D014xrw2W?wDvE-C+veF%|3ZASpot1Ddp2sqKa1_S?bs>(|cwO{yP_&j;UFBT2Bo+cL^T?3S#Q0**u$Pg2+8 z$B!A1d9k@)^|pp|V6@O53zCW>e@a?&pe|x&y);COQ!RhNJImHvE|$L>;p@S?EIs*W zqC=|Uz&i8eT+^t@bTJJ$gS|b5lC|e2cfn~(n(di#rKOh%z+#`~r(#2zN%#i4vvRj< z^t)HA0bowKJYD^nLZOa99|iWkg|P4KGLAu=pF7`y=pyo8QUvo9ku{sEoCi^Y6C}?d zy2o@|q8X~5ihqH6+~`%x;l#bUP8HAhRT-XXTCsR))~7N1H+be-=}nh#CoH+4+NzCv zNAzd5I{`jhev1aNUP$rd!87X;En3t#c`BUiAscq-iGScHB~Z=aFSoV-7OZwJP-Tj2 ztvl%r_3a;6t8liAve&ss%>V*VY2U@IeWg_ot4uUg5lu%+rUR8c8@np`KY}s(ApSP= z4_Pzo{e9qhw~(SaT1Rdlz?rrP?=a1sGX6z^wJNyN`THO3A>ANryNeI@IVNth;T&EE zYp}&GSjK~0a0mU`lW1M+!vhsLvdV*~6ZN9f-f;JeL!aa0%i|!H$u;Zp>0#I*R20d3 z4dr$0B!8C*Grp^_j4zSDE5NSfb3e_RWDEvQzI(gWyMKSEUkrQ2@vo>|^GoV^2JGPU z@+}^1XNiY(;DcZ2Fy^#ahUcLbC(D(3bev}#;fN1JwmMmYr7Xbq^%d6R_|(Ul2qqen<&VRS0ydC&$a(KH25pm zaw;x){7%3g*H+uE!^RO+xdA>imWuY09d(-sB97DU3Y!+9e5=6sQxS0p1SR*jfRlHW z-;8HWj&TFn-&vE?wU5~553v9OCwE#Q;(7@w@b3Fby=ciki2!%-s~g2KclE|RfCZs^ zjVQ11pb$6%)Qx)FZIG9|!JMvpZ)qbY!v2F@ok}JCysSxdu>e&yqo~MzT9#i@1Do8w z(QxauK;Ll2I$G{DvSSBXq+p##`_qZXyKu4-s(zC?Dy$qHb*<`3WOC=+~n;4e+jq{`lePn%}r&fFBXXYin=yAiEws z)i3Uo_-ET|Xai)ZsY16+^^O0aZhWZRzRvWzUeHjz|0Bh*kO=MtZ*em2h+LXBu1o}? zhPxexcm!w~GH{}V8uPv|6MBS#{l&slvhMhgbIo9_@LE{u{KbHKssQ=bTz12PqUsgc zm25au#Ri}I1-sGWYw4oT@eNl5csELSa%4(BVTC=A9ouCs&5+-ifvUEY=&;wkOAHNs zUy>$@G?}n^8i0fZZYFhL^2`HIOsH#48gffbHd{SvX7eU(W<* zC%LT^uFTz^a31{;OIV>;o;I@p&D?VSqgp=kq2cuB&8pl~E{)OU!D?`$_ZO?=&$-or zsj^KwT?gqrwGZ%_)dkOcX?x?qiKtq;v!C@ZIQ9}ky+tMf-z?aouazSni@F85Xv#-cS=ojHc0q5b$et$uLNkD| zB-PAcglTsKt`#Gooh49}(f#0DEoEaq6w4PrRR5Oy9~Yavxv}t+Cq$28ycC}jL~x3y z&MQT0Z*J*Au+Ek`^3t8;IyZo5RrQXXe3t$;0)VmCgr;Rc{El=6c7;|A@^j;qI$)L> zC9mVx?ivhuh6vhd`Cyp1y+|H?+7AcUF&Hy+Q@Fe7|NV6!C9RR&qECyVSZtu^7af?^0oaWrvIGm4Yjl05fUtY((;bk zz>JTsX`bC??E-H!;@`7vmvefl;FNi|D8u<0(=sk?um>u;+f!d?>`b6{c)n_~0O{M3RoUQ%m zhBs}+n0?cv`y3+J-!+>Sy)R4yt3lTRzSb0eKaCK>oLx~~hA{tPHtoUh4$hn(q1gz{ z12U0)%AOA=1z)@ZzspTbqsh`CJuN^{_qEQyEfjDHcKb(qJ4tJ`BjXJ3mLiqEa|{-h z@Rpx?i!7C5s&|AS4tmyK>`lL=nZJRjGEUMt}=;zM6pN%b#)=0^!Cz2;SWku}?7`38&;Db|b@vH1}TsE~90OtF09 ziX8%b&g{+G{hsk7sPicq`FOK$9IZp(p)woA=0{yU^< zaU&36=Y9Sau0I=j04FQmujZ@+x9V8fRYGuzqoddQaY23*7F9Jp`>WOn@KjYI^FRG~ zJ&6Kr!-$E?HM&~k;mH(P7%wg}`|94oF1(k`Ah_5GJ~Mb<=Hkb|AAj=dfN%Z|R`#_{ zDVd;(zGI*I@hiTkO@sY4^N1z;ezq6mgxp z&6WY^T@(61RJGd5DzHh^S=gcw#4W~P?}t za)#OtLVW5BH>mZwfJ}36oprmUR&>7bHguLV{O95`(F8jf+ejWcze{^HU?ryn$;okoP9{Dw7ebcW?7KV;CMF5tgiIdbxioJ4%&nXSpBISyFgcs9-Uv70b}Y9z?b{-)vg zMjfaZlwHMoN3H(H<$*6$7^YWpM}Ej2{BCpC$LHsUww=Mkj7z*w!N1Bb-E2H20u|oEWexyeZI2n?Y5z zMcDxBu8+`*e-yJnZy5JOtFYKmc1w6Z`20R}gvICi_hTSBb2VRIYBqFGSItY`J!M$O zkfy-e`%@V(qnB_FDgsGC@+DTrC`JZEIyWv}+WLo~?;o5?`uo~ z%Yh9lC#n>GQFmM2JAhgxZ|cEWcjvya+i=j5*6PnDwh4IZ@#>rpg@of?g9zJ5k!IEJ zl&xV826F7xauG6V!;@CD>kg+bu<&s}>_%EjYfc88!wP)%$l96GO$qxtfVs`DvOW5r zSp1WE=TW^4uE{INpm>R^Wh%K-$g$}USp z;Zz6*>=C#4L7a*Lx3f^$<2~IBDvn*i0gD~B)xq;8KA#V;95QdzfaGI)f=tyoKcs0D zJkNLa>j?WOaD08^ zQnlCuIKjU-`LvaA`L3`Q6jk#Wxn4qsCfLD398+Q;bILk^U6})adUG3O^S{cc)Nbj` zQ@l$-^uA`hRnIpk4sfExAB|IE2k}B1#FSvq%b;#&&5l6r%U^`oR}$nUzCb)`M%u@k zzm3Zq;0ru!zDMOR6JOv>5Gsra2esKALBSc{$99awL4K#?06uB6we}4Ydntb4R7*|B zt|IB$vrJIE)HoEMJofF18`yp1TN^L;4x19*@Kv5L|1_*`6;Nx}IFYADs}>Jo}&ZL_(CbSrVoqy6v)dm zYwQ()KHB>Q(ECiJu|~!^5@Ef46PsoXeL?CH;DdFaEILB;s!V~Z3!A^%@BW0H0u@E1 z@0?>BVs`Qbepg+rz$FG5CPUUq*iilD#F1+~JM=!iMy&8yoD{u;acPp`8NV#C>^{ayy$b#fjKd#FUB z|DlP2hVKmQk+>Cw6yej%LH#<{6a)QIRSLzyN-D{c9p6zD=@j7PwCWMHk=-m70QsH$ zL78c)ue62JM&<&wE}|fO5@ZuZlwUbneQ)9d`#TvO5#zzMGbFId(<7+A&}%vE4D}~> z5{r|PE?*n?Y`b{h@^D$k+kwTJvDe*Gvp!7%-e|?N_k!Dh84?FSyX1;b4pa+;h zyJBcVZ#2FGn{2faRf3M6c9<{xrDfM0iB|A2z*G5=F>LnYm?NAsHDvbnD2twPJYXZn zZF(2Yg_0+LYAqwZwZ9b*Ckx()+#OD##_!Ad<8Htv(V($&%Q)}{@Elyhar1U@i|(L8 z-51Hv>?4h>1CTJo0v1Qd)bhfKR%zJrrNUh+|lhvq|sEx!vnq z!Y--s&kZ(=s|=)vlRK6w4-h4)vJhl^*XrbUDxkTG0S+8~o0uwI;~xowC%kSb_V3Ia z9jL_HakNMwTSCt)i2MB~o=i(XU9W(14_B+wh~&F&*#vj6N4BUD6LtYSM-r3HjTB}r zpqfw=VlQiVVx%;7)XI zhCK=IhC%i}U*9UQgPNXNf9ceUxiXw5k~~2lztxs>fYphr`XILbekmo$%ANHN*|#Z_ zGOV`;oAgF#Ej2Vaq0C5{G+0*=+5Rcyc)B!My)79XR81`V-(Oaln<$(T7|5kFSoVkc z>cA%L7;PM`78i{Ir#u8XH&Ikc{p0{d>OGQw&3WlMBvi(uiAepr_i<@Z86Ym$?m~9F zzQJd&K+O>b@2TV;Se1q|0vJgmX(LH4{}{9`gbsgKRer8Me(O zgQqHE8bzCB*ZK}1a2sagZm;nYO?T^<0IZWn(%Yg;*9QZt>rB!fpLiS$ zAArC%J&}9U)yOn})!;v?mwru+sb=-Acb+?j)gYt57%o+nDX`GgEZ@z%$RIIM$$Ony0`AE$qh6$H@~% zfOTN$dgeeyRTFalV-KD<*Yv-L10t-W$u3iOqB@Vj%f|I8xLFF(&;?A@{v^n;@T~KW zL3GyEV(@gjQ>qQv6(VxIAyJ0do`AVsE#$HP-$xQU;Vc!#5%yhHz!uqGj%&s1f0VB{cyIw%56eI zZl>wJyQziW3<9uNeg5++#Z%vZ`58b_CA+0moCC)LnTQ%&lHfl_Xf9xX15>U9;U}Bw z3VZ=ge807WfNEfGp68~+`8CxUhpQn)U$xD;DdOP`Zp~T^H}ZdHi^1AvU5AywolFB! zWkI|^2>3&y8#n_r3u_!HKluYO_Vbs%auy#%odlKe^UWHX9GvNaXXehY!q!)le+}R;Tz;9KyU8$i8xMWd4N*_ z`J=V}VopF-usF0IPw;ZofxrH1A3+HSvO~6UbR1G{XwWho=0DYovbdz7qFU;b?v&H5JqMDtIRD@Gb zrr9)pNz%V4=w(zKM&WnRetib^2xou41t$(Qf%8*b@~S@D?B=f#)HbKE%KZ1x*GLKV zg6vi)!jhoE4Kf+Qr7FWJnDbxfz)mbVx`lKJJAbmF-)kjpcNYhd{Rk|2ip&AqaM)3% zJa1m=)s#=+TplwKO@kQzFc{9lmS|y6{UVE@o;lMPy5B2J-a{>AaXNZMqm+SvgDl2% zRx45H)arfU-QSIB{ATZ)O#<)xi+_$JzFYEB0AFy(A8Ec^TjyE8g2soqY)vp697VFkU%dy0>t1X;GqOV#Jdheesf*r)aHmfxI6y6ee z=2JfG;KMAv0VhXS@{iU6>})p__k1mk^z9$qx4wUtE0_;)DJ>3xqUFE|1 zz@u z6Y2C@C=OF}t_1Ln^UH6`C#z~M0+~pOp<9D>eWbw2?+${w>YHVg3IRE6ZzQZD3&DV4 zpkDXBYA;vfHlts_Q__pIq{uvRP6Hf?55mdv9C`F^q+&V?5Ukvp<*lzw1;>*IND@p_F54|6LGh~lJV?70Bzvgoo5j9@4P zX7po8*ZqYKD_MeAMt_*(gH>T^E#Rs0OEMGO{XR|%@YySe4`DPzU)sRxytq~7KgyN* zGT7gZ5KQDGhR20!V7dP}P2<#KRs;O1@yEf|?D*aVcq?iy21m`3`;CD7m!D`XurYMZ zY=E)izOnSi&rA;$fhPYx2r}sc_YJU}Zx8NR2tsl*fLFgs4E^$CzdsRR-RqZb31!f$ zrvnB>sSWv>wIKIAxEh<=4vwUsz5?(HWg4WV4cuFBfZooBB``b@4xt9onP26e#0gi7 zejbe7IwBsioxXjr`=m#o!){5W{!eY@R{pkx(W;67Jf~dspH(FC>n=gGBDjjWzABhf z4kv}R@n`hsjIbZr4X)&be^}z=!Rc4{gEaeA|6Gp(NErFnUj%JmDh6we$XG2YNd&@u z!urNWI<8blyZ3B2kf9#sl`Ido#Id6si>qUWIZWE zYz6CFO^02Zg;engcq)?wsgR8Gt_G@V=&c&hbKHX!0xzpDvSZC@9ZM2UI_PCP?rh7* zN$|}x8Te){mWgaarAK;ry?*(ee_D9rNer7XVDj66HMg%PSN6EcsYU@WTSXRO!x2ri z1oo=w;_n%)R40}he)I1$CR!WoI z1@aV>N=J+wDusazIZg0*)2o09TVQq77T;d?6130&D~b5b6@TiIb#=hp=4TV>C^E5J z1*`EMjD zmmtR8uF$@hUgCkp_OsuoHcB`xRE9_CkCI!DBHCZD&Z7UBljNXJd^xT@4aUPWyUX=XPG?k|4krke-hhDWHkp4l?>o*y7Lt!ul8ZtAc%*)Y8Ji zg8HJE&T_SpPbA~O+h+$~>aM~~?GJDyj#b}}Zk`59qhFS{rh=P(?w$!UYvk4H;j61--7(Ggg75 zY!@(!N|#Z_*+c0d0eV|On+Q+h6wL{0L62Oj>G7!*MF7aZ9jdaS_xm0*uo}%dhQsJb zR05SBO6lfXy6i&70#>K6ouaQlZRt^{U$^3QalT9q$w8j-dh>3Gc^&yeU_U=8$4(GL zm;HdX66q#(&6ZkL7kCOip_rDei^h_$+LH*Y7OPI_zzNPKqWmEiGxwAPR+80!x%la5 z89M;hUFE07eJ3V=7qF|@Skrsw>h3#({;SalE>W=V6;+`2yJm!j_xti`4u1Ds-Xr%l zgq)}W3u?ytGKnksF>er4a65T(!e>sU8lH!iZ2S?Nw^PE&(c~kytB3O}s{x)fQQfP2 zS-!67-i`Lh(*f4WNP(T} zW2Bo7cAtOi!nfcl^4}fpiYzZmY?SYELCtwQ$YRZU6Bz+;BNqA$>2GnmCe z*uEwX?EZ^gEre^XGe4lkstPBjXSsL}$lCPw;@$V(0zN40ycJ(DesBC5-~bt9Y#W60 zz`q*`KKsk~#?h84te~cGNfOx&JB-@*#Qvl{*m`BQb zRNXSHsO#Tay0n)@$s6F$9FmGZ@f)mW)xf_lLxxG1(Zk7E=PuO_u(3G>NND%z8!tR0 z#^EUs9XPB+a^d-*0V2J~BXs*2K{5=mYmqP{Tc+0n=V6U841ZpLV2_1@tb8EeysTePT zWiccIHK^&MXwBEpkZA?g%O6v3^CKU%Ho)1zgj~ecl4v?qelTe!sl*rOmmXlqa$W4U z9xp?8z}{LFv5|BiWDIuh%|C-`Yhk(j3ozs`4jw@`9@HeE7J3zu@BVXlZ3gRg6;Ib6 zJ=OvWtn&vmQ+_b!qOqYC>;G7~inUjPB>FD1o<*<#OFX#i4)(7Z$*0WqjLt)PYPQYHXIHWhkKlPLgx@z6;HbS1^E} zl=r=Ul`UU@;{$aK`SpCa>he5buVUmT$HPySIs~{~_OKfZH00_aPd-~VM*6GHK3V}L ztdF&auiw%53k{h)h^TPB+0U(E z$3l_*d25Ai2<2Y|-+#HI*cCWzyj(^yfeA23;BvADzs-%j9&!5b}p6&MMCx4=^a}Auu3zdxcyFO%d zM>t!Wn%`hIio?r+b`vIN#APs%g#$Z6m6es>OjH~i@UVAas{#2!ZSjHZXLFaj!B95s z3^zxgk-*{7A)+3@IabNX%lqnYaRzp>F)0^Y?lQ=*V# zS%7;0Ws2z3il6y^lk%?JsxKWviuMr>p7GMn*znwho_taA##e_NH4Kqbm@s72Ym2>t3A2IOst9E@?Im`1*?63sOM>;`983qeZzmrX$i6rX2T{44xoScN%ld{hCR)d@ui|HO z$_DdS2Rha`U7^1QoTTDD0jFna^b8=^XYp>c#h*YbcG$6RA$4|mr(1O3)1~6MpFVWn zlL3kCI21=D@WI3=VnoIuINoUcmtL&L4p!|O#1>OH6v z58}|wD%6L;rtcZv&>|g?xE+@|H~*iOElK{cs6V?3PIBX}(U@x7M`7LhHyu~AUwH)Q ztwfc!7ebR_7S6<(jrD3DYn7ZHa-;R`I0SB=u_>@fQ=<86>=iN&IW%If_jMGT|9k=X zU$1E7G$fl!SV2D4>DDw`xfu~tAd}*SFmhCoDGB@PtJe40co#ad0B^JtoA~bY7jMb1 zQ&IOAb~U2l1E1&Nn&sGI6;Z-1+z|egm!5s>(?sN3dx1^sP zyyc3{>*U)T6nXhcF-vN82^oZc3zSxg& z6U|>#89NpJJxUtbNlq&m?Dk1k`a&Mp=>ECoc0N7SZt*iR&aJ40yMX^?(i1IiBO3c0 za%FFKye!E#cXIGXLTOn3@TEUe2r*JPzK|fbQr-Yj8y%^CXNAdJlEE#3VRRmzAO~Rs zq#b*dZLnhsLl`(;wxO5n@QAegkh}6vHsjqukM{yR9kpq=*;VD^=)fYWF}7yKPnVtx zprH9TKI4hYPj-U$eUxIzG~uJS3%Da)O1Q^uBd376Fem4*ODtj@a4WI5?5Eq`64h03 zl9~@R)_a%dVF0_)J1?f}aibY`0P8QCuHbGoQ`cqoUl|$G~aiq$D`9`ZiJvR7@(qXffL*g5rie3E9)Pf6vrM za28$;OBG^ zK?{7p17;uZ=5xpZQ4j&QjzWh_y$YvWtiR-Q+6@x67z82g^{}+ujKSC5{1t6%^zPedVcveCnGXT+Z^pkRv zN&@|@e*Q#|@}D0?!Kcyr_+N}nVr&PtZpz9qvmL%1poblfU8v)zocsn<9*L6OU-6^r zsshkv*ht%-E>O#mf%;Le{5eH&TxJVy-AZdW@BW}2XT#3hv_6j4E8fjj2evMnSm8_C zZI%;2p5vY2jfJ;Qg9hH2WqFhs(irtFfa}}w=(;wjJic1=gUrCvN9te2Y_g4MM!Vyy_&=mHowCgK8es7qQA(-uY z#+sYQ2fUFU^{mogOW7~LPS%RDM)sctW-=hLM$k=v!5=04B$y=@BjlIP2bbh<*V`Xf z!7wF80tQ5UAwqVq(*5L#1R|ikQY%8?7iEB5a7e(fDUuRxP zehddZY``1o%UVz-vgPssG_?O{NbhLh?1Bu>LSAQ-t5i*&z`mfjetznDRWlFnqqpkF z#1K!pA@gvDjaaeV357!T@1(KQ=Ft6@2)nc9Z5%#})AE!DG^MB!5edn_2_aX>&1-z1 z4i?9ZAeQ7iOx|9u6-{4|V?1U&Q1^(AXSmHR{*nrvN#V5Q;U6$eQv*%=6 zf1tEogpt>uFGJ-L4af?dq>zCmL8`M1;-%wY;6BU${NA6)c`7w=%(l1 zlPK&*1bGIZ`VQjghDrlFjlb1KoBocZDeQv#8HDlmqs`+c*c<;7?&S5=f~yCWn%{?; z{K2H2@C6Zts{?o+G_zs(ssUC-_VRB~1?IY$K)Wls#?Ege-ev*$+%B*9 z7$u3fE3i3r``x|84`sW8c*EQ*Z6Y6x!2pu+Ew(netSu52yit8qkz%_)ZI;0Mwu)TD z29F%X4bDpQZOPuX$1fmfHOt{unj##fc#uH_b3BVyaOXV$`z(Gkulc5}feFCF5+eGJ z`S-m1VHAMdZ9gHR!utdt@KlPSzs<1GoxhKPFVhs{eBH8`!%gUj<|xxZ9rL{dP3ce1 zZ3DsSh#A<)4qtLMogVfjgWEqnz48_N6GX6%)9?7PAj4xT36Q$_^6QOw&CUuZUrdrY z{Y;WaTm}egS-S7%dAc|>0N(hJ`gyWpsE;f_o1)9gE=LQi1Z$~iF6YFEs<&eq;O>P6i^xJ!mx&-v|FTvWdOI& zvA3p<@7F^Ma4g=Ie`tg-*bfi8?>=Ip=0=RQa09IH3xf~0-+-b4yf5m1-TocvLkVJM zZ0DcyiAU}$0l9K5YX2nK6!D`tTXd5*t`FWh{Qka9ZbQ zSHDf!h0w!+x2i%m`ZMpoy*WUQF*5XvuaXc1mm*N%?fv8Y4kxPO15MJ++=Z3 zM}kC_^>i@OB=(o?t;?TFE&vwO0iSc`Izrp)QL=z<+wFoq2{o&u=R}()}2`64x zgv^Vy4lxhzTV(qrIis8sVGSsKlOpk1i9bjMqSToD)eB+qU35ZBh+b6kd50nG0NK#a zK=j{2+okZ1SdsgDYmU9x7x?bm-06sVRz-OrN4G#n^6T^hJ_Y|P`I^U=))YP-L_rSA zUBg&=4P>fe`?{`YRwefpAP;zj9bFlF}Aa~m^2juH>79~);L;k#f;Hm6* zC`Vr5&KC(}gSQM0S>!)R@&FGTVe=p8Q&2*pKzxL?3X!DU()kY1L9+@w|K_A?NKZ&o_#6C*HnbW{j_}K1b5NH2`9C=070)S|$;g`oE|xBo|Zr5Jv)g zdP|oZ5}tRh!vHyo{>&qBuc(xPJ6}R}MU%;*t%C*D`_GM4WZPdD4!4;XDUuTy=5(J0 zyssc$;aB|g9H9!l^Cdezg6IyCj^NX(c@duiFM6c|w{XTiAqm`=3LEf)rgQ7KwA>>D z`|DD=$o#PIaOnc~`%+cBn39oXVGqU_(7gPMYL0>#*I=sE>QvEcu|a;rsY!vo1Y$Ty z(A|L`=tcKCr?fbb$pzIW1+5f?+CfdzYvX<#@yCr1aFQCYmy^Q!byY&H-NN+jZm8Z5 zoFT$ffgK7;TvHZA6Wo^yzr2$5-wgJA+K3*#Y>#Om=C^-%J6eiXa|Fzc&a)a%_XuY$RAQ>Pz{MWOxrZp7*8WB4^q)Nkk=Koorc?xT zGk|lx$ehC8&Kw~jcxK|2x_J}5xFQ8_^eR>?5ogv>ejtiLn94o#Nh}B$cYk}SclUbY z%N#Nh>4~qY_HZsFusKG8Ovq?Zd;qIyx}EmM>~@6t0Xlf?_pzuSU(?_&A>phA{}=6Z zM+3yTb6Lg>6NxoBLPjDwcJ6u8ROvmr-6j({b1+$M%Kt z1V9B&^KHMh>QUzb_wa^RgYS4WwFu+~b}PQa4-)HP?pn1Kw7zkg=is($a*?IBsK26; z17AktPaprzltoS0!|bt*Bg@+7wubyY=R$xH(12waaczQJrHQ=3h#I>}uMk!JSw}6zsCN6=i{H6(FalR^W;8ht>da#_5{AOIGLM-p?k{sOJ51?NmgS-DG!;bJJTu@hUoDNH+G zqYm`ffBg>HGjef*`;Id&bES?tlpowi5z6lvI~%0kVI;DyHhVL&XWeq6H=$cK8jm8{W(Du3@u=EOhxoO@cZ4B zAX|Gn)E@|s*HXd(3ObP)rOZD#Zo`f9XBq?~cyE9c0fRzG7Wo_8*XE5EpE9`GK`!9z2z=&ionBz48k{CILUu= z#T8%)BX<36M9>%48$`#=of8M96)1&6PN(ls-shh+t6o6M@VLaBea)(9gP4JnL}MlF z_0xii=l3r@9Q@A3|9}IK$)rc5YYzrK1UgtRpBm?yIMcpx{{j*T_lH56K?BlW@{Hoq ze#t8^mrIb}mP3SQ6%OFb2wrjG!Ty6>Blur`R?rJeZIsvH1j?up2#NID`~dysj~;u_ zj-w6^eAnXDixncYxdNa^O*9rgW@A#<11n1LL>@o!=gsf1@@Tt`cA-W=>9GHbQI=_% zYvud^T`lG!qKYlz2*|Cw55P?|~K7q#*nS z!9m*x&`>uvNqef6?ShOzMk#Qu{vGyz6Oofo$-$!t4`qQYvGCm7Wc;MmVL{Gqp>wHP z-1O5|;C>6|X_|pmuYCh?3RyozI+0iX_~6qcU`wKuCG-V*Tt9aDH%R4Nbm8tAjRYtY`kVT>4aQ0Xg zGx$NKbSisAF4q%74l5Ukg&jh}!o5@WI zqN-m$unb!BJKm&xU0e@t&<*-*V-Qk3bJ)#dcr2Q7%C8mxR`JDlH6>=iG8{zZMc{o< zZvLp;0d9fj{JQX5toI;C=%`b&C4_{#T0kau3Hj`+Cq?oIbTBU&-5NHLco6`r$h5Wo z6h4r%6lB$k2VX|kr_o%3eNfK$`7*($|KhOj?3c#9F>ggBfEE4x5{bw4STrC<%Inn_ z6TLq#9(HA~$RL@6y@x35ItYFq#YWL4mJ~pJFX=5}2mi?p$VhN*=~GF!= z`=Nj4wgb}6wXew9ku~vmY59C$yz(Xh|Qgeg`Hs^i| zSL$19@0q|`X-8{{PChsr0^-oAzX#3k~&lU}_Spz$nRbTlR=G{DwPzM8c zc~#?4RFJFW6<|lUOnv*RV7I@CXsF}lM~1@bm7)9b*XmRZ>|~=B^SNvkHTW9X_GP89 z+p&JZ0X2oaQ1LfagDgBCE>ncT;ad7NH5;&3&yTn^`XGf@1?n2cJfA8bXxWcoCbY$BQ=frP>GVC&Gk2vC9boUu4tOCo&PImwI9Ho? z7}-i!83T!p22ZLo8|k{dEXt#)f0`{QeVbdW-tS(C4@bPTZcmK*&=#* zD%M`#*AK|^7U}16*wQ48z=|G!7)iv0uq;uazr@+j-$PG(Z%X zL3zDH*(`7qfIS#f+~8?49rov-lTk$_b?P(EsMSe{iZIG=KXnb-Af502S;> zt}xm7TQAr-un03ve#Vnw^%`Pt@tNJP!R#UAam8k>6F=koy92+#q*Ja>>3aAN(1mm& z4w2MAqXyiCZSw@u8Uo+PFsmj%RZq_wd%&s2gm|wB8@@w%0r79};5Zp|i}x`=$3iyB zMUwo)U#-Ip-8$83<*eEI10t{QRn2xZ=b^PirseDVJzcDdtr6H*_li(bpfs7wfwwBo zTY1gSS^XmLX-4;}^j5Ga#(@vDHesA|3K3k`8^B>jAev8lJt46C(d*kC9#`m01hV4& zV9-CO*x$BCKs545x0bV34>P^LP;DQTdN^YQd9!2W&>x*ze?}KXF{2P*KK|!uL>xR- zdtH=~7_3WtK^7OY|GW8g;7Fdw*Cd^ zIvyH7C9@Nq9H4_ED*st|BZ*%Hz>{S$ynQ5N_6h-Kb?d}IeLcF7EbwV&Qp1;!hj50> z|0Z6(sCepnt^_uAN#wcIkcqV+6GHHZu7&S(tu|yGFQ~{_$KUi&9I%8@5#s4l8TMua zud#^-wwcCGL~o$oM}&9}mCe1SwN=0ZN)-@PhY!iDbgK%oEi9|TyByj9o=_70cpo>-$&)^8CwZ*-75hY z(cCr)vKDW6FsNX9NhS|gkPTEd%?0#FFqaY)FND>+T zT6@DK3a_R(w% zH>Rsu0t@`DZNhz`eh4X;WkL((cI?ofU}v?zH(bg{Z)vgtMhcb!#rhvLJdjhO8Wt;R zG+pE-;Ez7dhbx+9!vAej4isZ+y-lxF0`?UB8NrjYa+7G_bb}g-v9KXa&H%5$;`kVP zI9`7V;OYEFdhxvzv1SWmcK&pJ+_V|=ngXfI^KQBx3^#EHWVbl(5H~AUGJO zq8gK7@Ttah7(*3L@)6F7L@7y3a){v84ZD@RHMS%BUEMgaW`AfmtGjI190}+k>Q?Of zn;pI5fyA<|lcLBzyC?;8-<|%vCK?Vb&q4Gxam}|`^gn9=BbC`JURtx4{<%Jg2Pa<&!Vn@x z7+T{4&bhv6rSx2pu-@P_at`;=gAf!of?ep=Pqci`^ez|tuNwM;=0wpO@qsS%*&nu) z!%9siSX&e#B)mJ#uSbB*9;r)%?}9$g1E>7hKSSSDad6MTAKfMCy;bMABn;SgRF}o~ zk@N+>0bNkB@{`UZY9}<1D|`L+y+U+W3o|Dq!|Ng8r`!vJIjFz*0SUEmiVMj4V*Wu$ zGIS(Q0zJLU>c?pH-b%3pZ^WBJg9c=C>L{=(rWjSXAh5(M19BB@!ta}My~9H8tWm47 zMV66*=V4dpnU_I)O-G9W-IsGq;j2|f84~<59gC~KSGt|T8SS66aA$c7MpA)iPNj!v zuZrj%$jBG`NI$Pw)EfhE8jFjH9b!~(0WwTl^}6(2%CY$Xs_@A^>3VEd-Y`qh52~Wz zvBjV72l2l6sc(E>=I=1T?B)C$j;k{rorYY0hVRO@@<=sgZ4&K|Vc@c5dT^tnyrUyZ za$o5afLkydK}C*PIR-c_8{A7xYUwHjIlz;o^vfsDIp3WPH{eirMStzs;1*z2uJfrk zL1#>pg>kpfeHVFjQDX<5eWHhvLi1JrHz{y0Cz}?uxLy`KD?R4&xp^4^WPPEEGEaq5 z5m%Vq@?xoaNs0Z3x?l`@gg!MIgweq+8VqARyhv{Y8-PWs^M38$f1X@|+n}&$eo+kh z#X~riO#NBsTa!P3Itt#GqMc=~nDI7BSXmA-t9#?4%fsqn#W23*Dgrw&CX6)2eWP;X zZeir*1p6)jR{3B=fRK6ZWmSKX$+*GY?k{a83w1p;B!`=4%`xmN>ksSX05izhk0^;f zE?ZddwhcsxK4*L=5$xzj$4b@?I;CM9R-~GCqx~(rXz;#9#Ql6X(wl$;=iDo$wM$6% znICZb*ZeFq#dY}71Icmuu=`!cf$u8pkG=k4y-h(y^MW#oOV%`I!!1J=g?Gyqypb&L zRstR;(Oadrqg?P|br`+8ExT)ewJ)G$)cCHxXfsL337(24R-5;$y=Q9h%QT+pwRShy z1Ub9L*p|O3(d)tmx0=rG@5b$6HQ%7OCuvtPB@dq!6A(>Ii|ct_@Mn=rI9HCUvow2w z8CV;ParovPhli5kuor@FYsF0cOS^#{B{@cH=8>6R4RV`%^6c;3i!s#$xUN0pTYBzA zX5f^rlZHVnW}4fckkgpO6D%>gDhy!Py=L>TKnfTO?tJkK&gRpO za@cP+(k6=&xcC++aDzy2m@h1gxflUG2^de={m6Im{x64&oS#6Y_IzOgg8J3`sp46T zum3iN&^D1J-iK*@@V|*E=#4!2gRetw!_Iw)4yEY{JjwoB%AoVz6)@mKXZ2mTyC6k4 z1Ef7==#Hw(LHfteVSiqU^>t8EgB-A5j(VfVQ1Mp-qUFU z=h?-Nv}){o)~YY$&bq(Vl^Bv7y?3R-cOdNy)na%OXpKz4?B(8nDQvA) z4{|E@b}F{Ux+muc-2UJBGSciesYk+H*!sM%oyxVT2qfoY64fJMS2^>r6SYcs9xbOU zftyMygm?)A)(Jrgu$fOpMJMS^ChxF@YiOVNn-kWv0jwguabEasnl#J6v%mQ;Mk-=m zeo(H~Ao~7k-I|djxP2cHJ!YaG_0588PhI|ApBa&{b_CCS){cR;RWlHfmFszXy3^{t zn*0Eg*+}_MR}$`=V3j8ty>R)4H6!hi12*qfj{fumMgc4O8O5O+ykfdq5FIC4{iNY< zTCxfFqkHA~n%x{$k)ev--D-8^A)V1aY9FmXF! z0$BpOZ?+#TK?cD}S`dkZ!pYu$ieWznK%2vrJR9-;3*Hj&ROGX%Mnm$X11kti9Da@b z&Cnv;C$jX@OnhgReyv(O-7eAN-A z%|`J~;J&tqoSpitsL%o#DlTI;6H_>$gKP%M6Gfk<56zB*9M0&A_8e9qyclTr9ro!w zkcEIlR)LAV9x@F2!u$g7?DhG@#!{l3H^4c5l3kklZ7B@)G9^~d@$BRTU)Xi8mkK5r zdlGw)9a`V(^Zkg}U$6oEk$lKnoC*7H&cJDqj7g#OpyDW;Je?fPi->Ni`xVH>OqlP@ z<G+1=7KTI7 zB(v=56~?d}9jJtIT~+wN4RqsoTkJ?*nm3$K_^pICYL*_bK!3ju@A>8RLiG>ul1){7 zV{gh|$^zau3fc@$%&C~RH}9k+oGsP9*;Kvd^nf+ZsrKcp ziBDyqz%x^wCL-OBZUY0@$!SC-t~30+BcQ}Kzbo^WA_^fFjk+fKk9$(#mjO(Ow1$7a z)V2M$x#RD8A2+#oCV+fFb2fP0k8r1c12v%HWnv?b%6X>(iS1b{&?wKnQwMI1w_o2f zDyYA>4`c(hD>Y-1uE`hNIM6o(eFVpZqBhWlpaWa6P*g_#qkvRAtDlY22o5Jjeq8PS;)^D+>wh- zKDY4-Merc+EO!RS2j^zED=HkkU3-Z0{mVi0G$;pg4bzr>- zI%afyYVbaWo=)sv?pAri+5#(@j`uVC0VYX>-npKc=^I6ygu@Bnaks=(#bin5A;ZH8vgvz#X8-=&T z2oh(1&$B!~!j&a)LMiHr%(@GeL) zq8Wp4YyqP3HJC3hU=Xn}fz-WO(b1_aeY-BqKXdF!2twuFKL(z2yVX|wwj>93?UJ_> zHl4yNFzzmEjoaF`Dv=PzbVb|eTtK_d1LTVEaNY{ltt|5vTa=UPLxU87BjlE7I0=Lh3cj@w5 zRT>-c8m`hvDQo94P6JHHx=(+xZ|Zxvz&@W|W-}4{delqx9N$Cq; zxPI;deTvueSW5be$tEBhfR+@Sy0XCH7VuV{YH3>gRxHE;IT^txEaNq)>IgYeeWs(| z-D?R%Snp=jo|#5}bDatx8M&Y;m6Gw?gQ(ueS4=|Lu*zOQyWY7BsZOGq)O7Dq^Yz;=5VzY_m+pm#z1oBKH%Fj0GPx^wWZ;+Sf<6pWW*#JNHBKqfm z+Byv3+*42wzDHygBH%D9-eX*u$FEeFKxBQNLzxW3navciNbJ?)B-af_ctUopuTwL= z+HkcG?4(u*$iwaSU(gHdWr6Tfj|dM*ID6=90Tu3(`bIdACp_dI5(v&gO^{!7(u`_+ zd#GmWAeXzGJR?>&Nf5BNC;GE=s^xCw0{gCCSs5JsSx|ZoGp-p)v%{t37n~C*zh`9f z*A>}6a8@~E^n%r_g6Kg$Rlg);Qcfna0^gnbcyQZVKJpRhkwy0#mht=42_W(slFco+ zSb5(8v^i1WwQv1u2OId5@wE-EUa`6E17B9@lleRWyQYxIg!H7)V*paM$T9MjL%bAY^CU1&bo zut_^1ga3W^Ebc^W_w^uaBKnz~5BdZKZi6Uh%LMWd)^_oqSp~9TukR|1Y&pGvMRLs# zk1Mv0#E>=dOm77^bFNL_um;z&$MCv?C9f6nH( ztbij?UOfH!!qz4ckT&j3&m^_}+d?QD`DfYacL;QJCj923+)j}Wi6 zaVcWI9|@d>Pd~bGp+rr=9iaJ))qgSCBJGf4pO%S2iQbjZS#TF;V-k`3_T;Pu`77jj z?X>J?7z;Z?Ub^hgc_s*l20R^p%w>jtwU$;PuS*?rX0}bjNP~0!a{;%~nOiE#zmdrkDD1{lr2D-@!$Vc=~6yeT1%JnE<!8U_u! zG~eH^&$I3cxjPI+^&&nGaLAHz38M89>E`Rcf!*-@{nua0G};%iqA`ls?cpZKssLn; z3H+T4w3|dIoVa2A$2-w&i8de`Y&kmLh`t1Q0y(Ix<4l~zeImkPb@*PM_9qr&9)V9; zJasyKX#V0q@XUIn?%z*u1iuhO<&himD964-=><6l%z-rXCchz72-=sx+pIPs&ibM`M2 z*pynQnR4x=KsKJ@I`xuMMHw=CSR12(j!16b4lx}*YMq3N*^UD8$=bSPm3urg1mR9c4t!93R;e1(%_Z>+Omooy}9=_1&Wlg`wfE#dpb3PCm8Cxm`S~gyyt`9-fSw3WZ z%Jbo4o&?E<@O{-iU%kz|#T?|HJEH%+SruW2FNk6s;}o4zaHuPSodd3wQikg7>Q2{+K)_A!u6k5LYsnX;QgBuh1_c344} z-8ZG&Kh88RAXoY+$66t}4Ksrb#)YATP)XGBg19}9+*#d}VOZV(A*(YPp;H>U-4DD` zi5S`ylSxt9z!LUCZD?A56BPlzOXf%;HS)Y34Y++8+w%82{8ArS|9w6NQ#hQ+@sOpe zv`nq0F%RoMaLOG_G!88AP{IxVHEkHiNOFHLhcw#iFUjdxP z+x}R`%H9r#0!^WY0MnUxSsxhhZ|mqazr6Nc7u^1vGm1G1bm@+O|6L39dUcqRsyjHV z?rP1m&Yg6TKtwOGVOH6bo1!H^ZmdpY+L*Tu4Yz(s9dm78ld&fbNFCjAKD(F%^D;_^ zCp&W=RTZ;Z@KjDueD&Tt*13QaH;1d;W!Vtbs=@oc>ug0%mqLK2yX4?6a3(pa$N`cW zdz5*X-MwZFUAlu198`UZb^-gKe9L-wq@mQF44z6r z_r+5TG;>7IFRGF@ipZOjpFa3*ZU&PtP@^pJv+n2FgPoc8 zO^?+{O*apxu~LsI>vIsSqXyj$fHY#gT1n<$gzK}l%>`!J$_ser7nb@HR?!j(w_ojX zN+uGOu*m~ta%O9WH(S5UOz7F|@`V+C@ls-N8h;>-*{&bw1uS@~uU4UFC45S1gd3gG z$Lz$jyHmI=Xy_J+oeQ!PO%N?=80PR{=;Ut#?he*0<{({`LNtIr6#mEyH|J#X0;PaR->)*DR6T1x-I;YL*1{~5nMpxY0ygjQ1;2-QTr_XF82 z3o|+aA25@EQMvN$FX#LnHv?y;*i06#ymmdDfSu&A$hvm7ZU^jxYAkg<<6(Sy1$e94 z*HDWY6Q^iEM~eB)n6BVcH925zQ^Edp`TizvxMz8&SIH>!V_+UwnaV@^!W7reVHb`4 zhX#E$&ZU2|4=B$bNr3-Z$^vM2hD=;~F3s=tz)c4U6KCAq<*o{{E|S3GHS^~Sa%feY zOULccU?oBfvOUVR9fS7m#t#o{EEfF%OSvktrUS_B4XBU$*D3apE3Ej8q^b9Froc&` zf;ZLgQY`zbz)0kKO&?y!qCEiTY{sYQ-h%bhc*wE9e8j0t%9%VgEo{u{2RQH%eS7Tt1D=%u zqOcO)O-1hdttOD1@h7ERb4urKfp{U*c4EzgNV;NRRsK*p{yeU>(U8eRWAU>_O?COg zIiT<|?!p-tw}P8z<*~<$t$Lqas*O$wG*lZy0r`t zx7Sxr={iKN!}t0FBi8ww~xJg(|Fu|6y`PC%?njGvRmHExA7Z@5^DJ z_v5}+x^Ci#d~x8Z1~Zvb&xyrcntju zZpud1F5tvzb1sl|2|8EP#Se3t6F>zCw~?3?YA@1-Sv5S6n^6m!1Wsb!Z(g-6E{q7c zTjyow#7jv6zxu%$?V-jHfn5~D1y6O`r!~eTW|2cyRj(#%h$y1)HWp zEJ`!IU%D3;p5-l?v-vfM>4#@5;6(PrOCA zQ(pIPds$t4fGl&rVGv*Z-H7iW@UY=3<&~rVM0SU}S2oEWWNkSIIQg=bNjH?ev>re5zz+)QH_j116jOXP4Qn4G}`-^dwkGQ56A+OubDkUCViT2<2Z7aQ4` z?sZ_3CCT~ImM1iFfL)M;&ZQ>IP=*U~N`w*{M0miIaIOy}Y(IU)xucUHr+8RkT7QTh zs0V}pRgL*^WP5Wv5U+Oj_3T0;6*a7In;%Bx>&={p4}Lek%L#E#O?ky!koVe%UCHXiqfpsn`Ke-3a3Q#A5yC7noqb*HF0jrx(()BWSGi^9mZ)BuilbxWs z26*2$OC|`z?{!}T)JIPJ7Jbh`bs@{E^DP)VZl&|GK~)~Co<7eVZPz2nR;3V_GUKF! zqXS>qk<;xIHgzn>^QqP=U7|6YP64O~<&sFT9z%2tD()dBX4EL4fQGkb;-K>HJJ^2A z2X^zq2RnlInza#FjrN=2tw?fL2eqQa^>5?#X@8{*SdEYt*I(qk7k|-VmRy3`^6n;q zDhaaQ76MTP5)Nn8-d;0(5J|*4$kr%&7^8f3TenD%Vb2p?u*9uCBM*KTEgrTj2vNUA zu+BS==OkLmzh#Bo;59$UYJ_n&WWqP~H9V)gZ!{9bXHE98_@$v^l>+asIFdH3ItdFfCl7ZjsFT*V*6Zs0_tD;Wy>vp)_RNTSj4z`2HYml_jJn`!*O{x(9nsl-?+ z)B(CK_GEXJPVdeA1KrE<>)jTv*o5{5$PMkubXh!-{_P-6&JRU7BWEr232gEk_jSgb z)fz&!3i31KLd6Lla)7uoXKNnC<#U}-<&!jeTRrC`G&c}q(dnwczv@6;65f{-!^AJh zo{J7RaYUrH8R~@Inec`_f}@i!(mHAZ-&aFFnM156F%F`F)FHoNKShWGb}&qRlME#5 zc@pr={b!iHt?TFuPB?qP)ct5#&|?~hZ)9d>oZ}MB1K-yX)Uso8l}QA6_eAXPykkab z7~rR$AAy2Vg9-uh3J*sXxBB-o!Fq5FmO%VwZD<})n*)FOQoV^q#Dd5`VC`AUtNNZY zIHP`Jac{a7l8*4?qG_-3r5N7=-cBkQ9et&_jSwEd{EzIon<3{dd4j5Z4ns4>O!J-~ zv!%y}!uXT9GhTtUPuhpXz37aI3uH;_v%I#M3RL_HEax#ARVeJw%Y}FUE0NAS>)rAn zc(0tZn@H2TVkkHeMLGSiMCDoKZ$ZHSqTO*g!Mn9C1L{mkvW_IAQH?o>z{4^Sj#m9) zkpkX3?p^eUZ$ybt0M*MY5;Qeg+n5A-#rwN{>7DQuY#io=_6k0CA*%4CMnF9Z6Sa_; zUtkx~*?T{Kj^wW$WO-%tRC>~QciwPXN%R(V6-q)J!Q4n67CAb!bkM5c)6-wi>6w!L zWdc9K)o*KiHI|+TWVtD`#-WEOsa1`)|Beyt~FFEu5hid^uKMNts! z9Zq+A&Z2JqilABA!93D+u4!zdh3Q@ZeZ9K*b9t4Sec%o%M&Bi4i%JM&EDxj3WVkEG zBwd1-@Z<}ApJtze(+cO? zgG_gDA(NgK!(i|hcA*k>AZA^8Ct!~Pp~evmKfeA5ES7$AVTc?G@2?=%jpy~zKh9%K zE9l9X#1uayJO+?PN0`~I-YF9o#~%g>L$PXdK?AgWY@{fF3@ zAG&OCzTHCR{rm%HstlgF=4~zag^50RfUj=Nc}_dgp9|`>HHR0l^7T>h0n7&IoI>1Y zcKo>{SZBJXSj8v>bzi{lWA3i7j}@gG1hm!NwJ8nT+=NXr(*HAoo^o*8Y3u~2L;kD0+Hwi)4-+cU#Cbh-PD+Z(1Y)c{_dmv` zLfMCSa=~bHxA6~l`cMrye_b)3kx2n3_UYd{wKe4YDh*i4Oh>+ZU3j4g)t`?|u9!qi zX)FS7bV`KL#b;j+59lFlKI%QhXY$7%$aKvu9+br2$^HZRH;#qzJ=?jqZxBB(Rf08g z-dzajLIk&MKj@{TRS(YEqE-v_+C~N}27M$qh`P%f51}kUhiYYaN!ebl&e(9ieOl?W zeGDh|K_6Jfm*FsRH#kY)zb{J6zRPE+h7IgdvdVa0UaXW`z*81G!hA}6B{v10iX;WW zqaJL3n_%~EdaxGjE4@n^JXOaowi4yOK1sm4xnr8gzIVGg1bg&jJ@f0A8OC3r#!*SP zQIJ;Fe zd!ur{m)O7@x)F_nop};za4u-C_C$*vZrQ*$pIwC8j2{I!1)@ zn=u7q{6J4;xY1~N-ALdaZR}i7hbr&4)d=!`tQw&sXjXSF-!Vged===V5|)QpG0oOG;N=%}1q zRD+J3SAONNVDVRr0skFK>o4OVMjhk8uB0dQujN-d1>{xp=ZpMgr;M`|K&t6ZzsRB; zf13#6M)B?}0Uy?Tj^O`_Bhgt&Ms5&Y{}rv(b?cN$O~9UQ50flU@bpg&R#Hw+T5p^p zZbQ)P%czG8XqA?Cs0&c(y(p?ymb(x!T72+`dC0zv2-?+q&vH{LV-Bj;;+j@94wqi> z23AsKk&C0L?j1HD!#?}2{9y`OmuK+1@4Psab+Q{e1xS@Yi;N2Smoe&a9!b9f?fLWO zGKV)%+7HnwVt$7o*vZEj;^g#IP`@y?53)ert!^_Zc;BCx3l2Sn*CYb;6)N#hsLZNs zO@R6T@B(kNHm2KQB`M7?g(2XK!#;-s!5r_P-hpc)xq8$*DeB4 z5<&O!bGvWxSNt;Pv?cC3M zl;^P;ngxE;nJN2yxybMJ1JB%?-IYts_h^t3#vD}oGrVZyd9WH{adIuQe7l1KD;b+= zng%qE`77kf*COIdl26Pb0O#Cd@q8aeIS$lNI?vuN}Vh7ozvCL*8s`5^&)hvIVD~VYUd&& zsWQ2{fP%QLY348DAyha(mbqc5&{3y5HfKNuB)3$>SR8(q67bM8ZobrwbO-~LELJKu z5mZVq^$X4>m|!>kMR;7+0v1b>HY*U(-|AX#80&mvd4G@X1FIP3V+c~F*H`Jl^D@i% znN;My84=)T%|3HxD6}1ew@5^*Wcr57#?gR0khrveWrw@`0H6ZPV>~{;M9)9rnTVyo zkT=GS&KLAXIxG*1Xl*gw1(`h?{=(w-JE-Fa##nEl66T?31IFh~l8HR~;RL+{MByYB zjrHr>jNruJj=rW#Qt`l)AsSJzhH6eWwgs?~31>ac^m)kyWXQRtgz;mAyeSfNPGXsv z*QSnMmH{fS7Fks`{ws}l$iDLKk+`ABX^4~T@~7ekc2M4KD-3a-UaX7iQuGXZ>IRw6dIFz?fEpmzSw z!R^)MG93ZztJL{xz%Y&B;W=IRR8GEI{)#SO7o5*&pxqy4sv&O=+Wv(X=eM5M1Z+~? zSRW$Xxd8-)vmcaX(w7p1X*@+MFpSgwiXXEA*y4GDYe5*GY+6@ z?NzsRGkJeu7GQ>Y^m%q_t{9o%EU~#aa*GYN!-DgpCq1zgi8xZ^!4Ccm-V@4!SIYzR zb9^g{?xyJ9eGT5X#U}PGh>i06fYr4^!e`Q8FB%J05_cM#JFxrW2Izy2lTh4_8y8eY zBhj&TLR=$$Ur_(b_$#t;Pk-KU)@31*Fcnq8{c(_~)$gTmE{eyTfb4uG;L=F!9O?(& zP0Ops)}Q^`z`3B^x86Gz80H6d104Kl&*nXpNd=X`{Uo#KNv^aE)XsiG_S`YtcL+~g zO0ur_!^Wf51$lwY>ZU8$hO^)_soImMm8K~j;BflxJ&y)MPsbPlA2fdi$^95n+GDW4 zog+12v9bsOC&@jF5UR_kN^d7c^Z55F7oXTHT9n72}?cwi4TaP zdrOgD%#Aq_YOQ`1vrJWfpLGpn96byig}a@aegO}qZbRGAk9tOscdMM|Ng00Z&)Q+9 z$h)~uoj30t_RZpEDPCQ2JbMA^?o0m2bY?t5EdM_{wmCM!SUwrR?tkWS^#+B%de~*h8J6T7m56w2BtLlmq{} z+z%d9yXb#rsD=Fzv^QSY13Q*>K5!E1vWMhzjPw4v84)1!92wQ#cj5$=OZq`YmjpFvZCjkoj z@Qm~*CfBqoh*$1f3Dw5QxfOs6D+sSls$ThDW(5^rnCzKP~Tqr<%M=OAl=FqkO#w@5A=t~+8hlas&H;-p|2>&KLYThU`9?HQzi1~KxAMiEAfQSwWR@A z=OPKU*Ri5)#DZ+~a_^wJ=q(yhQ1AC=Jv*(oy(|=T)yDiJtmnNPSpq5`566t}k1s0! z2Rff6!GA^iAX{_?+3FPpet$~ws;MA8qlUy%_Fr5w0)T>|obkhGQl@+YG4=|2PYnnE zJ{XX@TihZw`oTiggPf>ei;6Fl)9fGQy{w};m;!8QAh!d@y05mfefCzs|L(OlhOe`^ zI~MFOnu@GD%*c^Kbro5z3*8Q|4{L$A5x4D!amyg^D)7wZ8meotX}U&&xPf;2Za%H( zv|oVgb?Pl93#Z794lK4_ibF>yHh9xeSBt=EUq^>!fcLySUzg3woC_TTHM_ac=Zut$PNQ9r9X0taBZa zA_LRH_m~TA!ZZ{M5o5mYa+gM zPJ=hOtX|%Ja$gQ~A*R-#$;})_{RP%p+di);J;e8Khn?Q04oZ?ogop=c6J}nh&Gnt{ zm;sSNyG@226@21UcpsKoo!WEHn_(bFclW*rEJr>Q2i_M$uhBHjlUplbIl3?*qP<-t zs>3{ZSGFMZ%{`q^_koHhVWbL$=ir&Os|q+t{oZy3VmqcFXL}w;ehZL+f37=jOilu6 zLB)qZuWAosMeP^h3pn+W?Z$JbEC3ZB|E(uys9q5bd3&U&J*$t;4a*MfYA5Jl5IQ5t zmY@RamMXDC*M52hsv^EEF8ID_V=Dm$W(2#MhRYSt1w;m9GELmR-xW_5poyTcK;F%fOc(^!d-ZKt%e-TIteW6$_ zIgs6s(Hpb;(VF%Gd2oMB=W7>N_G>@|v{X5NyXbt`7I>rh5ooDCrt$~xiJa^vWuM%a z;t#|*U9{Nac}oSnF((Kv`-d0YLqlOdmT4HZ9{0b52Wm-u5&p`-UPF8w*z-u?-Sihx z`{M=dYA~M$lU_UdWT4&;ERSxSS7(+ASV@zdytbkBa`QoCm=m63er<2x2K2I*R8spe zTL_%(!80p316|xI1#~c!De8AbS*FPcUA3m>bS+2j{y71X*^#o3Z;AI64PYcbTZf!W zh?9kUs#!O))XjWr*#v#yZ~pZg&L(+ra}b6Nqn=?SkD96~J}8DDI1WXA~lWPH!3+Py3@~jN;(!V8gpa zD_x$~25^oVe?!Iz*J}yE?tc(2ZSE$V+7-^JqR|rn)lQz?gZJGcX>}uquvHr1x*S(} zY8@*FU*Ys@tQuc;J=Hb@G1hsSfy4-nF-8z$bFuvc-&nBc73^$lht{1G%5(6pbf2^@ zk-()Bhy6)0In77b_PTrnR4{9$Dn`FK=sV!Q-s7lKI2H7(0ca$uBI~6{`^Uw=N-Dnn zSJ8#oR#3p|3LYc6ih7-#2QY*22V>VVGk8k^bE=;<5`r#^M1uxdV{6T1_^U&bH#{+k ziR5lrpHmzMY6+e6`;`cMpg~oa-NUr%VB7qFcf`I+S1iPGh};ZN(7jW%GrfiJg4sFV z-tyx1Nwh*ndbh$$qcW(Lg?A9f^><9hq5tL#^2Z*6^ttuH*H3tVU;Zm-y0178?*!Jr zM~o%EA)!!UlYu9(rRFkU`Um#ctd-uHS|rT}m{Zbz{O|=qjidu}x58U0a&$Ha*12PT zXBy>y>xBRxJYD%xI&3;R9c0*8ms6v9>Qs{;>uD*obG=~(0{8cq9<<`}fb5gZg>Sn?pgi`q<%POKWL-YB+_CaaI2J*XJmJ)3nh` z4zs5@=I{V2(0tLr-@H4}28hq2MfpbZwUQFz_NlFU^~_KzsX#x6@OvhhqkRr-u)ma; z{s`k)iopTzd+LuG&=Qp-3CKs@-|L#Gy}B9vRG)uVaDVUPgm==NV?z>t=ZC3>^X(>c zagRd0O9Ada?FqtNhTNS&jPz2Fcx_v<#6i63+IIR`TRX%o_~!Jz_n6>%B|?GUZBqH` z#2h2533%VWl72;nSY8890SIke74l{zjDXz2_|VFq&(u#n$aGKp4jkRjJZ*y04&4MPo3E1S)G|KExdon;p^5dE{ zN0^(g*})mm;vmh+(w8GRAX|OvcziYJAz>xRzv5?oX)iVZ={D?8#j47@+d1}EP&<`U@H&i*XW|W?N)+b#MH=<9Flg5jb6FAj*Jv+Y+me}$==zF&W zsl5dH(PPN`@QeJ-{GM{Rq2QSp?R)a&ukX(S_`=sFGL}D>LFEAY8mxoWs?VJCKIqqt zNiUxfT75`3zoBfpF(^Hb{%RdoBBR91V*7f(fFHG(VLHcxbxHtLJ`LL(3@Qp#c+YxV zUU=e))_3Dgh;tH~J$}y5-9R^h56nl9jdw5@z*7bsHHqa{8WGf4PREBShC5V)7udlj zHRHAT2D}HS;Ic4UyO5e&RRc9$?8%yGnnPo0Ak(eIDEf-^3iA)h?89Fvw2-9Lm5{Sb zY|h_aZhejCAk(!{VoXCISKSv(NwH(B7q<28d=q46_ukU3w4_DQKz)=J=%;w}el!}LS3wg)4-Ww1vdDVr&m&~OeS zm+XjDc#RoNJ4-%1HYD${n~#Ux;Fr;u{OV8B!T)y&IfhNL*& zVE2(j{KE)X$hjiO8iMCPY|_Z(7czR;jnWSzA{Qy_xLz+QY`bRmf*SOKE?&)>z@K8_ z3we4w>0F9u>>tsV^OIQ)? z{!Gt8ZY+(NWgv=9fmRi$!!h?8>criJ@CQB^$A(O;n!hf0%OpD=1AFFvLYkbDOjQo3 zVn${_Ta9z=cMsyEzZW#xReQue@P@weYW8Wb(xe6*j1NDfM`hEsOTt)pq2F*t64}JS zI@_B_d5vqb6Py)~UwVh74Q{17IH?g0lx&>fvppGPjo_wN^E7$^Ebgv? zoDyNVdeJ0>s1ooLw7Yl6A<|yUdi@N)L9++0zT;%P9oM{a09DRB&jF6xmAT6=#6;kB%Sx0wnPF% z?;f*@cUq>bQ2wPPsQNht()-@AN!U!%Hj5i%cQq{uEQ7I+6# z_x1*Kmj@A_MhZqVC6!Z+*8ggLaN>EG%CQr=LX7Y%X6m^=oQ*yCXo9GM;iM^yq0|-w zoF!HdZX+8?;7w3jYljq3D97U#3wl9h9uvBtVoQjE9Tdy9q^xI%>K43jrIK7a-J~II z;Peo4%EPs1ERi`7+s6hI!avl8{S??KGQ6*@b9NhyHlR+|fqnUC1G6%KWtDjzxGFc%xa!`cGzQX(0mym6E(a2v)fL z98gV2!I^nZOBBistd1MEm;%h;FE~lgI!xe}gcXl)n&oPyQL**h|DGV@?6|bB+)vWK z8Hg$sp@jlx`sXVJtMSEg@(j0T8xCM~nm{T7f0e)R4H=)R+$_H>vtcB#9QiQ6OrOq@ zLc-o=nqEuxdkNnk$Yrn4lByRvrU8s~0ap#8#ppu}l}QzM&&`1Nt0++rRfb{_P{euH zD7>{g(qBGKS9KFr;Dgp`5ifGh>1+e%M-p!xUh;M5wgv0_Mg1z3btJd~@M)K8#C$e2 zU)aE|S|PC$@%2)u1?*8t*~`zV{z}sjp3(}&L`i#jXavCR+Vtk|h+W==1NEKv_YX&! zM4jObWGge_(-z@Cen6({5&Cq=5W_44v~83~+jv9eETv+zH=3_%4_2eQgsT3shI=tk7eG>O>9z7_u>q_56?0l0 zzcq*vQ1P{G#kt$$XaZ!UkGI>U?IVkg3f`A&XPj`ucdUv~^-?>8R{7cJ-}(X%730AE z@%=4W;M3cu>lKlb=3yw9oh^BnLabsGuo~lPmdtw#?;q4q82CAmo>qt#$U>GO4K0Qu zR%8=6c|=$|@gB(@ivskJf7Gb&^nkxxcsh(w>6tQ0iHY2QCIls*-Fhp`7}nhZ;adbj z86pC{`Bt2&H>6Zk3xFBkPrVJTo#1aDtYnbV4AZT@Q}aOYnwXM1bR&51i9aZ&uEv`O*xM64^CR8t)w?&YT5CmZ* z&J8P;0?!Q8d;79AZvk>>g%+2D5$uw^KstAlSogiVgC@FKrsC z_oyTaLEisl)$?!%iA*@CV%`(=mrU(LF)4trmI90r9c{=Bka0rMohX>!;p_k1;fnk9 zGm))r1M4IAc2HJD--QYleo1WZRqAWAKIlLW6N}Z%GW-E{c}7Z8LceU_-OJgfxbP-7PJ_BFf)nJL|Ne~w@D#?- zO#n+kw7)mFW>X`9<(SH31(c$-BV?TTbDQYC;#t`v;J?~XmnktGICt>S_r<(zscs|; zkm;(w9YFZwugu#aW82JxIl-v`CxQMIFWjWqTV*DXPR!`~poZUxylkY77gLyp^zc~d+|`ydjQNMrW}@%hm3r1cJc^7{KfnSn~^1L;PHO^e+K z@l{G9T3$4E&3r&55_med(%IZ$71(`M_;olV3-S}dlZ%8FbmSMLZUxUJv%EI)PtvOz z$n0s^MNuibVV44=YGg|*`ttj#3V4UW4WXQ`=Kl4}n#eNF%{%2S*Dcs!W z%>f_Wj(S(NdTVYtRf1P}zr8ExU8*1gzbYL2iC&5&(96o^l7jow3@yCH`4_#@OS`bjHf0BFpWl32_Aemnd5&T)_tSz`!nK%W%D5Kd&kJrwB9-25l$)&aS^ik ziqvqHxKrfqh5gk_KIE<(V#+ksxv-rC>=8QAV(Ui@C#t}YEE%hSoN>MWKrYi=YCPq$ z_c^FC<{HiQOks31{!-XQW%(q0+yPDeQp_ILXn`>t-v_rk%an{;awiT$S62D?n&>y&Ip zsbV<6UVc$345h&T)}XSE_GH6DFx(Fry#`8_%+8_A@q#KgV!W&_wvWXFvemwan$+=r z@qwJi`IAo@?vYWJ08iP~k+rOIxt0{_hicYu2-w=*V}P!8;w*jCLYFTMBEwVEnH%E2 z@>{^Ug0Pf~**e`d09`eqn_JHbv>bt*qR`G(!X{O-|A3V&o;mbG3GZk)`I97}!b$g) z{Ghr@HKWbPqCT4sl@9)D?&#-z1{06LTpupotnM54Zgrqjw1{e25FNLeP^HMxlc?+O zrPiU|1nu}88qNI~Dv*Vn@f?Q57GJ)B#X3xaly;pv+g3Vuby1S)8djVWQ6jE^FCqbs?cXNqH!hViPOLQ8o( zn z85`|hfSGQp?ZK1pl^8(YCmMObkdpe{Utm{G>eaN6PXX=$i#>i!`(3PA{Xmq9|CO9- zSMh%@1=hLWyI}u?_@#;f6ZT#n#l|)XNC&z7Z)(TrN4iuN?9p-wdBJzz+7v#c`8Eb(d%wF+ zr2I^I5NgJ9NuVdOg-mIvk`*_yl+w$TRr#D`DQ@9Py9N$rQLNpQ>Y`B5-0l-HPeH4Erk`k z>PiZk7^)NUFGCtg&%O)`MA6{Be~)1B*j&Pn9P#c9wM)3A2WJ!fh_rom>ne5v+qkjh zWGGZYm>4capXS}~v-uk8Mb;>HhO8*m0hrVJCW@vC*EZSk2DQc{ z8R^e8sLMmaQ#nXQ!S|4wvj^RWBPGF$S`><*Sd+?SG)~?M#dV8BDW$uq5;;P zaTvdvKa=<@pqkiA^@XSrr3{b<)WILCouUWr`RW#x3 zv`VUfHTF#*6~H+dC6hm4xW0i5v6<=-bLt641oOh1BHxek5xC0+Ii)7oK4~g098iG1 zeAeJIs%*Xyyy?TSUQ=+_(nUOo&%I&J$>SN8-+?$;d}iGqKCfavA&-sx^v$s4Q~)_c z7FT=-`o2+j$=KaV?IFE zz>pE`V?Qod4KlZ&A2nl0TMYgH)sflOa0AH{N z1Iug6X9hxtQ8bY8f{C7S0QQ`vb^Wd~b!NUGw(pXcw?&zktOaLmn77OSbl#R;@D}I( zo`#e;`MrUsrTD8c8BRaa0le?B({V!C7W#&_IFIl2$!!GtgIu6`!X53vW%u613*?18 zJNj>`JmW*v$A*`t{n6?M21Yye$Wk_1-t)a zrqy}d-$9DutoXzxEWL;y1I~@8`#F{@rx|n&&NcGo_SQY-Q)zO0&oZqNEkgC&tH`DlQLF7E5Ee!aFecD1+=A z6DrIxNjMq`dr+h(oJ1nLp>U1K9~Rd48&7=is)m zLxqy4kBob zYlpVzhkIpf2=%Q{d$5}~Zv;>mp!Zil{R2%$&V#&QHIzrC^XTmf@L$(OIp!Ovec^%Z zEDLqAJ7^q#DPXZqhG4}~c5?p(IJSu|gLZq3`+wuc`Miv3m}=Vl0NbDmMeP}lFf;<- zx;zsato^BvjE5nW}`*UpyY0i;@O6aQAaDmXo#*slD zn=?KBiq2-sW>7n0Zcli$qb?Pktqs*dW74m2Bv6g8vL(^#+=k>%V9oX{ZtisQ&Bd#**` zWQZRe+fs9>0~M_7TB;Omy{Y;KJcYqy9lx&gc)1|c>FVbXE57AJgL=o#9}4vxgHQMw z=KYH-70Ma;uLgEu9Bs0AW$IPtAU3hbh+M@%xMFu!C``u33{ytp@N0 z_kcI^)G&_m0X|564VE^f!`pP=-D=|6$Xk>&3i9Xt1)o}*H&PsIU>in5rf(zJNGE_d zGLZU?v-ds6|NEk>Dn3GEN)ljZi$7N5>DJe{jO;Q~8nBU9IXv)x43^e{zVT>Bk4p z{HqYPKfLP$ z%%GCSUTPvLNbpv2_qR6z^+^b=2A>AZpgWUr^EycNwzkIJ)#J?!E=;N`~-=N>kFzUeWdVN!hBU!A!}1QMt+Q+9$5lZ z;G)??3#lQ61hm+R)Ck1$$3H*{t5kI0okI{e1QYQP#!+fogZenlI}tTU;`tct@0%U+b=RMjw!kT^ zHyh)9(P=J0X82$h0?ZqKor^%W8RNVjK1kgIDzfR$yejtVZgS|ql5(WChU{z{gC2!r zT5sgA@gVNNYUG`Jw8JZu794b4l<{uor+Xti3i85O+H$c;ir1>(Q|yO%_4+tX@B$gu zL^e|^2;>!UkYk^W@2mB+e5FC;j|$XDTKDwq5@d~+B3muq6^I9KVcV@16@ln^`wDY+ zlNt8Y`|2BoH>ue)X0l5Rd=B`2TlUNHo%7G)gMN<3MhmNN+l7)K#dS7+PoKlufAXE($H>m90b(A*?J48w;B$)gUEkd$oL|q3Hcl# zYs7L{P9pDG4-Sy(Q=NE%?yVBmkPVEPS)ufX(uB7;{y=QcA7k1zkOApt{qS;;snaGn z|16a>F}C{RQcyo7z^}c^>Wei%R1sy=GPG#=#4wj}cV=u~(pw)miAo!P2_bu_xPvAT zt8l8{;^*}dA+xk|h1Kxd15^T*^U~Dn>#BMhLLETCFwm?@<>sJ)O+KkKC^3abq641l z8y|}DzMGH5Llv9p;6;)Nw=cX$?`VGMdvAIe;IweylPWb~98gsSaq_R|hbzSg+;P_$dW?n|_mw+S?)(YzEbFRY|vT{Xx+W#K5|T+Y))Kv)F-J z!+0;>q3;5Bv7t@wip1J-J}xwPqakS%)n|TxRTJbx7SIK~S0WbzPyumQ9R5KSWs5tI zt+o<-QPF(Jm;`L{HmB1e%7Y*mV3T)Mxy<#Weqjq0+3?4-q~n-18F(4->a&C6)5-sW z$X_nz6XGa!M;g>#39r5;Xg=7W*>=&Oc zsJ!_5e)MqPHaP>>+rRJVypBkiFc8~4;@G%}Ut~%F>wF>;Qs``zxbVh}RPgQF5oXsFS`(gB<^XbB8DZGPkip_tYXos0zgA^H=)$?U{l@ zfp7NNUYJOmUsDBCB3q=g!j7dfa{w=U=S;2H=BSK1)J|eWXQ3n8+fneoBKf37>niBd zfVEm;vXhzfj#Ugs6)HRMR}$|-3wH3texcQk$nBU3iW$%8NAi#T>Sifp^u+m zkRO=g-Y%O->?ekksKHOVA7hNcpx2+ZlYAo&-1!Y4Q{2)Zi+7mvw5q@du`#y9{YeJ% zfjTBOE(Cr|YOM!)o9uEig{d0632(d85<&WNxWqCIyo~ELNIyu_z473oM1e zKEtce-<2+VrdRP%G+tXB%eAxYV4WbF%agUERe)h6g}UjD0n6A-CT1 z1~`ZMhWM0Dh)=k`S zgEyO6!XDN(WBM1oNqu9~t+uW7!2Z>21kP(+rIWnDE;Ly0dxTL08@xY=;TBucpO7;* z;73cxAkip=RPh3x1gs8OOjqB_3{T=DEEQ+M8=CC_rw?y$j$RFZZbA#DELtyF`D|jB zw*{V=Tg_lGwLepW8otY2^&jU=@)KmX%-zv+{=fxc=irUxoPTsf8UpbK6@A&)ZMbcJ z1$+iF-Dne%to_B&2Cfy`BE*EFjP!wX*YWwLETyVuE(Cps(H><7(~nhgz&CRWxig=Y z;XF9y=>3>$Kgfi|7EpPu_BFqMLBls5hzy^*pF~gOi4mS_#I&@26_slq9iWjWW3CM~ zGBHiyJx$p*Uw(S;L=J2NGgc%b)0}oufci??y7*-=W-wy(7dPrGb@d6AL&(&+8>(QC zQ&PlmQet4gd3)8R!b<=@R~t?+25k-H0wVBYD2Vt*spJcl9OM4uX+~>!6b}6N^Lgz! zCS+nQfG%R9QIpgVne)KdzWiY{$>YK$gcEcZu4ElQZqFwLbxNBbyoy+#^hm+)vepyv z=|@wx4XmWuDh=_6+Kdf;v&QcHc06f9K}`_C5oY}l5!q)Ayo@xRL37k<)W7iVKVLfq zrIO>D2AzbsBM3S8+Dig?)ex!-^5%C#A@<^M>!ZZ+3=9r!MPeG6H#QmLGCu%%Af$~iv$UGh|0 z`14vKfx!R-2b}0QwgtR9GCr8Q`=mj_9yzk1rsVsVjaocdjU)CAoS~*ks)1d#bw+3+ zf!WajB2KiBMrKq4djG&4(Zv1Y{`j$GoPbd%fkWZXarX(-7tPbC{4Rg-8i6;~t1E0O zJ8|Q}fcftzll4@I;lV&H$5)OOev)Bx38F^RC+|O+Zw*@o_E*y_;lr1m>C<2(wX~*0 zG7Ek@oav*waUgb|M1EOtN|7AWqLF)QCcxVbeLQp`s^iKJ=FWfcvtk6oOz>9JGOO9p zlt|UVN$3*USo0EEOZ^5O%3o^9r7xwlD%jnzJe5sM2r?tU2UjfcsFR#N=nW^a=3AEi z`faR|e|noo^))YXTwpZdLyYcSsz2j0`| zoC@6+sF{Zgd(WO8YTFLG;Ar#arUu7Z7St%xfsd;Xkx)Jc@Ojwn^7GO-dlIa$b z%kM|1+O&^J-K|8kQy9p*4}luKw(i*h3--vHRowriR#FOJCDBjGY=vi#0t(Np=Zx|c zB>UJT_-<`TdCHVJ`OZ}oG? zZ2co>f1j=qPUIsVS&aZ{Uo?OHI=If3Ne}eqfz_Q;v0+OT%%2b)-E} z-Sqw)FL)1VjCwnkxcnU};CDX?!~OafHL59OZVS@}mHLkI60qwXS#O!&6FY#Dc8T}# zZGEoP@fJ>WIta7y74n_Dz&fuhLz2G7GVc~xyK{7sLu>xQ#;`Bw+ef)SCGQ7^bG5?R zR`h-ku^dFn^$Mi0xyhS}pnhz&&(@J4ZhwHvc9wX((z)F3bpSVLr@AS^aDpcXJ1C*w zJ0Pfg7hWJbPa!hT`OBRX0x(AW=6UR!H`WgUXY@TSy*yDR=mefU%@uWKntC|~4%XRg ziStJ;OhOgFCf#(MTu__r^j4E#(UP7LhI{qk>5D#K5(f=|PG|ML_6M+flcsqPpi;%?sGMgV?w zi3*FU;iqg6fP^|L?Ut=;f>i))-zZdg`j9~R3(oZ@jg`Kew47M5RzE=>IRgu=q=j0_ zcH~e=Fe;Y@;_t3VOHb*m79?OLPvuO_kuE*|1iw4^^~gHtsk~=kS50Jd+wQe!Hh`5p zPolUb6Q5l;(a9X5f(^rYL}9I9s@J02*SE4mti zZRNfisvjzH;JYbv2vv}r1p(`I%J#69LBE(+4HZQ1)BG`iY2K#+pAvhD$AuexsT)LC z_NTv*M?ECm0t~t13m)$=Rm)irH4H?2z7}4W57d*{y7(}^)L-oPK#qfH9M@XXI>_)g z2d7PmdZ0zty+MuQkd+sq3Bf1I!AjafyQt^M|1A-$UF++T#c$g#;rm*f*g7B7ezhE^ zB4RWh)CJFnJ`Irn<(ZrN{dOLGgZEu4HSA!VEa5i-Dn9}!;JhPA!9;MESbUiRKoPHJ5wrI>@DtZqhv!OJXGfEO4zRZg*H$paFUFPss9$i0FjQWs;N%chH4hzq4IvRf1C#?vcyp!&#xmu8n*}_{Se{UzOLY}6Z0xHaxzvP53t!oKyMOFBFqVhk4GbhM4 zJ2_;R&1g|LJGeJLf2$N>?MQ?7JpxvKyOZA8G2qXAP`lk<;8s2ncq)<=&pW%=fQS5w z5-YYxEbq2&*vA+VyCZo0>cJZs z1zvTJLJ40KSnThN-Zjr(?#zR;nB}@hqA+}9UEu6Obzs>rIrA(544KgX5<&4{|EMUi z9OOEXoka~M?*N*i>WY8RV(R%4FeoDYAi{jpuNUOrGTTzdg8d~cG>EX_)ln<5M(jrg z_I%iva#uwCaU6g-wDn@m#`|h0)V<6y!N%vR;a3r$_Ytg4FFe(iHGl)-?$qiz>P9K- z9I%&RE9Bm=#0O*qX{l^PYs%u;1OG*TCP|5PDArJk_d9$L5^3c7Cqn%?nRhpgNmyY4 zJ!2`-x2k?7%lS_k{v5j0e7W|D0yZ))N3R~Vt}G6Cs#`d}+2m#R&jy^qeEZgWKxt8d zQ`BEJH!pPO$I}RKQgJ^U^|4%*mOzBH#hwyF`Vv$LdMIz{MijRrOMrMJCfTRQ?4}b} zV9$@d^;`Q)0&#$6w$!gX4U&ubJnRSl%}!B|M}kPeLlafOUr4QBLIt>rVsm``P3e_& zp&IsKQ_hd^hYWUgx`^*yK219Q5Yf&!^bMM(1+6S;r^3v+FKGrHph_p)#6X|Y;X43D2l2r#bGhZ@ z1=g9;$RL*TS~1MgGjmO2lCkk0<%5hsDt@=}Iob*r z;7NMgBABg{(>{ZEl-`dqy&fbHYQSTELAdxaa!x-M_^(QKi*KRSSaiVJ`*GxNx)#-Q z0~NW|>;#^jmTt-69h1-_UrAdx{Oa{Q^`1a{hLJQ`_SV}i;aYW*N%jRriJ=jjs zJP$DThch2aQNGg)-t$t`5p}FjZk4b{eeb=Ro*BnZ2dJ>2mz$DGC5CIT#;CMzA7SPB zqJTX!vv7;}X_j9R_^&8u#WyAC=749`wi%Yvdge7P!_Lh8TS^vw)rJXKJvw{uJkd># z0u{Obmkx(y%-d_upofM!r|oH$h~RexYlwwGt(9E^7%Tkc_wNs{GvMOw|Ng6gXwr0l zgcL~9{l)GA>6Q%4U##FDodm9ZkH z6q_Lxa4I6|lhkJ1N3p^=CX$9QM%$*V+kxDQ_je`QTUB6TPWPAUsVe7=&gcOo{4=02 zu=vcleZV)8{1Y_t=Q2<@#kIZlcN8yi={_JU*O-=%vaMg@Zv^dmb}L4&CHeqtBu&Z3 zEe=e(RA`g!vi<=*d&O`H)$(&bO@bcr`T=M*X?0vmyHj@~IM;ZDKh7u9wMMAmsW!&9 ze4pK2!iH-#^!@xqGW&yC_byJ{i{bYl;SIj4(C_fst%IiE4Bwx!p{iK0(NF{2nCl@* z-$)$JJJf+pzh7(BZte8~-t7gr{bugzTf|_GY!oSW+}Ve#CM~5{jnLWj^>6|Af^`PhJ^of@kK@Q|x|8L2NtlGRgl~ z5$OuyA3^^QOsJaRjtU zDb*!wO}{pc z6WMmIp0B@Wj1Q=L$qWVGH_KMuV1MgvFQ+tFG!LE-b%mU!B9{DY21E^;=iS&V-T8*S zi1(|m(eI17_yw?ni*bi`%72+pfcmpM(A2;-3;N>0T5&_OqMw=c!G)ARAM89i>0H`~ z;r;H~<(s+XM)f^{XEx|zWoEl+C0Lz4a2DO@wfDIUSPqBlhpOvi(}ci}^3QO;-vnu8 z7SvV>WQ^|Fz(QdM?9>k(lP+4VAYh%ny%IJ5_p6p0Nao2A}I#UC9N+jltRPAH3S#VlGK8K7#_p|u`%b7XHF&zCx zU<$0sC=HtRToLiGnU$Z~6Q9Bjs6 z5Aam(d&RVvnZa~v;3;y@44mzJ4;|PQ--JQLCBg4-p>oSu$}Cl=7P5oydc;?q>9dwd z1)So2KW(VJrub_u0KJWTURcEBR|HP#w2Cuq$2Cx1 z3*HY!C0r=()tt%~u#I=woIi(VgA~pnbLR|4hJ{ys*pEbx>Q#6K)&0Q`unoH_v5MUA z2KKsa)WL^r@a`%&hgbefj`s=6*o+0g>&kzBYY8Q360id9^u8rGp`Q;0>Q@W?>xI$G z$8!SlmqgRGE8OhDKj4lhyTn0OpWmSKp{H%@AJ45)PeWP-6BY}I*1rJ)#dNI4t4bRdRH{$z+0-YdU)F(;GzEZ?yH;4>#Fhj&$?e zVr;=$ac?Yr&8|dZ4xBQUpy9{L*V2ANb-O0TyAvLE$_fem?)17{K3PM?;sB4$Ej~GYEan&#_SRO3@E#_Y`%Hi#W2aYv zAwA}=28hH;d*PjosU0i$G+4RgoTB#F;jPu^jHV=t-EEekh861Ei76C$V8Q!G9(Q)P zHx;J^-go&}&#}uBl0!8=|BD}=IJ-ns0})3>h{r>kT$Dw?au4xzqQ#wmWdoI#Rb!`9 z=iwU}k77P=j&-!#4+WM8T)v7USc7 z{6`~zJ&S^c4d0J~matpcjAJ9xb+&lk0CQ^G$2ff*GZ{|n^YDZ{L{erd10e9}ESQp# zZt##G4%%UHr$jX3XaeFwz}d9=1V<@209E9S6LivJq&fv_g|o@=v!vclpjMb&Q#giP zHT!ylj364P@J!Xeg{`1o!H-@%s_ToKhHCbUWAsde-u@1_O7q#Gkt72;*x=1^e%`mX zsi&_CY9rkI(L5%WI93IyGH@@Y)keCHzaYX2+F&T%jYZ=CkWj=CPT|8)vQT&%+MJAc zsvo8J1>F0C_!EJ$?`%KSa#TWdD9_aoj?9`si~R}G6`oVO?$U> z!(Chfs0HbilxEc&Dc=R~E9^Yw>MmmINx`R>mR_$G9lW3fPt}coRQz548de8Y7wj+H zY3d@XZ4~(Lyfy9V)$O3>@Vr~b(~A-PG=dYX=vYE%Q^X<@&U%}fshMZ8S~%E;d_+1i zP>UYC6!1pGD%mTt$d4uhtV<{46ffz!Jr0cQeST;Achm;B&il+PT2=YsGy|)f(h9?) znksCV|CZ&OihYS4b_8G!j@;a**A+>x0eWxo>(y-0M-vEugrUM=_4)oC1`U{-QCF#D zN>=yBlmWIcS*j9|y4N!J-NFhwy71>Z5J7Zab3;)$uJ}suW>bAeiB%?%NP8gSoC9mU zMdwX?1$gVcczHQZie{^V*nN=C%7=6IO5yJNWn56A$Da+HZHKnEfDCV3HBFHJrsPry zC2Hd70y53!_agNz#Xc{nDlqQ2nKtp*L@My^dvsB9#1Ycq!GAtWbsdoR>l4OMElLVV z5?Lwb@Igj!i}^RCK1u4plXRRWox+GC0)?|zz&MlBz%aU4!S6PMoj8y1`nJ&af7Onf!teJh>Qu7S%WbJt**ATdI=& zFipf>!->`ERfe+G&hY_qjo;2_XY?*BO$O-g<`RFGN!wQ#_%v)V-nj|}$ttkU+VSP~ zXET+%f&QDPO8$Fe7heN>{u~aziSK}zZ15>>m5nJ6LKS-8eV0w?YeWnL0V)tCyd&RS z_;#)q;1x~$_|7VV-R*(3{{^pAm)x`rIq<#)=I7C6!~tnl5GTnsxy}HO6gV?Nwo9{l zDs=NfM)3Rc>p(SsoG1es!Swr$g|dI^LjvoZP`_XBd;Q3^0;rNdYD0#_XipfN3vh9N zpt%#J2G7g5zbskK+|klqkV{7WAbOw`RfUt34M9Ywll%S|J@6DuA0zjLJip`wk^M*M zskVuWz0u%}h|H|m-|W5G7{u?t`U~^MJ~Uu9UkgooI!#AclqvVS4l@)94@Y{l9RmWsCO~n}4<3 zKfC@BmKP#WuYTj{@U>!H=da`~RfB?0lM)Vm3z|)b|4+dymV&Vomtji%nqLFk5!J+Y>0s_ z!jq}KJsCTq)E4%O5?(75?^RgdJ9y@d;gyZT0!nZ}#fG?Cd*qwuXcvHH{8Ijr@C#js z9T+e~D!8(*y^N-adjm;m;1#7weQ+DN)+~?jx zCBSd?dE%NaZRkg_Q>Jc+zLl#4UM7v^(c6vcvJY5|bCz+;d+On3!aJ>Enc|O66)zE@ z8KbrQGT<7&fa>K+k5AC#M~^@@@+OFw(R;b*a!{-Pqqm;V|78iR4|XBtdhIKqtgdaq zQ{?JBu|-vG#05I5gU0BF`lQqoPO&H9%d((*mxYdFMeyz!)Q3t_R|^)7b;OjLV!TM2Pbb z{{fFZKbI(G7@m(l?2u$r&#EYDS7i_vZaa>0C++Rb12q|XSpE|6ltW(iL!RF!J?k3=q?7_;n z`E{HSgWQZ>mYw|yDb@pg&U9x^+w@@34Big5B`)r9Da!_cDwNEGjrL{oa0J;C`)2dY zG;tHffiIYUV3V4SEx9}F+?)O3B}Scg;&4u!=zZC>ooc58_{>ucW<(W6mM-YM{1L3$ zj`5kX8|+cXm(eat9N05;V zUt>MB;cZ#QM7@~gk{EU@X!duW#rZWx42X1H*AB8B{OG3wtMUA${)l>(&JI=PG+}-b zS;job4r1B88Xv6rgl__}k+k~EoQ|=Nd;q+{ZT!fcew}1EWo#>)@VGx4f-}JCj=NSA zEzOP+1HKTbDjj6#m9?a60tg;MHG7~lQtFuW4s5{9*dHrz zy0l7J0DOONB{KPzelrfh7s~zen>&5IHf!hT2MMX_hE?^@9s)GJ?s3Ly-`E^96{+B$~r(!SWP4K!%v% zq$;KI%`m|3GYGHYAKF8c737jp}j;uS)$vQF$%0K6s;4*7}buCP5B+xBB$WFYEps4LoT*riOU&l=JyLARbZn z=3@(kKl1=0&d9ocu(A9Pi(n5GJMj{QHZua}!YAYI4V*sS3JSg}Rmp8nhV^4p;ALk< zj#m7UxJL$7XNxq}B3ry1J9y@)GZ{|jex?qmi%uW^#!{1*IuBSK)!29-UKLF=z<;N< z4hY+5kr>`E(yDgnlJD~#JO!fnYirGde!B(K3GCWjd>xd!cp%@`UG_=?_k(#Vcq-d8 z%dYlVQ3ydC{9=Br?p(#Eup8~|c{}-z&4C&KkJY@bZLP|1wl6@l*zY&|`Z5gy)kp}c zCx(e_nHt`*r%+TLRZ1Be=nG3@jo~xXVSIsn|5xEEhL&Vu!nyEPtUAoEqis@xim5cR znd>yhI0tM4|2#8KhJji@oW$lM?2wPK+6J)p>KdqTFZGNY>CjWQgm+8s^fOSwNM8Ln z=zU!LoM4aCW82>vd4D+rPDdKaO=(bpGY`O2Hw5(@^HYg<2Jp%WFgZb;IuTJ2*#*J- z{L(flhd1z)Tm3e*GdaQZ0XF$z3E$BLQOGR78G^DGy9FEHMhff-cLq1KWYJd!V0CV2 zi|6=p-{J_*_p9(gu<1ST9zgHX{(Avu+5`ELF#sDTGxHPsF(p1;5Uo@sU)3}FHM`teBb0>Zz@ZCm1aQm|s%l8KM%(?iBaH>P28<53N z%;zg-+lr2F@ZBvhY6h)!uc-k7FZ^zlfbC);yBM&Fw z%o4JqSZI;sFRvN7iLGf*kf1HfcVKQa%`*Vcyv=&j0;Z9BDH#sR2L ziu&3XtI~N<0iMblQk3d2aWfZSS8icDivRqg1on&(nqXs{#k>@VNUhB;AF>y2t$=D3 zG#8;FC0*uB4oR_F<$Rzna&Q}2lv?)%Zr5HRF#v9CoOvS3Gv)8{ny+8(Jve?_$AJKV-z@C>S-~Rp)7l*Kq z(Objw7O2SS5oBYUx01_ z5@H?tSjj0;7y}Ua*Ks2qc8RDx_5RctJ{1Y(Swt+Q+2p8j5ePLJQV_@552ENsTo)e8tilvI;adgMzz)WvqRsE2anS-;PMx-g5Ia62L){)DT!+K_!`}{O6Aj@hvKdC;{mhkyS8Ft@b%{ibVg-FF9A{rKiJCHnS*&Vk)mV@t~d;dy%zz;?7!4s(5k zLxwY()QIEW^Bi1)sua02hEQ@;dhWr4an7}=4IkMDQS zRFLOzN1OYT&-`&az^?tyU4zh$eE))~@*$yzjeyb{2BLFoon2c*NGe~z_tEP#o^4XD zlsaK_ZshnCho2Y)QF2`jqOBIHI^dm)&G-eY)NH&!L4Bmr60Z#X)Vl?X?3G%n~^%31YWPAYIcW&SSq|PXeodgYs&V+oNHWe9UsOm0X9q zrV$bNpU}-Zzl~vBh?#EXLt#vziUR#hl|#Fw2Wrvm-or;$zNfzo*t4r*xrs@gy&&Mz z@r!lci{Gp(2Qie&h*kO2p0BLHp2^6kI17 z1(rLq-8Ea@17|~@k~+m4Z?Y8F1?*C|$RF2Af>Q&Cx66esw)+?CHPvWBKI>0bt`0mq zzSkGM@*iyN;cbpo(qzFOG^+r+U?$5i-zJk6c90(>y-zmF8g_3QPQlRim$lvL?@NH_ zEY3D1$=jAr#YJGND5uBR?@f8+T4(}a|LG;-fXESe|3L39NC|FSJT_u$PYFVKbH##Wv9 z0z{hJ*5ksdQ=m z!%T|I(C%kM?ohWjZD`)ugi(zP5OI9#?H;SQI@tqq9FLpQ*|{=4v0<0R#pYJ(P}s!* z%+chUDK>g;zdPUzCb=4limTzB0?R4Owyt7ZU*9OyptH11uit2ATJRph?;RAUw|%b@ z@=2++9d)`tp9%c#3mLPYW*y1_=cT4c-~oFOADA6;e_VU&U&U*~fv2#WT1xkKDm(!& znQv-hk-Pq-_%)~m){6gD!rV|S3vdQ@$yL5dtiSXH)Pf8?4bd?~&BO-C-x5xfZYhf1 zaKcgEDtXI{q0JG1jl6g{u&Wc>2Y3ge{Cod+rWN`FHQ6|sx!>%&HdUylJbWKhxqd-S zmLM+FoU)pHd~QYYFAlm4MV2^njld>(x#Kavi82cVtdB5I#OXY2XLW!ZzMM$owy&)W zXJNnf%sy)^RXnIn+h#5`k0D}Yu=X`46gfYx6P*a)S08lx)?643;RT{3`H6qoUYY(6 zs>;ixp%krytG*92Yc@%E((qJ20sBjE-)apG8qwhFU^*whR-h9fErqV;NA=T$O`c;LJ7Cz=_f?-!=yRGxEt6z9Pz^Y2lQ>4fn_l)ol_1 zXl5b}^9wAh+#zSk--SUWg3shGsJDOAD?nRh>9hmvugwzsvc@&Rlwg1D(@ChAi|Wh; zksaAdDSgo7_$uIi(}?4OSe0mXf_GYd^>{w=lC3geGFh$vgv7-p5>|WuTr-)F#A^o) z*rZu+IIAH3ko{mcOWFsOM&^Ex1AHdw`h9QW4-Aq04**s`slR9|;gu=e*`>hgqFFUb z_Frt!@etJc<+73!F(tF10eJNyExtaRS6P^_|GBT0y9-|q7@hpLR_()mivzXuuU5$E3iva7W-V7>5tBP5N)1UK%#JiX<4j*8S`&6QEiEBx;-~_>5 z(4L}iUvVn18t(R$@#In+*8^4YV&yje!lz7yeX3f~np~{ZTKoo;BA#*m>Gw&>Q3NN; z^YuNG<9exf0ruz*eGr!#i}hWC*v(`sa|Jp!8L%hcX;GEVRT4v8*q>v4T!&u6On@D9 z!?^YEwOUu8Vd`K7vY%-TU6{VimXRl%~Ib-a~1Q~tR#;AB0Xr`XP za;jCCM#he@@B+T@QaAuc@clyHlZ{+M%!Q|iucdcHoSL_1 zg7?}Qll!_U(d{ufsUgck`C9=oc}HM19${n}Osz}N<{^(gman?Xld}RJ3^V-uT3NsB zaFC_4q%;v?d}n+G{3vf+T*e#f^P7N8Qq5)zuPF^28=yCP9Y2;6jGRzQnDG(cNmxIP z1}8_`e>Cj5E?dOl9iq&(__D$92%SO1QJY_$JiYM91ym!ccG@JE#QVcm;3AQaOT>n;NN@fit)vO9h6=cALy%mJIW66%FT-Rn;SBykrD+N;p{XT zVUY8)d-*W}K5;ezs?DT?q5Y@atr-SY4k3eRTflTYPGjp+c-25Ds1?6;mh)kWmgIO*Gt7R<}3d; z57@i4z9Y1cMKQO)Itx3KziO&(eiH1Be`Qnr=_2fa+OvpMexmMihC~3Eb8TKfT&Eh} z8(=bP;_P2?R+9S!vAeSPNIf~qbR&QaqxTn`K8^850zo||d$8!2?=j(E;Hl!j2*B?P z{uhIRP0lgC_Hlu$yaINxQ#S^`1lo=dunRBoFvVkn=oHwH3IMJ++7|q)ZjfFKyQUhz0%u_pfv#7?6l8!{RDq#_W>0urV5+& zj>M=#LG~oc-Bq~R;Ju(up!(`;q^i}6vcOZhQM~vkdNY9y?3r=8u-@~&{6Gb7vWq!) zul=vA10Qs;`p^gI^wl2NGhYS_E{GecNT6yutl#5Z6*!>|ATJ9^%rP$Ul$#dTuX0?Q z`Y0hN4{(({49Z5v^r-MbT#*0rmpE}sk%F~8ZA>{rzs$yYgGd+Jo;;%_txFd0!ICWE z@RhgXhXI*pPJi(BhbYev&LOI!F}U7JS`Zb~Vg8n%C8c|#%HcfCV*3m=O`V+z-sp#~ zMEb4uW;j9qON5k1Ta`jL8JyQf2ihkoM633JZOC+~k2MxmC!Cpxw9@_#l3ss}V2>`3 zEUL_&LIidU8f;|j<=R!)1m^-&*%l1b&rTAsM`)H52vg!GIf6XYYN`Ak59? zTJ9-%+qIt;psrH4`BIv;Cx)<}u&7rx#x5TbWMJ)v7m|Nz_C&M|oOjH-r+(FA`1s&= z$&oK=w^~#mR*I~0{LD&oT^3ZdzO}0(-wc0t3iuS4g_y9~(U2K{X0m83MBzHpuz)uT ztG`eCROuQAFx4h@R>Ie-CxYjapr;12x!1D8jBhxpPLRu@emB52&I7|m%#2iq2T_B6 z<>KauMU_tw>$KmgqVF}?V4Z=kMe4J%3ePSe14?DHx7STtWga{;iD9DYBd<8@VJErN zu1qf*$PcQHzkch-5pMKabP(A$`ZsxRGwd;Vi^PaC)^w04Ct;YZ2g~$uvGh7W5 z!r0S;nR5hXFl;SoZ=cONLRe*-B2Dl-K?OCK60C{O##~o zyAQfKLC}9&sI@z8Oq!|s9K2!AXOl;+#7!FOL3MW(e-M3t%$hL0r{oCW5xR%H2e@E49jbjHP;K0J+j$xtnd z6JL2;Wgm}+)9S~Jd^MxAhzJATsH)QCOHVT|=}^g&w&Y3S3oPAW9qAEnZtsYAhR>`9 zoaQPvTA~@qG#i`94KJ?R)&?2DAJ0DInjb^g13tLdZ?oIKCjUGjKWeDHp&vD?J`}8d zeM*n?zNi?`;CCZR64>pXKEn=npW_~Tq0D_gT{y|n#yb1UV7K}MZ{(xgYeszP7crps zGFrVU|yDF2VQfJ46C*M zOcNW+SJ(G~9fSQ<*xJSNqYZl@*!Y_V^UaM2SdCvY>?<>C)__9&=Yd7T7l+q*0Jx~} zFoYN=Zv4$)HNNV6cWpz&ePFi|GgC=2`Pg^>tGh0f8K%5JHh5F7EYm;FQtHu$oz*dy z^2|9~<}83HndW?5MSO`qEU*o6!Z@U8C$|$o?3RU#2&^XW?E&z~-)_^vnuYr?fjGE{ z?fP7iZ!B=ujN`~IS6oi+>L7Psgv)A_mu#&qs50sCfw?&@51s?;`85mssyyo$!TW>6 zH?pjtq_#i;Tt!dLC!cam!YdHV$VK`}ZAMNj3x0R6vO`6N{Fp>Iubi-QCRv92p5P5% z?wFF8nN0Tt6}i^OwJ=uh_3QyR6Nr`ctb*PS9L@!3wsE|Y7Z<>}9tFMQh>Ljh$-qic zI*ldQpsf3Yy=sf{_8j`x&TxuNs1E-RTMh+pEkA0P=#^ga{9|iPGR7?*ds8*3Z zeQPI+oF_b}B*Z99w!7rbAqjrBwpXH;TM4n?bQRqugN6y(VJ5(L$$(N~vbMGUg!kEr zr;YoidMi4JgNLm@j{FW7js@Hskg`5*P630e#g>)5rS{#%HVr(K&hcB7^p9ygP#+lK z(e;aeKYax3*<_N`bJ&=+7O;|1S{WNcr;Y1?Of#g>KjxgaKeGo`CsU~W@qRJYF#w;d zL@K|7%C|uZ=Uf~}HIntdp$o9Ovr4{h`!N~u0lOd>uD=WYFU=HCpPa@Jb){c^8ZL+$ z2eC*iMi%~*o~1Q%K^)wNSUpt-Ltb8c1ev+8fpo1rx&Od zC`R2;EKR6(Zpo6@PJnQ7~EAO0$E=KqBTZ zYkLN)54XZPT;SdLMpAEM^CjN|{~7yTT>Q?ykA#AXtI>xH=}2!+kfG`+-l#a32`smP=a;9YVcB^BwEdwYzrzF-|FG?^;69n zoJK+N-wwmWWmy7HW$Lc_t2Z1=*s3zA#I(P0e&ceFIzkd4CbU zJJ#?-dq&KJAbp4IVV)vkqemxkXk zAe8r)A0e53^W;3s1FVX#RiXcw*eMd2X8KpxAWs?{t^ zz=GJ#k8#QMIrqtzXpo@`xiG_S|vT+szc_!Z2@ zA+g`9SAoUGqffskvo9T}*(C@9(Y{AKlVX4>!t0z8Lw7Xc2hf{Kxa`;SzjT9q@}m4$ zX1BW48+bM``W8kroWvSXudhl4`8`Ol{Nuui3E`U`m>xe_sn7`di@4?rB{3IZ65m!67VwenI<Bf-qh{n>(B`wu!FOS+*NuG>g+;B|PhAnWlL*l+~uechOkZW_yJ9eCg7onT(!h_-Npyn7Gq zeL0n~iJ!-G3UkI1tUep&cHp&N3o|%sfu~)Z?3begXgG=2|kp^R0dj5GBjx zt;R+oGdMh7umzv2{$Q`+Kd>jE3y-n_lHDob3<=*;pZXmdo(ZY}?)~C1rT>oo0X+1r zIrbgD{{juX5xM$}cHGT77!y#9*YSPMz6+c0HXRE>;^J|+*cYwg`g4-{*_F4slabY@?B&yABK>?FN z>ouTk*PS=`M&f%Ga{*Bv8tTaiO}2mCcbcd&@WK1QuSnG>LKA`2wNeuyGf7Pg?7#`J zo<6zN(Psy6Ghtq;#-|z*MZg;|3~8Oj;BtNdHLU8?#~$5M8VOhqh5nzU>qvAIhM`xY zmnA*)8rqJ~dm!}F&$nkWs|t31il( z@4)hBal-j0va0>^pPlj%@g{w<2dt4xgukfDTKKesyglCQY5b>pOH>Z*6%l>3(xRx*UY1o*@uJ-z{9r`#sg^!6`FP z^Vp#t1=vrO(g+D5U;XkErjh4o24>Z$eyO6&ZnUfd(L|ED;fExQ8e@S~Nkihhb(HtU z8kmir>_6!@{(K3X>cS9%RbfAL_%d)d^y^T9SNZ&588`vfdHu|yx2SuCvt>&L_2>Sy zRM>IjIvjS&`Sw|1rZ?~yk+B?m@L?s)Y2V&km*Q-LJz|VSD$+PJ(FErJR=SF;W4-Cs z2qKa1O}PTN5i>bB(Ft*~3R`jOe?8&3Ov$KZn@!1}Zsb|SM1B$R#11)CG$Q87u9J&Fq zPuR8U=6Bf3T|f3fL*4zI9Bf$W7@P*B6JFJ;wfbNtIDM+IjV{&Rs$GLS>qhBhl5jq! z?SP&9rCj_M!nK$?Lnhu_;=Gc?Tnn;*W-cN6UF7?&rG9 z6u=uiPtfL{BM|-^7LYofxHsO#xz7l)0dJFK6Y)>EM-w0!gzhGm#%JT^A+Opv2D*zJ znFhHlt%JnTZDoxV-Y$I?CaSXGB^?W}galhxP56`V(g$|3=9HH?Q6nmM;1tBiQa_}g ztkN6yJ$-v|=BIDUJ>V29;k(dvyIpq*R)o`^H8gFUP9O@>%yXd6CCD=Y@=$&G%-o;) zTb3- zuVH;GKKYwBmfBxv3M&;kp4&euu0{~Km87Uo>dN1n4RpUKDpw|(`5VI8OL1&@`p1sH z*@C@VR`Lj^-Cq>UQOsic6$M+!CKxX~*tdzz08>o~JX=gr83dc74>>@pfy=Dzq-+ii zxgA>8=wH=XHzf)p5%b*}jvVH%g#%yp`5|Gn@r~m{uFmqe|JizfdAkKTK}Gq_Q5JDr z33=rDP!yX`O+FW7J72RcP9K6oP{{bi9CGEBF^Z3H-jkDk7f=wTi(qI zW{Ots59fYMQ_*LD+pRm6i(g@6#R0M(Q)SZk>7|RC0u2pE9l3vBw8RsDz4-)56kb}q z;!+cUpwNTilK3Tk zmmkdYA2cTo{XA{({zw|$L5+M~H70^*UtHetRh*WV3V-#Y`7yuECY>Ax3dqwRgN#{90P#;bPb=8&c)d2Mcx4`MOWqt${ z=zd9Fg<8CBiG@rx_>`u9*1?l$$Q#dRe-RJz+SCRGTIQ;ar8Ibzgp~!~?96+dd@U4a zY`jP_Hu-vG9trH^Gfei=$4tjVUgGk=j(16nYXI+_*e1=aztHNAQaCHhId(_sFFrW| zl9`yfO3D1rGz{2w>QlyKZ462igWYJlUA}SmMgXxksD8($pbdX-dIq|`RJ6U9=GUqe zprLckQ8BWk2?r}u9)^1O3HO+`|&;tCca( zK}NV~t(&88fK~VOg|+kPe+#An5?k<*D@^xuk+cBic}l0Rf_;n%*sJsVzOp7>vjC#a zbg&qV^j`D;85b$LH@Nji3LXKvKR%IKUtK?B2|zNU7O!t#OI8))oQ@KmB0p3+(LsLl zLp9V39gV2nA$x<>OGx@Stt5h9G4goR2WQ4z49@5fNjYctu{=-5( zRWxnpoi`K%*4Dl-d->(~kS-FyW}PgTKZhgb3ReCoc(smxJzv}d-i$7CzIwXXXFRBo zY&Va~<*JY+9Qd-PWu@q0BJ2lQU;a>TfpgK6;u?s{vJ}UQw-hjo0`J+^@>5+*YEO_E z{??qF%$UJ0Xn-hUO9?AQ*^%G_bbp$iI{ZUtnF+gu-j7XLV@~3a0PZHJKbxCa?ioZa z>_2+n1o;~szWV_T9RI47M4F!BzQB6hiMt$ncvm=_ob}7QT^T|@#Wx^V7uTB9)N0Z^ zLHx`Nm-iQ%hAazyU3283#I|dl5_lY|6*v4(cj_w!{#TDQ%IN3HVqvt12Jxu z2lz7XDg1oU8lC1rJm~qSA8wh7H4)IkEmWQlQg?}z1N}wyh9Ws(!5TQf%*tk0tD?HW zPM`}X`tXm?_&gheSmS!Il7Bi%N38$&ITBrGQ?f}1U-fOif8MC>?0N!-f;^n0SFwDH zM<7@28u@R`Tmo%?Os&+nc-tF})H~2Y!`bNgX#-0Xz$sKwxps>!JtM@=zC=^%u1VUN z0f~*LAbG8+F*OE2P+>P*N^p?un+6e3hj&CV*5=W}dXvnzntv+tzY@lL2<*Yx6Hb8Dq@#OCLmj3YM4F3}Fw!?hw3~xHj~wR>{(LYh ztSa$%k#1kE=_W8bW{WwZo3W+|XhqcrUD|6;6%*$9|4i-7cpPi{-T(Vv`EXeC%1Hy9 zk@r1}hrk~aRbjW?e8_mFPFIKnOK5JXRNSNd^IXWfwmPP22T61_Ktnl+_ryQ5a3oOb z$f2-UpPhEE1^fKB_CfQSy0u=gL-37`?zU`nrUQ$#Bp-ZSao%a+J}W#ITgwrKKMdq2 z!^LbBM5elp0Q+poS*X@pv6ryk`$~g)E%VH)HE{pCe$enloYQ-Iz>0R$Ydwab!x1dECogV>87n7{f)drRQUA=n`}1uFfbdX-h=>cj3r@$$v(c4!;2zWf|&!+dt>elX9! z)u~w+gzkNyKMMYI{x5n@mK8Dp=bt|}eunFKjKFs%ZM#Fo4ZIw=0^XjD|eqV-!S$YM$&E^A(`Jzc}(Uj>0#rPY~lwPk#+vQ;|6h za(()I9T!s7Rte|DAO+`-8>fdE>>fqO9cl5}I87CH$|u5-vWT=ND7?cpaOYm?Ztg80 zSHhpxiQMfP<^nJSfi3pu{_*A42VW)oS6g9b{8cAdL$&y#w>M8h&tNAXM=C-y7yDZW zUu9Gu5huXcQm zlLeV6>+<<3pA1O*Q%$yUYe-H0fQ`L=oLskO`sbCvdLuQ|Gs8Cobp{@%+n$gMJUyPE>33|+R|gq44lzE^|Q+C0jtsA zeCs)nk1ZDB0oqB`{&bh19Fq(=GlO+*)N|9N4+k>6MLDfRTp0=rr{(T9n&{}Y-IECJ z2d}6aOp)zhCl3B@%|k-zu@_=WZO4gntixilJ}Yg}0nPW{lc;lR2PPL1bSR2^o9 z^^>GkzbN$*@&Zo1)Y_LV@`d$X!Lzx+zF60bt_S91R-EzZ2)VBM3$lo~?cUX3|AhSu z;$Jj>=qx}<#14MgIwUNBc+y{6U>=sy{S_1=>a(vtqu zxz7PGu*~Q5PoKP{{eaUy1VI|~)#2O!Q}g1#6E=JP;5J|aQ3&>n%IJWTZ>VEJPXF_wY)XvS1n+#NTNY2@#E$)yx&)yL>0M> zK91M_IVMI-7IX5lFK`N69=Mm^e=8l%9<`9|NH1NiN;qvK$?<-Oqu6 zf>wta*W%r?!tmifBb-jS_RLLvm}tKMW|(t_FTGElwJxj*>j&e=koC@15CO6DjEAvI z?E&OqfBJUsr|u8u29Pl|;#hN!LX)ZBjrMfEh@3+WG6iR(7UY~nWcpfl$hRr_@y-QY zM6dvjoDsg5?@wtF6l8iN1Qz{%XUULZrl>s=nF~5ZAHfa2axb0{Oy}*S3p|D2#=It{ z)FR;71uy($^{-!EUw|2k_Xo#U4fn4ZM11{perKN=C`x99qoPzZUX3oa3U&Sv!Z5y!es%r{nWHv=|}%?^$1!d zLs;L&Gfy_a8_O+QZ=Qx7- zoNFGabjVJA6aWfR+ryEIIB7Y^<#=#dO-a^Iu5=H6GrP$Am17kSVk_(8K9=5ox@ClY zPu+eu68~EG8s4-9!~5a=UxfVte*W!uqP-}hby4tUhDv9;Vuq-P6~E#h<<6nI)ggk& zi!m{k?^~^MX4nZr9Qa^1U3@w4PIE>mCJKp0pn>GL;qQx>JxG55$@yV_u&<=g0Fl8? zo-eA(mnB+p1=u>vZk_I})}L?$Z^p)UJH81gt_-ksNUy~hwQQZq0(%w8(k%$1*sXA% zZQV`07#VEa1d-Tw224iUx@xBln?@|@@o5ZZ4ga3PY}`buc|}4+1T0? zcKB+P^udfz7eHRb)YIj6<^KgukRj&}Y4ri2DZ%!@d3>*mQf#$X3j@yKegA=4tS?Ig zRw{Pp&qBp1RhSOE*{E5G`1*yVARy1sAzR1~3iA%z|Fx!U(2pO={lK{oq$*p{a6XmM z0c)1a``>z)I2U2H!;f66CPKGmIKg_8@8b+hwvQL=ADr!(2!x4NkqF4MA&~Cna7bW; zApQ-Uh`r*kw=)s&8qCxeYba)?i$dnZ;Wc0Hy3_0ePRw)|E&J0Vf26@TJNm>)*K>6^ zWFXA7zi_T#?N;i5mZ3kHdTZUgjU5|$*i}hW(hf#=yL1fR{MNEfsV*QJ*o(aRZ6w|B z0;qmZO7he)_x=#TUNtpB8?zssDeN8{3E?B@Uy`UMaQc(z8GGWFX9MlzAA&7cH%E}3 zfT+M|NQK^;WQL4Jw_fmzcn3yU@l4wPBJ zK0hb*y9G>K>?^-|$CYbbyKx0kYVbiZN$~#u@vy7H*nY_v4kfmN z9EBv0_!^L+8CM{OoXALYOZBVN2e4Q9_A};j9UCMBnLrf@itt(c%Aa9%<=lrYPS#kw z!ioh-mrgEFsS&b|E;AQty^^D(3jXdr5@Ug{;-5GG$+@{di`L)+ezW7FWAnqpq%OjYI7odG69>z(^FRZ^-c_?08r?4zytpZy29zD2+o@=)9Q z!kXUK#!JVNU!6Z z`cC~H;U4KE)X5#G;C$)t{i6NPH~qpnCd#`URr>T^HJl_R%D8Bgbh_&=II+6FDf92) z{zZUX(927$ZRO|=2FC?u%QsVt35&%tVD5}bZGkAx=7 zjaQ10O=!x{O7-;Rf)inkKSAC$tKHfi;8=vvHjdh-*LDIevuV@~95DC71QC!ksZXRh zTg!dG=?9)^FP^ezl?Zmj*J$%=Avtl(;CwU1CW6$W?^y!=*L4U2b)w^SnlL-97#pYT zJ8469=<--&!f*(s(SUa*ALEz)5-tcnAl4v@M8ycvL?Nu+H1rGQGL4&` zADR!)$Z`;gy6QciF#xNS^uqIR+bGxw_(4PVP|V5Wzkm$jNzvO;qdc1T43XQrk?AjO zG>Lk^+0ZPG2^Woq$^|5rXcxrBSS-6>-B;^0y4~!Yg&1&_5SG`8@Qw5pPO^xS_z+yW z3=_zKWBtXh#>c$g906wu<>@x(=gsjuu!>G-5!~E&iOLL(G##;d$cD}N`M1oqz-10@G$`b<1P_0wHDIK*$ zpZ`;e!Y)2lpDAcypR+kX-;e9OYuM={FKKG$pzjvqSpPewhR-8i}J()BIM%ZwR-w6JJq+Ms1HD=p$yqdfE9p-v-vL0|sIopR@^X8Tj#S02I^?S3wHeZ`NRM>E)_)dQa-C z%0RBBVN1{lN!f-0zp8^CORm6aDy&mQi4k?`?aEnrKd5H*)BJc{VjYlWQdq3s^EP@; z2WWThM+m+ZxPm8OuVRNCaU7w-Vg{D*v#D#@4@mTNf!DYlwB?pa4i=af^(kVhi?0)o zFJKu;uZtLQY)V}N`Ph)P*p#wnA6tQCpmm;>?3AY}0%Q`}O%T&Ch?^+{=-NvT?Pr8e zlJ<}fD)2dEX@m91z)sGR7ggK0`Xn;}al7HS+E>&v9|V|4xIeeQwOsU+$sa&2zi3j9&VuR+PqBpyKS_aXlw-zfN7 z6s$%|&teE#yhkTE57+Kv)p#(=QE`BQBad<@CitOG3w^hxKEtnd$_%myo<%X}8j%wM zoEU;qaZ!5>brTs_Zx<#>^7Y$TkHCuXCEQ*F@&4#G>=CnHmFFL`7;7-wV~83%YBIr!){in@^}}I5 z7szB7VBV)nFEoMoN2kyn1$WqP3Hfu{S0CSoxHEYPq8J7jct>Q3?(pE$fILQ=YjcUd z1o|t5b0a&`tPTahqN^nRg^`@ZiVUzh%lZ@2XWPYD0e=5WKO@ihTcjx91n&Tyui<^V zwh5$t@V(zakY?4jHMF9UcDt32P7m-_O@4nq6|z(;tbny;PId7Sm)|Y0v4^Brv59Nw znStFPzuGUPKbGH6AXlLH@*ikI|1dN3WnnwmY~Z*e7D8QM%}ZC`e`@K2_-H=H*Plau zw)YS6eEKuEFxsa14JSA&E$y_nqeL}W@4=!p;_J9icc7}ICw;w|3xtsxuvg;~EeR== zj}J4wQ-K5v>GfHa0;HOKGw~vRLWB-LyXpNT>zwQe-v>zMy6uK^&9bp|up6`|3w1+T z=9q!6D(X=Y)%>Yq<`O(yB$ ziUZaI-wxu7=+{~?*r9+Mc-&o9Bzp$HIpXu#`*y_L3{G`!M&WO!7YOxKzqrhoUI4M0G#i2Ot67tDh|D@84 zzC7Taqq;eqjsGx$3iOwjy+E*D`LvD*^kqL@v|sycfE>U4*0zqPe*P>N_`3@tc+%@K z*Omgm>V9yHctER?zlF;;|3cmY_#@~y0;`go$r0E8d+<`1cxqr5tN+e`Iu%aQkX#EHx zr1=29P&=!UB@dcnEu1rD#5FqeQ>bOILNcGH>MOqD{~V!)v&$}raaf-LRBz;Quh^tZ z8gKAs%F-8Uck=|50nTaSVtefJrT%ze>u{FV%k1-cQgMPd7W0%%@TJcioRJWB&OPdE z=G;K)>d$%kH#zQ}1a#1TrodYeZK5;~9n&#RG_IzJSMhguNTFD&4pc+-k9U-S~W|{^A$V(5oKb(_;SKA^|Y}MM&{L zPOASG@&dc@D2E&`ySOcopJB^4oXd$e=0WttY>&t^-tn_I@a8kjinv_sVA>&nJ2$x5 z{+zLm0BL9Cgh=YFHh4Ifmfo)B(|>=y0J9K3E0LrM{A5{V6if3Km$=%$4f* zja7Vc0n|4?m)EfTfN%%oprf@NZ!8I!NuXtwFCk_q8OXzfn!qa08f+bj7YEsd+G=LP zr|7E4hjqwoh7$Pk9R)bC%O?=NqwTe27x3%rqcqMm7Q-JZ0(w-8$V|BWJ;X4x&8!WM zcnzmsAkT1@1(#HFeEBMn*n1U^bhr6(O+bb!qvW0rSLM2DUobmo?E!B$x$TAm%rDc;LmN*rx4Dr$7 zgF3eA!AP?lC}DT-HR2<13Z=C;W^0D87*0_)&^W>xdx{Yr-diQ1<|Ui0<{iY|L`Rfq ztLEzu_yvwiZ+|?WnCJj1D1$C7$Pi!NGw?VnTMd$fTkV!YAKFEl_;GMrgN)^bqjzex zu~O@SeQrC7a{nUZw1lW$MD9q#2@cEbBJvfcgcVFq( zJgxu*I~lZ#dZeC#^#;fljIECq>KBnI*dx|BRlV5Z+OR1BrCoHM14*46&Wn*(#ZwGl zK`a`qm#OeG-=9`~k)HHSo?%J%+<6iOghmm2gv`b`Z6<42c0jrfRn`jyo z$$cHxBV8u7n4NU&^B3M72RTyJ;`|4Wz_X0~lU-49gO>@S#m_jRX2qx8mjgCdXbkUH zsDfCvz=tBoggiaQNfrlUx-d^7zq<88f)iln7K!gGWb;%5{wSia?{Nuz2;TH z(aGfoRt{uiS!vd$vvUUQ6&V$QvG#)2qyWi0K3`jP{wEU@kSkwmEL19-X@@;igs}cu zjpuzL-wsAktwmu~ePTYagkR()f(2Pse+5?MBFouUj%Tw;Secp8!RC8+f*;`YdnqKF z_q+$h7g&}3x2EE`I2lGl&RasC7or?Rjt5=?OflsAiFzXgunekJyeGmQ6wU?6ty{it zwH|ofmcZ$k)K4oT#H}R>$i_SbHqBwHEyFI(MBt^t#a4Iu08L5SVwDp%O)d}oDj*qx zSK{+1ERg4gGD+!`@9~p@eU_$lR6w*j(jGHr^Z;vJ5M*`Oioc}JfgIi9j7;|QIv*40KBXghu{DSg!QEKvREW8> zmjuYTNOtJ*7Lg)OJAmq~lFum7%xLllGR&Jjv*L66R9u0-D@^0(*2msF5I7N4^4?3! z)AGW@9>C;fxnJe8?gO}eAW7$;xL=@`A8*jo2a0+)F9gk`h9CkxqwWH)t^{eEz4^~uX=!~ejv>F_&VGjGr#Ej6TVeV_zzAq_c zl6R~C|Erkc=lG~E<$@@EzQYp5dcs~{0` zBP56ix$xnV!gD_foP1~1Ydg*wO^gS)!GFrYIN~_fhz?fl*9ZD)no|x(pk17rfTc>bufnprpntCf*F2)1`h_jb2gEpkijOmx z8qz}pH1tuhNLn|GbS9vKt@b!aBSyxPgS*A*i?imtM%(WJzIijvnzMh|I7Pq$|7In{ zWh$O+AF>&=_<0k==D&5YliHRrnTbBXgn_*+sk9)*ch>9`pn{(|9*>?(2v-Bo9tY_+ zzOCLDV2wHz7u0W2#?$-(neOs!T=SwH9hrcA?)2?GH4bH`7Q`tI9b^2*&f7n){P$~q zA=heR$YF%wn{7-7(?J=69O1-)t43Po#4jfR5^GHsPhw^@|1@x)@*Q`FeA=(4JFt_B z5Zq6ulrGuAJ57C;@gq!MtO?`_i?r=m*F5H!AU-0F@TC5*)ya?mU*)TO__3g{OAqha zyCLl@q3SUmtk;kPhDC81t6;r1Mcc%0VDPHVfLtN>&v+N zmz8TC{h2h#Olwd&Urb-Y+y-EgBKDW9?%m%1{ld+iXt?_CP3S=Uo4gFkkH#)xOUOY- zd)2;M_b*uhk~tT<(^%R2un3U4)t9WEFL=7#;ne9brj9-N=dBLl%NVs)^ld8(lDy%Y zt>jlO8>&zQJi#P)>F8A7GO%?iV-xZ=$D{^lLT(^#{m?zHTC4turOt9;Xk?_d=l~_UG_@;rkGIR93r%h zE`rY4_87q5HRGUCV|8;E4@fK})l@bQs9r|E4@T&m*92a22L{&5$TousV?!S|@N~S$ z4AFvPb>2dTc4;SQN!neu&+XIPpf9HpzsBJqD5dRL} z<^91GGoWD?Cz_{bAjdv8kCWz#ch4fv|7k<>PQq2bPhGpdbEw|-j46Od!! z(umc=(1j-8LU=xV#p-$zQIoupVUoWnl#Mgp=^ zW@KUx?rZ2^4YOD94nbHuwN2ojJ(S0fC%iss`vPdBZ#dfSOLEUbU{&5WvGy-d@y!v$ zI9~$Y%|77JuM2cg5dPxt#}&%H12zYpgTF{$R8SG#@OJE3S2$r(G@Lba#qq0OGs(MA za0~E5zcy2t7|(@3j|82=xj|1MlsEZ{fgW958D!IL%U&~ff6|ue{nxG0lUFBygd9tH{%5vHAmJBI9luH z1Y_apd)QSh?pi|5F7tH_{d=acI|bQ~0Bk^$zd!fSce_)(@C8Iq#A_jvJHEAK179V@ zjC9RJaBc;_4A`UU)psJOSO@#ON&FE6dn&$uz+Rn?tIJJlGdIlS(=(x$50c|e2s6F2 zgp<$6F*OD!{%oY!jHZBAaAIarQeJG&WI`_hx1*=yE=AHI@dKXa`1dl-9VRma>=TLQ z)3&M9{tN)uz5e`EKOrv*^FR#yUg|~5>&YQ$VB1~CVH4Uu@c?oh<@*yA$+V!y3@n3z z1@64aS^tGoKZ=B=_FyZ912StdB|2+p)ksbUJl$t4WnU1(S8D^CL%xWM>+Ox@J7C*i zl7`}@;vNOOZK1_*ClQ;esUCin$@j}q5yUQnGwMF%W}6Da{bqnS6y|&p41ZUe0{htm zZ1Z?p`1}aS(wu(_>37yO3nyl_3eA2_IYnfMCkae4wlvBk_6AtAp2R)V%B4_YUuxz> zZSmc-pQpolnk=jC>KGnx4Bj0}vc1(KNN|Aj9Vs54b3>dzI?(-2aC?(0ISYrAqubH* zOjPCgZwoYZJX4`~YenRLfu?Xnh*bg zbI3S9i2?TR?$WZUfdFp%4P=UEe%b9vbToHT-6DCfN5OJz}jwiM5<4 zJ9CmJfTrMKE!!7i_9@hq_RTbPWzNxZ!P-2P^{jofua*K5%l3pUJi8-zC-CfOl|OzX zDlr9XY?u{wg|1s-1?FTdoBS#`Wj!w!-j!$b@vzJRc#D9&s{QNciu`wLAWBUPk{Qvp zl0H1_@^g4AeZ}FM`?^rtjlUCG20V{|oy<0l&Nb6;UK#L5QSTAzCDz&jdt1(yP!J&? zS8E09r6S$qFVe-B5LnS9>bQ*Qy%!S$sjJ$1e{_GVIoQ9Crwpyii}%H8a7L^veBVF9$0z)q8RJP z#3Wcz@NyHvN3QRy1K#R;FP9{3FPwaXH&5osRj75MLIZTL3Y+Gwotc5dxuqQ1zv_(Z z9&QHDrh9WZH9s0F52T&Zjad_8k0)|CBl3^MXD2^jz3-CCYx+IBe zigUDq-3Wtsja`b*+BUGFR71wO+3Z{mb8anJe(0aRAUnJ(_pO0R=sV^r8%}_g`cqNF zvMwdCS9epRsBz?ETmc&!l1}^%Um9`Gu)0z6!15sPFNi%Up;XZ``eZ{!RYBDVhnhVeO_~ue} z*oR-i+FEK37z~DpatJ)R z^;-n7GvCUra;{uhLY~h!lJgZkel?;4f7GXl!p4*#*e@VC5r^3#ol|}J25%5ex137~glLe!ZpiHFk9ESEjR8CkEfVkDpKeYhz-?(qetw99#9*b990<%8(}ULt=Xyjz@qVM6_S#1{7oIQJ@bMT$6M?jQ#1Ki- zw-wa@te1Je??0r5$`S_W)WlV9_hZzM66_CsBQen$f?}CqCr!jh%GnDy0&)w-mX7v{ z)`|_p-ip%Ar5g-?NCq-mpKF4he>O=BVYPpguj?U6g=Q)+9?VZ9;JeP>K}68|jhU~x z-F7j|sX9peap^ymlYneIH z$OP=jcoLR-P5$3^&tR{Pn_q{Cn$=AMG3;We^Aw6UpCaJKWVC* zuzn10v?m1BDvkL3bPiT3=DWoyRrAsztItH|g~@Z{FxxQS?vhGmy=`H{z+E}HaFu(G z+&e|#{NMVGf0*y4Djsaq z)#17X|imS}QBkno?{?~Y zm`}S!f(%Ah>w5W0atD(@F6hrCNMGN?I=ch=eBr!lUYPA{2iQsEK2st(7kh?%BCK}D z%(n@OYXB!$>ippyMqLwMU~@jl@ZMT0{w?qhcjPjGdrsMm8Bps&=U>HGzUr_*&Ja%H zluXq68-vgODFH>?9h-U+z#9mH{zCMX{Spf3zTEyf7b14QvE zvSgm=a&|f(lTxkGdVA#M3+CMJpkjB@7N3lRx%%vlWtbclvka#sOpVi7hO*#r2Dgvi z*t_f(`Bs4sy)N-Ch(M)dIMb)40R!s#d_FtSL1KA_Tzr_p=L7PSmvPR5G_YrC0#8?1 z7b`SBJbJxg?yG#ve2~0{(t+fZ)gty?GVAwIKpku!N-GI>>|kH&fVRz0xE2Q)pUmGt zl)uOAYaI5aIz!j*$s$NH=;2M#>k&4z5Sb02zTd7Y>HK_M308C?5)w9O=9s+(u!^3L zj?&;OJLbT5zgHel>Zno!;Jc5+FrPU=)K>>A@P-f>nz8_WPs-=!YMQnV5CA;WXJ*?r!BL+jB&B%r8{}(J?FaCWgG}x<9 zZRO_4sv*O{PWHkqHN2h!s|EaTp8Q!iIjb-ZplePxtr3yEQvh}&mdWK@ltMb;oQvke@5Y}CrpFHW!5~J8VaSspSio1c z!z}A0WgjC8XBXanST>y6;1-bfdVS8HR#&sQKrZE#k|f>`Z4pj_bDulxZl_uh3+ABS zJVjNhch)xaq4IBQrHtQ086efR7D;OSPzNW0edefo`}6so+v-3jlj+v~;Na!QEwDK< zhZcs6A=GOCzZ%k?4^$~N^;e+#4t>bs%O-f5`@(pEA(H8kObd3tpcRi6r*v?M3eG60 zwRswe#g|YZle1B=@6SyJdk8GUUWsE>2KU3ZAfm4g>!awX)|&{>g}=yZ-Txc~C&Nyz z@XH;4?sL>;0p5BHd{fyem7of+giBZPyjYK$T7hS^v@K$UzKXI2Uc-4FM|yp=%7)A> zWos!J;55m)WRzN7Yzry`k@BJ(P|Xdi=uq?5gak>HU+1MTHsH#N^7W=hq3|@Ya<@ z#yCHcw+(Q6N-6bP)%SpS|2qW5@1&!9g7iSz|G?0?x=&FE7pyp1zyCGFsB1@jp2RMhN$=cBRk^jY@KFNnw9wxc< zc@%JVd~QD!u?*~!UBI4=dkVF0x>0`~^B?TtZH3#InJosNn&_|Er(t`gF07j+4`LwL zX@xIv)`q+^sbHwx2@ZH;KR6O|4{N%upo+fsmv5Jj(-%00_l<=);}SFT2e|+ScD2z* zHho8WVC~6YYPw|cJf#tQ_hs1rs~?KMhUeYxGG&LP(r=CcNOk|o){-+;5W{nvPOp;> zA(1n$0;H-e0~55dN8w+vR*^wDByxU|7|wgb(BM)@l={91U>j^M-W&IdzeEB~(n;UL zxTLPGY64dGrEJmu`bq7;?;1NFmoOFvy0U-3CYe&a zbhG;59jpZ6{MpDK$LrD^WI7w8hcKFC#)Jx@e{cuOoR&r!SkFmu<>M}kbxRN-W9ORS zRBS5d8?2Q}|HYt}TG9>F?a^v3{LSuL^;@XYe6L-s>htm!)&D*%Ud-ydrgaV#sH+HZ z;V|Ly61f)665>y(oX77UIR$7lVr3j3jM4hYkXs37hbg(tSx`;)l{mzobIwC}0=D>0 z$x*8f>i6IK$FtpB6|)(A_F132IL z!~V4Q@{zj<&Ja{4`pm1wc|^eJio&YwJj?B81m8V~LBG3|FFF)tjTSvAo{Gc4+5jKS z@l;Z{VY6J=%fm8nY824z8|M;a1mR^%wPO7;I9cgi6@!51A3g?XGgep=k2XaZDcH+{ zp6IrJsP|F>U$9&jDNDchYIy$pvweCVG`-{>fRQG-ciQR6)A$YRqO`1+VXAdf1#I&D z)!fvKds2o|)LDG?GOueH0R{V8&I-0CWIEa$RD3FmO;EH#r)01iY%Bj1JCH?@#_MqPNa8uo5^Uo^qi%woEkmF3P`Eeu%BNk%BV< zMj^9ceMT?uBWSUlDX7DlcQEF>o9fS8=^&mEfJotnp53_vwtGie*exppK^a7GZVZ-O(4?`{#G&XE1w-AT2*iCGY@ z1g(v$GWwYL2)qn+mY+>?l|^^}d#mJ>cn_&@Caf~OWAVcbviMybu+B|Uf6qObcTWTn zNy=LGA>IA0PvCz;#Yo5#(N{4B_)3@XdkHmW`!QhmIr02pzVH618Q$)YgIW5mxA=lu zC0Na=>xKQ1HU&g8-ftg=?;A5@K&ER{x@KSekj)W5s>H3l<&f;$51i{UT-#g5Q8AXG zU9t50eUg^uvYKHCD+g_XP3b0TG0yUMhG&lg*QVOhkbghUMYCP zS=2IJe-l}QUw}Q;=rj`e)HR6(Z;}_C(2pkm$Q|&MK>0cpV;2bv6J*vyt^@Xn>YaCy3M6)7`cvxjp(kkfn3k_c%5Y4`XL_gl44&w)S zci1TWi4pDRO9Ma3*28@}exBSSJj2}|2k*WN$~2%leP3BH+3%5A;7mQ2L6Ogj8Y~O- zf|}O$?6EuFg8*klhF!&;yRkkA?8Z6>;~NNRD`9|Z$S7yG*{=`2IKYI_t0^w)FdP2_ z=-OJ6-yi!E$?SxTz?Iiz8&T>FXUu7pXl_DuJO(`d|DpG5j*yDeP&gep%IoQfP@h;J zDu`all6RYWx;%_HT3yi>v!sG;H=XL{o;+Dkup`1I)KCJXs zUWQjq`W8h8-gY?SOOm~T^5H$VQ=Y4rsCC|p0@w5&eBu_cel)`mJ-!kb#DOAybnJm`)(#a2mr~b-fdY-csp$Ytj=u$J~aYR;zMN?}7L% zpxC`2-&ku2;0yh+wqg_?v&KN(Y4zzJ}5&J9s7KUIb*WYZk*27-8x7=Rt5SVbAL^zwCx&6*y^ zz0aIv`~Y%_ELOy1kTpf zu#GM#Z63UDh3dw4rp!&l!CFze5x&M%RpS+Q%dQqmxj1iqpq{F|=9rTRt*!VrWL~$X z@be~>Q2!a5B_z1LCNe@`Iiq4@*P=$5a6<*cKLYkSiOq^yuvX)lBxty|)JcJSRFy_q zky+#k|5QP^>!WnND61BDW>*(=?ov@-hn?~Z)njU>w5xW38pVdcaY?36cAP+Dczf?H zLsEO-N02pwZNL1A+A__84CwgY-arz*0_)GqRn|UYaEsc3H>x9S%)W|MO0bh!|1EO+ z3yH;c!MRl)Es>7CTmPs4x7sl;*{r`+m7vyNnoak7lGP?pV6E`qK1!tf+a-AVpfN;qHlE0DtoB9ru7N6 zFrVNw0N&UjESEd*(2__V$W~0(Q!aRoePZK$^M*xFlw5+Zm^JHkN=phb+%7 z-b;TY4S1s<)!$s=3Dyi%$ZW%n@V_Lg3v?k8Bi1@63EbHIg6{D$J#sms>zS=w30NA13hvK4^ScyfNP^H`d_0G`4d3 zW`4aofail<^Zb;a-3iF8xBwR(N9+r-29eOY*!=fWbmor}lClcGWuwfnOOi;4|0-%;ZnBBY#K;HIDw)iC@l_do2ZEG3Qg2 z1x=y!LjhKfr?jnR<~|b}$VU?6w1OJ)r9gm4_%<_V(E=$tB@hYc*rkcx`u)Xn;3?&p z`PsNtze0uT9KLXHB27NF#=v#niKRvkIUT{L!cw_sfpkBI2f5pf8chBE{m$eAKk^Rk zGku(76bNvRGhJ=0MQMMDFzK(d%Qf!Bur=_$_jHBncMfaq0XAuxKDB*0v+i4fpbC`a>1U-s)d+Us z`wdp=!y6F|duse?sT8Z%r1JonaAvw|KV@w6c;G2%7ziaZ{@0JN)@!9qP zrw?)cn94#HmwJHH(z1!;GP5Lq*MKjiI)U~tbU}^*szYCANXBu`Cm#?en;18}lw7g) z3o01J-9|xHj9m~a5ShDHHl2uVm0$;-fOs}TjXhKYxGuG_Em3i_C-_^VV{ zXUOtjUTfABkPGm^S^nS=RYt{vgSt11^%<%dqU&(5pYFC9t?8ocdSKkR;;hy8UHv!B zTqT6EFpYdHS`h2dwfqCT2zDPdR5C%k%JtXPX-dEsI?D=4e#Ekd0ed8oo8%xayVEAv zBh&xmhY4wsx(U1O^7`xPt~jn0h?8^oW>9S76G8%9vP6yK#9bK=Bw$zRt#_UNJDF|( zzVO@IyL8{bXNLDEGN-~iwED@O3-TbHCwo-huW>@50wLNylv9vXt%0c0e^_SYylpC> zzFEmm-CS#TkbXc!vNAWC>U*fk0^kiy)02WiJ`RR~_x)~+oGYi@J{>&q{8|Gw(6{r_ zL5*=c21~23rdc5}m+#kuZfiy&AFxL^(nN1jSbQM@G4?`LuisShaDM$jvkp$>a|QvkV{2i+4rZmRkK zo|!IgR=IEfFA0O)*G-H0z1^-A;N2cZRLDv-jCv*EH1k0rayEEm8tSSA^TDQ0|H2$N zuPvpVh3zcU@O$736Jx~pPxCcc$rWkvzpE!5tXb#Q(g3vCR^G{W5n>NJz_IW8%YME;nP?S&D3m?r4pPL6 zj{#OP;M}~4uv|)Ru>0PR;DTWfgAkrR*psBbV*ZS@2zVK1$-_$v8Rmk_>k%U*6+Wp% z!L!tqGh^Cc=lus~+Ny{ATk_%UmI|z?s$AOVAM)jW!KdbVB?P0C?F*t@YtPX)XDXfp z)$FI&>EwA^$>|GxN-YSgem;%7^{|uc*%^Mu=IIQ;9<5`9-dCu-S9p6?c`QybELD)< z%@9|_YFahJiiDGt*>CGb;Sh*=3HGQ)WABtY@tu+X`i~YrMQVNLc#y4}jf_ftr#m0s zf2Lh(C`R(surJ7T(QBfI?>jS@24I!tmB*@UON0g|IVuCY*oQ=jC!9p{?eCT~i_c7D zfITItBWi7r%O4Z0hBRJPL;RjcV?o^Li7!D^4ElAx0QF(%7A6ED3AO|{dwY~?*#(L3 zL0`C=Bvp}pehDVX-6C;)^536Rtt_w&nIdSF6j;Ung8i+dHE{89=fWF!%A*Xu+yy_2 zyWm_NmGtIMGvLO*85v)lZRZE0$Lyc_iW9`@FQjj%)2q9(#M}ipY#rIPpIHzht`OM@4^!9 z03t&=zqogIX;M>y{Z$wm)hrFm9~DGzqa8Xvyd$(?fd4XYG8IZQb{Cja`WTnCKZhk# zIL)ohh9xPY=tEcV?)2>;3hO7RV1e&0Q(MhMA>}v&y-cgQQJF-;Dj*+R(BZ7}iN`{a zLrqsEq=s6ey8=~23GLtW<9~6(194J%JeGTHY2|&v|DuQ>u~OCUG6{TPl=8wqlHK#* z8PJc}=Mrsm5!JviGyd2s*mB0b3Dp|;nRMQGdzm(zpwS6^XK#j3o**I_&H1&`K6FtE z_(Df)c4})FXQp7CHQMmM7vd_)0c_*vzWVp8zN}b5A=7++1vMyjtplqu$@9yL&3GhL zfX&{as(a-hNtj;Xnf;A>*NyF;CIN8!g0OxuRxkgv0(QI~^ED19y(T|^3UEXCtsA1s zCR80aIWhdck#hBaP?L?i#}yM!eV{?*(|M0JLG!lxgZd0gY+fYEfAmg*cQ95pF^EOP zQ`k+JxN}JE>>~{D7MyKr$4^YIF}ad5WmtKL=|Br86k^0 z%nYG&_#G|QDHA3RCn}45y|t;4@S!Ru@y9HSnrn&*?0(5bTH`p$ zNBDsK6|R?fT<7TED)?0Wqv)2rnG$CLPUn*hMLuH_sX53Risf+HK>r0T6=e3IIlUzp zea&&;+2S7!aW`pBF|&d!hS>?kZ4uM~d;z&r^fx@clG_60l6gjQggrQKsKXpb$5+!n zISp@R-=&Erb+;`)6kszs@QVCbp^pT$D;sD2RfX_}b>M_hd8wIE**dvv;Cu~ArWgGn zB7p=atvkbPN@#4uPXKRJj3!R?wLEVQuxEv=v##Y*iG`gnMR@PO>T=5*)H} zPYl$9isZ>>|2TrcEKr}Hu+AgV3_U$zjnPqt7uP#~;03Hkx#^2~V~zVgfyIs%d&EZ> zfRz0AseoIW97Otio534(D1H!jx>x=OWIC(kC;k_hwgVMY`=5;^?BKW~1#U{HB3cx; zE;T*uFxn_na*CAgMW~Io{~@+UY^M#U0i%Cg?rRW*=0*d6+y*!GKEu2Po&oC5?rO&0 zgsrC;-jmVw<4YUCq&f=l(B#Dy_7s-Zb%0N^kx`>Rtle}K$X57k;$^q*17!j0EPZ|L zq_LmbT)^t;@EJa-$FMR7Zw+~+`y$5Ft5?AI22mb4!Z@l4fqwKuc2m<)(uDh4IQ307 z(mFW~z;$#=(OUH-xk-bQS-yU=6ptEZ9mq$oD9!WF)6lL9K5g0F!4&;x2eAGu))t5T zBswb$cwhAA6n?%_RWt*Z`oRW_Ox{!^!KtPR5_}^Qb)&@reBZYX-Y;L@G=BqjoT~UK zw_!iT17P$Ia%P2pV&1?)HNWn4$H%Yku?l?mDpc>LI_b`;c7bL%T}1`j5?HMzI0k{|Ls1vFNu%vtX?pvE%C_7oW=j=L=7l zW!_W1ENll%(?9U?D5m#5Eu^eaxCSabGpC{W`HC)mk#M?b2`)kCYn*|9_B zj9)dH);Zv*?nQ3MJ(-9+hj-O}uNXbC>>72*V#>&gvpA#(SfBi)2Zx{Q@6^W!l=b)7LS zFiWSr_5mLH&ZM}`_oup`7V959H}#Kky{$L!&{H~QeIHlvIH1m$HgD(k1%GjnZ@v<}gWX5vo!Q9#e&i9@Gf$GWMj9ti!)h%> z1Wvj4p`t(~6ZA8`gR1;{`mJq`_7>3#{aX+!tYV`qv4-8`-)L%gK+_X$_ou zc~60K60AApg5(!1T8npijz_^<9T#prdngh+sQhsk5C8Leyi3HBE$;*1mbQ6y2Q zeK&ENy42Y7f_;nU7wi2^|L%ze-Zy;bmHcJ1Bu;mT`UbBbm6!`*55oJm_%Bb?>$L~< zN$YD*W2ShnU;}KLXO$f1NBuJ@q^YCD6qioBOx$DdJ>GH~xY?&F``x|$xm zK~7oX(jg8fiz^grqhUB6NO*fX3BcYn`j^a)1&Mj6?!L)_x3~Esm{2W>Lfu_B$n09+ zX?V_GXiJ>zfm^V57|$=<)qe%ofQqY~ou~bh->d{r09WDm7AHx=B8D9(S3%Bhc8fEt zt5~Lizia+v?k|YXh%eCYs~fTkX4uthWp8L}@^u2%_TsVcFzwP$fmPF#Dk4%)yi0&x z70R9e(qFC1#{)QyIJiutEha^-aBd5+5+9kOhR+v7?_QPEoX^mTwE_12ek4&COP_S6e>X%QHse3)o~dWMuob--R=R zUHAPvAR?O}(WdnbyM6 zph8ZuH8N(V{L#P@lkcI@h}7Bn@`ak@f;F!(cgPF{?-L^4d7-7p{zVgjf=0(xETgv= zIJ4=linH~4hdonxwkW<+m-CSgKY{PdUZlFNB9z<#kc^8hTB=&5v$RmZ{jB3z{p1NB zfoHby`6SzbHw0MUSR9SGBLiGm0qAQ88APyD28)*p`fntDy_lqn8L&lF8O`!-thM(6 z@v3**Hv9^1&KLj{EPBIKn(6XA)H(=D?Qy?-*^oX!n`RlwiKH66d4OkT^?CN!nUk&o z?9s!AuKb~FJ%zmwQ9{zuPNRkY0u>BlLITCxtwZd9FMQ6Wtd2iqKXxFexQX_;#GL4E zs3_8`R(lzznoTTVnz7L(&6#=L3o0#lgQTaw>SuZ}$otnq(JIcA^^Ab1BKoWO>+@T( z2(SzC{h`k_-q{qY>sT$5VZF>*Kd98|*`X37>4j;qOLt&zq&M_9m%hLkGRGmjOJc0a zfs;GNI&X-;x>v|V7E5ug01xhu1*wW7ErD!xd5D}Kg#8IQ;3;2~L^eMgdXzsPKgy&->O(<@ zKor%Q6XE9E6`uw80#U|6b+YfvNWuGxHrrO*xZ4Q4#j5av$VVzmVNf9!tzWgm#pU>I zLEOmaHAO-uoiZ6zF#gz$g^H-L-f$+@V_lOt9VU@M#V4F|Ffuf=xzu4z<_dU%ckw|q zVGgzLlnm|nBEbn|KSoMEP2g!L0rLKySN8EWqM?L!6|5LUJyELC&A}V_9)5ObDx(n# zJjF^*tsu1Qo}rT1;igshDpbD+!2ddl=CaYf+FhPe6# z_+Vx?Ck_t8bT;_BxahzOplmrsPam2TnT*X7 zSptsJo~C9JMJi@Lcype_*d_XTc>_;*KDhgq1C)gLmWSEX4;sPQP$&OZVrTLt>Z; z#ld^m?$m}=@ju2obu=eq&G$v@1mjJb+jr~GL#-Lor0f^DPlzT>gzwa1;r=nt{R`rX# zZrItRa9L$jXD_2E?4k>>}{YWnA8Jt1!e8jx}e{ui@#c`^%L z)1WfXPi{(Yo+epJLEI3i7WLSV+$&HwFKMrJw3NAzpaN2Nn7_=9mNx>`NIaP;w!LiQ zRfJmiL;O_~-=ez#RBWR1+aZ6fbUB~`@I{$I*=7%Z!&{wU?|E8Fa-mX!yzqy2%Kf`@ zkK}-RZeoaZ{v|0Na|I{(+(^_*|JKn112G44LTRX-Iq+DJL)*L}>es#*$`7n_zIqi$ zBKljT0mJnge?bV+jek(Ty)@G7ZB8cH0Rag$d+o`Y!BU+OV>GaGA?56;u-bf(qrM z-#E@@kV9R`F})Jgv}ou;1T=GaNBX4KH8AO0ZV(*HV?IMJ3J!QAPjki2H0rh(pCx&)9ej=RQ9i>M^onMG1SW z{%$y7@P!JwuPVYJDe%_)r%aIdl%GDFZAUD+tMFo$>@2KbS?Kx|1}%{bz*5`HCCEKM zrcVxHY#U8PDP@t7uW+7-_s($j7t{<1J8jbfS((=IzbJSr_U>zQJ{v19L7ni~&0jHW zl})-}t%T%rO9V4~K5%Z!WISA*P4dk6z$RaHR7US$4tY42_Fmoo)J+X}|3I81%jW(| zi~V%YpuQo5LC;roZ7m6SDnCF{te0L)!h)L2riJ}qnkQTl1zcloRKhIM;S>XaCl%rz zg8gcb9qK=ae^{L56RJXB2lp`y=^+;WXNDS~WuR^BAF@+%8Fp|p@j1AQOf(ckxo#d) zY?<~4)U5vA4Btc(O->x~cq3OA+3I>7*06%L!u)snX6(G~5)iM7!P)X{S=$6+Bt{LH zqJ6l%Zon=GeBkhQq<5?Yp7~d~eI6Zkg0R3B%0xuB3=_ZK5qRhocqN(N8jr&6q$<$8 zDaX=KgQ&05|9<(Dro?KX9^)2zRo_=l(Ez&=eS$#y&9(;**1cCLz|mQXBpXg;>Q z&wCGS;0x!Wbr;@fZ2IrU?}2$oct&#p@2bV7?%z&}Pdx{o`SAM|8~n=0U$D=*4l_z% zEt-dFZ|%)lmDptl`2xG3=H(h#i&rvGw}(PnQS zWCnqC@7e#pnU8tRGw>rSZIzx6@R9Z)hy9xMcb3(Nz(L#?2}v35blDUXJXIg_52c|| zgYsbaCHb7^(e8B}0aep5z7qRQp~gJj@O}4CZ@-h34FHQCK@~UAr+=~$-e51t_axY! z-Y8%f45vo4K1;Qu0~rTj0@u9lru&N)06}eSgiNP#_pr7p)LV!%oJ2M~d|xyF2BsS8 z-x#3!E1E+IQAq4%0gObG?)-M*tghkx4ZDob{`0tV9f=T)ya&$tuo=68XqLY^FPhEh zGpt~(=F*6jSHUxT4R-&!El07;Rfq?W2k~&e;?Mo9ba-NNym3Z<()pD?Amh-?44>D7S9-yD_n&v)~P!hV8Na z-CjFXZxGa${;YcJ%&^l(b{NAM9)|5U5I4RA&)mOTrdbJOItODvkHMVfm4W?j$;NSY zBl(;KeCG8nefvo><`~4-z91H3Ze!tPg58h#@~}mmNw5m!GSl8m?)ttF0!{}u5jjQA zw6*FGYG`nOdHxeOdJfgkj(4TMGrD7yAHeO_XNv9k)IJCgY?5+nmwTz`OCy2hQ2Cc6 zxq0vK04f1Kc5eu37EU77~yK)fVsgyHT!)Mc~MFfb#D!Dkz#%Gw}{kpZ=lACp3+&BYXrcb+W zV8JK)AmFKL(hQ0XcSQdHS>qi=+mcv+0R09GH@C^#2o%z`c2HH*cxH^y#+7;4`_CS~ z`VR>`@A3lNdDF2lsa7R?Zy>7Vyp;U@7{dn}U^j==s8gv&Y76y72=$G-#Yj&F0(cq0 zzX_+L`fm(b8}V{Sg%~Y_g)`Txu9q<;D5XgTXvDV>TdBIbP-fU=Z#cV`wSw!dfNPuz z8ke=|`%MFH4XN)iP|C;kbErkb)z*GF1(kEaCM}apt|t7E3kU8b%x8y1s^h=+71TwS zrl&oMYs>uuzH8J^BGGFeFg=`Zc5%Xvb)Q+=0ekxLLB3Dw`=nXugPX?p7k;`)1emo; zb%#T0%E^-eQQ*e@MF;=B5DP?6oEW$W!^O&aK#b)IUJd?$?(x{byD4@><)q!E08R>X zcyeV?)AL9USRLYIO(9SAGnnA1e#Df2XlbXy4$dCs<(xLRQEY_mI0^FsjZDyreAfomNj2NkY(T>eYb$*Z(>U{^=M zND?i#uYQKN94m6l<^?IE5Y$DnX{A2lS6bc%$la}fDl^~E(`AGA-Tp}Pe#~DHT7Av}lSLIHU;BQdh zpi%K1sf4hm0*D)=zGt=ezM9#G{m!l4rMNS<919~u)#9Fg*8*0-lQ@%Qa_%G)Mg_bOYTCT&8AaiZvV1qtNXrw?A>mCYj&!LHCBBymswT$O6TGIiL0Et% z-^FHK_x5$z8uqlh*rz~vXPsr>gD(vCJ!TD7WCC6`OYu4X*rK~Ba5nKsd>%gDhiC)X zHDkS-=(<~ia=}{t279P<+JR{axTwDHW=Ct_wyn=pZc;{IQ#7L$1Bsx(`^E3 zllp^!A}RNA=^NOjc@_3kxvzO`;2maai1ffv{KN&3-_d`w@swrqVZk1$W`=%7+~fQU zFp+Y$Lq+p?Vun2k#BaxV7jhB7+E7JDO18_Qw}21+I|+qYEPpT zfIXLw70BwI`S=ZTceaf*0s*j?*kLOx>4^t30S3;0k8{6M{nzc#+E*@o3kJ1c zGQc_d>l3PYT)M9i*oNRZ?W!ow`XT|IJO`?i)c%+HD9FxxF0#R~smNa%0d_TvX7Dhb zaKb6fT$V0TMyPIA0iJSFPEi=FaJc_w81Yi;GTuk6dSF+2C5j`?{9!H)-eu~9rSL~V zUU%?RLlkRkt1h=PfK1o%$w!a8A3_QMnG^aLwe0Z8x*NQ&g`C?%isG_75Uc2{X0+-k z8Z(?`-jLsfMgN}U0=1y%FSIXlg&^_`s`0rbxRoYhf8-j(SlT=Mt(rbF6~ZoqAyd$$ zZ|YbE`RG%`Qn~5e#!&Fn`Va0)F1GB@7ySHP3JG!x5)F7L2AY%pP%EECz{_6E#(P!M zzexjFPE4c+lGsZbYv6x>D8a7^?zTHrPx{Tjl9`{)X*XzB*oQg49YQ}N@P%-j6sx0m zsVhOo3A^IpEK%bAFbS|&&2auGfXodSv{;dn?3(`t)BuJm@5bI_p^C3BBMoV3&X(;?Rm5ZlAY|H5+jqpjZ5?)kAcSCaE@v@| z1{gizO7`j=MQ*ZCx7Ju|FTAhe)af8GvgtxjM0vmtPQH69Nq>53 z3U9y1J{QCc>s2P4O&Mt|n>#v*(O`ecb*|sbOm(#cPqfFI znBn2{;Tt{EEW-QG8qewqTCWpQ<z;5!Nwq`a9q>y?925ycps^CHJS^NchYy@ zeR~uSoaN~&+60lXS)C9qQ~Fa7{}e^SUiw*Aps!#DAH%L!uK;5}oWF`p?gBieUk~3X zUw>G40BDnl=`BC>Hl(0>aK>}Y$aAmSh7%SXUMgNpl#KNcJk<;5epb*3lotS;Gv=rJ z#w(%W2e3zV8T^GZmgJ}!U==>_tHK=@Lx5UR-u`QU`14%#2iWsk5Xki!(s+S!V+Pt2 ziko?v3M;Pf3JXf)&+edhbmiN)^lW$a-M~s3*jd#1h`PNDJoH_B%M@|1+JMUcR#_BO zl@Vgnz}chbZ^kK{FMJx*_Iu` zKq;vOVyy5cis!A+;WB}!(hL}3bewiZ@cftK-j^>(e?(^kjPF%)iarlQH^3f~srHI| ztY5tpfE@Z`zF8q$n=BK+u9C_SI~>i}e^VgegZboaY7CUZ0NECRpGYc1ng z(>!+zh@z;QTMgsgm4ZMVAu>{)B?_eej7Sdid!c;UjB zZ_hC%VE0PMGPoEYQx+cJefy_*o}H>*hy?uim{2qrX?YC?U>o?3x zQx^&@JY8a>+THoUAq9B)ASC!pcft=(K&2^@`jMa7_m`IotWMBgR45x|tK_g=7l_wP z6ZxLUz+$U*;qd3yKl=sm#t+MJG-oBEu(w4|ILT`HHd+N(u~EC-ozyl-Y>>rN;NmhBK&{zm=mv1k=250sQisWy5;Z zjA1H};l?pD)-IB)B-Gf~Yum}5_vcXny3V4HLn2zt^&P;I1F0=Wns&o5fP_>D5u#I*V>Zhfpc~j>Fjv z8V!}fQ@Nv9+8=wb=^mUr-_e)U)*?BF17L;_wT7X!WaD_lyVKde5qW<9?f_UFM@B?z zb$sK%xt5x{WqvTkiE_hJcr>v0xeK>b2TbG-I_+JWfa83RG#>01x%J(dQennJ^ySMD^Kp zGiXyq84%m$K_|JpD-8SwcEvavqp!7EdOg%{=kWRc<^9Hp!0x{_>Mz66lQ+Sc#X5&J zdeaPa0=vLAcRz9!Q|)xj;SN?<_RL0w{DMqS8)M*ej|o;?Pdv@8o=)J1tB)}k9!he8(8=X z-v%jt9jK`Je1e;e#r(#ghV#d89F<^HoxZ{UDzA!ORW*}75sZY0-3ZTPv4R0S#XQ*Q zkHw4X;ep*R<=Xl3YmXrZ@K7vZ=z6eYt+xTL8%^To+m~iPu-hFy{~~hZh|D(!zHoTL zyG79J+w@@fF&9r>IW=-<2u=W5a$#}tFE~aMc%y5pSjKeSW(a_7{7l@|*`v9`1H>!U z%B5|LI&3T9+%#@CWUhITVE}a`kH%(h?e3;x;4}&&-{gz-y=DfyJ76+REfsfiSg1@p zG^<9~rP=cEPQq86gJleIkAT&lCrBo7O}Y#P=<9uLgXb%FVZY)3E|d43{MWcG!1rxk zPC~ur_iqevY!?yq=RI?h>ww+wZ1cbq1@ngo*krN~XHF1VD%0SZ51n?4=KegJ2z-C; zeZA*@q8CM=yFu(2BX%;sM(`NMXN=Xv(f3RYpgufNJ)3i`q=7fOo4gG2SVok$4I;3` zB2DMMu(hcHhfR#4J7~%zhZ8)NgUxfx%lvDBssfID7u5Vv6}15-5^20fsw$pT8rWZR z6?s$VyplM<36UK7!7X$2Un&8ibBphreI;Lj3e2Iji6as-O^1rO zyZR_ybS(kAdHWd6eQ`C0?LSc8Ad2mfE#6u<3HW}=&U;ioD4SbN?1n>FcmdUGJds;}7}Bn3Aws4g2GHcwzwkOWY{Y`RYz#p&)_aUgor zdT^}RL#i2^!To&vddiO)SvGJs5%sCOS!&ZS^ZzVex0b6w68)ErH^7?^Z-o~w!+YTc z;_G+1--dH^MuP4#x7;o8%(l}_j-N!=3(f-g=Xj+UQu_(ytR^B_c89yPqc6)_Zq<53v$O0`!P{fBoB2 zi-p;MJooDI)w72hiX7MtLZ2;UP7e76HxAgDN$28koK@@tPtps@6swT(1RBbt{%9HR zd;U`x;6qtq(JKAZk_L!0nKxP!NHh(k2P9S^Mro&>KYyHnlPn}@eHI*-7ZrAP8Q3Se zN8(RGp#>hE@R87e!R*KlmntCTK#5S zB8A$w0y0TwVf8KtcAX!PQ&q97`C*e9Q9|?L`LH0#= zTr&owr2f3KjYcp2$506edtD@izx6=Kn%aF zuFzfaZWiKLG#{8u!Nm?lZR86fRjVVnf71=agG(+Yx$c~R-%X;&^J{F~a_C`cG;t2o-4i!o~hgtjAxk|0&VaLLQYn#(-H_Ji{oSflE zSCjj8Qpo%t`>2nxH;=os-u>_Tco^ z4^=6~?*wGBGvsCyTGkcj459)lzfgTvQ7Ex!ubl{8^`^eT80Txna)t5np@26sbb)`K zBn)i>+`eFJ;lX-VHbM3k>?cm*_`y<&t0B($rP%mUj5&qzV8XnJ@5o%v2+oSDovNt@ zW^Ujvd+{4>e-4ZN5wMD93n(SL?MRjtI8Uc|Na5lWtH$80f}05iPA<#b0{M-uRy1~U zId^6Ns&A>+>tWRA$t++eaUaDQ?li+M34C`*?FHYFU&D`q$FXsiSxSCgJRRT-G`g&6 zjEcv}i$W6@SAtQo2)7;C}YOu^c{2%JkPkhMYtt zN}fn{@&jaJNagZHIgTsCe&8X9%2ySy_C7-f26jNhi`tsW1X#2TCnOg(qrQEBz3E{Z zpQ9=2WdfZ)cQk6jex*wQXG^PJ_p>t0x}*W+UltiSW&cz8Y1Jc2$^S(J&C@6^4fO58EW{mM>^Uh`4*3~Q&&#!% z+*b1hzso=T)yb}Sybz$F!nrG#Nk&cpw_ox2udZ>r&e0rp3y(@K&JNe?KAau?7=)@a z9K+%Nc47a4QbG#~3!YUY3VZ#g*-5Iv8!>+KqV>%UFUU>mZ>T{c2cNL8#uvS$OZ=5g zGQ_|yn6J!pthQma19D14c^Y}9O%pZvRQUcr`!K4ySp%#>D9DR4rXx+@oHf;b<&OX2 zc6EUKRa1P2SF7N6@q;zZJ>T5Bq_#|}xA`qeA0fO2eM)x&ww_G@j_p|S{nYTuN+3fJBeNX@Z^+k|WXAj8o(sFdGpAOVek)IqT9{#u2mX59V!j0*a7Q1eJKneu z@*>PmFYS99RVS&@0`9}DneCtk^qHeB(G0Ntna;nzIR zGvE!ZP2`+K)~^+#TiBz{b!Aor(-}f`%8HPE{Gt8w4uQvs)~;c`4ijn`xP9cA!c>?t z6Yl})bMtmb)RTV;2*{{w>n}?92ATE}_9RR{8)ZzQIVIp>*JIkrpeO5k0T~R1s#yNw zzCIg*)1ZqtCHBAWb6>DG-jI^0jrcF~0~XlxZBo%o9`hhGo+R~&r}paD$l!mY%%i!l zLku|V7S~nSj;?pyi6z7viu|*yGMdFV19u2A*RyW8 zLi-Is6k|cHG<%CXEdvaE4n49Oj!lF)@UTCQsY>Q?&zBAUw@@Xw!Lpifpe6Kbe^;dB z9$X&osM;r#EIx*^>i`wx0j7u{iM_oSh(vlJC`HD?na%*`Y=@rVreCVARhZe{yQLPx zbq^TeaSr8UAADPL(GD`|RuW+r;aVDHL+)95C7Uj9T6YI=S@XpdU)$L6MS_!5Iro$1 z-|i7wa0^$=5W-?*-GU3yl<56H&3CYHiQ>nc5P<2-8@=Tio#vI0cml51i* z+8;`Q@q((pNR2ZOHHD1U4BGmf_I)pY2vDw=|9P&c{2`$OP_DyLv8aU>w$Q-lm?py` zR3QAY0!Uq3IFg^6TmB5-Q$$MD$8i2UkN`6nw8v1_mL=@~?r0w`UfCwpUl8!Sf#9&l zYjOI$1R2QFeI=~3%3=X?xkWkVQX5l~{sUg4eqx)e-_v$OUh$^>^lb3@14^*3k9@y- zBfu3??x6l!DXr+ERf{=5L6OIW;^F>6%LPw$`eZkV;~8lV(6Xjd2E1bIO`5^&v)_4J zwkJOfA5?itOa4;7I7TcENIMe=ZA)Neoxtu&Ws;aN!Nuqo!g>nQr%_x`xYNM>?6Ugd zmx41M4WO?~wsh@s`Z3+X?IY>-kiPTSVgm3+VWI15#N1M-!Kd2q5CcT7OOk?{Ni}~6 zm!T-10N6?Pz}!ci7Q!4sgnJ*Tvajlo4lI&C1&E=s4{h-O{@42z z^B3EA7hvFSrTZ1LO-0y2+^yj+VwZkC|HeRsD>0hDXl1~BO;`oU(H_B;SqV*Wk{hum z`aEJ*ZG*ZbZM_G%J0-Vx!5(!-4Km_wyS)KW5br$l{WCi}h8xPr*UOBb6Cukm1>vaegEtw_xDrXaQNPu>~QOu$##JpC9RnKYvaa*?~N_=4x|PzPYRo5QXnZ z>}seIitV6+V6>F_;U0P`caZt4rllBWr``w1j%Bg(bgLg)6kvBWOLkn=yefhG0w4PF zyyHg48CE>sk?YCn-!D(mQi}(MpWy~ z#CqP`_tgA=~jFKVo?AJN&@sR(h#4oIsp&szPONmFy-$nfo1sB3yWn;t)#H_ z^!?uHxI1iu*gz(?S{WJcQ<@0Gv09AA5h=?bsRuH-C&U@4>Mvb%w@*9-wS$l5@lZ*mskGgoX^3Gx&*nNjgWN&cw`E6y8 z{fNi#W*+gvcm~+3@9GuK>T=k00<+CQU_mv4M zkl3tT)Z%JnNG|l>|D^mwU)j&!)eU@e!N`sGMw;Fh9O!YTdz(m^d;ee*WA@lYo&;|+ zz&k(q5S9DQJ3Ik0WBb*|>05Q4i3b+gnxbW5m$_Tv?gk<-JJV{lPKNwf(;uLHE^esZ z335mGjmR#7fT1n$?5HoXrX6GbpY8nnbdiU;ww$^^5r7z}1@(RghkF&wZ>R!wMe*sU zv;*GvnErq#=~y3`0T^kG7d=nNMPWO*O{V8!{11}+;V7UB{ zS^5KeKKqlil=Si`J%ckB#{IB3GQ4Uyoit-Imu>c+IJH1xziE-8*`&UFh_09HPWiZR zA_3MkG1)mTGnpF`_E1%X$C$#qez&RvZ%~ufm@n89PBgEAIDAO6Ln{U7{@fAcO@&r8 z!Kj43VHOmc&s0Zf=EK*Sx(dVVtm8pR`jy7?;_Xm-L z=ztwK>y%OUud6cw?p@Nd?NNzj)eD~@BuxO@frk02s zy1>~M=~$hjiRC>j!IaQdoK5B}bCyCrs9VeT(c8RQT0xwWa}Ix-)EEUl%w2aqLS&SQ zXefB*zVF8JdcQm&0RG6E3$QZ6*i(pPjJrr2CmM#E0@gbtLps|-8_nUgUGtpv4-0UD zuiy;A=NAN0;+2X85%N#wTU4zoA%q)YPNo;bk8l54$d2`Ls7eimj}I$ic4mC1UQb<7 z0)Bxl9OVyKvqlb?wa7mmqZ6X+56H_TVoz0_@#p2k{d5vLUwbjKKk5% zQrHcit&UswH~m67*zKRvhWaAN?GA#u@ZQ@%vwgn zA>f;n?*3_Sj%fxHNZmoSL{$i)W_m!&lDF}~9DQ}<1LXSDp8sZZ^RY}A;YN&X)2uHe z1?>9c9rg(2B7PzsSnowlqA*OJfU3jDL=|C7XoQl0=>cZFB>~^3cZ!3-;YSEF`RnSBbz8B!wpo( zAR39=X(*^kFbuFcsOsVkmlLiIZ$U_e`9qk0rV;Yw^F+fO6XGft%=7D-ftb>E{>cnGQ18J;%nZfPb zVfHfm@N-p=3$7D0p016OMIMmPsn-!7zp5pj)B{od_Gg2w$ojWIG8SSc`W7iGn^0o6 z>tM2+CC?GabJ+d~)D@~~T7mZ!ZH@{DauFba7+k2}Ea7Uvtr`R7)Z2uK~C z?;gXpe=(g3Fz_Y4uUH_Zw|xN5P7>AiCNzU96WB+=#iIH=R^GU94?5T?d%r$#=nI2=s#PL8C!3(@7qWA3_9py&tgtGGe@_qT(CS z$&=C5)7NYQsY^zruzz~!t#2UD*-%zP;}2Ib0I75IereX<(Eoh6>ztwSj!z6pe1QL5 zLX2Pg9DQvfoVVJYEoc;C(93_>TE`nNKR<68U?fE_+*<7)qT@jB%Mj=ZZG|brzd#r8 z9GhcPq5F>vb22#7{NAQc=rcg7_V2mENagZ@0TL^hUtW?HH$P$ThyF8 z=NQ@V%6U>DJ9K|_+_TftEC|4EWWtVSdE7KA0&>?e!#W~G-9*oW|E&zN4SOvrAuZq7dS$G#*3~+Qqu~)bF!ufwP*5xzoDdp*suQZ=3g}swl6ge&7zW zfy=jm<%`q>__^E5dKi`;nUE~JBc5S?(-R<&fpE_{w`rr-J~F^EL}!s=Bww271~4I3 zzcT#5COv)w^hF2t-cG%FsUgTwtcx!ujI!!70g#L%G@6vl-aNSg=P04emg5&aWw^a= z+mg%RB--#KAa%wPp52{kR0ezGgujS2G(#=rH{cfv&pq?Cf6<>E#3|d~IYm8@M%D|m zVeeO1d#0Gl8QkW!OIx;24owEY;~WWpu_OD3+ulIhy+0H)xAf9U9Ee1^ZRzi#RxGPoYcLv+&#BCHYKV#bFfX9{_P!unw{E2l zaosv+ot|2l`7Xg5J+Ah5BR_I{ksw}Zeb?CMLX&=QC#K*U^bsXks2f0Hr4~gG*PL(~ z&c$fb?$f>{#%d1mB>52v`R<#uGJ!l7S%1H(_I0Nc$U$|3dEXni6S@f`RwGAt(=O|! zxZs)Xw0!r9TyZ(%HYDf5@m(U|{{#(Ke%T-_PWUC`5BL<7a)g6>^Zq%2PpxNaVxDQb z!v|4}CCt`GEwiT307k;wFiuSCLD?_R!B8MbhxhE43Fpd*2E7o`DC-j{0l(fHLsZnW32;5G7f^p=FomfX(hQ`_*54QIm@fiMe=$P66r@Kq!deK93- z!~KJ4)Jph#SARAD&OFWoq0L*9>n!k+=kU4OKOk?Wuq(`>ngYA6*D8!Kn`iak9TlGo z&w-a@_1B;G{<91w3G5`YU2J_m1!lrrAM%{%&<*+!${a*8w3uBikEbcjd$TtlHC0(R zHjpcf>$;z+{lOX+R+fd#$=KskEearHuwp2yC|{jVxT|8qYK*^n>jUu>UcNs+*%HkX z_Sjf~i_4ni@SG34mB`^{+gh(sg51##`xDR!J(H1yY<`%by^~&A4+>;lbzJGBoKJ5~ z1HX$4io+ib6BPrH9G*O4cTAd4fSf-U)?jDBAXV!H@P6IbE#5)W!yK|{I9vKs&gJ95 z`GwEURtv)B8VjVZvbvQPc1;%^fZV*uO@n?86omvnv~}a^=FE;hB)FH>_zVuIQ@hH- zJ#pC>yo|H0SQOmRpJ0FGNmCvPa!I*wukWH^c?7t}q@2ujiF*p?T@XFRvHnxpr`!Y% z=5y+d(%`3B-t5%&D=>Dx(yPx~q zmkK~Ed9aU~#t++GCdkP=&rBdp`-<5LpaNECi}$crl;BI$C*c1)R z750^ar!rM;M!vLy3KEEaB_+01hYQaL_HX!=oT%5CdO8nm`)=)6_L9OS2;rpsNaOgb z4u3`p@)HJ5qO1(2^l-y3-loz}g-uya0Oj_ltm3N~@;K}psf_!r1S|9LGq}y1xkr^0 zQ0@nRm(ctv)`f4_6B@jQSh8+JpRo+YDHGd##k6|-Oo3hKdqjPT zA{8JRI~CDwPz`!90CF>XRVKw)NY_@nJ(L=wg=h!zZ~cC}4PvvrK0jrlN}rDivP^6o6Or`T zssfpa#!aubtO_L-vVWse9p?Mp`1u0oaE*J$59x?8A6S(mddrrut=^vp1bVbr^z-oT zFXO=b8XWRbQvLVAa$rT#4;x8>+>9;`@J3#_1a}-aCF-EQka3TfGviIz9XLrcl{;$> zTjA1R$9_-jyKJ9(0Wrh)dJ=Ru+wBd#M&L7p{pWHsGyuBrw5#6#1@62BC*_YC3wCAg zY%K*hI6B;e?^1xxI?%yCKs!5Eic%(wtP3phqQkQ8;{ldId_8>y?yX1x>Kij<$|l3m z&=uqggr(?Xvyyjx25-dH&fMEwl|BWuDy^mxCPTD1WI@TiR4EzEOLz_7x|mHJqNQZr zhg0WaZ+}B_HP?j!h@$-#`pDtAUcwI8>Ej$>cD9VG!b-X@(>|?}n~{UKEDV(k*v1PJ(!PZ|a7Wg1x9;y|qjw2x`ycZ1Gwm_<4Nk6Ax|gMs`WHyUJw%nB^nOD1 zsZfC5z5m>r9UfRb!2QlUniAJRPYsPjeD%bX!piM~bl|DZ1=A_%FkS-&JkD8u@e}3H zw~qt;l_RxN`vk>0xDUu!Z6fuww838Bj%fMS8Xw$W3&=fND%O^7ZaZNi@EZQUW9l?~ zLmdG(_!aaxOWSwyrGR~wtGTdm#|*p2;PS~ApFxG9YLi&`ni zzPUjGScOa<(l2#=<{?W}S`F>~)}Q3>?12t$$kcx&qNE=1zFW{Ev6K$`Z~@!Sd=4UA zDy|7UU{#V0L6by%;gSO4P`mT6H)RO&zsXZAK+g#OObJ(k8>9|-nan)aMGK(o*=_91 zqN`U)0^5$XM&cq@H=#F(k9@nIZnvO%1I}6w)URYT>r;J6Ano~FAb6Ciy~=`2LK2wX zuNen5tYO8|Zz;X&HIIkv!Kf@*+CY_mQ4h2^3f_!AN3zEj_%d?yKg_!3U%vq!7FoJF zXAI2uVK+GOhhsg0Lrt@R^Met0owHIo9`vC~ODCjT^z~7KPe0asH9gJXV-Yf2URTWD zg2)~gK&t+M`0T}pHv)IOis@8*U*6O1nVrE0_AQ zkMS*G2k^`YpRr6>-_hoR|7FhOQJ9Z0-4pa0b-ujXG6|Lw)Cak&q6w;-)jR<8vPu}j zr$bq4>4EP5YPWy7;mGe9oHJL*InIfX{w@K6(uX^X@dQJ43;2b06tBzS`@V;}?BBI3 ziMd8#at18YC%vMUrnLLxgWGrQ(OxjNQt%aMignklv|F0e=^#q|CZU7jG>dx#kV#&D z`XeElq#>;7<9Z5guMaQ1yoZ^i}S)z45O*mV59<;*cIU-9BAA0X^!z z3)>q&q@|S96kUKix z@xpxDySiU+*9?=F=0%rm2zQ;6swz+xGjFv8H!IPob$DIbm|Oud!+ZCv)Se5-3vt~J zhTYyQEgw)_a(@V(W2-owaG%J|NbX;pDYRw`rS9vuhuF6+k$`V*)2RN62*YMNkd0gY znkT!cg?Pdmz0~FfA)&5z!wr&uG5B@tA}2opo6%tT*s_u@@&%sRDm#x%yZtW^1y8m2 zTfHKmgsoveQiw)>8oIiBRKo6^1xG4XVyXpJX+_cvQEK`{7z%pi^vycU&&qO62XYi1 zA5xl@ar&tMxw0O{|Kz%JBNJqXugVu0?VK2AH3FsUfQc-HAFG1Dumx+>kskCSxiM%Cpp3QktM953ox3 zyR~%mjEJ{^jjd26zsq+k)(gNJ)yYiUSb00Lr0xAEG}IFe}xmE z*YD4+Vl`2%K;1-yA!fgB5(*GS|ER;5To=y#TT0;@9+M%7q8$ zT2R~dPa#ivtN>!v$Y5r~KPzo_;Hh$lGxFb&E+z_DBgUW*IX**>34CfUnXo09thbPJ zuNyFIcXPC+;FQ5*%Vck_%Fw_~7OtVtvh)4Wi;YaV;N%nchNYCX_SGii-hm zZ*FguY(*u51W0?T9iL)hKB|F($ZJ7~2jwO_$l>)6xN2- z@bHWBJ@35O6$ieXpjvD8y=1dofC;O_n8VL$oSRN(ea1OJHq7JQBi z?*6_te(MKneQwC@FxOQ0{d)8p2U7QQ@uB+Ji#A9Ej3rTK_{8Vad%%aTs>#%8agogj zoFpmK&Z{^@d+&fA4Vv|LTlGAI4$xn1Bj?ySFH4SLJotO41SfMghx_QCsY!}G!`gBL zwodroyhNQ$dko;y#Tzl!c=YWLZA0ze0(+p0i%?-VX^aTEsAai?!0NE?+}HBW#ySSk z)2aTnXa5WY32QMwak@~~Etu5@7FZp&B4*ylYlr+-)`4c^)s)%+_op~5K`%1ZWh7)V zQXFP`g@^l+cyNPbE%5c5!RSW;(!LO*BPd2x?<}?l7P#1$We(n_IQXD`^o@Q z(txzk#d9)=+!e?aO{GC-+!GuPKyUSjd}X!@KFdq z8t^zODcx!Eva8MlnS5$7);%S{UT%SwB^1w?HurI49PSbOyV#2y%!h!}Si3;Gn;(hM zM!XYi+V};&Irg09R#pn3J*eZ@)F?}7KV;3N{x~RYS*p2!z zh(SbuVrB2@men%`_*9IhU(%a}g+DN>CSPT(33Z-}Ahrr?W*VnseWQ?*4Ly(EGjkgw z;C{MkYtlaiyrlF6p30VpP&-uFQ*iLVA89S^sH4A;29R5dq2-a9P*1Qe);9AxHpNssm_3jjH(tNwoLW1xgHPi=NC$-dk-Gt`nH-zU9sARZ zCxDGT-)`NE>ofOoA3cX2+s!&}`?P>Ohlp&R&IfaeFR*6#i{Fpt5vv{EZyhh(o5S}% z>j`|fzuBKtd)$_SOb8)T{{?^kBvKm4^-&#fPqSOz)d;+m8-=NT6mmt=kiU*;^!Jbx zUlC4mX4;wFv7vp24Mc5rI?3)cztRx0ySubcG03|uq#5$7u%i==8ms7#m#HvMwVFic z;AMbv)!LO~?ykQU-QUQA`+arax_#clI~IX8b1Pn(&iCl}ICt!}?<;i=`ct|9*ZJ~yrloh$DF}EYeb5ce z(>5v^fF+b)IT2jMTW)^9#u|PZsCXA?Z>altkLA*6|HS7FaBTC0PSENCF^fP`B!asX zhcg+?2G-1MSTPJKZ%tTWpIJ)@(DC;NVBp5RiqJ*V--Fp5_D4>Nk za`Q(hPw>oL{sj3)Pg7=x9HBk_&P_JZrXN6ziKF%`i<$*@|z)39CQDf8}(OSKK$Q57)mdq z@ijPblFU&1NB@0q^b5|U$Eu*XI#$V63DNc1M?=-n;wv##2y82bEf-rCO{)1olxY> z$a6OUODInIVxO165is(4Jyf;5kt1vn@V=K=sP~8Yi$vibqC4?>^z846uHgn89AmX1 z)zm44vk&}6k#7OLR=Cd#4d2+tCKeZzz&q!Trv3#CcMvEb`|;R~e{A-ZFKc%tioFBy#-YsZE%(Pj%HS40OQ=TQz8KUQ{O(2y zuhFKA_Y2ne5Jyq(@4I3~7H%mDBWlhp>+@BC{=NsYXdauGzd5k{?beKAAd7D*>qdpg}q`_aeqHsMy&ORB{!FQpd&&MJ4$*G_8@TihV>abNw_;?# zC^b9uDJv!%a{m0;s>sxWcFk2_`Rg<4zn;V08V5Z45dSICpzbf<29Ze1d4lxG(T@c4 zbvXXe>W9$uuLKZO(=7D&Cyd4lHx7)0!%BNvXqg3BZS65lqA5Ia*gZ?2{yO;h_jIAO zUzpg~sBhbJ2VxCGz)n-R0rdA6K5xl(CpU}0Ijh7sw~Z6y$Qn+7p3CLUYt`~J zut-+R?RhO)L@j5fBZE55g8V_3{rGMZWO;R{-+ceYq<^*?_FYpS<1ySz zc%R^ndfdNVQ^j5f?1F1%>-H(_t@Sm~UsJTY`{Xz-<3Sd}{cgej6M234z&Xvn!AHBo zDCq}m&XCLX{N<}AY2f~aLtbJEp>z8U>;@@>vtR_S`{Y266xw0TUZ-=$13Bc;zbvn* zonwG?x{nV?1UfvVC-A=XK(&9tEiA&M2Pq^iGsj)7&kj9Nku zyQ_*D;Mm{EU@y_f6jK7YUFK5$E_plB3`R|-#`U^|F#cHUIn8+DY(zN(ed_r6qJTf<-Lt6LMcN`d{9A%=s$~W zD~g-1Ktr`Qa8$zr8^BkBYr2tRrI97zSr41JX>@yu5#wyuf7r^S$$rN;V zeum~l0F1;q!NJFQt*a!^g~oNaYIfOXg|S99&rwU}y-jN17HTW{42N2zas>YOm$kim z{JD021>gMrjFzwVf1!5a>ryMjmk4<0%YSg(#fQ&^vUtytnRM; zC`SEKHVfpwN;^cypcw?5gqEL`F6K%+Z}9-$FcQ2YxiaB(D6wLg)1}3&_94{rX`e0{K_Hi7te!=bDiXUCA zg2=Bp1lfRvRB7C*J_#Q{MlWhi&F+(!)IYCr28FAqTq@?k))66kG7-O($N_V?^(U4) z+bDUs4=8b^y0H>6AUxpdeu<$kzT=p21^dh!yc<|!{CHo0>kww=`0uL`GzKD7D0|kB~lE zm!k*;P`!%#U-rgp+Jyaeco<(^$6e=80u9A*OxO*%S)&^GLB-ih-lcJ$T!B0n^|+mX zCQC3Bpk@4r4ra6yP!i5sQUv`$4x)KY39zC_furrOxN4&Z5xva*YF86)8H0VusQBA( z`|b6F4JD`9P9AG8`+{7Zf=}u1KL`4j%MV0B&g@jW@q59_#pKxXZD7swtw6jV)I5tD z)l1dhaF1tR`e~a7zf%CHuY0})FPBPMKopcuxwrm-<=aSL97-l-b9n)g+Q3^SC7J#q z-i%4%RtU@fJbrc$6GB5y#R`w7h)!SZ5W^@n*@RQXhPVK|h_a{@Ywa-(>43B1mPA&C z6ni4r1(#Ysa=EV&9Yt8By|C5!IBY~hZnQC~-8(+R*TMnMo`}uSy;^b9;2iF!T{pwT z{v6`~EbtoY(n;?zou~j$wlDGfa=R=|4OroI_AdNb40SR9w=eiA;&oiEV*9T)kp-oV zbgm@8y_UMvJ{paSaz;W;G6#hWf0LWoxZRKa%I-1#C6(nA$!9|xy~Ga zyq^!ZnQJ?bR6)7sM+4a@J?+m`?Z4{^fG_(F1up+tocf!AvnsgXp}(lHd^NxlHiOvT z&D6@91v1+@HZ)@u9f7-ns+LwhAx@)0R1}~-Sda46GvQ+U9zcB>v6AuVX0t4)(0T`m zE^d-F??A5lAbua4?SwN4PLf^I&>Qxt$l+#EXZ@jM5oE=y1(66Ed~)o?R2YwfsLkL% zRgJ7u)c@P1OG=sW@xpD|;5Vy^9tPtlM+o45&1ll`dVLnl1zMKyL#WJJ9*6??X5p&$ z_8K>wjN$aRy5&(^qO}W=%<^vc4NZ!WgcICW_nh>I?LWB!F)aOIHUMKloWJIW8$aScr}a{=+`UczdrMNgR`=aQ5slX+a4R-AdcRXR26OgNFcK<5KjO7EYqif z`z61~_eTdWgFSelDK6ib?^<2jh5+`t4l0~>9#@_baL!8_;y$PR)^i88eer9I@ZP%X z({R33A!#6s?<*3IRV;-> zIlyFu)z4Tt;BC^}z%uwh_hHArkyyBaZrpn(pr*HnNRV;yyuUH}dYe2Byj7-W9_}B1 zK_28J&pz{^;blHD|0;2Rclk|1-%sJ5i?E)5pF+Cu6>dhm%D25q*DX3Z@a$x#5@GvF zKO_OB41RTLyp+Uti3&(;?Z4gYPI~JNIdH~iwb4J+EEXonV4S^l(Mwv3jRNjhJWX{K=)a<7GstY1bPJiDD_?hwesWlJp=7--26U1xgv-K$OUcmwndJ3&SeJo0m*-O z!`x5oxd2u{^c_9lA0mHSKw@i}-w(g|eDwyLWQ$tor+fFN6v8P^?2wX7QTxBg1GZg$ zBY%#>IB@~8G}F-s9VpgVJ;=9NO`^ohRFJpecjIzIP1O?G9x~D=6%zJ%7I=XKq+Kx@ zv|JXS{d6Es;cDic^3UC+7qB_G9|_}T;*JNi(``>~m~;8V#ZC~5>KhgHm*k#sC*~Pj z`kxpcRt55t)wfJ6|R(ewQ;?)ixelu%bRaEI{gJtA6j}m!gU(sLlE@t|O~(l487TEII~+;soGobBBl&?7tz z+LHdE&ua%3_=lQ~35B=_cc4jZL2-*DH zsaAGdKMmN|c9p+Xr8%^dbzqS`Pe|gz7HMw`SO!A&b2KiHpL@cNS9h`0HJ4mn0y#$h zCnQ1>-n2-AeJ&8z2)X`5^L_uUoj$M-DSY{ZYXL}4;wWJ#2cS; zvV!tX+b9R8Pp!ClxTqyo4X`R9Qz+4@hwps@@|@0PO&uC{Jr(c^pK@B4>ykpz1HLRs z@s>gzIea7#9oPBw-l@D+&j@IDPR~kaRpfAR;AtEm=hU2{B`{#0<4M$Nm-=$E1hi~) zpU)!wKJ+dF?OwdDR|`7GIJ4>=VH zCvmo7_1vcea@Am!F%zh#lA5a=Mw z-{&$wx`6(}Iy^Y6d>`7te3}4*9+5{m)Ho*m)k{e1C@bjrpbgkGJO( zzFKbUVX|!CrY2@c68~J%i_3ro){93i?gL9BI71MxgweOIW~LW77jM0iEl*5~tbula z)QOMFaNhPeSTkG3DqHANugQ?<;@t?p*Ot&y1b&+n0~7eHC|EPNjsbw zrL6lV_J5RJfiKFHhzf;E-8&YZ0>SaAnY%e>0%@1URrmvfWfJ=!pY!WBQ#Y^o^BLg` z?#}bl(n>@}2XWbv*i{4u_39?%ISGg%W|{EYoxsB$n`sDPCTBzhywzXeWvp)Hq&wuS zW(wS01Twi-9N6||PVvDHRqhKbs|$kKZ-T|wzkmZ+6=KY}ASW260QTyT!Z&&Uxe(KW zHJ_!J%sECm#T&diUq#uqDaJ4%S7#-jg@j{@8IWK%+7?yPpP}R|0W5GxGbXLt!pK5S zREhr3!nJ#rk^@wqQAk3}c+Bx5(EZVSD32{85rZ`+>f3z9%8a}#4#eH_KrV^=WpYyn zr@-qarDa07mhh%^rl-lAOfsHXaQfF)RbyH9G97~xj4H$xGoxfoI8!ewrWejBW8>rC zj5Rn+6p4US_~b^YHx9YR z1n?=To{>TDBODfTvYqV3lruFZa$uu^&Igpc8>XKa_8!c zk%kBUXm`$UetWf&M8o+D0oDKEi9Y?1)&YN;Zg)TOQg0oFJIO>s$^E2LdEhMo;oX8|%Tb4d2gX&W(d-KnHQfj&J<%C)Nl0%il;8d2ZYc zaE7nkVfw2m)}`&inn#;)BmX_U7a8Vc#E)xG+AA<&_R>~!gS$U!alqR6#XZ!N^Q>#3 z0CHo-{hTCSCOHkr6^#Yl%%y>dKLBm|1;^O<=}fO4pn{J!?(XZTN&2Ih9rMzhJ2Ix^N@u}jF?G<(a zQ6RY&o-bo~|Fb#PzFG2ezQ*|tJdRYKmQ*EIFC`v4g}2feOlb?y51NC34ynk#`2a)& zO-||gYj$!L=C9t2*WK=WexZbO9EqKpt=@W+f#X!sYnI!E+ZaUKdS~g8gOg7{0WU%w} zBgxAwbbqdbvwb#KK}Qe~ zXiGn*yPfzLtZz?BeJ}pdHzO-Ra@1n|rSswavt~Sod}oXIPtudgM5MkXhg0 zUE3he5{~e9*TdW4UrX~c#hHi-C-6fzK6(ftmt#h5N& z8RU;USS9m(TMSqRGI?`0ntilu2DvX3xyWs#0u6;zAkRX<#B1-uWCHj(z+SJf9$AzK zJ6^qOdGr(ID3Jxxgl6n?B>r$B%E6o4NOr2J@No+T`rC<@J2DyXs0)Y}gi~@%?DSd_ zcD}G>jtB)RuoL7%cBr%I?b}?14j}XI@sTYwQH9cg{G$0e2sKAY)W0syco=at8g%@7 z^{57<-BF@}EqvEXU=)*YY8f5;^mSBV`6XF=R+e9EFM`whCf6a-med~&L=#tGyaHq4 z2($q@xHim)6uYE9AMli0-k0)cHnlPZyD{OvrZ!8Rh+=@f&*V@MHALrXC8-ig08RnBZ~w$T z)!D(QE%+cxS~C`&!7l84GM_UY3H?O?RNp&DUOS>@XOLC?2*g0!2v6)$kY^ACca&1{ z)8%mPFkv>Xbbu)lEqMBs8DFhZJ>+pX?V41oaPrt0DS_0j#YiA7AJ8Z4mwd(JW51U4 z9AJHHN;FJEA}?l0fTwFQ!LAWwZxs?`K2I4BUt@jh51it<Wm#mnaZN?E~=V)@LSwgk`JUFnTmGJYqBo>RF0eiJIiEm@) z>*5OVMO40b&smDkmOy^s9wC&ma|+1@-nlbgT^|b-MH?V0kMJg|?70j)$kM#ksir3d zrbiMu!DhGJIvI;!s({mv)Rf$m57{;qKqDP#QwM5~%ho_{(r)wdciGhW4EaS7$3gyp zQA7y9TRjXB-%YFeK@0GP_fl5n^a@iFfh9z~n4cAqHi)n@!r1Mo{0o8uLg^hw zpc8^0fm5IcgSGkobo?FW3D5Zbn$jc~;VpoVU>sIQ~-QRDolv? ztLDZl0VW*MjFg`-q_!L2tHCsKd6@5OT7fmw?5p|ni9%_Pw&AdwhSj86}s>156oMGoFUOSVFIhS5>z%rzAIS0hn?h*_8*{}BA zaoL{D5Wfg{O&v&;4DjUo`da#Neh}#g>j?)_nTnNB!WCkbub8)bUq&jNk+Eq5 zTMl3_1`BqwK0`H7shxiN;5OVPyhCZrT7EQ;`@%6T;VVLaf*l|zcD#hbZH$9WfJ_!9 zquj}x5hMlJN&GL;BR@sKS{h^%`r9Oa|AR;$IFI1ZL432f_NQYgc(a8bfs7X%n&==} zbdU0iauG)6jLuV1>8Ros`95P^^3-;5I zJsbWRY^hrx$P7>Ay5qlla{9n~STc>q$X`DLybVVg?BV01Wa}2xQSi8Pr?mb$ycVDW zw_EgRpQ0@3U{}=IXXK;41AGE;3XWsvpPW5RH3N(^Y4u4^Ys%$3uvhL7fLTyd-oP4l zRn}Uz(7712Q2lu;QST+9B#s8wZ!k4FVRhwLj|o;KuC}UH*~kkhxFI6nHu8r|Wjgr4 zYGHCUY?4U@ZUwTTyn>7${@fXRgWp>G%Al8upM?$l!fWBGf}Dmt%7JGO%UtZs(+-^p zAjX?pXeR1~*?IvT>{D!;L_sRl1~SC{+~_B6)c3VRoAaXEu_yn0ED4azl099mxSm|b zkb&XUc)vYks~=!~gKS8)U%E7fwU+}LF#;l3bOrB3s3csXKj-xQjKK02-*m63xqeIu zXxXb|vLrFupHRZCw`f*h6M0sC2keIU{$Mxv=HD_4H1u8TMn>SYV_IN0Mtb7Qs8)}6 z2~IFz+>g$B(x3i<{Ig`6cP)pG9Fo8?q*JZ*^sX!-22N0$@X9jeTRv$xC;j}}%4N5d z_X*YB-85UBTFSllsj`2%6mqkZ+I9P_#ckN*pS13a(}U((M}< z=LbZ5UHm|{&hn=qnDp%<;Cw$Gp^0c^*}egL{q7v)^wcUl!0`v)dWgF$*b_;0<7d zoU|Kf+d+ZYxzx*fp;9;SYS=fCDPwYu0B#(-qzpRM~YKOsy)1yunGqGo4RSmhe_66he( ze!i*YbkPrk3=EbObL94iZUV4oJ$857GTu>jK)w-tAjs6ty0(Lv-i-MzHKpA)&@ELG|0+Jqs#+65Z11(EbD&kj5L97O5T$$Xn13l3e4CdRF zKhyhRwv>mg#l7p<0!n=nRDyN6Zl|CUBBv?j-nqy*EB|m_W)a{iB80i|HiaT#fjqk` z_2=1=cXS`%i%L||w%j;3k^#PZ>%Hu#Nv9tjfS(U{EzZwomsSd7!yIKif0R5NED#@E ztj|(^(Lp0SumhBu7_2ze&(y;l<0MxbGLM~if>WqlP7blz!ZaUf*-hRh@$1$ugVSWZ z7qjH``>9ok+)!Ei`IA|wdk-uj?mOtix`b1RU?-!IM#32HHjIQeHmAgQQ)(j40e|GT zuKPZ*)e~Sne>_RjLNQgEoWJmA;rC z^5r9J%K$VIXq>D^mO*P3h;f)#^G=7*ERP4gx%0%gD+SI+nn3KVIzC?htjk#{$TPOI zsf~W`RV85cT_pL;A7tn#V3m!}jWxFR%;;|LeUM!k#Fc4ZXaLI(RqP!`a{jx9%NU=x?+?u#R6gvP7ied)2e$ho?`#&0rnP5 zY<^Hu`B4S37e%0XezmpdnFW@!8N<*dhC!Q??&bcrT zd9lobu}I+QUb>ipA+X3pgPlw^R#DZYGU-jjxc{@cwe;Z47 zY#pt=o(8eAg?sJt8`D05{Z>ku>@Nu?-4cf!k^|BwA0eMA7JToUb+(+_1EYm3MmP0y zjVWlu*#+P0Am}r*ALY}2J`e@P*1NYcxt$>T!greTW1{rnq(8qNsA0;`4YbJpeXnM# zayEY78=Q^x_Ry##cu_?XkYP?H>K9_=dorQ4mtjJFnBe)dxFFV$!?w;{S92W&oPwLk zlV}oSr{({;IevUNN~-Wufc_Hshr05Du51DH#Bt}6qF`-H*FYK26 zN`pq9bz=;$a)7GQ%*l1mgEwL`{~HeG;YXmOSYlmL{<{aK1+G zg?);SvnN3N%}P~ zjaEoV5lleZk;ddrHM{K!G69anN{rtpCTtG!1mf-7U!P8;8=!-@F$boYzG{pB7OC2_ z(_EW`Zs07x@rs=i>t?=Wz~7BW>xXZuDl^cU&3GOJA${G74ywT!U+E^MTV+0ha{)Y~ z!|Y7lUI&oLkDuqB|1yIe_7LTi%2N7`l}ZOra4os(LcN#b!inUc+ryOphfOkM)w5Pk z{F7-73m|^B->I$Z;d){4M*9`ZwUp$E`kH?MLW&OV2#GzK_JW{7H^}hpx5Qp<+B4u>5ce*0%UfTom=@{Du3MBZ>rHH>hPPU-fhSY}Fw(+T^vdouCW<}s|0Y&bmb-&{h%K7xVCMt2BM z)>OdFlvAW~;#a5XtzcD#uZ}zCg844m;NrneFIZofTL|VdV5_yqUz^ci?ftJlo!t zNJQBQ=anDNmsS5F8>59j<#R9Dgss;vhfF3@M0Ls{`fU$l9D_?q^rIyG3Rxn5M*DSB zI-fh32fj;14HB!4xeM4FZRaYF8b$sC@zvRk-DASZF$P$v_8Pqs8O+O|m`%a$kzwul15K9xnq=cm1Ky&2}@yx`0g5uWow% z>8y@yz#{pBtBdo-S{4fat}?up%ls-aZ9^XQw-Cp~)RYzpY|f=y{G_5CMl2xKFbj-t zyA;_!8Hi%6Ox|4LSCFF)t%~84J@J!fWruS;GPX^*KfrK!;I1uBqnW8@Vu(fHyGKU_ zg|&Z}QU&%(w&y?GZ9Z8Gr+f1rSz&y5KFR>>#_*YmL;Rq(5`z4Op_}Y+=~{|ZV6Qg+ z_o!C998(6~jEGPF&^|w85cA6@+qBfm8wlhXTM-q>+(i1I1(2)JRh(Tqn2tMv?kD(H zv4egy-x_!`&NkOF4TmYN(6bM$_47CM{WT#Aw{>>()stpbz)YZ&8?-6z$`5vdX}@28 zV&xA#;e86L#Z!#*w?cA2+7l(&l9}Qf2Cmuda&dfg%dsM`lkTIpZOIBr-veF9(qrR9 zmLB{G(MG<3v6{KgSaJtHUufZ4ul)Taqt0aOJh%Ws;Wq=qpo6wP5 z4M=qWd!^Bj%j?`(RznYC*vFxZuP$sAc=O1x2}+p99|i~K%YJN}H@J^N(?BK{w8cI{ zm8MGq^f#!>Wz6Jtb3QqYH9XIqQRCr1uyZ^jJ7d&WxrG(`9p`C70B*csN7dHKvHHOb zCx1gWp`i5hqgInV2K)T(se(hQK$8aW)NXA~GLV=4fs=-~tv;na*trD-JK2S5FBb3b zi+jOnF>w9gYH@wS1DQlSYbZ5TR@Dt;UFxSPgHPw(|7wY+NV_~t5C6~z(3CFQz(vp=&P!*bRqM*nT!UnTNclBDGK_k!k`LlF%PDq1|WZ z$zmYFrK34Mw>1q=IP(QZ{0wO(a!+M6v zm(_q3%~`}sMq|xMIKS+{vNJon~eKt3LE(yyD3+8ha#r12`QrV3F`J5#|e*ULkk2eEyU#xgAge@xEY5>20qNs0u zxRCqW97JEYuKzw|Z{5(dzgk7xzeu5wAWq@Zp5Ai&e10DUey?R~s~8wj3M=Q2J!_lZ z(KZ!Go$~z)@AGfCw{ThkyDfKp)|4DU)`)jPur-z8KDL5Y3Ap#-NoqWs7{~^?h^Fvf zlD2`>Xyw-n*k}oSI;APRB*C~*Vdwsob{m*d}H1G?x^A{leLE?sm^(u0~Cl#w0y{v(VUe=0D zRJ!0yOK^g{ist<*9(YUxD2VuT7)!pS3b%p3o2?w9pwU4TaBj;jSF2b~J!b!4#UL@C zYs)MTK7ha5c=RZ|HvP|3f;SWVaMSYKrArKO&L4(v7k5DY5CNF5uIe!&)0(*d#W+ph zY7I%o9LO}Kw#M(5mmPbQ zAo3#cW{JL@Bq9T-CRLI>9dz$JkrCL9R#L`4^?fltw3C5}Fp^`Ud8Y&WtX}G<6RcAm z7OZ9oUbn=!OY`7BCJD|{b(>>e&I0`JZOv1mrwB2^Ni=x2{u*J`k&J=*8*^`L)xNJM z0Q(%$E4kxzQM)$CBuvI+D9&dkPx5qA|QpeZYlyY?4Q>#rb_kYN@}{6fmS zAYb352({Mj_y&e<|M|gk;Nz+jshWg$xQ27v1bdLZEDfNbTqOO4|NTC44e-YHC?7#&6V-L#u$4$?P*4gFxeQwY`63Jbux}+eRDYR|6XxcM(o__;S_**ylG-=zb>G z^c{f{6r4-inkN|uShHQ|hWc#bM^O~mUpC^GJ}P8el_`v2mn9`5$2=Qgk={RUQ6}QI z=CD%$WlFv9Bw=LWy|etxZuLCeyGOv?6RS%$BBe>HemVZI3u>*^yL^* z`eeZg7H0Qes^`|z3ZP8`|GKNewb73O`05W>FOH*5(Kmtqh?U3b*-UlCV3&bH^4^X& zojm-@U}PeS{p!)w!0FEeGmNttbf={L?`5r&3j`pKYZ8Z5Ho0XRWW5gn-z$E8DdwIkY?}w z26}W-SRKE$^1JUKj}(lut9R;bI3t`grYPqfI|x0(?n1)*A-Xyus|fq)Hu|d-_)fvaEEJL_BkplbL15GyN-m({L9)| z!UT6uAJ?R-OVB!O2ARO@4^W7>s}A@F#3^XRj&tr)e^3H=ST1w7vF)q;xPV-J(|NfR zajjN33)}t#wV^afOdJ5^Hd|t%Yj3eDoYd(ZwS3yg^`ji1-8D7f6jKV+1bgCa^Mik< zz^J+q*hwB)Pw^^|aOh^@l`JA_%zmRbvW6lSe{4n#=E)yvG4@dy?#T!kE zRUTQwr%|qBgLQYO59`}~d>(=?ZGY13-^|lRRHS0tk{mq!6y~#470Zzx!0qjGDukNt zYf1yWp?7#ZcAcp!Jj{LFO`db7zbib5*}0y6>Dx>?xdl7Oj)F$|-ZmqMMo4;cxSnkH z1Oe9Da1UFG_r%r_fG7U~3%eKeHm!CzU$WMJzm)sV2b`;QB5$rPdgFJ(iPaxoZ|Q>g zb9@Il{bdXmeWP))r$D5s?**X;&Z15nc(bn>%hC4{3L!Q3a=a2VqsN2bEcGSWh@FYW|yFX$o(qEM)MUzWa(H2DPk}%dV)O z-@j=x8KVSRhBJdO17C)u%TA31^%wL*_OpcSNz$&r+W^+Q$cWW#BdSX%?Ej5ei%mEF zXkle_KCNL8xX4sIz?wOvES${nJca_!NEK()8aXwe4;~kK7Y_i`Wv{xfLj=C_ zs%fApj#d%AjiB~$0ZsYCY!vOySD&mPBGCE#&+l*FtJi_oXb+84#y}@?$n8MhyWDU; z-((9|d25L;eY{*x4S<)t7MA{2uVz-Dw>lHPncu(g<=kL5)RiBHt2^`w&LI24Vje2n z*U!wrPF}=v1X;LXC9HH3m~Q=wR}%bVQP^pd($m+TR9XbEJrr9V*sq#n6ppG|8|L<017htoE?I?9uZgz!8y3twnKv+KFsAh+z)^E zr^N<9kGAy0I-eElzvlp7QO`gTd-N(|fMlqIPDc&(&ddTHC!7Vw|EU#U02k#Y0 z%6jO*UXcnhq%Ufh-W0IU9mmunuIl-%fD`=lYP7e%`}H)yo9E;uFhPYV@(I>VYWU>8 zFw)l*;5C@)@83$VYB(^+=2wqz-ERF-UVuNU-oE(l&PD#gi7>+;@L0VV-|mJSR-0)X z{@J@2oZn4+m^k_AI`iAWnmdHG%rCMYKOVf9V_k_1+R>kQpbIA=5aQvbi#r)kgM2fbtqKN3Q+w!j@r~sf(mniFOw0rU2-XmN(_AOEi!a3 z%l0BmAc~ou=q}5sbGQ*?T>Y4#nd$0&{Q_6TNb7!l9REQ;B$7CBC@04Dis?2NzPuo~Q(jbB=w=Y&IMt<>*ikN=Ya*8slT50~e~ zAnqM&U{!V&S34&}jM)SG{G7pC7pXNIOCZnZ(<^2-Sy3SXRKKdr>gjx1ijb9SrntYY z72Q^bJo(qdI%2hqR9FCeB`t+~1s`7tE?}RX(|uW2K_~&dUua3<4j7wbqYR#4YxDW1 zQT3(;x0YGb5986>10I1j^Ae-uLBud*2r>Vf#7Fp`+3bN+prkKdE*VY?3XJ!akq9|7 zJ$%SKENBH1FRa7g2RPrH(F-z_mp9@9OIU5=>Gvlp1rxw3+o&gD^SYMQ2H7pHZwYKk z_rim-p;fiGEt%|{GX-9wweF-=o>$6rz~khT9F~}@hnAv4YnHH5r*%}b!Bqu~yq`IT z-aODy%rWQLp%p*+jEJQhW|&JD<@cjvTDjLLFL2zjS1b;{?-3w)T%)p+auVNH^{ zd|+dj?aX$&zgJ0u-J_pS{$&GB?67(#(c>jxCw+D`@Kkt~q<>pgCO{UHGhy6_KqU($ zz!_Dmq>6}9TyzGqdB2P1itj`_;RgJI=#++oh2C+(NpOjQr3UgR@*=DYa$ghT9&TPr z7?4<6pK>b^;)1+Dysyq&hE**$9tgm(+!Io#sykt)gWrCu>|R%!!-*T%4c7VlkKrbg zDuFyJ0-ZEWUW79aaC?*<$#8~S;Pc>%B-ZOy#F3+~0IFzsF2xX6;rJD@CRUr6MaEgz z8RQLEk>9}HY9UQGKtY}?4K!1!CXs<$(5j|?A?lsvat7_>baqFzQbZ1KX>+;`S9Eh- zQUSOwA0m7!oK7y`o5lDv*_dMd(E^y^m`ZBH%RPz%SkJ$vo^Cot`-g4*p4z|3cfZ@! zXbiyZ{!qWgITF8o3;Yq5p}npoZwcoCg4#>uQb|KxmJeh~|FwSQecTM)!EY(T^zI9L zDQXYoO0LVYuTzDzT!5f3o5$H*+r^xOZ1$yWB-qM&+Z)!_-dd|N4<-~okl0@+e7w3> zFpY*$8~xyN{L)uSO*-n=Q9$VSx2sedJfo4wEw<*!6b4>v*5< z)wqDvJ(DkGStYcW3Or7EZ^bw0$U1{F1!`LJ`ye;>3fA?x0kYd*rcty3>-~{EYyU$C zf6xtNif}uN$|_Ey8`>*7FA*&bQn}o~s?LG1vXt}EMFL;sh3tDD&Ltw@RAMnSv*`(0 z26+JuMdaW1#Rkz{Z%`NHz4!BxS-}e!5D(7LT*^UO>R|}tLFpH9pl$Uv!Sl`6>F;yR zeQ)6WP<{|Xgjox!Uf|>%J-4((s~blK_{xfpcYFV2+VLhhjY&Gman&Xe8ecA~EvsgjsR>Y7=I;+S2)f?3Fzev)Y8UdVwR4?Jju>`G^{`I9=)xDMr zTf#czD{ypTWA90Z%v#ily7rn4gA@bHpexon=MQb(8LV&Dy}s+czu*Z0u|{E}6JvQl za)8~GA2S=?-DJ=o3ZgH~58n=lzM>c8k1ZQ}3;M^YXvkQ;A6?@Tu{m+z7Jxw<_4SQ6 z?|{tGWB4xeVZem}_QOU7ZrWe;{rEJ<*m(3uPAQD$r3~x_bA9(qLCcW};N4Sj7QgB8 z(4_`QRq$Dj_!8yn>p*g-<1bFZsxFx=peYW)YzrYbM*IU9>BZxR5}hS?9^k33ef*P8 zul#L+6D$L3BI!JJHh6=;9iwsnTDh`dr;lP<0m+Xi-(4U(9ggNU=>5Qiht3hWHj7o<2TR+=UK0KK8ulsb;xu`Q{+#_w++UULRYYt!x=SAg1_q%9F^zg zE{_ls(m5H^bQF^*1?<%}=Rcll&w>g-yx`*duOIF}6ncPiMJl##4%foK22zK3W&Q2z zI7?wad#F>AT;IEc(m*!amtRGaL@GGspG2H1Y6z-&E;u12X>K2}tnb_futQ%yoWprk z?E`CxGqGQGVh<_W1$ndVlk3XUOE$-V-~K_qw!1=om>1xWu-E3xuQ9KC30QCMkqf;1 zK4RemyrJ&omnF!UO$`vmyn+n5t-lc6J-}|Tx*Lc_t1L3)+3vpWTkch>D&WmBdvo+T z1VnuF00l|qzL0+ie?U4Q?Pt2^hQzM?3o;SWe5Q7*6f_D7GLX-qSEh81gc(7mbVc@8 z)Y9$Eg_F_H50BWBjPEJT6He~PduHpjA=qcW%N&y*)bt>L4^6OWau<`WNE3LvN~3Yw zR(#`A1N0?hg_=yZ@vtN08Dr;REdwk%ZGb3T+E7^f*5?pTz&VC)HXVA(u@QVPw?tTt zX-3w4fdxkU`7Y@A%fU$cc|@)DfKRu4TpeHgqC7;FQlcbgB?vd5Hx1oEfJ+ z?-yQMHV^PsN1oq5k2%gB2XvvRyoL1N@2RXHhx1uj1xp}lPy@6X5KAS+SM#MXfW6zs z@|U&6EZK#<9wVMm40orc3ci=@md4pG&%PAMNRL-Hnf~oimxC-s1jYp9Oqg77s!N_2 zym*df=fawkssQ6@*KS3T&>=-1~ji&W&*3)DciI;>bH3TShHSd71sVvr00Omp@QNV<)Wf}8$30r zdD((OZ}I?68N(toWqb1-`@j;Wq|4eY{%MOIV6*ZGOIoGrdcVN+@lFBlC=A*{ZLi3Y5+cJJbWWE`v`OBjrs5scgxnd-CU*#Y>kON222!cq;?L~pVn^kPche>j>57>=0 z5)I)G3Fs&bP+xkhjZKccHud1{I8#gmSu1N_AuE@}=BNMAn@7NT1j_iHqi;;Tc@s#i zHN-+?)dn{UKo`{X+s<6|=kO2^wRLZr7B!0MpMQP0^UFNBA92hI@S$5?ql;8p80LW- za%7ze@rMzs@&b~Br9yvHb<(LE@C*EF_S$`DaOVYd0qs_tNeYq5NMJ=HN7n6cB9I*e zek)tLxp|YIx(%>7<908;-tYJYt62y|u#R0xxb6Y|$WfJ#f_`p&U4V_HvM1Y1HfpIG z;0;t4t%>K}`{aO#AfDx4-fy>n7r^5LWELQwHmN@_Be$LQA1bcoK*xb>g!dsUvo4nf z>`q!UX`-~()#XhM?S}X}6Ej`&6zE`PC$~U4_1v2v(p1r~xqJejHy=a<{P$B=1v#5* z0`_@LSU;mv`%N++`yuVlrIYsjj&>liKV9y^PQ+yY4P--2`)@F*mXRy}kTQh+u zl{lQSp8nzVz11CJ2PmkMBv0t+{VIC!y>orU)nH$Hg@Zbo&pZFnRHsX%3E2zdt}Br_ z?GtDTL8n7cYFLBl0J*uBl}7wGphGz8{B&$ipXG6x;B4sr+p}{%q!}#&kE5}*pmraH zLKHaN>=kFHHkJYkyJjqsP4{7X_79vIPfB#@nRsX0DeSi@j<@41U-E``6Pc~@mJ!yw zf`MF+b29Z{JxzB&R)Kx1QKNo`JC(tiQQfU^W@Ms7nNLZWo$3!7JS)7FI}7e*rJEkpkYq=}2)KeRSF$ z(d`R-S)Z)9mT4Nb|GOd5aM6&u*YFGgQHT+$H=R2T;sN3^rsn$lEe4D+0aQ@a-K%A$ zUH?0DU^lAk6N-{%Q4hpOlxM89GGgx^!2H4M)-x^bu;&ZxbG5w?!|K0ehr%j2OW+oC z8HPW9_4o80j0W|&{kE5ZZO6=LK7QOplQgivzD1o}W4F6{+SyvA9m z+bA;}II#Sf_gz`+P{^hOI%w>jrOeeTpFQ{h33~=>5agKUFS|;{KB7RWBd$G|JUvQ zsZ8r2Nk9j`**(6bC7xXbe6PuMlTsgVY8rv$T$NeyrZo6m3-;>$_6VCE)y^S-ceV|g zHh80+<{CV;c04J249&P5@)Pogc>h^&Bep^PWOAB+ru%zXt^;pOB225hD~n4E?8e$5 zzk_X5q0E7&<996(Jeev4IMqed#G;87jrJfjEjN&|^m*1Zn80oXgz`NN22Y$6pxlse zSfc8O?`VNjFuaPr`rOmb3CQ!vcinP5BV)V(Hd~1cC;h+kltv(R*6R$JX9%1kUtwIL)yj$RwZ}#+4!tXlA{=h2bl&YjU-Bi{E zD2S8Pq!Jo(3U^?0jB#LQW1b1F1AamCNt+e?I2KB9&+h&K%XwsI?QDRCwo!$=bB_=R zc;6i+$S@Ssx8O6F+3qt(pG)p;YY-j(?NQ{5Ye89XVwbuULiGyGa6Vy=HlO{UrR&&s z6v(0fGV588F-vkz2Ai-Wn4B|w{k*E4U7zNGp-SOOC0)%7H*I@V06S@nALI|@ZX^op zpp0XU7CNOS7WM+L7)P%X^{T@!K*%cYd}~{JleY`vUq(FZWak7)fc2u0Ptwjh`OVA& zn`1F%ONcds-!+h&{rzC{M_US>1iFvr3YqfZRP+^)SViWLMqYU&(!g46EK*4Os4B_? zdwAbm+Ia$nFK}L)=^mfNyNye$fG)(xb0;%phi?t&pq((mD9qoCPJoTQo_e!sQJ0V}dYouvcG<7~p@)xXz)g-@oV{H|W zf$odWR1b=k3p3=s#AB1j6_Yab9(GbYQG(i?m3JI}@_{w3O`m_waMz zWKy}Ry3ln=z@n!=ymh>_GS0PJ;d;oGQmtH0D;9)l# z;GFI)dK|;hBZ9%2A|sZ%ELw8ffM@0066x~KFzN!}N#~8x^;~3h4r}C6ZUA>ch`(ou z%HmF02QsN5f`9M9%%=m8NmCnyyOFG~v;Z7?#ec!mG}qIZK;Aq%3$92aS`F5FE9%Z~ zKTW*`I8Q|RX`%jG##w{&e>2R{cEydnQ3U#{3HCR(v9kQfV0L{z{og-7&87p}ZU%dk zf0*{X7uXZmcX~zaY`x3?ZCW3aA00UoE*hTy(%X%xCMDAxu%aEEl8O06ElC33t3`!& zQo$AxJ|F15HsyaXXiEuFD4aL5!9NoGz9=fn62X z$xY@F=HH@#I7bcGJfJF^U}3kcS_yqxtV&;idnLgoj!rby_5kuMFiq`+nC**jZd&qT zElP6#O!f*qo$#*K;!Rx3tpFUWlGTgnsV0oq-eQ*LFiy^-?YdL~V~8 zX{*XKeMAAI%6`~5Vdv*9`2cSOu0;gBYzpK9=R4OT$De-qYY*VN`zqGga9QJR1+p>s zOSfA4lo&a9#3erLp9RmeVS%_-NjYwGquHaz{2dya1X8_t^1uO?e7?05|V_cQJDj)5@KCqgx^ZI9mw;Ebe=!#({R3lB~-tl0 z5OI+8#RPA4$K0Xo>HO!GL2e|Km{N6((5XnEzrtf+=kMMcqXSacv|kII(u+kPuej25 zf_UjlRva)tDPJP_VW?#O!dZ=@6m4d0IN1xtk`i)_qR8SLqku2MYksGdVSl|nV9osI zu8<@zCj|rOnyGt@v0hk9GVoloxO$X{BWi_be1y3WBy%k-0+CEZCeE48dCq=-{suzC ze>z^_TpR3yZ&?2R>K5f=0?Y993f{St;{Gb&o!yUoydBT=HOOA*(2A2iW`&!u8w=CL z@A0hlUz7lR+2RN&p_Hm9NMN1wiFUF{P^0z>khzHB?%}Kq&RHOaB|6zW&ts1w1mM`v zSh`R|?7sj4;OBKS!uS5vae{$eU>Qj#%VaB04QR^zMf4}0w_3Wv4!(xfVJV$JiwVxQ zJJ9HKf1J#BAUAR^&-iRc!${CRGb!&Ndyfe;4Zc_3b&@r3#Y!NnUa`sYA#A7@${tgs-14$4J{g=5iJV3oYP*zJK zOHDD~DSny&YvZ$(a;;!Qo*2jmS%y~iT#^0{Z_qvA_sI~viv(zB`=?zrZK#}l0m*T? z&kOU~b|f|MU-v2%N7=SQlJp!ws*{|;_@{>2GTbL9&41F4+UWB63V{u>F2U0WT;az zBSx?zy6qF7zG(4kGU#W!eu3;XyMF_d(9?pn;M|9?%ObpI9j_#q3k>op)B%U7B_i?f#TC&1oh9%q?Bb>t@n`07amQ6gOY!z2I& z3CU0v9w(?SIl6nqGop?#m#e-fWOK(b{Uk8b)Pg;bv|slZ)&S(T z*R@|;-eSW!kImo?9ZUbd0%Y?euR&{GwN4fhh$c+`BQLA3Nja<>c$0#w&hSG{zv?D(B}LYNo|n=_e2fgNe2s7mTVIiP-y=5 zKd12fyh04T72~(;uOj7vTY=q>#rcRB{ovLa zAoE0P^~v^SH#30EiTk>~Hgya11Dv$ZcCTh=r1SqKNK%+((S9Z`f(9@WP0FfM2ehjf zU?p!hdbKz@C>LbJoqgjTL%y8i4`lJp?&c7h`aa&!UL~XDPd&%vJJ5ZO=Osxo-`j@< z_-b{^L0|SEa7VBjSyO4WG=|N(!i;+E-UJe8#BoC3eY3_D?|SQQus_r?ccG1lS)736 zIJ!f1SbIpZ1S(+$OjhOJ;+1vU9P zkM8iq72o+8pgslTpFk5LS<-;SItLdRdu3X<2y3>#rw}>EohT<{K76TxR$k$|gB9K7 z^wO7yh%B-Jk`p5y86)ZPYasu|m9CN8=Si>F!0%5{?UXIau15o~_kD(ScvVxKX2Acx zLSG0_*TLcxN-TC+?npn$%z@oEV(uKm;*D)z@Z_m`ip)KSA6fzYoU__vl;18cXkZC> zEcQFH>SGEAG0u1RxHLIzbf&?~NkmdhkrR7@f?a5s5?99Eyqy%Dd9~@bxmo&t1+c0! zTh1zrc&VU(#BOXYjJP{(IR`X!?0;n)B+~V_lRyWjQnjS%u_zAKBT3WF-=TG_Bd8ec zESWaaJHkHjoPA~dI{s3UzK#H?PJDfYtd$PE1TbN_zv*7=zTuYvwl3rwP0W7$J@Eh& z7Rz_8h?^3}9ZpyM3RZ}^oKn*?OuTuX7hcAGE?JvWGyIGP_54#$tHuAT!?|L}H zS0U7JmyuUe2AOIIqrJ4%P7OFw zLd3nx=srxOy1*j!l!9JKtDQ^*@J8@Dq@}Qtu!7S!yduF3zo6&Z0?{Il<)Mxtaw^PV ze+wDUQr-OCQ3|eNa`JopYAh1iv#dNJDh@B-8!51ZRh+cs>oP9;hBZ{v!pGyQ=R(Mx zRd=tu3KatXI8+I7UZ7@x>RMqwB!L{N|vGa+9Az}Yu^-~w)){u7qv<3sdaEo$dB3S63Tg`9 zAh)`SpXv?m#$j#xY*2%jPGB|4J+2-0^xp~x8Dg<7{vHuAq<ABt7NgbxZwRhntV2AXk^sVtC=8PVmmr15eESDW%4hpgmh3FTXZ8CDk0}JfNiBUAytF~bk z>nBm&4HZLcJAp-t`8uD1yvlF0k{|j8{<(l;7)weVWRMp8MZh4PFT9 zf~u}g%y;?y;$QI2S^7&bmcLEe1E^0&9evN=e-=%1p~Mc~9D6%G-GMJ!XDh$L>@Tu~ zbCwUJ*&>w?&}{{4HB`Rn^x1;^I|CAG_q>Tq$<7H*4Dq}kn=a3aT_DdVS>hob3+XX~ zOz%D|DQN{nU~91I;P~!hS#pM+f!+6%jaXMK_EZ6&puHZr%%Ph<5eGhHO(u*!On>syk*PGVZMkbA=}XNyDs`{q_Zk1rJR zi~hnQ@xP1lBTdM?(`a{hbD)CJ*!|O^9=ogZ0uymYic_{49{CF3 zI^sgHI-G3ffc?LnTYvXciFV}!BzAO*9jm8Ee8HJqx})|xxE+l$Vq*Jj0DIk>#DEjtM!3ZtP{&lmD7)T4faUP$l_!c=I29Z z9*^|8mBaa$s{$l5jKwfx+*idRTQV9Q@0a;ID;9xM0ug^k{SQgvBhdXkZAU(+Y*LP) zjSZM@oYV69uLEV7-C+2P!c02=$?Qd0Hk>zz91r%l?(Mb7QtutfARgq@CSB@N561+o zq*5QnU5otWI6y<^qGrgWGtU*y9u0f$OJwZa9)qAY&Ot7z zX?un^)?0yroQlhb?xbrf`yHOqe?siNq;Jp2DNrL9J0yar^0#as{MrqMPac$R`~V;EN=7B{;=P)9wNH4*gdiI@%;`73d&>(IZXbY~i~g z3!%T!Xl#t+mGl7Rs%#_I=&lhH0Z%=MW?T9oSr5o>#_v4)>1{7(3Se_kPU+nJG`AF< z0rkyawE8WzVXlB4RUx(>XcEg`$TTJILP40g>hB1!gpV~6@5}sD6pYJWcguEYgw8dr zBuB;VryuR`^aAi@hf)06#m8Tx06cqkq8xksZhTxou25q9oa;rd|ConKhimpM(S3;r zPgV#NGoIxyo{9kWwr0T^u4Wj1u!=^=IQr9Wx5;$C)^WJH3PWzbhZi`TATM{5=ma4< z$kFY6Yy%a)oFH}pjp(96Z@e{9N(gN1EyjeVTnQ~%0P}mgX;X)R<;MdM#nuK}pfI23 z#{+rpxW2?RBA%u%@N`o2DPGYt&^l!Dv}vECn+Q?9JJ9aiI|>AO<^D6lZb}Ew0(GvX z!2~;q*|BI*mBPpmkgH!^{z&-_V9HASLz^V+d<~Wy; zzC>7|(RJuM#TCA^Jvf`=r0Z1ln!=8N)Xke~ZrM{SZ`glit+>3S`-fys=#L^>-|eR{ zTR8JH2#MRc{hYSowA`JFl`a$HhKBv@c4lu9zb}UX8TtOSPi-2yLq*7qcJK4W>m5&? zkV~0DwkCeLTam+AjjPya&!0RfoC2%hN`238j@JXoz2k8FJW)QUJYOI=)_$oWH4GU6 zStD#U7Rb%1KDP!lkOS$S!FK#exJUVKv!`1^^-ToPapXu2x`*UV5de#JsH|)C62~3^ z<0DnJD;;^wiUZ!t)>Pdw4DKm4u=^jwtPL~Cx*-KtM^3uZCH)Nrm?>s8J!{px}zqlH(_&Y!E+d$5DE z+fKKw<>dsq4tyS)Ur1q`PYJw+OOo+}DIEInKql?xD~Um-6B+EP2rKky^W=AB3-o2e zcZ~_z%W)a#(S*Mj&J;D}g!9T@V$Ef75nYcD(1;Q#F7BfAVtH^LJ%RdJ((YY+fjy#w zo{#k1VqO8PD!E4483fD9IXIX0T))coQ&!)Ce8_T3E&Iqkssc~L(>1}UX6`)5UCuwdXuvWaoQl1m-G7oDn%TW+Mro%F?6~rl(uGrs#m$2XqPL}2T zFD%;<@-x8M9G0L`+_~j!&;zTYF&~-NkyAUUTVUDWwPn4N+hukT{8R== ze@td#{j1u+?u+iXk&^)@77oUA_n{0164)f12ehv4QV8|;S47~{nn+TUM=T!KG21QuSb%6@FK%NCgItJt`GT7n7F_q z<;rKMKTl!DCx}Do%j=Tt_^q4`PPC~+4AZzd=SBqI>$C4c-wH2G;Y@P~75fcoBqn^EU^iZ?<>J?C3YmS9y|ifQ=P$aUVv4 zizLYEGdGpgTe@iGa1P)rrqBDMt9jc1KS&0l+JZKnd>#1i!C@jDm)xGaFiRfem``Ubh#iHjg(DwiJh;>aK;~}0uFpJ2S`1pVW^LiL#Fhs_}%pf zFXuo14yF73q6WKD`bm!?4o3PtmEo2J6IbJkHfUfzreWb_|1RqW}+r!HAn9nr5E|mJH9?+pz52@LO3M&=gzfKT?Bq z&rHB7DXd)DL|oiy2H#uMy!yUL-;CfyMI71R!S^jjO$N>;u;CS@)8Uw$4D;=b=f7iA zo=4bw=>Dlp5;$nbT|nwcrIMvzNWYT<;8-bS{(d#Htxp8*btEC@2?>jXFW7zLvsSBY zeM;#7(w+vml6nQkd?LboH#jH#HF&OoLqFRkb|rM5Jzfn4agGc_p* zV+rIa>L5H#iwkN_0N=}g9#z;EEy;esPLiq8z3lL~gBam?iI3>}+E}@y)D>r?lt3w`ChGb06!N|SqQs)t~2_NFL!QAS9Mhta)XDBLA%pP zi!~0pm3&K9NHH(357>P^ZQUY9yy^7@wvHK-aTJ#09%23SFxszq;|`AtflqO|F_@p= z{4y-?-MPk7NWT2JWH>c|Do38p#%Hox5SOX%{Y!O!0YAOMS?4!0E`Ordge1&AuRFEm zj8_ON@RHmxBPGX4o&jeV@pER($d~?JHe}Vq#vC=!>cZd@NRf;&GVn*vEdVw%0$w6C zNAl1MoR+4j`q`~&vIpqtma=fR1KHKz3S#yMc}9s4s-QE$7qOA8rbF=epFQ{@5wEpH z#I(OC0q8zKhACw^{Ga^>Qir{4=f&1i?GwO0H^j~M?n7521D@<~gU5PBj`0=HBaEh! zConC(p}@&h;)7*FJ}0*Vzu-p2hF)DJ849@ip+%}t=7@_KSW)&MRQDUq7stU#2k&bk zRneLo1w@PSB4^vc_L}gNP|Hqh4bzg8M%W*!4!hSG*ZVF&R;|Of-`Zz^9KiV+ef%99 z)K*t-1naDK{cscWf@H83k;7O~RNLmJVb{4a4ewbKnpGuXeI2hS^tadtiQM}NI+}b?{4d9JmxRC8F`12ss$#fPX09;24en2x}XuAo(-Y>I9>^8uMRR%~ESIz$W4Lh1x3K*AN z!|$~&4N5^Rv&k&?zbmB*z~=ZrlJLVUy2cvFvwuD{I`Fi{LH49ytE#r7n4FM-C`K`# zYkjxei!9)z`_D7Zz5C{G7si8|(bZS-TXq-tqtliO8PQwblYviJPN9FtV;OTV;5F=H zN7z**e)0wG6^SI%p0MqIE%3jg_+^;W`FP0zXZhvtM#6tlF2KH2rlN)SF%c0W1F56i zv@5a%t8)_E%fJ4jirLP~^Z}>g;=NujryEgX0;}@6H5SV&%hTb++w}QZZ}IzH9UI_S zXEBj;H`3pr!gh>u<)|BdBb5(qfm z+ax1ty_D9TLU5I>(^<&!KAK>a#d|U*MBPnI2w=s+n^rz~fY^r#zUXgF%2(pY3>gEt zx`Tds^eo|;4rI3^pJw*mb{fdBh=CNKPdp45y z9QY&IIQ_37{?Gz}^^>_wvZvF$e-51QtUa>pA6rJj+-6QnRU%3)Zlmx-`-hUAlWB(w zGd9K*#g#S6T-pL}b;XW+)Xn9maF)<3XnE(@)p9IhH`c4mZv1;w8VT&iIOqdUdV42V z;NH7fG_$7^E6u=Lu@M>YyQX)Y1G&(B1?m4hiO%()o=_v4Xl}XYv|wd*cSwvw&z5@B zAZoLQA|c!#DxV>+?IrrBL8*zos0vtygleMxn}M?rP(ddZ>WRO$h7(nwN0wALslGOK z3TsVcV-2fTNvwYs$>~F#(jr#KA)9WD2)kII?q0&EO?i6fJ29L;z=`BBwOpv#h5R!^ zhPs-T8lr4kCIFcPN%UyNr#Q@pjC{*E*K|vdf!c!@2Q?D=nbPz7g;j7|wI@Vb)d>q{ za>a`oboWm5QVW^G?|sqLICK87*+tCAWCXRcL+N_{@$#9=@-J_qu_lfZpkIE}HCHvjlKF)Bem zH%6+BkUY{7!@wRLO_O2sBk73+Y)++0?9M!^W4s{inlfSc7^SIN17u!GW!tcv$>9W$ zjguYf_$#qnbc5gZgO@pSe|Bf>u2m#@;y<7%MR?OY&B?9-r$L=T_gSQ0UR41=xt`j)EcI>N+eSoOqKu%I2Q2?foWpC9ld3;}Tyc(Hw5df&NjxE zSgqbBten@=-``ug;=O}=jlxNKp-FyI4YaIb$K5Pi2`eFHV0z4nn&rcfFyopLae=ds z7D<^)d9eIZ!fb%h+TwQ#N^OIjA-|+Pjp>^@InZug+*K4 zmWBN|{BNI>myFRHKz)y~4}^&6?^jIS4|ai_#v&+c9C<0Qu}PCx`+WR`LvL_W(_{gs8rX|lVGr+!Pp^_+ zR(t1RPKJoqcm4M{*$c$%(`I9qZ5vwufw{hgEQWi>eGz6bDm7Y?ybko23UJP*g-#_- z{nPZwK0eU4rxW+iAG$Q*)Q|q~K9X@=bCCfosus!Do@LwTA^!$@rPNHl zKm9|&Gwa~}yojmZiZ@s*r??El~9r72xGZ_n3V?ZYPoW)n^!R+Nh(nX5Puf2YN{>IM6b3bvsND|<>)2wS+ zDRT>jQ<)aw8N%V|)fLtupWz;`(zuNwJpcW^>QVnV`>OlEZXEX-RH3I*Haw}3pJz?D z0$pU-0g8!;=eh^tmN&S%o3+edmv1WRzu5T@ifL2lR|4K@k;Ut^&0fkz!180?x0bc} zIEoPU(IeNZ``YQ@4^)L!N>}GYt!@UK3c)0(*oaiP+6k-&Mqj5n$|T_kz&?+qcc*IF z`z}0(tqjYa&qF4$e;xYH@%9sWbczGqJAOZ^K~I9QXE5W+N$PwI5pUAaw&(0ik(F*) zA%C6Na;oxKKE3+_h{D3j&?VBxpdbdePD<>9ybwMz%o1b%`SRuL6LcUCjP`WOh%(6} z3cyI>KsTqN=QT<}_I{FyOq5d|4ECgN&AZQt6KjJRTEdS?VXE*W(hyvA18=s@nEdep zzzqItu_L`=n)w6JwPP}ic$+N$g3K-6JcJLTi>Xxu{S~i+{?n}9@CL|qfg?*{R@m_8 z-+-5FL>Hyq{a_=oM{k3bmT|{;%?EfgqxU~|8%^q4188#!e&yKpyI*f0n&>P!^u#l3 zBgku7Q61M^dlh4F!jb!l_nzShz0csJu<#CIzF&y|qOXaPgKiZYjktg=yr$Nxq(C2g z4tN|dxvKeg(J+9$hqq}jo9nG*3TGFRt*Q-mZ({riu6p>htKS!kGa1w}S*RveqyHon zp!)E<^{_#kRNH|}Mw&}pH5#+)0xZ9QO8V>Nvl#jU?_5VziKnAjI5XsP^L28^38G

1^3u6gxh0@U(PAuG!?;RV!=A=T>idQqD?mijafd`&iY^475qW z3aj9E$Sf=CX$a7lX#4Fail;}%!0&Du7M!^4p2`NY0fGkRyjv(nKwTh`5_{oJ==7BY z9y8*T*U?w1jmOoB6g1QLbIc z5sJ!RU2z>zr(o~@ZhO0d;GTPkAUc-9C1dm|Jf{};ltImX))&-QhQt2fC}?U@>3IiY z;96ctWxDsb%LB~7EYcKNrjoD@oStJ6^i99?r}06a&~*h@)|oW&d|*Y}oU$`x@m?qN zp$qz_R*QVD20S6!MPA@WGIwVacpR2<#^AfDm;@`j- zlZJkjnWBe!Z4N-Hze($UQ_$J-2jJ&BbGVRs?}i5JRkD2MjXE(uZvoDm(28Zl;wY0~ zH%FIO1RK?7=`&z8`1I-9Pd^Yz15Pbd=YHsgIk@Z#*&4^!YklgL9V?KN3F5Asc#T7B zIKyaFLSM1B%IHJ+A7ZRNm{Q{}3(kunS2MJ{T(=>fq~^$RUoO8o5A0t!ND*7UK_>qI zR{4^mZsR*m6gcb;jn|Vm!oM(n1^U}x2pP%-5ho9bHH>djx3e{6KD;_E) zz#H#()h8$|J9Z3o@GUhlAw=uzy8yefm&W|!Oyl$MKvs?5ExB8+Q5gsj|2FjBRx{j= z{NX?#&pFSH8u> zW95SueHJ#b92LL~RsI8FL z+T!X9&hn%CWZ|fe{Mo=Vgs%O*Dh`Vc5qM`)e_rJj@gZYxP=AS$d>^-MkKoCKOB@WQ zv7xenwQ`56E(=HL4Dw(7l~7ao#G}Oq-Z_tP_Wi{cpJad~lvLNQb9(qaA@D~CR&8RU z_|9d)GtJDI&gNZr;RCb`F@dbziBAGeg|}NfTtmz3m$RvL^FJ0do6xT|WPeZ9Hm_{Yawv9r68A&(OxI)Zo`; z{D&HIfJTTC#ZSaE*RBAoA-{uL^Zmc@ECP9zS8s)T`8%;&1Tk#)$Yo5|S8W>LcReqT znBg_3Mg{IQn76kF^PfM4C!YKmP)3ZhZ)XJY!jO`S&sQXiOF$PMePM%npVJ?#j@A@X zA=R>cA8-bWXusQAu4X9~fUV25={A*Ue1Zq8r1s~gUivF`!xdl#l(5U{9b$S8*>%eH zNVdfdz9a(YOCEjdY{`|8Fd{gpw2^#)+VKqbrfIFVm_~7;FNij!GDikO- zxR}P11F)H|>(`$mG?_{R&z^pMD&fhNnnC6zZQ1`2qonxy34Ds%ZDzLrg-ko-Q*DZO zH$R?yTyTyjZA?hP$`ZLfAWEIMxN?2%MAJ9qb+J)5QrG<%Q}E6>6K*-?$Od}?uVIgK zX*Ig=_6Jy#Po^UBZp6Pof~-E{*L*@_u&x|few1tHkL_<+p{xzEA7NA02Mg&vSOZk;4uOGZ$~49>JK~KmOvL+ z`He(ZB?h?;xk^k=4jH~4qy_l0fVPI}u|`&_K$IE++Rp3LQbPt2knNR6M;5^`lprd< zf=km^Bg3l<>>$Zilsy>qALxS}D1Jz!C?-&I31?DE?3d3aTtW|kkWD78?~MH%;txET zBvtamyFI$>z?Tiefr=Rln4E!axB0HE^5a(#G{DaqE^HF^!DCS`;9C8ejqTZS3U<6Y zJgcy8#X7$xI0F*ZD@22UZ#* z<4Ab)Y{*j$YUGT>|5*}=nrH-UtoHYS{BLh z1mBLUnRP4C9y6c|PtM#zsqg{w0ovV}*76<2&L2$RL$^|nZR@v07@TpFUc{H>zJ(-l z0N2%b%169?VPgqU!SCc7_N&hc52tP=8ab6%?7WvB@UYKc)Qvk<=MEgm6(AyoRx7Ue zkpyHT)Zaom5^*-|aLyxhmYrjcLngzsMf>&5!isu10?2Q;d6gT4bDYTzqT`?Isk*bz zJW~OT&aR;mu3oP~ATZpef;lKB1UKk=lZLhm{p`mUXyI1o5xpn;X9i zp=Dhl9`tlcSikp(m2l?T=T+dNL|KDWf_FxQFIkP;sP;a8En}0z0AwCD+D;z=;-?olKQi(lPLw}0?6?%Xce50y z?|K?`7Y_XJd!dV**svSAjWD-zxcBvS;pxMX@8OpIKE4KafpbY#=WV4&dDuBlN~!rl zh0qmYm6RUN45OJ^P{3*C=#huWzSrLtNIQ9XxcWgwdh&q8a=dP=fkoc44>VNu!j?+# zBau1qRx{v4aDU^_q##R-Pj074;<}9m*!|h9`skA$-3QK>6jIyWIm|xB8(5_1=KN^+ z;Vwsipg)QPaZP@vD*(B2T=Kq4;GJoG>K@MUGDDys$`yKB;<>K#fj^2vggCHgB_$4^pg(99grdt%uNuS)X;bZ* zc7GYw12~6CnjsLzU)ijXGt-@oO%6Z3C<3dJUt)*s9Xffi%db7xAo~N5tK@&>xTudlvXRxqYB+_^@S7gA9x!0nh{;z`Je_w)i0fnh3v z)g#MWX&^hLP&rRfB_&Zqma0Ii%_}>%9&#IM`zFg(CC`@zP@m8InCK`~+=11kGJK}t;I24^KBB8#NL zC01V%SYYgjM^BurvILnf)T9xVQ~!%aQm_khqMS7L7b)`&c;^O{U7e>WaZNjD2@knm zSanok4+5ICOmyo4I*4E;O*){uXz~yn_B~NfA-3y2`@4)lFWG-3M1Ow&@N@cpKEhjm zrV?6yKWwk(^#>dLFTk;#S2)~6h+~4mx&qo9!dR|e1Dsr0P-I5>!fG5k*rRCRIrTbm z6oDDno2`0*Q*knlffYqE57ldAF+?2Lx(mVe!6CJ1>i}k`-M6C%$T;*K$T6Nr7^b5h zMScVjqdA_T?OeNr?EoWfF9+XWe!cx{5S1^M^mAWocLprbeH9x;+o5#EOM#tS-3^O;y0=+WZ0g)v7HCr7Y1&9^sctJa^41Dg}1jcf8>ks}juHJJ+1 zFB=-id0+`ojp9KWT%0*T7c6_Z$&cP`eFb#Ciq+V2%Qs5EdWI3B+UE}h&Rqk!{nMX; zvw`Sc8(7KxR~VJKyoY6h{dDos&3{6g&+ufqC1f#43)+cq5O?oWVe{*&yowh1&~mP? zy&rQac>(m*N7*1Ol&(l{x>)&oPmx~M z$UzE*_VxeqGj!NhO2)|@Fm@KGWwxj_7FwW#IufwMJV=}j`(Y2+eYpX}`1uFy5hF2d zd-EZ0Rlu6v?BKf1dd0W}FoR`CN}ou<@q<~@ce6di`y6~U2KLz`ZiU}@r4tVj#nfg$ zyv|?nVG77B{aFU&yt&I&K@^i_AJQ(Egz09mzrm@WCw>Wp1-nOsjecR(Eo^=bnYCoL z3?0i`T@JEv>%L(J`D>malPA?7=%onE&_SjtnN#as>-c-wfLsl1RcZ6(^HBs4g{Af1 z!xWtv-GN`=CFvH(ueJR$u+FRJz7g7H*dPGj`S%@X=QNhRfHN|Ft48g+Oh!ltq;9fR z-aMFLLLqbb>1uXqN3ob>0M#2?c7-x(q$Ur4_uaGg>n7Mv1{S!YH%l{<^be7N+?Toh zS?2)JS1$yaUURMNubrYy>jAXcYjajHg-?3|&@ypOx8h8X@n0Wbp0kO=)?2EMz?y}7 zZ>|gCdvXM8)yDX&T^&DnIRCeD0|Eb*w0v|ROS~w|%VUN81EpUZ#mK1zE7_jE=*G~b@>y?)3S5-b`eq6}s41kY z<3dhx7pkWXs?}7jvr#e3|zZ zRKQ)reBs2s@8Z(xq(2|C1Ag#+`VTgn1-iT-29{C^k)=%TLhx4P;3gj|zApTNwY3kD zy;MICRTtO|dPoFctRmC7L6q89nn6x)bQDAUDOVO6|0kGC#rD@nT<_f?>Sy6@ivz zs2^)@Sqv;VUG!Nde@BFvRvl20Lfc&y-(hrQ30SK=VjBt%68uAfFY1M&c&b-XBQorY zLW<||FGIc)AUPbl&@Gy#IBNjhuCpGZ#8z!#KJdQ*#g|xH|60`s*88nDwITZTZ-!G5 z>nR$)IGgjD4{Z+DkWr_vii!YxgRVDX;B^*?ypcp(#DR>HBl@>Y%?7lV!&@yShE8g{&Lg1RtlQc<-7U$E0Q z6eVNi{(!0n{DPG7jqSzAtkh7C^4>idZxtOG*ehi3`Q;`0`6feVX_t-ZqxmI#3HIpE zOE}**>#Oe`u9#3g7yT6 z0W!O{A$no?>hvYLJ*ug2=w*t)5ZA!|)f>2pwE$Chv!6ULf0}D*C;BPlNLqaE`Vw zSIPQCv_TB2ls$x`RwtIVItPBTP29QH6yrU@sh7m9yiULOmfMDzPs%C1elbTqhtv9G zDL3!RFzy)O=lt`Muss;UU%%0)~}CoLVYBY z8X7Hfc*MhjXJEYj%k(t0)A0V6F{f1H(3Wd5*e8;GmBL@i!TNx+k11-AAxXdR7ObrP zBSgH8;=%)KYh^|L!|j?Ok0D@-n(8V1ec6^yg3L)OAQP*~!BTwzv(}5lrXru}qzBm5 zSgQ4A?zQG2fV1~XHcFy(Aj$|%nQAo8sigi^!VF|KZQ*RC3t{pf|Mq$-XuC;HmjYM}_s3S-VpmA#4f0oC@h@grJh?P8 z$k@zb?X^hA}y}N>b4B zu)Uhb*eqJC3b+fnV0*uWoKmK2o1g|v)B8hiPqtV12lm7vn1c3w8y{l`m58t^{Rz)~ zs&EPwW7e8bFP%*b;QU^9TkBZRChZL3(VG8pNgb8h+=97H`4M}97=Aw-pv|_TnqWMO z9|N^Y6s|%HV=l;#0M4M(emo-9`~8k#?wa|2GS4%(9@ZpatM&1JmO|Ms)EL}`WXkxB zTX3*eg8TDYqA0^}2`mSVO8ob3(hC{E8C+J5=h||4At$hB+#kZHlRrLVfH#sF)=#=` zC4M2_*A`C3%^K;^5?Fg%GfH@zf6p3&)$om_XL2N{9yrZyBa#Ydk%oP05W8!FY%cLR z&9Md?=fmWzNf7hIeKTmzq$fE%t8+-)=bL*bB7=Y`F^E%&D zBY!E_b^gqjxsG#PNDAQli9A{##+k&Q0IUwb@clP9A69{Q<6URI_~%!HV+WrO7I(<< zR!#!UY*Wd88EKI5KHQ_C*-o7XeYPsFC^)C4;{raTI{)>Cvyy*fHBrus z(EJC?;qdaMPY2?D5~VU$ zxJyJy@P06Il?T~Mx5dCI`@9v4U8QM@7MN!!b%IY#YquJZNoc8`M9|8~qz8y}IN?_j zrF{BW1^h@l0^_kh$eFnck8v6RgXSPAQMN?ABDxgo3w_}H($eiJ#aNgLj?o6(n4?wa`yu-dTr1U5|u z&*%1_4o0Yk;!sSl0L~$*oM!XOqxp6%K=nm#N=0r_T@STcOiX@kyp;Eq1$lV4YKUP4=DDW7tdE6RW_<(jh}tTO;{YXS~*L3TjFe(RtB-0N6!65cglGZfspl zR+tI00aEOIjNQac&4s|JTEE56HU~t=RQxfU>CeMSfZ^Wv8h%N3$%!vu#~$`)mEVesus86NCz<4o zdL7HB0pFdMf$0if?J+oWZEKcG+lAOI;aq@|wDORMtQm*8E`MQa{msEVFa?NK`L}$G z#<*pJf>YGZ-Z4wLR7I$rMY*$CtgE0n71+VQkbZuruyk?Q6DP&&$LQw$9d_WCD>RJ~ zCtFk`~OSjq!fj{R2e_M47)oPzi}dgA<=@AiFU00p&3n|ogs6J`b2hNxC! zscZtj#;}TJsa;t!o2!PpJ&ZWSQH2Tq`~opFH?sKRt<99+{XP+J)|n>Bm3qJ?6*)ud zXlaJ^4ScM&A-C(**b+-LG$L4LBLEx#30I>Vv1As1dICY=aHWZ-`%uV?DL!UPSgiv;d2F1K^5($H z7g(!GP2Y0xd0!6f0rZB8T+wmCu@sz8EpV(OS+iG40!E;DCvqh1r?CrI&mhE3ZT)eV zw+lQ2*AEYw530+~Ad_#HL(UM*@4w5S(JGE^BS@rtP2uzCGnZ_?L!qZ;yMd|*Aqr>VEuF0FCXRQ zza2O+)36n*Xq~nbZg2)q0jS?MMT27i;P?Z{SGrtSb%5~la#}4wdx$eFHcT-Wc5Ci zQ3yUw_|IGBdV{z*fS?YP-VyBOY^B6i|T^2)utcx)C9kSg9 zy07p)bSpXLi9dG_PpBK$LcCk@?+-PC6Ka}s3WOYAup^QXSmy6&JtPGyy6;b~B87*M z4OFU8YiSVJ@DCPD0OvIAcqB_Oqk9GGkl(es%)ZNQB*<i*cD64qawenNQT`Ne%^lGq@-0B(<+-X>c5 z35pl+&u7si#!^S@BNeG=|QH$`ZuR0(}fbn_0BtJVD0=*6wx7i zV|xSQZ#W}t(=~p_nwj3aQmY2o>pe!D-73-8M^Wt#Q1xsC>$P{eD8WGT6h zRsmLd=rj44jFX=u%-0S3$W|ovR$%V~H9MueL^Q#|v*0qjgdxL&&?lS&h_Ohqj`*J^ z1i29=VdNW~=wDZYxNw~To`_69I1Pwa%cVat`sw6D0?*9%kxGPrWE_tm>WeL{FgG<( zd*Hp-w9cz5va>V>Po;i5raQDnD-jT#Tj6E*AED2s4LlWPExmOSfs(5Ls|1Ab2O4oa7_(OpnXq0I^zI-5v+W0*pF&X+vTOk- zeqmj%-Ck_lCvNqIb*fb+D6jG9&@2KdmvzwL{S?eaLzIiY6J+qcWSnJ?7i|MW4mHD0 zRusT?|=UjQ*q@u z?c2{gz*kh1dZkc0W`KkIm0QbcA%ZK3*&PI-qGhOfr!N>#&DAIO$Tf< zg*Q5sz^=$j4OrE;^*>Jnq9obzT+|}{1@%Rd&%}@dx3xc4ho9zeK@6<3l)x^aYl>d{ zeZL(C_?+&SlSs_mu{;4EE27l&C~f{*3OGw>bud@M)10?~ubba5{naFQEBe4c6Lp3L zg1-HcN3a@GIQvBXw(g#V94F?QZeuL0g|pq=5YHUrlSn2FyGY)DY+1K{QZ2w5X8iS{ zBbGH#1bC#^_3Is*&87iXXqc#;3|6`$o(}HXvflVzJcnR3>_FLzsGl*nnrIF9XRcV- z1(O06gOi2%CiWt<7NzwAPKqfr<_h|kJUEMl8jN1~eIt^B-ATi6pjdB}56i$we{8Ur zFaG*YEkIDra;n5WXTGEZ_LP}q{o}`T6xMv^_sY;{=TbaCP#K13 z??Ic|SqA9K&2xHfg3L$?@ZCplBviDpHBTX%klx&mmTQc{DS^|Fd8EqCU9*B+;FO8G zU#`I|Q2D{ADLFsHJbv+Doh|Ohx68&Q)rHmXJj=V?Bs~o5B4Jz;ODv9H_cw^Y+?&pu zHNoFx1pc=gH72QIUF2aLHU_@Zw4$DkKXm(FwYf1?O7bHsqKB@3B!P=YBkar zi1+7_BfvGR-*Iq(&Nn%%b*U4{Y3ZTo1vnLgIr^7gR?{ila4z02LI!TacC0WGVoS?Bl6^ z^hg*@n33yV94!++&nOsRb&Apuh1NgELO?|VhCsdWETZuT_Nd-izRm^p&#QpDROS0K zOyX0h=?RVHM$$CQT&1ovyAZg*0Dk}yg?qA__Sq#)3aY|z!L^P zpHIq8#0vvtnPzS!&Q9|k(gs-wE@k~MLA_G(2i9t3m_}OCaV|q(b#`!+pIX?w2~Pc> zXOo(JPGqhLJaZuUWsBl0e;|NOFx=12g;?H~0xB=boWYIA@FN`X%y}6xaiUV2PXfF0 zsQ6WJw7VG?$o1XSVvLBcUG@ynNKy(TK{dO6@Zi&arC&ZWw~uv!tV`wS`NVxBVrBpe znj{_fmXmrPF2H8hKyg_4tIhEXP@lBLMUgR9#xcOho+EOKR2csdI1P#)2eZaLT9rj0 z{<2sdilX}>GXlo$-xc@NPece7@K9A1Y*{o{mZZTi|L)x3c`NR5*t5Jzvs<#g%aTx4 zZ`IC{-j`D8;Y4HCH6*{Ye0BIi%>nKTL|YnI40?v|Y@E{l3uVs)HrazFo}?YI>j9sd z%V~*;mLQ!8b}*?9v3GIiqpToW#fF$3zxKT^Em*7dZ})Upds`n$fU!GhQc>7hFmU0| za^jX!Z6$VwgBas?ut`gDQTVP+70;aaKogjRx6ps#I;N{PhV^KBP z=MC~XbE0qd5)CB{Yd?biWrUHbC-j!XU9dlRdtXnGL$5Npm-pBj)f%t^6pNNuX3X}P z0n``j0hgmINxa})%!ilK-F6f<&4Eo4O1t*1*MhrSu+E+`)*FT(R|?`F?dNf@<}XU( zp>pY~z9}&p`X~a{zJAkJ_CjN1oWKrFv~(ici4kHB5R~_MFi}fvwufwwof@ zcTA!EA0zbf`=S8`{$h;Ig$}aB4Tu_B_s1TO+iDOvBV#H}FR2Nq!cW-o%6aY;n_6@)RQ+{5 z%#85~lh|g?w|opdVN7Qeiu+RZ;J{C!w57yvi?ll#L>zoj5`2zk!+>|?pK{}EZph0a zfz^hJ@2+OZd?y)Tl{}zOC*A4{hqZalA3uMQp_p?h$k$oNAqY|L%54kY=-i#-47sdW zB)}J>zu?sOo2`#F%=P^`Wqvcm9YNmR?ROo;R^mMvWXCURMpwV6%>X=e6wKy@4me`h zztwpTN{}GlELHcx!t2s8JIUqj9^^Q#?-eN>`_s0R!sU&iI3oyk3wlbbfhD1 zsHBbf@%Z!Iubsml-fVwN4?As}flABeO%D3uIb!|*W*uPpDQsmCyC9M00Ugubs#va;aJ z@##b3)Qq1hqd=|uq!yN+dB1lXoD|!RtJB)<*O~&~u7}2pMxJ@zN~jQPRcZ43Bl2Vk zP`&g+FnLup^bIH8mKhi17vg^~58Nz&JI(Ax{kUETtjT(vD(Kzlk2T< zP<@4;j}sk>k-j?bePeMZqIo) zu#M9q%kh3%`{lrHyFg(J%a-~6f%@K}8#MxjeJ?ousuoyoA|@K+;VgS9NhRuANONES zUq^XnO5^Mvts6kOcU+NdmJPTLwJVdbsV7YHUZo4xYDq0!Xm>@L_yh8?aL!eEL1kF8 z9n54i&UPP0BAn#N6;VFEy=poDHY?sV9L}en5}YMe42$*034T8Z{4dqI7D;O<@`-`P zo|jFc2F}}_2Xp2neOXhvrzk`PMZ$f1ZG3uT0cWAo1oa%e+DZn9zRZ{19PPGdFYwFW zfZgkQZr)?U`Od4Dcyccj5A2yD>c10K)Z)jhph~l0jt!j=4EqMPwO&a6nGw5Xp#ky? zdsMHlUQQG{2P^scj8W5u3bSqy1JjdJ>_#`OFt4&aI1+YLD%vi1s-KU2f0Ws#yat|1 zR&c5-e1(!-z<^qX(7o};Teb}llvDX19vxJof|F-CVY4>Y9%yU>C&k52x|>w4wFIzM z63>$N_$}O=fOt|R-?Swo$s1}KD`ID;LU*tQoO?(qvzqW)AJYZobn{oGaxDI_40z_` zRV4YIAub80*eoH6jqM_9odwp}T@9Q4W16&p!fuW&HQRjri&;0woXEb$E?Jwut`O|+ zpO4QqR3Z)423a+;{7`;BPyMt5)>bU}JK@C&TS&lDN@~{vqf?%+1fIX{SD`f%Ji1F* z9qr2Iyx9AZngD&}&vZ5IEB<}q{G_oCXznYfMo1J(*1H8O8q|71;o zzW77=$=B;UF9g7%WNC-85PC~kfH!(yLt=Qhq)r=%`zmwG@7hs6W(*>Zs@y4R>72<3 zz)$`}&)doSQyEYj{0^{sF^t@-8E`k@Mc|bdA`_y=l#<(L* ztr_6kl@BWA0ZIt|2v9vK^8vP1HI3T9Cf$t<_uyN6LJD9}`sk|okcS(C>Pd&NafpsD zhZ=x5c=WCKMNy}0TYwlRUe~#Sc(F1L{1xT;Kfx+3A?bl{?+xyh^UM6|4!{gq^~aC= zuiyC=SdHD?Qd*ms&MUxoBVBvaBgDmXgc=LuI|~w-`<_t2TXBhLRn6CmoM4@CF4{N_ z4P9adt5M^vU%3`~{ooW=he-PJ;t}c$z^4tbmibY9jNSlQViapdB_!<^Q@ zKEFZ(Xmd}qAzI=sUm~a>`4Y^=fr^^jF{tS;Z%mlyXGf%^$8fta9YnhPBlVvz zz87Wz&c3<_b5TfqjW^;;ysoweeZ1^!FL-w7?~>92oD7rNU_1| zB6PwNgVQ!imqs^14eB)jt5Jz)8*qZ2e*73R%{A$XG9pMgk*zQSjXwfEL~39gujyo2 zRSLXs2B+6i^wpKp++MJ&@nhfygT(lsKLCs%MC`JB6K>|hIdMl{zgtz+x(?RlJED2p z5tFgr0(hCU;7f~IjMQFWfBUDcc`cO-19o9c)DTC;v`#)$P$AKWa@u9N1&CxK^E{M^ zSAMY!t1I_}>1w%OycA%wz&E02e8*N3pPyg|g$$?XAn>z|a z&2UT?oU%^BMD=s$OWDA4^oP45@y?s(1(?X(b!fH^Us3&+ot9ONug}io3y`hlwWDJ! zyFP>v_$%>`)0jCIM?DWLHmT40GYhL6W&qWjUo7!*E5Jw#>R*i>^={>WT3HagKhlx* zcituq)UbNe*g3g@3N9IZ`nnowc_Q;Bpn3!Q36UngZ{8>1t>s@#s}_8aHU)Mz#qaPF zil`hxpX1AQ+{gMxEME|D5+$Y@!D5B6g;OEw$f!q;m{`~^$?bns@FYtXL4eh%VK+%d zHRY`hdrQSn_7gHMdJgbiJHi>mRh1CO+3xk1@VzU8p10(+}|@CS-f0oGk->JxV# z&nO$%&u-wj^bC)3VI$Zh^3viUFV}tS;cQCNZM?WJk`&H-`GeZcS=#f;z+2iUe-C!$ zo6YoZ>Sa%Ce@BCR`3bN(G|?oyzJFWu0dbI!)|%9FEFBtvzIJar8W9Z>X9Z_}bCU_N zSl7!qV0H2G@uE6-8~zJqr+*9*UifTnDFSj(2P2FuS!xLnqhu>2$H3eX5bRB=NBp;q8GUotRd5`0DC?9$dXtly37jL^ZS#0v?>(YJAwa;cs#-# zE%MZW0X@w^jHjyemkKe1kZ*Cnw1Zj!X07o4=aRoBu|Y<_(&lPkA9g_mz*6n)aYnLm zMDYji%6T>zYL7qX!2oD8xbjlD|7`k%+F5a3j?(r@J0}F5FbgFq?}`i?A;*bFBCIdV zk_V{&oa2xE2l{N3qv8E;oXw~%wn|xD@R`?fPI>t*Z8)Dj>o4?i{zw81Y=cl!;wUy- zd^cbh-mi4kuF*WE4(xs@+YVAMRWBXTGZ1On{xoshI^g+3<&RnZA*}h6gYOpg@6B6L zr5Gsq-}bv=98Q@I`vGe;B=m1rG&f8>YsP09H?^Rc)P03lE|`v55AN4RFs`4OmMY@uuJKB`{-b-I*6guslN)Tdd`#sOhoy9?p+qW{s$_Jy~pmJCYeG#1Z+_y)B1|` zk-$>$%R?5pbt-6I1y)%cHL>77C;fv+P$%EN6Ni-jM1ieqFb{SCSB5exe$o#0H-c@Bm(ER+7$UcA-|ZHmdb<9>nYINUw=>%} zJPzLIvuM5}yy;&rz{<>N9J|z4uZja~f~aEB6ry*g%)llq3IOYx@mJKN7L)^f3rA;N{EcDmxCUh?%w6T3o?CO7lC@JXh){U6Uy5P@CF+@R4x1D zM~cA-MRU(pE$NkdiwK{&MI9%yv;f|u z+JFS7ERB~7r#$@#{xQw<5!f|mgfHwYcG$j{U;JWFF4RR#j#sV(mW;K)aypN?LYcTa zI|CRgcO~Ah#LA;HfO0jBQ^S|k+!DN*BfU?pW&LFU`7P5ui|-;c3nH@3;jB0+xR`%dbyo|?(-p}*q7=|)ao zc%V8~V}FT@Fdd(V+GuC@==GzU$8Q0AaAD;A$+^>^?}vk(C)Fog{{g%7z;FAx{F>8tq< z%70V^?9m-(LxV_Y*tH!!uBSgK`BT z&A4I>f#>g<(KP;W1F@Lknfo7t-v=>c+Yj8u4ErCc)7I^SkicIdieevW^PLa|AXT?M z#BJt}GlP7A*7G8GMGIvq;1=M~DdW#P)U(yVFMsk~+lz^jB&Zj3shA>pq=}?EKv3L~ zBPV_T;?Eb@hHcpU^BMK{vH+4vjx^FSyL_2D@K@O0gg$k0XE^|@(&{tT(IVNi2=H}t z?K-(GQSDO#YbQBza;Ux=>o-^p`Ljh4_A0gJ^-s@D@KA|Z>>moOPIye}>c-D`6#!9S zR8VTls!Ej%p82$gUT-TgPaN>+_-vX+KlD+O@PC!6m<)_T)&MXsL)$W63WStBffqe9 zTx@3q>+}IU)wpZ5Y3i2KYjCn~jpQ|Rp1KKVb7Ykv85?iy|Edo3dY^NG!3Y=5GWeAS z(!WsqWK9r%f8U{|qoVyg+~AaDtg3f%dGbsT;!%BVZIxL9S3pHge~X1yRvb+np#BwU zSU*AI)oKRcoj+dKd)2I?JMit}5f5!#i=TFZb*f#Tw1XTK37j=US=67!`d{M3gO%jV zWc`ECz05<^h%&^YkzvBPO@KFh34@>9l2O?vu-J05(05G8)8@kI3>QkM~!=Y(ETmbR6uJ3o}et8~S;cc4XJq@N1zbgcMkUsycLLYr=Wx(ze zW)XHDMp;4`L>!vB#Vp*&bc4E=2jZ@RlV-2w1)f=usaD*~9{Iv~eE54zh2XWABV>I3 z^gcdIy`3+J`g~Mx)DKFo!Vb|U$~_tp9fIxvFB;_(j?9j~emUT;CaHb}wx=T{)PCoO zu|TVO?`s5jQDbhYWMz@#vVgxL(9`~wD);-yz?<>%q6I(CnkP85=g5vRvX=UbLq>m| zKbL2Qs2UcKqp+ePcf)*gWD%e*>&HCv#`fKGfJ}ZYjsbRe#1hMZ?=Ra@cIm8Dcma0s z!S6GgaHbta@J7NcFL<2m=jVo9B+bhpw6Zs14^B0moU0-U(cn1Pfzk`^S32hETEGtS zpQ)PPM|%Y@AA6?-iKhWIzXR~y;JFn_y6{&3YamJW{Te^7ljQ>7C#~0g5eJ=%F%F`} z-=d=1@Ka(m2RP>sn7ncSx5YIA5c2ScjNQDLxd={J@b|%*8OzHM1e_GEIl>@`uCJ`a zI*JMTbWXcuM+0-JSur(7?tMfYYQkLghyRJ)K8@hJS0zc!sulROg53`)Ot`T)_$37J zgzsPLk6a_!f8iN;hVFHrYTRyq1XY^LpJfSGtdnpmllVHunsWGFgY_!AEjzP1v~rvP z&tGdn$;;vtoF}k4CKNnUj%mlL!5)d;)6p+kVQSb*tMG5xjPji>q1wz8O?7ykvg*Yk zhIX$b^3Cw2n{e)-y|Ij=If<)(p#HNcy*P?$`c?->Mps>H zb*LsLQ@n2=qi6}N?iwUJBB`tKdU)I7_d=WSw1h$3Jo-L&>tN-rgFP2z`Tmyt#b74v zZAmy?WIl*~tqNG@iF)6Eu!*Dx4{$oq)F-XtZ;o*PO%15??8#rz?Sp5g5rj0WEPh@Q zR7?JFyBeOU^+3Kbv+ai+5o9=9U>mg;{~<)AUhe@;>sx~AD$WIwJFr&WA5gZ9A18WH z*|MPDSB%EkwB~>>6w|`|EIm<+31ro{y_ua6k(|>69QH<2aW|B9Yhz%OV#zR065j>| zIi0;tC9k#%BQqeYroOA%jhR1y{RW@Xm=kkIo=s5&;t_7HjZ4zlnQJNJp~l0S3olzZ zu#Lg$^iZ>BS8c$j{mca@ZL8mn0X|3a8zFbmk#SCN%GBQ=mgmc*G7s3s+~zIog}hzo9%BS%UF7Id(L{J25#(d%KGrGD%tM(1PvucrVsTtSh&}M_w~`!&bdw)O z05@^7UZ*YFiq|y)-`)zbT&#=;%$a|(#+*PkGfUecr{KJDXsuee!qpiOFKz)=D z60CGe$%-fW;4#`aoDVCSBX@pZeF19&u9u9Gs(xv)0(|TzUiiFguYQz)Z_AqeSScNji%Y<4xff!(h19j1s#JM2#a=zpgav zG?~Htqn3URGZp+9IRQKa&9XegTv)v>a58DjscK!K zq6}{z_I1Niyf>N$D#l38XJo1m^;2!Akb|pUB#dA4sDQ6yJt-$juUA9?BF69P(qTs? z0p$Db-la*hz0^d8)hzc@jHB@`m@h;WAwOEjn>7?THQtG*6=PrbFhRBC@N_9YAk+AS zvvfOF+jjNA%$SB%L!9tuOFqkvDZtO6hv*SHH63Dr{Dvk=Jp24!jSYLm`oXZMFwU^o z1@%?dm-g;2Pd|FVM6mPTS7zE?1mxYX{Y}*68L@9TSK4cBSIsgKNnGGXvmq~ZvC>EZ z#$R_aOZ~$KnH7R(e%n~w<=PX*HuRI7k~5BgP!rU4pnVKahCg%a0+3Y`OBUP8-bZgZ ztzL^VbN128TVQ58Sad&>W^zeIut%@MD{MW!#{y0oq61G%=%4cE?!l*r^>bexe^ku` z`zB_GlL0jepnr%pQ12HXv4F)q!WrIv=5B8n z;H%H0BE5gT{=5z=;nR#6|h)0KH68e#ibcRWe?I=B+Gh#(SLo5DZRett8jUE zhYLnLNUc_+tOxkfrcuk*SaGg6;2hCC?UCQ3m@PPW$)ia$ZT_N{0<~xq=7W(=Z`9!l zt5|g>FU(m|Ul`z48%F;5;FwJ(ldl zO1Aw{8PeXB#*m?2ftm$#x_e~<>yQ+I)u? zcqISz6iOWE>|q0oJ#*91Z>e$ySZA(}R@NQKtIT$&L{v$|H{`F+uE4nurOqMl^$ZFR zzUxRrm3`wv{_tQ26&uW2 z%xpVJ#fG$%nyL$axnrczRKK6uQD6>AE)(%HVfwoRryHB)u||FoF%Gcn&F-3z&lN$H zVHT0K#>9HN1i^s+r8~PjiFZaV4T#;5G5>I@aPiz(Z3&`CU=||YFo{8b&Z9$h9iiDXB=31?rh&DK$uF6!@B6t+ zI5}&xeDdCHGW`NPS!pdxu+BKA2COvxXuLB&!45BNq8p`_oRh-8Q>ORnMO`DF!LFpW;Nd{_ZH3@ zf>f|>GrOLSys4^$3f?bYo;N%mF&C;P+QeA2cp|h0RF@?`sb8Yb;#M1o-PMgPAJ8yae)9Mq)Z>8Q>mKwoOUPF$h=k=PRCa?!WA zt!PE#$Pdm?_%NZP*!r~j0N2&uM6sCsk4zT8avaf#w`OJX6lNioYr|7~WV9!S{rgy6 zpTA#vw=KXb)|nak^wt>12B;v%SI7Ng@j=76X(|4~>Eq7^$^&A;Ei0p}@B?&&wTSHJ z`uGyVS2YDu{SVw+dBa7+DS_+PV34!b+&Azll9ROLjNu#i0;rGqBR9oQGs`Z49U0{x zYmZ6VP#nN;-`V<+5Vi|mFt-^U1c$v9y8E!;49=5MjW-$R)DNP9#0YntG?6L?{0OVJ zkBff7+Kzx%aUV6?(Lem+3E+*0c|-5WqkZZPEH;Sm?Tqme|Iy$aRbpd&BCi-46!@!7 zMaTXdY+bj5^V@|^X(Nd7@Gig`n3eWFG;8e?>h#LkLne2BABP3LOS!zu-Dsm-7OcBo zus`0l-gbrokHiOEK=QhSOElPpoe-q73WJwm0oK<1D5=N&tjTP!`^`P{3zbm#kbreY zdY3@Cn93U)m=j~3fCVM*ylxi&BUj<`uV|m$4>cpk^L8RbZ|ny zwOdi@`;Y15z%w-Kw<{Uyvn~g~4AWoQ_ps9}nL9YmYz^=;Qbez*Zl z$hn*I6z|W+fYYyv3GHM1yViXKHA2U^H@=5w7XzFhYBCE!+~!S?)%AzIOds>O4_MH2IND>%)~m*k@;b_8?&)g$dzZ=p>mmNi)C zJQ{FrTWdj}K^Af2`Z*H1^Pn?;uGuJ6UsIs;?*YW4%w0d@A61Td8CaeDjp_lhRg{N) zPlsA--vtx9R|2dZiC@il*J^|^;C=nkww3$V=O3JbGBq2rRh>1&a1xvc<}YF;w`CBk z;6F=XNr}l!7*kUI;kS9uxyu6?s-x8Lk!MgjfZ1BlwYXGvEBT$hA=)gr$ik4(jX+GH z6pp^qQfrtKoCOo{j_}Wsgh~W3Kfn9f&qKPJe!%|fsNb2*X?;hHGcPfiqX3C*DPu!Efz*A}RxH6Y-@Cdx~l5f(*cR6;r9%7`B9g8Br$+rnkS;aa=P)9gRmx{2UvEf8xYDkHb^zI(2WQfUk`TR^$+23%M z0iJw6QsAr_4bDF23~~9gq-N8>*^l4iz%KZ~IIvrGM_YHS3M4{mu#z##nTVk=Mq@!W zza~*wWZ4#H1rb*N*>xlqG$BoZ0oi=04J37a=N_!peRaAf1fszBaGJRrnQ^4Iomm3( z^%|RA{JcJ|0IGl%g!)JD7|SLrSY3(RFO@Z@)I>p~L!;oi(9aXT8?aWNp-LV*!@n22 zr)yut$6;7uW*HEzibq~Mkxv*c2Kh<5kj`5E#Lw>l6$?liTE|NJHz;8EL-kp%>!K`B zV+tx#K2uA!ekOL)7fx6}h;Jg$g@D6qa8Wy%-s#ibg^WIzMK!x>iZ);^u}TefA|`EU zeZc;fvduU6LpIMp#l@XHN?w2YoesR&N3^BCtw;Sy0joi2ER9_A7Bo;rU*10q$4?h~ z;(!qZ`jJ%Oof*duSY2X&oPltPL-#-?Vc!o&a98Oo34pcDX6`X%@p9`nhuADagmAs@ z23q^?=~c5ahx+!RQo7td7{Bb%Zvj;$qjYwtaAUnaeBnAHa=7_ne!zQnb>J>U#VTGt z0al>|*A+LBVB82;>{b(6r7o}YfZgunD-_J*aq$CAe@3ey#GE_&Bv6+)oW z+LYvq`UUNFJodk8|JoXRZFc$)M2*i;;TVR_(E+ts6~E8Ka9q<;f|LG|BCHpu!%_}l zq%hV>gs+OpCSgBaF#d(ia?m+Ak1v1!9qw_eWuFDVENAMHXQSUMFjpUwn_VQCm8>iH zvAL>yHys8U50Ut7WM>B?N-Cu^R(@L%Yc3A{_iG~ColO<{`!oC;SHhjG(Hu&Xwr#MDA?BES=4;NdekM;FvAr4Rh{k2I__l)^^1KZGYeN-u)>0B19 zhFV)~;MhIe9e_*9o%Rt7PFQ&fDjr+1q<&Ace`&CnrwE_CtfkzfL4D4$k2y`Zw1gD^ z6aF3MA*SdMuPZpcPJQlS_~>sGPJkUGYpb$9Dt*Ab*|F(UZ$y~#f;Fy)7INEfx7Yy( zK6V^QQVNY_(G=j#hW&4Qeh%_S#li05dg<1m^jw<^AenssA)&Tvm;rn7FbNMf{4XTE zNZ`%V1o=bHan#)g_}|)YGLNdp@Bdl4jzmX+9D0{I0bt_nFgco>b_A0%m~{I2RXv;D z{I(5MCFwnt^t3_^jhHOG(O8nQhAMMk?yZ>0H6!Cl>1{-W!~as4@9%*V<41gB-`S37#04 zo`pRZ)M42rf+dWr!kL(pChN8sd5#1-K(}iybCz^F9PICw(Yn5W&Xj@tcU0CVrL_Qk z$ABMo%;GwMov%Bby%J{PABuP-3=6y6>6holld47(4nE82soh8PiDg-}PC*YCKJyO{h%X^8zfTEgtC%!U3%c zz>XPlt+I&vgTy@eYd>pT$b8-knSi|6r<@U9+sU?tJ}0&7v0@1C^IkwEp;?46`fa}f zlR+kMc?a*DsfMqVgY(RoY1>UzO{F-*co`Haaa8W7)kWm4{c}RJ-=XnBjhUkFKRsP40cd!khXa) zqV8aKVb1Gi(On&9SQF6x*iUk}p^;C*A(Mf~Ns;}B}@ZK;O}gdL$Ftels}FVa|l zl-&FR+c#I#2~dCY0~+|)i+x7}6JFAfhxIBM^Dutq6EjpV9JO@fLNYo}3GARLj=O8? zPTy?cnVCO_84g*8|Di^J8T_qD7TIl93+&*r>Pzt;oi4G!7MMV;ax6BE_rH0#)-u?7 zC|z;`XL6NkaA|+rUEqM>Rq_A&-qz;jkw0VT;vb(qR`7zE0*+F$mCU;6(uJ>OJ5MxQUos4(gK3X8+{81aB z&c2K9Ex=F4{_$si_w)w_K_=fe~rce_5^W(c$63yUh`eE3lxZwN%5*%uKi<0A8@XM zd+v{R=H#Xa_Inpdm>Q;?iVN&$zS~~ZCH1CrU<>7qX*7Qg-ZTR*s#rN1&rg2iJ6Mg? zYGh)>D)k3v88{kQ%sm@5atJ4sF=}61e%cl=Lxr`U-|r7gZ=C^WCSKHV-qr7?3UCJ5 ztN0F)Uxg+Q@N;>pR%YY5bTT08VvAvnmsOsqH1M(fF1sYF-=uT_JEC4#O}Vi^xKQ7_ zxe8DHuJrwd_1-)|eYG!7u1Es1TQY(zj)weE84g%V_3qSc(gM{MfN#(K_^!E%)31S( zS)P}AI>!7e9$3@cBSW4TlfK*;Ku~3kuXy~3_6Vyi&N`u+oI{jX1S}iuIc?}>8I2kgF>WJ@lH@6ecm2PT|XP@g-yOC+4^fN(4s&<<_F-n8TE_M<9_M%sf@ zH+*ek>7Sp7!8%n&E$;p2Oy~CnR^w9-GVT?0=DfgXC#2?gCI}tj19so&INA(e1oT)+rrl?N z0o}=V$6miMD%78}ERMRGLblBsppmN5_|g-8Tv$NfZBoqhj@!=(EB0|g$Ko+t5uFEh z$f95hrAN;PMuDf=k5e&GS;rozD023mU);=>CPm=Qd|?lQWPB7i0o-b~ly9QgydgZm z=aAmvHknUGy9Tg#7S(@|{UKW;1=h`F>zYx^_#UC=KuaPOs%5oJ!MQD6OQsc}2EywN zRmg%Zh(sq~-V4Z^y$r<`*X>a<1e{3{WsCE%9x{U3cUvp!Khr>JaRj!&)Q6g|R4Azx|Hb{!wL?Y_h3j!^UVcMF zQRB}oV!XvY2w);&P|rr{)oUSv``<;4*3T$d zi*@2uDS89ZpMYD{CO=I&mlUf9*dp3hMc2g6O>E71Juyy5Iw> z>CLyN))k#G8#tACA`o&&tM=uA-}Sb+{S+_u?x4c+YGeCkW)kZZ0<^Nfh|K=jbDr$~+vzu{qv+cQhxUf=Y9|t4+E2P~CG3NjfQcd6h+)Gix%E|k}llEB?D z;qdE1GZd0_VE2!M8SkopTlxmDO2W<^@4r-IM1d#l_JvQy{-ebou=}kdj_-o)PJ03V z>Xh`9n}o*QHQ=9fp+?XCu)Vhq_V@QDzf++T%ua)KE(F@ovm?da2E-$2FmTfN2*nHL zpLKa&xQlw-F#=9bFz7^NB-s3=fS;5}t(b@0`Z@}DDuNFVdEVoGE}^Dz>4t$az48c7 zzH>G)5?y?_-aXjCx#U)Q4{rP>0p`z1SL`rT+T9TLm-%sNne2D7MOc$hb>Fx=uDe74 zWQ1jLk+eX+ltFO?I{hc)f`<3{z5R3^x+sGVu` zfUNulYD(naRhHt7?kZsWA$#<(x)U#@0BaRR9n#sEfRP29(o0oOKi^KvK%HJ1qi0LA zh8sEIt=2dx7m-*Q36*%y;EiKAUMwFt&w7wn<}a)o7QKPky^P_zROT#nbJ!Unv#G*b z3SP@_Hr9iEl422`5Z;DYoaGwZ>2011ZfVWQ%j|r|XjKQ#9GmArA&Mv#Jmhrx^U3EO zDcJ_>U|4^9J=5@Mg=!?CC64Q0)L{d?w`$sEwPxHfIv^f}^Cf)W-fM6jfJO5u$|zL6 zz3vOAit{wdCPg=Du)aOjsD3mgU%@gE2idBbuxpdr_y_PLpFh&*@e;Aa`Z{l6btXK? zH$j6pqK(v$*Dv1v;Shidl<$fAEK#8?oM1J*5@dIyEPtS?p4Q;rJH}GE>mi${$VMtR zHEBR5u=fnYHDX+y~Y%7NYjE?(BDwP*KF3!zwPnNe?xCRXqE%Uv=AO*!`U$5t0ru zH~TGA<6K75Jo#d4L|~z-St7=MYs*Lgq`Gj{^!Cr&Zg60sgQI=2@0YeU1)L3|4cptf zhkL?-9ie$8Dq|s))&Wm!y88`!^=9n>lpB(|a3efvuyDelio3`4Vr3%G!EMW-&UPdD z-++W~gkK%?`C&sPPQX&IoIc$t_%STRNa28@r-C8Q&jRl|D|?1~8to(gU>wwZLPNzr zwg77a>shNwj|$4R2Udo8$qSY2X~H3+7n7K$EWwH`2}Ea&m|qSyh=x0ZlM|!ED<9-S z=SFa2q7N+cVbU`lcd);Ir0bi%=09jo!-`N97gMHiN(w5sr2fgjHJd;j*tOcc)k!l_ zamF*4qxeWU5?0bTF9CZ}J*=f(s?`i1z+yf*R#&gU6dw+pXGsfIFF<9K-#{kNaB;h& z*7n5`U^Oli!@VD?HC+l~XxP{z^ZC(k3~k@Q_bnCqFl-U<&Gs@jpRmkK9eS0>3*<&5 zIq9(hHj`q{#6~_Ye=EROBFeRhQ;97xh(L6Xl~u}JFEK+Dwl?F_;O|YJsUc({i!vy zz>`_*=wYvP8bt-i+T)Ud_x;X3yPrB6icrn3NJjUx{nF21KRdT>v00XAK6Jna=U}VD zS>ZoZ10uUBze=<^OS=&PJD#oUH-MpOl?BemJ9mw0!df4j}V3y5fEM)$M_mEIoz%4R3vW$>40z5;-BCz%q{k_>BWM zk8x-wd9J|wiu^0F*rq6AIBWF@@>zDg=0g=0+=UW7^-qJkHn5cbGWgVAP!G*P+(%XH zh2i8EaXs+N!3b)&-xbQefDJzP5-hRPA{-5Tdu2^SW7=DH!%PuPlUp2EXSfouuJ2~O zW1rAB*#W+u}t|R z2ZJv-bmswol_3oX$*$iB8U@F`TV&hIJHOAm=1Y5XKmq}n#Z;z6>Yko1H-04&A`e2rvs$LKzQO_<&3E+nCi+y*cM zXy6qW%tCQ^yX3R=mKSE?zF^gEC-29NUyOy_Ao~#ntQ4VB!VM~T<_#rxqJiwk z{g!9sm8jwl@2n{u7n78fU8;qXvoMdF2Bu4B5!k}%g*T4TW%Pn`!?l+GBX=^ZDIwI! zr(>Vn?p7}t&|lUyc^w|D8^$=;g)e4ngwvfvqk?!8l1Q00o167Au!P6?#Uhx~d!FI{zTp5?^cx)-xD-U{kf!U$ns@|ebD z1>QG6X*99TGqqi?8s&}@mwJ-fm;vvNRDR}SFMo(KaGs6VrrS>Y3?x*IApYo$h6k^L z4Z)fG^_^c&pWL=EShwj)A@O5AD&9bKEIRP^E_6(e2fHtD_`7eg&vx>F!`8AyXfE^q z?l-7Nv74!r-|NEhPyu+Q*x0qG@efc!KFDR9Z+5L^JAe^{7OI!e%jCNec%%>6iMRDA zuhM}vMca$X_1=)*0>C+XR$=Y<7S8$uzS$-803n%^Xf%M^@6Jy{jweqchcnh`?qKe_ zq?{1!@AbHZ9S(sihcJ8DY1(hGXWcVlKhBN#vH$!8b_Bj14}HWzvGn}H-lgLVryT!@ z()|iyTp+vcyqrJy4*Z7s_n+@iH+>Ec?4Y}#!|@B>W{yGjBy+iA6T41Kz%z(>;k};e zN0T#%gIgPqzniJX3sy+JA6#G4kIm~F;d zsn&JRy}(oHMPkVO!sR8*nY-zdb0{w^WDKnAvdo}d@QH3Ec*obu@fHPm$RHc!p`T6Q zO$RlhnxFg?RwrVa?iSxpM;2?Sx7q$3PX-ZwR|eMEV;?n) z*g(hN`~?dO2+99M%bNl>_!DnDV?Wtk4ri>NW_<|k-(epf@VlQ+Nk`jg^W_X@%-K~S z#C`nXFR%;brPkN;oab4CXXb9sGOU`ZwhneQ>kWB5tzs`6c;?^V(d6Q`#$WJeYH<@; zrJgy{FOcg~Ne|y|jzOdbAV%x9=`pJbvxHMVIr^|pF{g`e0E~dK-XC@rjKq!sp41m_ z`QpN25G2$@_0g+yy`kA^fG9j3jhOw6HIV?nd)3$Zux1nqGdS(mV^X<9JQHESxx;#7 zxqk?SE-}b}E=*61g5^skF43uJ*lZ5X-7YGG=_hrMZTgz<>*n zVmVU|`i<8&JBOsYcvXRYxQ73JD!&@h0#2R&y*B2Mr0u9+W%Ut%(W^Y44+rCs5RvNA zd%RAAc=Qxx*_WRZ&nB?Wt4O~X?|r@b0%Shl#&WEd!t?44&hte(dWreGaD>2%QtaQB zV0}Zm33#KhWZLH=&dff;TsXNpEM?dEvq!0%Rf@fu$2XB0J1bzlh} zgLAphm(W4PVJ7PlkxbkP*zA|J*yUL6)x8Ec^?5HCSiM z)^xU0e?AR$sC;7i!-#C0$riBv1+9+F(UiWXAy2Uq?7SAc7{&0p3P(7E_W{9i@w$K0cHeG~TyX&LF8|_yTyqhBC)SZ4oMj&^|3mdyqfl9pe zo0_{0!wEPM1~(ggJCRg~J>XUBE9$PAsDmBckkBX8(V1Es;7RhK zzo(;BCI_b^VUOWvfo!|a(>+NA_66*AB>qI$H{l@7WiXJ?Wm- z(^9Ct49x`Rs^TJ*;m}h$M{r`td*7HzT-Nylzsq$^lbFPMM(PgTZP^pHi2RUWY+I>pO2W#Hunc~d%kXR;T%7Gv=zM3 zN9JqwC-a%v0PFs;ys8ZL{DABfZG0* zoMMUlB!7Dd7(HU{bh{?5H$tD|qPhA0i*#NDCulVM{`IZqkG6>qWSU>~{Z+^N1C^Hy zDJEQN*7T+Y=NV%vM`EnIDc;~ris8Kd;Y}vU48TK;HW;YYsoM%xS&YtJW|x-PUxI_r zeA07?U`GV?zFd8$)c(`69s95P{U=ukVTmuOfRs73{Ml~Ny*985cp46``!nFl05Bmz zZUg>JUp&Wwry@z$tHtW}Xaxot_#hDZi? z$I>=_{sQ9Q(0P;Zv^L4Jd!v_*U+zZ_`*OQkKt$Kzb1tPik-GUuPKf8!PfZBuxj^t zYO@p%sbNDn`R>pT=S%z){04qz>ea=m-IgeXY4ibIh-8x3)7V*~F+PELQd=kb!g<>-#iRG9h2Uyf%Y$zSM*@=n6Y+H=|jO(jJfqpj=ja|LwG%(K!lh zKWf7>T=jfH46GI7u%c;TU#Uc4CrB{1g+Q7&4ZAp>+b-(Fa+(%a(M)@&#?<9(mJQC8 zMs5yqjQIIJz+V|%#>`DxqgMf>U$AJD8}V_#q?d%F+pJO1^w3hoF{)LcFDipkUhD=FQ}{>Lj(S%&CK zi(XQF4c1`Tz`DPNUH$To`vf)c8``V=B9T85q6c=L8aekF|Ik~80L)5rJ_p}>m@_+tl=c+c$(EalC!C$HIO{3@XKP8>+?v+q zlISh7p(mHxKU@b!O^7>&4sHZIzjg9cbhn!W+|&eu-hPVG-y;v~0)OJBDJzd%mcYv7KN6w_5;=1h zoD42&)wg&rIRjNeo*;}{8gu3F7|*wG)Ua9(5(on`>y!ZeWmi;%R9f>Wp{gH6tkxw{Jk zf4v%SnRhXswgC9aO=uhT-C6I~2`7`5icv8^zfKtN3}w8k=tpX1K?RtBtI_0sZ%IPx za1O6GvY$s*?V1PC3h&$W+P&0PNwCh}k;+7`Ogq8=-t0$Bc%8{+_&b1=Nw`iW=R-ak z3$;pY9~T{>9R&<(;KbN1-MZfkJc!OXk#Bl-ufB@G=^JtL^CT-G|BxU!8(G+3NOEpuBo z!TwUdzv;a*?I+Zo9#dRr{#+EdL~yPa*=+AaXgLkm6TZ&sGmEkx_!C$wq2b0mz<%ue z|FK)e(NB=$N(%m(GxoY&%!5$_oLm|5Gqd&NuMfdr$$8G2h8nHL1nd0L1l6Ma>@^$U zJR{|-l7Cdy8%ThlqQEB?l`3)#>YV8Od1S4gBLd6>68wDb=SBT+s4+Ms9!g&$dmJ)| zgKW4S^Db2_q63tBXB0kd*^c}KsQV#p1=h%|K-IwZV_ZmkZ1M~~g%yM8P#VnQjkFGs zs)g`1M+f-t9$-}%BUDvCbEItp+#d7l{=9J{Zzq7S8VUyjR|P}MVD}R&!NcQcu1f+~ z`Gs}FVn=7anc$hDBs21dH$$t2inu=Zw^B@Y5;w3T?RT0HsvrKR@Kn>A80zyEQxweh zJOPvU^+S(80w7fxkKCx7U7ppzsf+y+E%WCq#Wpz4bx10SP}Lf}0*<3|?D*%o%}H=T zESs!6+$qW*ngVL>(Sm;E@6$|3fa_v0%QYd~go6TqML5@G+-`Rz*tsT;w>0{~_*Q(7 z{m26?j(YClrWjVRADf~rPx{q(V84mt-IiTGWehRHc_p}eTKRi3K&0EPwnXu6{A2-G ztGsw)X^8y#Qh?KfkX4~gnaOYx-qUrJu_O6UKRAf4cg8=}Uze^BZT|e@Cf+YMWnqo$ z6hBiSTBd_1;CItc+XV9QLlL-=DJqG%=UMk7fz`kn=17S2#xMcih-qn1Be9<)G@L0Q zruD=>b!tLXZx$xP9Rx|BJG|Gp4>95Wg9|=je>0&0U5-llMZroIGQy}D{fGHsf0?dc zK`L8pFY&-q#CY8)3qxO@9Nd-HyIZRG_Z2EK_^cb3Ltc=tNP>E*Oy7^$nGc@=T_O6K z^K*}}s>s0`wW@#!k=xiU4I)nc**b&3kn;;CICqw)B91+rWd^vFrRsT&e+VpHn+)Kr8K5df30ONk-2`iN^U*QDkXculV}x1v6u)Jq5$IdaIs+XccQq zg*?p7x;n5>VSnm-PP{;eN{?4M_1oXeeh&`Zmwg)6RyL8*To&x$WeBKUDqZ!4J~qqQ zrR4KGr%#ZhSn#!9S;{^X0{D%Hb-WLj90dXGC_!yy!irC7h;aJzrtWn9WtP(b?@P!} z{~`yj({g}<{>Y1ZI+@#y96%$ESj^|^PHMIStAQTB`A{2;6yQ|xHO!Jwex#a!albFs zyok6+P6%*vR7&fwsHsBt1L8hjYzi|-*K9}NcO~Hz0@L_;lm`6sROM?+T-{2&0lwl1 zDJeHW?y3QNw&aF_!|KyOW8nFHL$h-75iy4Yo^baMEaw`WWEogP6;FTUz@*v8f|X9T zP8+2-=S%^7UCf2E*oMKSV*nus=VMvhl=FTKuqdvk$5CKyF2F9oJ$d6##Zco0Z;3hb|o%-K?Q(D2Soh zcQH5F#4Z(1lPQ%|mV&Wl

V8S!7jz#fF?P}6P96=NpB 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 ?WO2a8hyX6H}Ys-N86V&f>{{ze`jkAK&H9W>Rm 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 |X+E1->T=JO~y*1wy41#=N65NP|T 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

03f7TIuMr^8C>Ordcy;X0`5BWLaQuM> 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

HW{+vZNv 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

`T2vI74iAV~n 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 Xd^gKV+N4=d5a0X Date: Wed, 26 Mar 2025 20:18:52 -0700 Subject: [PATCH 2/4] GODRIVER-3445 Update specifications submodule weekly with dependabot. --- .github/dependabot.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index af7206e80b..315e454f23 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -11,4 +11,8 @@ updates: - package-ecosystem: gomod directory: / schedule: - interval: "weekly" \ No newline at end of file + interval: "weekly" + - package-ecosystem: "gitsubmodule" + directory: "/" + schedule: + interval: "weekly" From 132d39d3ee2f9a9b39d090f62fde0d86fecd8078 Mon Sep 17 00:00:00 2001 From: Matt Dale <9760375+matthewdale@users.noreply.github.com> Date: Thu, 27 Mar 2025 19:51:47 -0700 Subject: [PATCH 3/4] GODRIVER-3445 Refactor how spec test paths are built and update test dirs. --- .evergreen/config.yml | 4 + Taskfile.yml | 11 ++- .../integration/retryable_writes_spec_test.go | 86 ------------------- .../unified/unified_spec_runner.go | 3 + .../integration/unified/unified_spec_test.go | 55 ++++++------ internal/integration/unified_spec_test.go | 20 ++--- .../serverselector/server_selector_test.go | 4 +- internal/spectest/spectest.go | 24 +++--- mongo/read_write_concern_spec_test.go | 2 +- x/mongo/driver/auth/auth_spec_test.go | 2 +- .../driver/connstring/connstring_spec_test.go | 4 +- x/mongo/driver/topology/CMAP_spec_test.go | 2 +- x/mongo/driver/topology/sdam_spec_test.go | 2 +- x/mongo/driver/topology/server_rtt_test.go | 2 +- x/mongo/driver/topology/topology_test.go | 2 +- 15 files changed, 66 insertions(+), 157 deletions(-) delete mode 100644 internal/integration/retryable_writes_spec_test.go diff --git a/.evergreen/config.yml b/.evergreen/config.yml index 371e05e5f1..d3c12b5aa5 100644 --- a/.evergreen/config.yml +++ b/.evergreen/config.yml @@ -44,6 +44,10 @@ functions: # Define an alias for the task runner script. TASK_RUNNER_ALIAS: &task-runner src/go.mongodb.org/mongo-driver/.evergreen/run-task.sh args: [.evergreen/setup-system.sh] + - command: subprocess.exec + params: + binary: bash + args: [*task-runner, init-submodule] - command: expansions.update params: file: src/go.mongodb.org/mongo-driver/expansion.yml diff --git a/Taskfile.yml b/Taskfile.yml index 3fcf7a9293..bedcac92e5 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -17,6 +17,8 @@ tasks: check-license: bash etc/check_license.sh + init-submodule: git submodule update --init + build: deps: [install-libmongocrypt] cmds: @@ -149,9 +151,9 @@ tasks: evg-test-load-balancers: # Load balancer should be tested with all unified tests as well as tests in the following # components: retryable reads, retryable writes, change streams, initial DNS seedlist discovery. - - go test ${BUILD_TAGS} ./internal/integration -run TestUnifiedSpecs/retryable-reads -v -timeout {{.TEST_TIMEOUT}}s >> test.suite - - go test ${BUILD_TAGS} ./internal/integration -run TestRetryableWritesSpec -v -timeout {{.TEST_TIMEOUT}}s >> test.suite - - go test ${BUILD_TAGS} ./internal/integration -run TestChangeStreamSpec -v -timeout {{.TEST_TIMEOUT}}s >> test.suite + - go test ${BUILD_TAGS} ./internal/integration/unified -run TestUnifiedSpec/retryable-reads -v -timeout {{.TEST_TIMEOUT}}s >> test.suite + - go test ${BUILD_TAGS} ./internal/integration/unified -run TestUnifiedSpec/retryable-writes -v -timeout {{.TEST_TIMEOUT}}s >> test.suite + - go test ${BUILD_TAGS} ./internal/integration/unified -run TestUnifiedSpec/change-streams -v -timeout {{.TEST_TIMEOUT}}s >> test.suite - go test ${BUILD_TAGS} ./internal/integration -run TestInitialDNSSeedlistDiscoverySpec/load_balanced -v -timeout {{.TEST_TIMEOUT}}s >> test.suite - go test ${BUILD_TAGS} ./internal/integration -run TestLoadBalancerSupport -v -timeout {{.TEST_TIMEOUT}}s >> test.suite - go test ${BUILD_TAGS} ./internal/integration -run TestLoadBalancedConnectionHandshake -v -timeout {{.TEST_TIMEOUT}}s >> test.suite @@ -174,13 +176,10 @@ tasks: - go test ${BUILD_TAGS} ./internal/integration -run TestWriteConcernError -v -timeout {{.TEST_TIMEOUT}}s >> test.suite - go test ${BUILD_TAGS} ./internal/integration -run TestErrorsCodeNamePropagated -v -timeout {{.TEST_TIMEOUT}}s >> test.suite - go test ${BUILD_TAGS} ./internal/integration -run TestLoadBalancerSupport -v -timeout {{.TEST_TIMEOUT}}s >> test.suite - - go test ${BUILD_TAGS} ./internal/integration -run TestUnifiedSpecs/retryable-reads -v -timeout {{.TEST_TIMEOUT}}s >> test.suite - go test ${BUILD_TAGS} ./internal/integration -run TestRetryableReadsProse -v -timeout {{.TEST_TIMEOUT}}s >> test.suite - go test ${BUILD_TAGS} ./internal/integration -run TestRetryableWritesSpec -v -timeout {{.TEST_TIMEOUT}}s >> test.suite - go test ${BUILD_TAGS} ./internal/integration -run TestRetryableWritesProse -v -timeout {{.TEST_TIMEOUT}}s >> test.suite - - go test ${BUILD_TAGS} ./internal/integration -run TestUnifiedSpecs/sessions -v -timeout {{.TEST_TIMEOUT}}s >> test.suite - go test ${BUILD_TAGS} ./internal/integration -run TestSessionsProse -v -timeout {{.TEST_TIMEOUT}}s >> test.suite - - go test ${BUILD_TAGS} ./internal/integration -run TestUnifiedSpecs/transactions/legacy -v -timeout {{.TEST_TIMEOUT}}s >> test.suite - go test ${BUILD_TAGS} ./internal/integration -run TestConvenientTransactions -v -timeout {{.TEST_TIMEOUT}}s >> test.suite - go test ${BUILD_TAGS} ./internal/integration -run TestCursor -v -timeout {{.TEST_TIMEOUT}}s >> test.suite - go test ${BUILD_TAGS} ./internal/integration/unified -run TestUnifiedSpec -v -timeout {{.TEST_TIMEOUT}}s >> test.suite diff --git a/internal/integration/retryable_writes_spec_test.go b/internal/integration/retryable_writes_spec_test.go deleted file mode 100644 index d4cc783554..0000000000 --- a/internal/integration/retryable_writes_spec_test.go +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2017-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package integration - -import ( - "bytes" - "io/ioutil" - "path" - "testing" - - "go.mongodb.org/mongo-driver/v2/bson" - "go.mongodb.org/mongo-driver/v2/internal/assert" - "go.mongodb.org/mongo-driver/v2/internal/failpoint" - "go.mongodb.org/mongo-driver/v2/internal/integration/mtest" -) - -const retryableWritesTestDir = "../../testdata/retryable-writes/legacy" - -type retryableWritesTestFile struct { - RunOn []mtest.RunOnBlock `bson:"runOn"` - Data []bson.Raw `bson:"data"` - Tests []retryableWritesTest `bson:"tests"` -} - -type retryableWritesTest struct { - Description string `bson:"description"` - ClientOptions bson.Raw `bson:"clientOptions"` - UseMultipleMongoses bool `bson:"useMultipleMongoses"` - FailPoint *failpoint.FailPoint `bson:"failPoint"` - Operation crudOperation `bson:"operation"` - Outcome crudOutcome `bson:"outcome"` -} - -func TestRetryableWritesSpec(t *testing.T) { - for _, file := range jsonFilesInDir(t, retryableWritesTestDir) { - t.Run(file, func(t *testing.T) { - runRetryableWritesFile(t, path.Join(retryableWritesTestDir, file)) - }) - } -} - -func runRetryableWritesFile(t *testing.T, filePath string) { - content, err := ioutil.ReadFile(filePath) - assert.Nil(t, err, "ReadFile error for %v: %v", filePath, err) - - var testFile retryableWritesTestFile - vr, err := bson.NewExtJSONValueReader(bytes.NewReader(content), false) - assert.Nil(t, err, "NewExtJSONValueReader error: %v", err) - dec := bson.NewDecoder(vr) - dec.SetRegistry(specTestRegistry) - err = dec.Decode(&testFile) - assert.Nil(t, err, "decode error: %v", err) - - mt := mtest.New(t, mtest.NewOptions().RunOn(testFile.RunOn...).CreateClient(false)) - - for _, test := range testFile.Tests { - runRetryableWritesTest(mt, test, testFile) - } -} - -func runRetryableWritesTest(mt *mtest.T, test retryableWritesTest, testFile retryableWritesTestFile) { - // Use a low heartbeat frequency so the Client will quickly recover when using failpoints that cause SDAM state - // changes. - testClientOpts := createClientOptions(mt, test.ClientOptions) - testClientOpts.SetHeartbeatInterval(defaultHeartbeatInterval) - opts := mtest.NewOptions().ClientOptions(testClientOpts) - if mtest.ClusterTopologyKind() == mtest.Sharded && !test.UseMultipleMongoses { - // pin to a single mongos - opts = opts.ClientType(mtest.Pinned) - } - - mt.RunOpts(test.Description, opts, func(mt *mtest.T) { - // setup - insert test data and set fail point - insertDocuments(mt, mt.Coll, testFile.Data) - if test.FailPoint != nil { - mt.SetFailPoint(*test.FailPoint) - } - - // run operation and verify outcome/error - runCrudOperation(mt, test.Description, test.Operation, test.Outcome) - }) -} diff --git a/internal/integration/unified/unified_spec_runner.go b/internal/integration/unified/unified_spec_runner.go index 01b64fd35a..7d2466a3ae 100644 --- a/internal/integration/unified/unified_spec_runner.go +++ b/internal/integration/unified/unified_spec_runner.go @@ -98,6 +98,9 @@ func runTestFile(t *testing.T, filepath string, expectValidFail bool, opts ...*O mtOpts := mtest.NewOptions(). RunOn(fileReqs...). CreateClient(false) + if strings.Contains(filepath, "atlas-data-lake-testing") { + mtOpts.AtlasDataLake(true) + } mt := mtest.New(t, mtOpts) for _, testCase := range testCases { diff --git a/internal/integration/unified/unified_spec_test.go b/internal/integration/unified/unified_spec_test.go index eba98345f4..79a8590178 100644 --- a/internal/integration/unified/unified_spec_test.go +++ b/internal/integration/unified/unified_spec_test.go @@ -8,42 +8,41 @@ package unified import ( "context" - "path" "testing" + + "go.mongodb.org/mongo-driver/v2/internal/spectest" ) var ( passDirectories = []string{ - "unified-test-format/valid-pass", - "versioned-api", - "crud/unified", - "change-streams", - "transactions/unified", - "load-balancers", - "collection-management", - "command-monitoring", - "command-monitoring/logging", - "connection-monitoring-and-pooling/logging", - "sessions", - "retryable-reads/unified", - "retryable-writes/unified", - "client-side-encryption/unified", - "client-side-operations-timeout", - "gridfs", - "server-selection/logging", - "server-discovery-and-monitoring/unified", - "run-command", - "index-management", + "unified-test-format/tests/valid-pass", + "versioned-api/tests", + "crud/tests/unified", + "change-streams/tests/unified", + "transactions/tests/unified", + "load-balancers/tests", + "collection-management/tests", + "command-logging-and-monitoring/tests/monitoring", + "command-logging-and-monitoring/tests/logging", + "connection-monitoring-and-pooling/tests/logging", + "sessions/tests", + "retryable-reads/tests/unified", + "retryable-writes/tests/unified", + "client-side-encryption/tests/unified", + "client-side-operations-timeout/tests", + "gridfs/tests", + "server-selection/tests/logging", + "server-discovery-and-monitoring/tests/unified", + "run-command/tests/unified", + "index-management/tests", + "transactions-convenient-api/tests/unified", + "atlas-data-lake-testing/tests/unified", } failDirectories = []string{ - "unified-test-format/valid-fail", + "unified-test-format/tests/valid-fail", } ) -const ( - dataDirectory = "../../../testdata" -) - func TestUnifiedSpec(t *testing.T) { // Ensure the cluster is in a clean state before test execution begins. if err := terminateOpenSessions(context.Background()); err != nil { @@ -52,13 +51,13 @@ func TestUnifiedSpec(t *testing.T) { for _, testDir := range passDirectories { t.Run(testDir, func(t *testing.T) { - runTestDirectory(t, path.Join(dataDirectory, testDir), false) + runTestDirectory(t, spectest.Path(testDir), false) }) } for _, testDir := range failDirectories { t.Run(testDir, func(t *testing.T) { - runTestDirectory(t, path.Join(dataDirectory, testDir), true) + runTestDirectory(t, spectest.Path(testDir), true) }) } } diff --git a/internal/integration/unified_spec_test.go b/internal/integration/unified_spec_test.go index 9a02246862..a54523124b 100644 --- a/internal/integration/unified_spec_test.go +++ b/internal/integration/unified_spec_test.go @@ -13,7 +13,7 @@ import ( "fmt" "io/ioutil" "os" - "path" + "path/filepath" "reflect" "sync" "testing" @@ -157,14 +157,8 @@ type operationError struct { ErrorLabelsOmit []string `bson:"errorLabelsOmit"` } -const dataPath string = "../../testdata/" - var directories = []string{ - "transactions/legacy", - "convenient-transactions", - "retryable-reads/legacy", - "read-write-concern/operation", - "atlas-data-lake-testing", + "read-write-concern/tests/operation", } var checkOutcomeOpts = options.Collection().SetReadPreference(readpref.Primary()).SetReadConcern(readconcern.Local()) @@ -178,9 +172,9 @@ var specTestRegistry = func() *bson.Registry { func TestUnifiedSpecs(t *testing.T) { for _, specDir := range directories { t.Run(specDir, func(t *testing.T) { - for _, fileName := range jsonFilesInDir(t, path.Join(dataPath, specDir)) { + for _, fileName := range jsonFilesInDir(t, spectest.Path(specDir)) { t.Run(fileName, func(t *testing.T) { - runSpecTestFile(t, specDir, fileName) + runSpecTestFile(t, filepath.Join(specDir, fileName)) }) } }) @@ -189,8 +183,7 @@ func TestUnifiedSpecs(t *testing.T) { // specDir: name of directory for a spec in the data/ folder // fileName: name of test file in specDir -func runSpecTestFile(t *testing.T, specDir, fileName string) { - filePath := path.Join(dataPath, specDir, fileName) +func runSpecTestFile(t *testing.T, filePath string) { content, err := ioutil.ReadFile(filePath) assert.Nil(t, err, "unable to read spec test file %v: %v", filePath, err) @@ -206,9 +199,6 @@ func runSpecTestFile(t *testing.T, specDir, fileName string) { mtOpts := mtest.NewOptions(). RunOn(testFile.RunOn...). CreateClient(false) - if specDir == "atlas-data-lake-testing" { - mtOpts.AtlasDataLake(true) - } mt := mtest.New(t, mtOpts) for _, test := range testFile.Tests { diff --git a/internal/serverselector/server_selector_test.go b/internal/serverselector/server_selector_test.go index b00d0a0ecd..c1a8411785 100644 --- a/internal/serverselector/server_selector_test.go +++ b/internal/serverselector/server_selector_test.go @@ -157,7 +157,7 @@ func compareServers(t *testing.T, expected []*serverDesc, actual []description.S } } -var maxStalenessTestsDir = spectest.TestPath(2, "max-staleness") +var maxStalenessTestsDir = spectest.Path("max-staleness/tests") // Test case for all max staleness spec tests. func TestMaxStalenessSpec(t *testing.T) { @@ -176,7 +176,7 @@ func TestMaxStalenessSpec(t *testing.T) { } } -var selectorTestsDir = spectest.TestPath(2, "server-selection") +var selectorTestsDir = spectest.Path("server-selection/tests") func selectServers(t *testing.T, test *testCase) error { servers := make([]description.Server, 0, len(test.TopologyDescription.Servers)) diff --git a/internal/spectest/spectest.go b/internal/spectest/spectest.go index 1b57599011..33f9f1f426 100644 --- a/internal/spectest/spectest.go +++ b/internal/spectest/spectest.go @@ -10,7 +10,6 @@ import ( "os" "path" "path/filepath" - "strings" "testing" "go.mongodb.org/mongo-driver/v2/internal/require" @@ -33,19 +32,20 @@ func FindJSONFilesInDir(t *testing.T, dir string) []string { files = append(files, entry.Name()) } + if len(files) == 0 { + t.Fatalf("no JSON files found in %q", dir) + } + return files } -// TestPath will construct a path to a test file in the specifications git -// submodule. The path will be relative to the current package so a depth should -// be provided to indicate how many directories to go up. -func TestPath(depth int, testDir string, subDirs ...string) string { - const basePath = "testdata/specifications/source/" - - // Create a string of "../" repeated 'depth' times - relativePath := strings.Repeat("../", depth) - // Construct the full path - fullPath := relativePath + basePath + testDir + "/tests/" + filepath.Join(subDirs...) +// Path returns the absolute path to the given specifications repo file or +// subdirectory. +func Path(subdir string) string { + testPath, err := filepath.Abs("../../../testdata/specifications/source/") + if err != nil { + panic(err) + } - return fullPath + return filepath.Join(testPath, subdir) } diff --git a/mongo/read_write_concern_spec_test.go b/mongo/read_write_concern_spec_test.go index f7b6270264..42c6a3a4c4 100644 --- a/mongo/read_write_concern_spec_test.go +++ b/mongo/read_write_concern_spec_test.go @@ -36,7 +36,7 @@ var ( reg.RegisterTypeMapEntry(bson.TypeEmbeddedDocument, reflect.TypeOf(bson.Raw{})) return reg }() - readWriteConcernTestsDir = spectest.TestPath(1, "read-write-concern") + readWriteConcernTestsDir = spectest.Path("read-write-concern/tests") ) type connectionStringTestFile struct { diff --git a/x/mongo/driver/auth/auth_spec_test.go b/x/mongo/driver/auth/auth_spec_test.go index c5f2a9a4be..6a8666f015 100644 --- a/x/mongo/driver/auth/auth_spec_test.go +++ b/x/mongo/driver/auth/auth_spec_test.go @@ -38,7 +38,7 @@ type testContainer struct { } // Note a test supporting the deprecated gssapiServiceName property was removed from data/auth/auth_tests.json -var authTestsDir = spectest.TestPath(4, "auth", "legacy") +var authTestsDir = spectest.Path("auth/tests/legacy") func runTestsInFile(t *testing.T, dirname string, filename string) { filepath := path.Join(dirname, filename) diff --git a/x/mongo/driver/connstring/connstring_spec_test.go b/x/mongo/driver/connstring/connstring_spec_test.go index 128092e1a7..4f6e8d2101 100644 --- a/x/mongo/driver/connstring/connstring_spec_test.go +++ b/x/mongo/driver/connstring/connstring_spec_test.go @@ -47,8 +47,8 @@ type testContainer struct { Tests []testCase } -var connstringTestsDir = spectest.TestPath(4, "connection-string") -var urioptionsTestDir = spectest.TestPath(4, "uri-options") +var connstringTestsDir = spectest.Path("connection-string/tests") +var urioptionsTestDir = spectest.Path("uri-options/tests") func (h *host) toString() string { switch h.Type { diff --git a/x/mongo/driver/topology/CMAP_spec_test.go b/x/mongo/driver/topology/CMAP_spec_test.go index eabefead7d..6f23eaa36e 100644 --- a/x/mongo/driver/topology/CMAP_spec_test.go +++ b/x/mongo/driver/topology/CMAP_spec_test.go @@ -114,7 +114,7 @@ type testInfo struct { sync.Mutex } -var cmapTestDir = spectest.TestPath(4, "connection-monitoring-and-pooling", "cmap-format") +var cmapTestDir = spectest.Path("connection-monitoring-and-pooling/tests/cmap-format") func TestCMAPSpec(t *testing.T) { for _, testFileName := range spectest.FindJSONFilesInDir(t, cmapTestDir) { diff --git a/x/mongo/driver/topology/sdam_spec_test.go b/x/mongo/driver/topology/sdam_spec_test.go index 55ac65e978..f17eb4a2d8 100644 --- a/x/mongo/driver/topology/sdam_spec_test.go +++ b/x/mongo/driver/topology/sdam_spec_test.go @@ -203,7 +203,7 @@ func serverClosed(e *event.ServerClosedEvent) { lock.Unlock() } -var testsDir = spectest.TestPath(4, "server-discovery-and-monitoring") +var testsDir = spectest.Path("server-discovery-and-monitoring/tests") var publishedEvents []interface{} var lock sync.Mutex diff --git a/x/mongo/driver/topology/server_rtt_test.go b/x/mongo/driver/topology/server_rtt_test.go index 9b4ba676e6..7c842867fe 100644 --- a/x/mongo/driver/topology/server_rtt_test.go +++ b/x/mongo/driver/topology/server_rtt_test.go @@ -27,7 +27,7 @@ func TestServerSelectionRTTSpec(t *testing.T) { NewAvgRtt float64 `json:"new_avg_rtt"` } - testsDir := spectest.TestPath(4, "server-selection", "rtt") + testsDir := spectest.Path("server-selection/tests/rtt") for _, file := range spectest.FindJSONFilesInDir(t, testsDir) { func(t *testing.T, filename string) { diff --git a/x/mongo/driver/topology/topology_test.go b/x/mongo/driver/topology/topology_test.go index c3453d4026..b95c84fc54 100644 --- a/x/mongo/driver/topology/topology_test.go +++ b/x/mongo/driver/topology/topology_test.go @@ -808,7 +808,7 @@ type inWindowTestCase struct { // can't be effectively accomplished just with server descriptions like most other server selection // algorithms. func TestServerSelectionSpecInWindow(t *testing.T) { - testsDir := spectest.TestPath(4, "server-selection", "in_window") + testsDir := spectest.Path("server-selection/tests/in_window") files := spectest.FindJSONFilesInDir(t, testsDir) From 0b6ac6588cb2101e7808bacce240797bfbde9dc4 Mon Sep 17 00:00:00 2001 From: Matt Dale <9760375+matthewdale@users.noreply.github.com> Date: Mon, 31 Mar 2025 11:02:11 -0700 Subject: [PATCH 4/4] GODRIVER-3445 Make spectest.Path work for any caller. --- internal/spectest/spectest.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/internal/spectest/spectest.go b/internal/spectest/spectest.go index 33f9f1f426..817ee6c28c 100644 --- a/internal/spectest/spectest.go +++ b/internal/spectest/spectest.go @@ -10,6 +10,7 @@ import ( "os" "path" "path/filepath" + "runtime" "testing" "go.mongodb.org/mongo-driver/v2/internal/require" @@ -42,10 +43,13 @@ func FindJSONFilesInDir(t *testing.T, dir string) []string { // Path returns the absolute path to the given specifications repo file or // subdirectory. func Path(subdir string) string { - testPath, err := filepath.Abs("../../../testdata/specifications/source/") - if err != nil { - panic(err) + _, file, _, ok := runtime.Caller(0) + if !ok { + panic("unable to get current file path from call stack") } - return filepath.Join(testPath, subdir) + // Get the repository root path from the current Go file path. + root := filepath.Dir(filepath.Dir(filepath.Dir(file))) + + return filepath.Join(root, "testdata", "specifications", "source", subdir) }