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
119
120
121
122
123
124
125
126
127
|
// tests for the traffic_recording commands.
(function() {
function getDB(client) {
let db = client.getDB("admin");
db.auth("admin", "pass");
return db;
}
function runTest(client, restartCommand) {
let db = getDB(client);
let res = db.runCommand({'startRecordingTraffic': 1, 'filename': 'notARealPath'});
assert.eq(res.ok, false);
assert.eq(res["errmsg"], "Traffic recording directory not set");
const path = MongoRunner.toRealDir("$dataDir/traffic_recording/");
mkdir(path);
if (!jsTest.isMongos(client)) {
TestData.enableTestCommands = false;
client = restartCommand({
trafficRecordingDirectory: path,
AlwaysRecordTraffic: "notARealPath",
enableTestCommands: 0,
});
TestData.enableTestCommands = true;
assert.eq(null, client, "AlwaysRecordTraffic and not enableTestCommands should fail");
}
client = restartCommand({
trafficRecordingDirectory: path,
AlwaysRecordTraffic: "notARealPath",
enableTestCommands: 1
});
assert.neq(null, client, "AlwaysRecordTraffic and with enableTestCommands should suceed");
db = getDB(client);
assert(db.runCommand({"serverStatus": 1}).trafficRecording.running);
client = restartCommand({trafficRecordingDirectory: path});
db = getDB(client);
res = db.runCommand({'startRecordingTraffic': 1, 'filename': 'notARealPath'});
assert.eq(res.ok, true);
// Running the command again should fail
res = db.runCommand({'startRecordingTraffic': 1, 'filename': 'notARealPath'});
assert.eq(res.ok, false);
assert.eq(res["errmsg"], "Traffic recording already active");
// Running the serverStatus command should return the relevant information
res = db.runCommand({"serverStatus": 1});
assert("trafficRecording" in res);
let trafficStats = res["trafficRecording"];
assert.eq(trafficStats["running"], true);
// Assert that the current file size is growing
res = db.runCommand({"serverStatus": 1});
assert("trafficRecording" in res);
let trafficStats2 = res["trafficRecording"];
assert.eq(trafficStats2["running"], true);
assert(trafficStats2["currentFileSize"] >= trafficStats["currentFileSize"]);
// Running the stopRecordingTraffic command should succeed
res = db.runCommand({'stopRecordingTraffic': 1});
assert.eq(res.ok, true);
// Running the stopRecordingTraffic command again should fail
res = db.runCommand({'stopRecordingTraffic': 1});
assert.eq(res.ok, false);
assert.eq(res["errmsg"], "Traffic recording not active");
// Running the serverStatus command should return running is false
res = db.runCommand({"serverStatus": 1});
assert("trafficRecording" in res);
trafficStats = res["trafficRecording"];
assert.eq(trafficStats["running"], false);
return client;
}
{
let m = MongoRunner.runMongod({auth: ""});
let db = m.getDB("admin");
db.createUser({user: "admin", pwd: "pass", roles: jsTest.adminUserRoles});
db.auth("admin", "pass");
m = runTest(m, function(setParams) {
if (m) {
MongoRunner.stopMongod(m, null, {user: 'admin', pwd: 'pass'});
}
try {
m = MongoRunner.runMongod({auth: "", setParameter: setParams});
} catch (e) {
return null;
}
m.getDB("admin").createUser({user: "admin", pwd: "pass", roles: jsTest.adminUserRoles});
return m;
});
MongoRunner.stopMongod(m, null, {user: 'admin', pwd: 'pass'});
}
{
let shardTest = new ShardingTest({
config: 1,
mongos: 1,
shards: 0,
});
runTest(shardTest.s, function(setParams) {
shardTest.restartMongos(0, {
restart: true,
setParameter: setParams,
});
return shardTest.s;
});
shardTest.stop();
}
})();
|