summaryrefslogtreecommitdiff
path: root/jstests/noPassthrough/rejected_connections_server_status.js
blob: 30fa5c970c1206f1b4b1c75731b90b3a8398eceb (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
54
55
56
57
58
59
60
61
62
63
64
65
/**
 *  @tags: [requires_fcv_63]
 *
 * Tests that when the max number of connections mongod will accept has been reached (i.e.
 * maxConns), serverStatus labels subsequent connection attempts as rejected connections.
 */

(function() {
'use strict';

// This value must be equivalent to the value specified in the config yaml file.
const configuredMaxConns = 5;

let conn = MongoRunner.runMongod({
    config: "jstests/noPassthrough/libs/net.max_incoming_connections.yaml",
});
let db = conn.getDB("test");

function getStats() {
    return assert.commandWorked(conn.getDB("admin").runCommand({serverStatus: 1}));
}

function verifyStats({expectedCurrentCount, expectedRejectedCount}) {
    // Verify that we have updated serverStatus.
    jsTestLog(`calling verifyStats with expectedCurrentCount: ${
        expectedCurrentCount}, expectedRejectedCount: ${expectedRejectedCount}`);
    let serverStatus = getStats();

    assert.soon(
        () => {
            const actualCurrentCount = serverStatus.connections.current;
            const actualRejectedCount = serverStatus.connections.rejected;

            jsTestLog(`expectedCurrentCount: ${expectedCurrentCount}, expectedRejectedCount: ${
                expectedRejectedCount}, actualCurrentCount: ${
                actualCurrentCount}, actualRejectedCount: ${actualRejectedCount}`);
            return expectedCurrentCount == actualCurrentCount &&
                expectedRejectedCount == actualRejectedCount;
        },
        "Failed to verify initial conditions. serverStatus.connections: " +
            tojson(serverStatus.connections),
        10000);

    assert.eq(serverStatus.connections["available"], configuredMaxConns - expectedCurrentCount);
}

let conns = [];
let expectedCurrentCount = 1;
let expectedRejectedCount = 0;

for (var i = 0; i < configuredMaxConns * 2; i++) {
    try {
        conns.push(new Mongo(db.getMongo().host));
        ++expectedCurrentCount;
    } catch (e) {
        jsTestLog(e);
        assert(i + 1 >= configuredMaxConns);
        ++expectedRejectedCount;
    }
    verifyStats(
        {expectedCurrentCount: expectedCurrentCount, expectedRejectedCount: expectedRejectedCount});
}

MongoRunner.stopMongod(conn);
})();