diff options
Diffstat (limited to 'jstests/noPassthrough/apply_ops_mode.js')
-rw-r--r-- | jstests/noPassthrough/apply_ops_mode.js | 166 |
1 files changed, 81 insertions, 85 deletions
diff --git a/jstests/noPassthrough/apply_ops_mode.js b/jstests/noPassthrough/apply_ops_mode.js index 3515f4d8040..385cf0d532b 100644 --- a/jstests/noPassthrough/apply_ops_mode.js +++ b/jstests/noPassthrough/apply_ops_mode.js @@ -5,89 +5,85 @@ */ (function() { - 'use strict'; - load('jstests/libs/feature_compatibility_version.js'); - - var standalone = MongoRunner.runMongod(); - var db = standalone.getDB("test"); - - var coll = db.getCollection("apply_ops_mode1"); - coll.drop(); - assert.writeOK(coll.insert({_id: 1})); - - // ------------ Testing normal updates --------------- - - var id = ObjectId(); - var updateOp = {op: 'u', ns: coll.getFullName(), o: {_id: id, x: 1}, o2: {_id: id}}; - assert.commandFailed(db.adminCommand({applyOps: [updateOp], alwaysUpsert: false})); - assert.eq(coll.count({x: 1}), 0); - - // Test that 'InitialSync' does not override 'alwaysUpsert: false'. - assert.commandFailed(db.adminCommand( - {applyOps: [updateOp], alwaysUpsert: false, oplogApplicationMode: "InitialSync"})); - assert.eq(coll.count({x: 1}), 0); - - // Test parsing failure. - assert.commandFailedWithCode( - db.adminCommand({applyOps: [updateOp], oplogApplicationMode: "BadMode"}), - ErrorCodes.FailedToParse); - assert.commandFailedWithCode(db.adminCommand({applyOps: [updateOp], oplogApplicationMode: 5}), - ErrorCodes.TypeMismatch); - - // Test default succeeds. - assert.commandWorked(db.adminCommand({applyOps: [updateOp]})); - assert.eq(coll.count({x: 1}), 1); - - // Use new collection to make logs cleaner. - coll = db.getCollection("apply_ops_mode2"); - coll.drop(); - updateOp.ns = coll.getFullName(); - assert.writeOK(coll.insert({_id: 1})); - - // Test default succeeds in 'InitialSync' mode. - assert.commandWorked( - db.adminCommand({applyOps: [updateOp], oplogApplicationMode: "InitialSync"})); - assert.eq(coll.count({x: 1}), 1); - - // ------------ Testing fCV updates --------------- - - var adminDB = db.getSiblingDB("admin"); - const systemVersionColl = adminDB.getCollection("system.version"); - - updateOp = { - op: 'u', - ns: systemVersionColl.getFullName(), - o: {_id: "featureCompatibilityVersion", version: lastStableFCV}, - o2: {_id: "featureCompatibilityVersion"} - }; - assert.commandFailed( - db.adminCommand({applyOps: [updateOp], oplogApplicationMode: "InitialSync"})); - - assert.commandWorked(db.adminCommand({applyOps: [updateOp], oplogApplicationMode: "ApplyOps"})); - - // Test default succeeds. - updateOp.o.targetVersion = latestFCV; - assert.commandWorked(db.adminCommand({ - applyOps: [updateOp], - })); - - // ------------ Testing commands on the fCV collection --------------- - - var collModOp = { - op: 'c', - ns: systemVersionColl.getDB() + ".$cmd", - o: {collMod: systemVersionColl.getName(), validationLevel: "off"}, - }; - assert.commandFailed( - db.adminCommand({applyOps: [collModOp], oplogApplicationMode: "InitialSync"})); - - assert.commandWorked( - db.adminCommand({applyOps: [collModOp], oplogApplicationMode: "ApplyOps"})); - - // Test default succeeds. - assert.commandWorked(db.adminCommand({ - applyOps: [collModOp], - })); - - MongoRunner.stopMongod(standalone); +'use strict'; +load('jstests/libs/feature_compatibility_version.js'); + +var standalone = MongoRunner.runMongod(); +var db = standalone.getDB("test"); + +var coll = db.getCollection("apply_ops_mode1"); +coll.drop(); +assert.writeOK(coll.insert({_id: 1})); + +// ------------ Testing normal updates --------------- + +var id = ObjectId(); +var updateOp = {op: 'u', ns: coll.getFullName(), o: {_id: id, x: 1}, o2: {_id: id}}; +assert.commandFailed(db.adminCommand({applyOps: [updateOp], alwaysUpsert: false})); +assert.eq(coll.count({x: 1}), 0); + +// Test that 'InitialSync' does not override 'alwaysUpsert: false'. +assert.commandFailed(db.adminCommand( + {applyOps: [updateOp], alwaysUpsert: false, oplogApplicationMode: "InitialSync"})); +assert.eq(coll.count({x: 1}), 0); + +// Test parsing failure. +assert.commandFailedWithCode( + db.adminCommand({applyOps: [updateOp], oplogApplicationMode: "BadMode"}), + ErrorCodes.FailedToParse); +assert.commandFailedWithCode(db.adminCommand({applyOps: [updateOp], oplogApplicationMode: 5}), + ErrorCodes.TypeMismatch); + +// Test default succeeds. +assert.commandWorked(db.adminCommand({applyOps: [updateOp]})); +assert.eq(coll.count({x: 1}), 1); + +// Use new collection to make logs cleaner. +coll = db.getCollection("apply_ops_mode2"); +coll.drop(); +updateOp.ns = coll.getFullName(); +assert.writeOK(coll.insert({_id: 1})); + +// Test default succeeds in 'InitialSync' mode. +assert.commandWorked(db.adminCommand({applyOps: [updateOp], oplogApplicationMode: "InitialSync"})); +assert.eq(coll.count({x: 1}), 1); + +// ------------ Testing fCV updates --------------- + +var adminDB = db.getSiblingDB("admin"); +const systemVersionColl = adminDB.getCollection("system.version"); + +updateOp = { + op: 'u', + ns: systemVersionColl.getFullName(), + o: {_id: "featureCompatibilityVersion", version: lastStableFCV}, + o2: {_id: "featureCompatibilityVersion"} +}; +assert.commandFailed(db.adminCommand({applyOps: [updateOp], oplogApplicationMode: "InitialSync"})); + +assert.commandWorked(db.adminCommand({applyOps: [updateOp], oplogApplicationMode: "ApplyOps"})); + +// Test default succeeds. +updateOp.o.targetVersion = latestFCV; +assert.commandWorked(db.adminCommand({ + applyOps: [updateOp], +})); + +// ------------ Testing commands on the fCV collection --------------- + +var collModOp = { + op: 'c', + ns: systemVersionColl.getDB() + ".$cmd", + o: {collMod: systemVersionColl.getName(), validationLevel: "off"}, +}; +assert.commandFailed(db.adminCommand({applyOps: [collModOp], oplogApplicationMode: "InitialSync"})); + +assert.commandWorked(db.adminCommand({applyOps: [collModOp], oplogApplicationMode: "ApplyOps"})); + +// Test default succeeds. +assert.commandWorked(db.adminCommand({ + applyOps: [collModOp], +})); + +MongoRunner.stopMongod(standalone); })(); |