diff options
author | Yuhong Zhang <yuhong.zhang@mongodb.com> | 2022-02-15 15:38:29 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-02-15 17:49:46 +0000 |
commit | 0d49a8ea04960ffc6817b439bcec2c6ec31a620d (patch) | |
tree | 5fe686b940a237915a7d667716628bd300ffa465 /jstests/noPassthrough/collmod_index_noop.js | |
parent | 4931ea397a8119b28309c4fbe3604079e840717b (diff) | |
download | mongo-0d49a8ea04960ffc6817b439bcec2c6ec31a620d.tar.gz |
SERVER-63481 Add `disallowNewDuplicateKeys` to `createIndex`
Diffstat (limited to 'jstests/noPassthrough/collmod_index_noop.js')
-rw-r--r-- | jstests/noPassthrough/collmod_index_noop.js | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/jstests/noPassthrough/collmod_index_noop.js b/jstests/noPassthrough/collmod_index_noop.js index 77b83aa5e49..510b0448185 100644 --- a/jstests/noPassthrough/collmod_index_noop.js +++ b/jstests/noPassthrough/collmod_index_noop.js @@ -1,8 +1,8 @@ /** - * Validate that the 'collMod' command with 'hidden' or 'unique' fields will return expected result - * document for the command and generate expected oplog entries in which the index modifications - * (hiding/unhiding/convert to unique) will be no-ops if no other index option (TTL, for example) - * is involved. + * Validate that the 'collMod' command with 'hidden,' 'unique,' or 'disallowNewDuplicateKeys' fields + * will return expected result document for the command and generate expected oplog entries in which + * the index modifications (hiding/unhiding/convert to unique/allowing duplicates/disallowing + * duplicates) will be no-ops if no other index option (TTL, for example) is involved. * * @tags: [ * # TODO(SERVER-61181): Fix validation errors under ephemeralForTest. @@ -24,7 +24,7 @@ rst.startSet(); rst.initiate(); const dbName = jsTestName(); -const collName = "hidden_index"; +const collName = "collmod_index_noop"; const primary = rst.getPrimary(); const primaryDB = primary.getDB(dbName); const primaryColl = primaryDB[collName]; @@ -53,6 +53,10 @@ function validateResultForCollMod(result, expectedResult) { assert.eq(result.expireAfterSeconds_old, expectedResult.expireAfterSeconds_old, result); assert.eq(result.expireAfterSeconds_new, expectedResult.expireAfterSeconds_new, result); assert.eq(result.unique_new, expectedResult.unique_new, result); + assert.eq( + result.disallowNewDuplicateKeys_old, expectedResult.disallowNewDuplicateKeys_old, result); + assert.eq( + result.disallowNewDuplicateKeys_new, expectedResult.disallowNewDuplicateKeys_new, result); } primaryColl.drop(); @@ -64,6 +68,9 @@ assert.commandWorked(primaryColl.createIndex({e: 1}, {hidden: true, unique: true assert.commandWorked(primaryColl.createIndex({f: 1}, {unique: true, expireAfterSeconds: 15})); assert.commandWorked( primaryColl.createIndex({g: 1}, {hidden: true, unique: true, expireAfterSeconds: 25})); +if (collModIndexUniqueEnabled) { + assert.commandWorked(primaryColl.createIndex({h: 1}, {disallowNewDuplicateKeys: true})); +} // Hiding a non-hidden index will generate the oplog entry with a 'hidden_old: false'. let result = assert.commandWorked(primaryColl.hideIndex('a_1')); @@ -213,6 +220,24 @@ if (collModIndexUniqueEnabled) { assert(idxSpec.hidden, tojson(idxSpec)); assert.eq(idxSpec.expireAfterSeconds, 30); assert(idxSpec.unique, tojson(idxSpec)); + + // Validate that if the 'disallowNewDuplicateKeys' option is specified but is a no-op, the + // operation as a whole will be a no-op. + result = assert.commandWorked(primaryDB.runCommand({ + "collMod": primaryColl.getName(), + "index": {"name": "h_1", "disallowNewDuplicateKeys": true}, + })); + validateResultForCollMod(result, {}); + validateCollModOplogEntryCount({ + "o.index.name": "h_1", + }, + 0); + + // Test that the index was unchanged. + idxSpec = GetIndexHelpers.findByName(primaryColl.getIndexes(), "h_1"); + assert.eq(idxSpec.hidden, undefined); + assert.eq(idxSpec.expireAfterSeconds, undefined); + assert(idxSpec.disallowNewDuplicateKeys, tojson(idxSpec)); } rst.stopSet(); |