summaryrefslogtreecommitdiff
path: root/jstests/noPassthroughWithMongod/index_limits_not_bypassed.js
blob: bc55bda6550a34a384963f8d3aeac84b646a8b26 (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
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);
}());