summaryrefslogtreecommitdiff
path: root/jstests/noPassthrough/max_bson_depth_parameter.js
blob: 3aef0995d34da5cc3ad52bf7235aee0598f3bc06 (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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/**
 * Tests that the server properly respects the maxBSONDepth parameter, and will fail to start up if
 * given an invalid depth.
 */
(function() {
"use strict";

const kTestName = "max_bson_depth_parameter";

// Start mongod with a valid BSON depth, then test that it accepts and rejects command
// appropriately based on the depth.
let conn = MongoRunner.runMongod({setParameter: "maxBSONDepth=5"});
assert.neq(null, conn, "Failed to start mongod");
let testDB = conn.getDB("test");

assert.commandWorked(testDB.runCommand({ping: 1}), "Failed to run a command on the server");
assert.commandFailedWithCode(
    testDB.runCommand({find: "coll", filter: {x: {x: {x: {x: {x: {x: 1}}}}}}}),
    ErrorCodes.Overflow,
    "Expected server to reject command for exceeding the nesting depth limit");

// Confirm depth limits for $lookup.
assert.commandWorked(testDB.coll1.insert({_id: 1}));
assert.commandWorked(testDB.coll2.insert({_id: 1}));

assert.commandWorked(testDB.runCommand({
    aggregate: "coll1",
    pipeline: [{$lookup: {from: "coll2", as: "as", pipeline: []}}],
    cursor: {}
}));
assert.commandFailedWithCode(
        testDB.runCommand({
            aggregate: "coll1",
            pipeline: [{
                $lookup: {
                    from: "coll2",
                    as: "as",
                    pipeline: [{$lookup: {from: "coll2", as: "as", pipeline: []}}]
                }
            }],
            cursor: {}
        }),
        ErrorCodes.Overflow,
        "Expected server to reject command for exceeding the nesting depth limit");

// Restart mongod with a negative maximum BSON depth and test that it fails to start.
MongoRunner.stopMongod(conn);
conn = MongoRunner.runMongod({setParameter: "maxBSONDepth=-4"});
assert.eq(null, conn, "Expected mongod to fail at startup because depth was negative");

conn = MongoRunner.runMongod({setParameter: "maxBSONDepth=1"});
assert.eq(null, conn, "Expected mongod to fail at startup because depth was too low");
}());