summaryrefslogtreecommitdiff
path: root/jstests/core/set_param1.js
blob: 2df37442518b0590b7e745763c478a06052b621b (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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
// Tests for accessing logLevel server parameter using getParameter/setParameter commands
// and shell helpers.

old = db.adminCommand({"getParameter": "*"});
tmp1 = db.adminCommand({"setParameter": 1, "logLevel": 5});
tmp2 = db.adminCommand({"setParameter": 1, "logLevel": old.logLevel});
now = db.adminCommand({"getParameter": "*"});

assert.eq(old, now, "A");
assert.eq(old.logLevel, tmp1.was, "B");
assert.eq(5, tmp2.was, "C");

//
// component verbosity
//

// verbosity for log component hierarchy
printjson(old.logComponentVerbosity);
assert.neq(undefined, old.logComponentVerbosity, "log component verbosity not available");
assert.eq(old.logLevel,
          old.logComponentVerbosity.verbosity,
          "default component verbosity should match logLevel");
assert.neq(undefined,
           old.logComponentVerbosity.storage.journal.verbosity,
           "journal verbosity not available");

// Non-object log component verbosity should be rejected.
assert.commandFailed(db.adminCommand({"setParameter": 1, logComponentVerbosity: "not an object"}));

// Non-numeric verbosity for component should be rejected.
assert.commandFailed(db.adminCommand({
    "setParameter": 1,
    logComponentVerbosity: {storage: {journal: {verbosity: "not a number"}}}
}));

// Invalid component shall be rejected
assert.commandFailed(db.adminCommand(
    {"setParameter": 1, logComponentVerbosity: {NoSuchComponent: {verbosity: 2}}}));

// Set multiple component log levels at once.
(function() {
    assert.commandWorked(db.adminCommand({
        "setParameter": 1,
        logComponentVerbosity: {
            verbosity: 2,
            accessControl: {verbosity: 0},
            storage: {verbosity: 3, journal: {verbosity: 5}}
        }
    }));

    var result =
        assert.commandWorked(db.adminCommand({"getParameter": 1, logComponentVerbosity: 1}))
            .logComponentVerbosity;

    assert.eq(2, result.verbosity);
    assert.eq(0, result.accessControl.verbosity);
    assert.eq(3, result.storage.verbosity);
    assert.eq(5, result.storage.journal.verbosity);
})();

// Set multiple component log levels at once.
// Unrecognized field names not mapping to a log component shall be rejected
// No changes shall apply.
(function() {
    assert.commandFailed(db.adminCommand({
        "setParameter": 1,
        logComponentVerbosity: {
            verbosity: 6,
            accessControl: {verbosity: 5},
            storage: {verbosity: 4, journal: {verbosity: 6}},
            NoSuchComponent: {verbosity: 2},
            extraField: 123
        }
    }));

    var result =
        assert.commandWorked(db.adminCommand({"getParameter": 1, logComponentVerbosity: 1}))
            .logComponentVerbosity;

    assert.eq(2, result.verbosity);
    assert.eq(0, result.accessControl.verbosity);
    assert.eq(3, result.storage.verbosity);
    assert.eq(5, result.storage.journal.verbosity);
})();

// Clear verbosity for default and journal.
(function() {
    assert.commandWorked(db.adminCommand({
        "setParameter": 1,
        logComponentVerbosity: {verbosity: -1, storage: {journal: {verbosity: -1}}}
    }));

    var result =
        assert.commandWorked(db.adminCommand({"getParameter": 1, logComponentVerbosity: 1}))
            .logComponentVerbosity;

    assert.eq(0, result.verbosity);
    assert.eq(0, result.accessControl.verbosity);
    assert.eq(3, result.storage.verbosity);
    assert.eq(-1, result.storage.journal.verbosity);
})();

// Set accessControl verbosity using numerical level instead of
// subdocument with 'verbosity' field.
(function() {
    assert.commandWorked(
        db.adminCommand({"setParameter": 1, logComponentVerbosity: {accessControl: 5}}));

    var result =
        assert.commandWorked(db.adminCommand({"getParameter": 1, logComponentVerbosity: 1}))
            .logComponentVerbosity;

    assert.eq(5, result.accessControl.verbosity);
})();

// Restore old verbosity values.
assert.commandWorked(
    db.adminCommand({"setParameter": 1, logComponentVerbosity: old.logComponentVerbosity}));