From f93289333344bf097e2010899cc7ec19e52fe3cd Mon Sep 17 00:00:00 2001 From: Gregory Wlodarek Date: Thu, 9 May 2019 11:43:49 -0400 Subject: [PATCH] SERVER-40660 Ensure multiple indexes via createIndexes() cannot bypass index limits --- .../index_limits_not_bypassed.js | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 jstests/noPassthroughWithMongod/index_limits_not_bypassed.js diff --git a/jstests/noPassthroughWithMongod/index_limits_not_bypassed.js b/jstests/noPassthroughWithMongod/index_limits_not_bypassed.js new file mode 100644 index 00000000000..bc55bda6550 --- /dev/null +++ b/jstests/noPassthroughWithMongod/index_limits_not_bypassed.js @@ -0,0 +1,38 @@ +/** + * Ensures that we cannot bypass the 64 index limit or the 1 text index limit per collection using + * the 'createIndexes()' command to create multiple indexes in one request. + */ +(function() { + "use strict"; + + const collName = "index_limits_not_bypassed"; + const coll = db.getCollection(collName); + coll.drop(); + + // A single collection can have no more than 64 indexes. We'll create 62 indexes here to + // have a total of 63 indexes (the _id index and the 62 about to be created). + for (let index = 0; index < 62; index++) { + let spec = {}; + spec[index] = 1; + assert.commandWorked(coll.createIndex(spec)); + } + + let indexes = db.runCommand({listIndexes: collName}); + assert.eq(63, indexes.cursor.firstBatch.length); + + // Creating multiple indexes via 'createIndexes()' shouldn't bypass index limits. + assert.commandFailedWithCode(coll.createIndexes([{x: 1}, {y: 1}]), + ErrorCodes.CannotCreateIndex); + + assert.commandFailedWithCode(coll.dropIndex("x"), ErrorCodes.IndexNotFound); + assert.commandFailedWithCode(coll.dropIndex("y"), ErrorCodes.IndexNotFound); + + // Try to create two text indexes at the same time using 'createIndexes()'. The limit for text + // indexes is one per collection. + assert.commandFailedWithCode( + coll.createIndexes([{x: "text", weights: {x: 5}}, {y: "text", weights: {y: 10}}]), + ErrorCodes.CannotCreateIndex); + + assert.commandFailedWithCode(coll.dropIndex("x"), ErrorCodes.IndexNotFound); + assert.commandFailedWithCode(coll.dropIndex("y"), ErrorCodes.IndexNotFound); +}());