summaryrefslogtreecommitdiff
path: root/jstests/noPassthroughWithMongod/index_limits_not_bypassed.js
blob: 33e2e5cec8ecd36bdc9f549dee667997c4c97bf3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/**
 * 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);
}());