diff --git a/source/retryable-writes/tests/README.rst b/source/retryable-writes/tests/README.rst index c7d51280d2..3fa7713497 100644 --- a/source/retryable-writes/tests/README.rst +++ b/source/retryable-writes/tests/README.rst @@ -9,8 +9,13 @@ Retryable Write Tests Introduction ============ -The YAML and JSON files in this directory tree are platform-independent tests -that drivers can use to prove their conformance to the Retryable Writes spec. +Tests in this directory are platform-independent tests that drivers can use to +prove their conformance to the Retryable Writes specification. + +Tests in the ``unified`` directory are implemented in the +`Unified Test Format <../../unified-test-format/unified-test-format.rst>`__. + +Tests in the ``legacy`` directory should be executed as described below. Several prose tests, which are not easily expressed in YAML, are also presented in this file. Those tests will need to be manually implemented by each driver. diff --git a/source/retryable-writes/tests/bulkWrite-errorLabels.json b/source/retryable-writes/tests/legacy/bulkWrite-errorLabels.json similarity index 100% rename from source/retryable-writes/tests/bulkWrite-errorLabels.json rename to source/retryable-writes/tests/legacy/bulkWrite-errorLabels.json diff --git a/source/retryable-writes/tests/bulkWrite-errorLabels.yml b/source/retryable-writes/tests/legacy/bulkWrite-errorLabels.yml similarity index 100% rename from source/retryable-writes/tests/bulkWrite-errorLabels.yml rename to source/retryable-writes/tests/legacy/bulkWrite-errorLabels.yml diff --git a/source/retryable-writes/tests/bulkWrite-serverErrors.json b/source/retryable-writes/tests/legacy/bulkWrite-serverErrors.json similarity index 100% rename from source/retryable-writes/tests/bulkWrite-serverErrors.json rename to source/retryable-writes/tests/legacy/bulkWrite-serverErrors.json diff --git a/source/retryable-writes/tests/bulkWrite-serverErrors.yml b/source/retryable-writes/tests/legacy/bulkWrite-serverErrors.yml similarity index 100% rename from source/retryable-writes/tests/bulkWrite-serverErrors.yml rename to source/retryable-writes/tests/legacy/bulkWrite-serverErrors.yml diff --git a/source/retryable-writes/tests/bulkWrite.json b/source/retryable-writes/tests/legacy/bulkWrite.json similarity index 100% rename from source/retryable-writes/tests/bulkWrite.json rename to source/retryable-writes/tests/legacy/bulkWrite.json diff --git a/source/retryable-writes/tests/bulkWrite.yml b/source/retryable-writes/tests/legacy/bulkWrite.yml similarity index 100% rename from source/retryable-writes/tests/bulkWrite.yml rename to source/retryable-writes/tests/legacy/bulkWrite.yml diff --git a/source/retryable-writes/tests/deleteMany.json b/source/retryable-writes/tests/legacy/deleteMany.json similarity index 100% rename from source/retryable-writes/tests/deleteMany.json rename to source/retryable-writes/tests/legacy/deleteMany.json diff --git a/source/retryable-writes/tests/deleteMany.yml b/source/retryable-writes/tests/legacy/deleteMany.yml similarity index 100% rename from source/retryable-writes/tests/deleteMany.yml rename to source/retryable-writes/tests/legacy/deleteMany.yml diff --git a/source/retryable-writes/tests/deleteOne-errorLabels.json b/source/retryable-writes/tests/legacy/deleteOne-errorLabels.json similarity index 100% rename from source/retryable-writes/tests/deleteOne-errorLabels.json rename to source/retryable-writes/tests/legacy/deleteOne-errorLabels.json diff --git a/source/retryable-writes/tests/deleteOne-errorLabels.yml b/source/retryable-writes/tests/legacy/deleteOne-errorLabels.yml similarity index 100% rename from source/retryable-writes/tests/deleteOne-errorLabels.yml rename to source/retryable-writes/tests/legacy/deleteOne-errorLabels.yml diff --git a/source/retryable-writes/tests/deleteOne-serverErrors.json b/source/retryable-writes/tests/legacy/deleteOne-serverErrors.json similarity index 100% rename from source/retryable-writes/tests/deleteOne-serverErrors.json rename to source/retryable-writes/tests/legacy/deleteOne-serverErrors.json diff --git a/source/retryable-writes/tests/deleteOne-serverErrors.yml b/source/retryable-writes/tests/legacy/deleteOne-serverErrors.yml similarity index 100% rename from source/retryable-writes/tests/deleteOne-serverErrors.yml rename to source/retryable-writes/tests/legacy/deleteOne-serverErrors.yml diff --git a/source/retryable-writes/tests/deleteOne.json b/source/retryable-writes/tests/legacy/deleteOne.json similarity index 100% rename from source/retryable-writes/tests/deleteOne.json rename to source/retryable-writes/tests/legacy/deleteOne.json diff --git a/source/retryable-writes/tests/deleteOne.yml b/source/retryable-writes/tests/legacy/deleteOne.yml similarity index 100% rename from source/retryable-writes/tests/deleteOne.yml rename to source/retryable-writes/tests/legacy/deleteOne.yml diff --git a/source/retryable-writes/tests/findOneAndDelete-errorLabels.json b/source/retryable-writes/tests/legacy/findOneAndDelete-errorLabels.json similarity index 100% rename from source/retryable-writes/tests/findOneAndDelete-errorLabels.json rename to source/retryable-writes/tests/legacy/findOneAndDelete-errorLabels.json diff --git a/source/retryable-writes/tests/findOneAndDelete-errorLabels.yml b/source/retryable-writes/tests/legacy/findOneAndDelete-errorLabels.yml similarity index 100% rename from source/retryable-writes/tests/findOneAndDelete-errorLabels.yml rename to source/retryable-writes/tests/legacy/findOneAndDelete-errorLabels.yml diff --git a/source/retryable-writes/tests/findOneAndDelete-serverErrors.json b/source/retryable-writes/tests/legacy/findOneAndDelete-serverErrors.json similarity index 100% rename from source/retryable-writes/tests/findOneAndDelete-serverErrors.json rename to source/retryable-writes/tests/legacy/findOneAndDelete-serverErrors.json diff --git a/source/retryable-writes/tests/findOneAndDelete-serverErrors.yml b/source/retryable-writes/tests/legacy/findOneAndDelete-serverErrors.yml similarity index 100% rename from source/retryable-writes/tests/findOneAndDelete-serverErrors.yml rename to source/retryable-writes/tests/legacy/findOneAndDelete-serverErrors.yml diff --git a/source/retryable-writes/tests/findOneAndDelete.json b/source/retryable-writes/tests/legacy/findOneAndDelete.json similarity index 100% rename from source/retryable-writes/tests/findOneAndDelete.json rename to source/retryable-writes/tests/legacy/findOneAndDelete.json diff --git a/source/retryable-writes/tests/findOneAndDelete.yml b/source/retryable-writes/tests/legacy/findOneAndDelete.yml similarity index 100% rename from source/retryable-writes/tests/findOneAndDelete.yml rename to source/retryable-writes/tests/legacy/findOneAndDelete.yml diff --git a/source/retryable-writes/tests/findOneAndReplace-errorLabels.json b/source/retryable-writes/tests/legacy/findOneAndReplace-errorLabels.json similarity index 100% rename from source/retryable-writes/tests/findOneAndReplace-errorLabels.json rename to source/retryable-writes/tests/legacy/findOneAndReplace-errorLabels.json diff --git a/source/retryable-writes/tests/findOneAndReplace-errorLabels.yml b/source/retryable-writes/tests/legacy/findOneAndReplace-errorLabels.yml similarity index 100% rename from source/retryable-writes/tests/findOneAndReplace-errorLabels.yml rename to source/retryable-writes/tests/legacy/findOneAndReplace-errorLabels.yml diff --git a/source/retryable-writes/tests/findOneAndReplace-serverErrors.json b/source/retryable-writes/tests/legacy/findOneAndReplace-serverErrors.json similarity index 100% rename from source/retryable-writes/tests/findOneAndReplace-serverErrors.json rename to source/retryable-writes/tests/legacy/findOneAndReplace-serverErrors.json diff --git a/source/retryable-writes/tests/findOneAndReplace-serverErrors.yml b/source/retryable-writes/tests/legacy/findOneAndReplace-serverErrors.yml similarity index 100% rename from source/retryable-writes/tests/findOneAndReplace-serverErrors.yml rename to source/retryable-writes/tests/legacy/findOneAndReplace-serverErrors.yml diff --git a/source/retryable-writes/tests/findOneAndReplace.json b/source/retryable-writes/tests/legacy/findOneAndReplace.json similarity index 100% rename from source/retryable-writes/tests/findOneAndReplace.json rename to source/retryable-writes/tests/legacy/findOneAndReplace.json diff --git a/source/retryable-writes/tests/findOneAndReplace.yml b/source/retryable-writes/tests/legacy/findOneAndReplace.yml similarity index 100% rename from source/retryable-writes/tests/findOneAndReplace.yml rename to source/retryable-writes/tests/legacy/findOneAndReplace.yml diff --git a/source/retryable-writes/tests/findOneAndUpdate-errorLabels.json b/source/retryable-writes/tests/legacy/findOneAndUpdate-errorLabels.json similarity index 100% rename from source/retryable-writes/tests/findOneAndUpdate-errorLabels.json rename to source/retryable-writes/tests/legacy/findOneAndUpdate-errorLabels.json diff --git a/source/retryable-writes/tests/findOneAndUpdate-errorLabels.yml b/source/retryable-writes/tests/legacy/findOneAndUpdate-errorLabels.yml similarity index 100% rename from source/retryable-writes/tests/findOneAndUpdate-errorLabels.yml rename to source/retryable-writes/tests/legacy/findOneAndUpdate-errorLabels.yml diff --git a/source/retryable-writes/tests/findOneAndUpdate-serverErrors.json b/source/retryable-writes/tests/legacy/findOneAndUpdate-serverErrors.json similarity index 100% rename from source/retryable-writes/tests/findOneAndUpdate-serverErrors.json rename to source/retryable-writes/tests/legacy/findOneAndUpdate-serverErrors.json diff --git a/source/retryable-writes/tests/findOneAndUpdate-serverErrors.yml b/source/retryable-writes/tests/legacy/findOneAndUpdate-serverErrors.yml similarity index 100% rename from source/retryable-writes/tests/findOneAndUpdate-serverErrors.yml rename to source/retryable-writes/tests/legacy/findOneAndUpdate-serverErrors.yml diff --git a/source/retryable-writes/tests/findOneAndUpdate.json b/source/retryable-writes/tests/legacy/findOneAndUpdate.json similarity index 100% rename from source/retryable-writes/tests/findOneAndUpdate.json rename to source/retryable-writes/tests/legacy/findOneAndUpdate.json diff --git a/source/retryable-writes/tests/findOneAndUpdate.yml b/source/retryable-writes/tests/legacy/findOneAndUpdate.yml similarity index 100% rename from source/retryable-writes/tests/findOneAndUpdate.yml rename to source/retryable-writes/tests/legacy/findOneAndUpdate.yml diff --git a/source/retryable-writes/tests/insertMany-errorLabels.json b/source/retryable-writes/tests/legacy/insertMany-errorLabels.json similarity index 100% rename from source/retryable-writes/tests/insertMany-errorLabels.json rename to source/retryable-writes/tests/legacy/insertMany-errorLabels.json diff --git a/source/retryable-writes/tests/insertMany-errorLabels.yml b/source/retryable-writes/tests/legacy/insertMany-errorLabels.yml similarity index 100% rename from source/retryable-writes/tests/insertMany-errorLabels.yml rename to source/retryable-writes/tests/legacy/insertMany-errorLabels.yml diff --git a/source/retryable-writes/tests/insertMany-serverErrors.json b/source/retryable-writes/tests/legacy/insertMany-serverErrors.json similarity index 100% rename from source/retryable-writes/tests/insertMany-serverErrors.json rename to source/retryable-writes/tests/legacy/insertMany-serverErrors.json diff --git a/source/retryable-writes/tests/insertMany-serverErrors.yml b/source/retryable-writes/tests/legacy/insertMany-serverErrors.yml similarity index 100% rename from source/retryable-writes/tests/insertMany-serverErrors.yml rename to source/retryable-writes/tests/legacy/insertMany-serverErrors.yml diff --git a/source/retryable-writes/tests/insertMany.json b/source/retryable-writes/tests/legacy/insertMany.json similarity index 100% rename from source/retryable-writes/tests/insertMany.json rename to source/retryable-writes/tests/legacy/insertMany.json diff --git a/source/retryable-writes/tests/insertMany.yml b/source/retryable-writes/tests/legacy/insertMany.yml similarity index 100% rename from source/retryable-writes/tests/insertMany.yml rename to source/retryable-writes/tests/legacy/insertMany.yml diff --git a/source/retryable-writes/tests/insertOne-errorLabels.json b/source/retryable-writes/tests/legacy/insertOne-errorLabels.json similarity index 100% rename from source/retryable-writes/tests/insertOne-errorLabels.json rename to source/retryable-writes/tests/legacy/insertOne-errorLabels.json diff --git a/source/retryable-writes/tests/insertOne-errorLabels.yml b/source/retryable-writes/tests/legacy/insertOne-errorLabels.yml similarity index 100% rename from source/retryable-writes/tests/insertOne-errorLabels.yml rename to source/retryable-writes/tests/legacy/insertOne-errorLabels.yml diff --git a/source/retryable-writes/tests/insertOne-serverErrors.json b/source/retryable-writes/tests/legacy/insertOne-serverErrors.json similarity index 100% rename from source/retryable-writes/tests/insertOne-serverErrors.json rename to source/retryable-writes/tests/legacy/insertOne-serverErrors.json diff --git a/source/retryable-writes/tests/insertOne-serverErrors.yml b/source/retryable-writes/tests/legacy/insertOne-serverErrors.yml similarity index 100% rename from source/retryable-writes/tests/insertOne-serverErrors.yml rename to source/retryable-writes/tests/legacy/insertOne-serverErrors.yml diff --git a/source/retryable-writes/tests/insertOne.json b/source/retryable-writes/tests/legacy/insertOne.json similarity index 100% rename from source/retryable-writes/tests/insertOne.json rename to source/retryable-writes/tests/legacy/insertOne.json diff --git a/source/retryable-writes/tests/insertOne.yml b/source/retryable-writes/tests/legacy/insertOne.yml similarity index 100% rename from source/retryable-writes/tests/insertOne.yml rename to source/retryable-writes/tests/legacy/insertOne.yml diff --git a/source/retryable-writes/tests/replaceOne-errorLabels.json b/source/retryable-writes/tests/legacy/replaceOne-errorLabels.json similarity index 100% rename from source/retryable-writes/tests/replaceOne-errorLabels.json rename to source/retryable-writes/tests/legacy/replaceOne-errorLabels.json diff --git a/source/retryable-writes/tests/replaceOne-errorLabels.yml b/source/retryable-writes/tests/legacy/replaceOne-errorLabels.yml similarity index 100% rename from source/retryable-writes/tests/replaceOne-errorLabels.yml rename to source/retryable-writes/tests/legacy/replaceOne-errorLabels.yml diff --git a/source/retryable-writes/tests/replaceOne-serverErrors.json b/source/retryable-writes/tests/legacy/replaceOne-serverErrors.json similarity index 100% rename from source/retryable-writes/tests/replaceOne-serverErrors.json rename to source/retryable-writes/tests/legacy/replaceOne-serverErrors.json diff --git a/source/retryable-writes/tests/replaceOne-serverErrors.yml b/source/retryable-writes/tests/legacy/replaceOne-serverErrors.yml similarity index 100% rename from source/retryable-writes/tests/replaceOne-serverErrors.yml rename to source/retryable-writes/tests/legacy/replaceOne-serverErrors.yml diff --git a/source/retryable-writes/tests/replaceOne.json b/source/retryable-writes/tests/legacy/replaceOne.json similarity index 100% rename from source/retryable-writes/tests/replaceOne.json rename to source/retryable-writes/tests/legacy/replaceOne.json diff --git a/source/retryable-writes/tests/replaceOne.yml b/source/retryable-writes/tests/legacy/replaceOne.yml similarity index 100% rename from source/retryable-writes/tests/replaceOne.yml rename to source/retryable-writes/tests/legacy/replaceOne.yml diff --git a/source/retryable-writes/tests/updateMany.json b/source/retryable-writes/tests/legacy/updateMany.json similarity index 100% rename from source/retryable-writes/tests/updateMany.json rename to source/retryable-writes/tests/legacy/updateMany.json diff --git a/source/retryable-writes/tests/updateMany.yml b/source/retryable-writes/tests/legacy/updateMany.yml similarity index 100% rename from source/retryable-writes/tests/updateMany.yml rename to source/retryable-writes/tests/legacy/updateMany.yml diff --git a/source/retryable-writes/tests/updateOne-errorLabels.json b/source/retryable-writes/tests/legacy/updateOne-errorLabels.json similarity index 100% rename from source/retryable-writes/tests/updateOne-errorLabels.json rename to source/retryable-writes/tests/legacy/updateOne-errorLabels.json diff --git a/source/retryable-writes/tests/updateOne-errorLabels.yml b/source/retryable-writes/tests/legacy/updateOne-errorLabels.yml similarity index 100% rename from source/retryable-writes/tests/updateOne-errorLabels.yml rename to source/retryable-writes/tests/legacy/updateOne-errorLabels.yml diff --git a/source/retryable-writes/tests/updateOne-serverErrors.json b/source/retryable-writes/tests/legacy/updateOne-serverErrors.json similarity index 100% rename from source/retryable-writes/tests/updateOne-serverErrors.json rename to source/retryable-writes/tests/legacy/updateOne-serverErrors.json diff --git a/source/retryable-writes/tests/updateOne-serverErrors.yml b/source/retryable-writes/tests/legacy/updateOne-serverErrors.yml similarity index 100% rename from source/retryable-writes/tests/updateOne-serverErrors.yml rename to source/retryable-writes/tests/legacy/updateOne-serverErrors.yml diff --git a/source/retryable-writes/tests/updateOne.json b/source/retryable-writes/tests/legacy/updateOne.json similarity index 100% rename from source/retryable-writes/tests/updateOne.json rename to source/retryable-writes/tests/legacy/updateOne.json diff --git a/source/retryable-writes/tests/updateOne.yml b/source/retryable-writes/tests/legacy/updateOne.yml similarity index 100% rename from source/retryable-writes/tests/updateOne.yml rename to source/retryable-writes/tests/legacy/updateOne.yml diff --git a/source/retryable-writes/tests/unified/bulkWrite-serverErrors.json b/source/retryable-writes/tests/unified/bulkWrite-serverErrors.json new file mode 100644 index 0000000000..23cf2869a6 --- /dev/null +++ b/source/retryable-writes/tests/unified/bulkWrite-serverErrors.json @@ -0,0 +1,205 @@ +{ + "description": "retryable-writes bulkWrite serverErrors", + "schemaVersion": "1.0", + "runOnRequirements": [ + { + "minServerVersion": "3.6", + "topologies": [ + "replicaset" + ] + } + ], + "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.0", + "topologies": [ + "replicaset" + ] + }, + { + "minServerVersion": "4.1.7", + "topologies": [ + "sharded-replicaset" + ] + } + ], + "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 + } + ] + } + ] + } + ] +} diff --git a/source/retryable-writes/tests/unified/bulkWrite-serverErrors.yml b/source/retryable-writes/tests/unified/bulkWrite-serverErrors.yml new file mode 100644 index 0000000000..cb67304c74 --- /dev/null +++ b/source/retryable-writes/tests/unified/bulkWrite-serverErrors.yml @@ -0,0 +1,96 @@ +description: "retryable-writes bulkWrite serverErrors" + +schemaVersion: "1.0" + +runOnRequirements: + - minServerVersion: "3.6" + topologies: [ replicaset ] + +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.0" + topologies: [ replicaset ] + - minServerVersion: "4.1.7" + topologies: [ sharded-replicaset ] + 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 diff --git a/source/retryable-writes/tests/unified/insertOne-serverErrors.json b/source/retryable-writes/tests/unified/insertOne-serverErrors.json new file mode 100644 index 0000000000..77245a8197 --- /dev/null +++ b/source/retryable-writes/tests/unified/insertOne-serverErrors.json @@ -0,0 +1,173 @@ +{ + "description": "retryable-writes insertOne serverErrors", + "schemaVersion": "1.0", + "runOnRequirements": [ + { + "minServerVersion": "3.6", + "topologies": [ + "replicaset" + ] + } + ], + "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.0", + "topologies": [ + "replicaset" + ] + }, + { + "minServerVersion": "4.1.7", + "topologies": [ + "sharded-replicaset" + ] + } + ], + "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 + } + ] + } + ] + } + ] +} diff --git a/source/retryable-writes/tests/unified/insertOne-serverErrors.yml b/source/retryable-writes/tests/unified/insertOne-serverErrors.yml new file mode 100644 index 0000000000..3d9672cdca --- /dev/null +++ b/source/retryable-writes/tests/unified/insertOne-serverErrors.yml @@ -0,0 +1,78 @@ +description: "retryable-writes insertOne serverErrors" + +schemaVersion: "1.0" + +runOnRequirements: + - minServerVersion: "3.6" + topologies: [ replicaset ] + +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.0" + topologies: [ replicaset ] + - minServerVersion: "4.1.7" + topologies: [ sharded-replicaset ] + 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