summaryrefslogtreecommitdiff
path: root/jstests/core/list_databases.js
blob: 3b3f7da00f9f699e18b0b746790cd081b016b6aa (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
/**
 * Tests for the listDatabases command.
 */
(function() {
    "use strict";

    // Given the output from the listDatabases command, ensures that the total size reported is the
    // sum of the individual db sizes.
    function verifySizeSum(listDatabasesOut) {
        assert(listDatabasesOut.hasOwnProperty("databases"));
        const dbList = listDatabasesOut.databases;
        let sizeSum = 0;
        for (let i = 0; i < dbList.length; i++) {
            sizeSum += dbList[i].sizeOnDisk;
        }
        assert.eq(sizeSum, listDatabasesOut.totalSize);
    }

    function verifyNameOnly(listDatabasesOut) {
        for (let field in listDatabasesOut) {
            assert(['databases', 'nameOnly', 'ok'].some((f) => f == field),
                   'unexpected field ' + field);
        }
        listDatabasesOut.databases.forEach((database) => {
            for (let field in database) {
                assert.eq(field, "name", "expected name only");
            }
        });
    }

    // Make 4 test databases.
    db.getSiblingDB("jstest_list_databases_foo").coll.insert({});
    db.getSiblingDB("jstest_list_databases_bar").coll.insert({});
    db.getSiblingDB("jstest_list_databases_baz").coll.insert({});
    db.getSiblingDB("jstest_list_databases_zap").coll.insert({});

    let cmdRes = assert.commandWorked(
        db.adminCommand({listDatabases: 1, filter: {name: /jstest_list_databases/}}));
    assert.eq(4, cmdRes.databases.length);
    verifySizeSum(cmdRes);

    // Now only list databases starting with a particular prefix.
    cmdRes = assert.commandWorked(
        db.adminCommand({listDatabases: 1, filter: {name: /^jstest_list_databases_ba/}}));
    assert.eq(2, cmdRes.databases.length);
    verifySizeSum(cmdRes);

    // Now return only the admin database.
    cmdRes = assert.commandWorked(db.adminCommand({listDatabases: 1, filter: {name: "admin"}}));
    assert.eq(1, cmdRes.databases.length);
    verifySizeSum(cmdRes);

    // Now return only the names.
    cmdRes = assert.commandWorked(db.adminCommand({listDatabases: 1, nameOnly: true}));
    assert.lte(4, cmdRes.databases.length, tojson(cmdRes));
    verifyNameOnly(cmdRes);

    // Now return only the name of the zap database.
    cmdRes = assert.commandWorked(
        db.adminCommand({listDatabases: 1, nameOnly: true, filter: {name: /zap/}}));
    assert.eq(1, cmdRes.databases.length, tojson(cmdRes));
    verifyNameOnly(cmdRes);
}());