0
0
mirror of https://github.com/mongodb/mongo.git synced 2024-12-01 01:21:03 +01:00

SERVER-40660 Ensure multiple indexes via createIndexes() cannot bypass index limits

This commit is contained in:
Gregory Wlodarek 2019-05-09 11:43:49 -04:00
parent bf6c2696da
commit f932893333

View File

@ -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);
}());