summaryrefslogtreecommitdiff
path: root/jstests/noPassthrough/traffic_reading_legacy.js
blob: 9224edf926a14462774c18c04b70064bc71f3220 (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
// tests for the traffic_recording commands.
(function() {
    var baseName = "jstests_traffic_recording";

    // Variables for this test
    const recordingDir = MongoRunner.toRealDir("$dataDir/traffic_recording/");
    const recordingFile = "recording.txt";
    const recordingFilePath = MongoRunner.toRealDir(recordingDir + "/" + recordingFile);

    // Create the recording directory if it does not already exist
    mkdir(recordingDir);

    // Create the options and run mongod
    var opts = {auth: "", setParameter: "trafficRecordingDirectory=" + recordingDir};
    m = MongoRunner.runMongod(opts);

    // Get the port of the host
    var serverPort = m.port;

    // Set the readMode and writeMode to legacy
    m.forceReadMode("legacy");
    m.forceWriteMode("legacy");

    // Create necessary users
    adminDB = m.getDB("admin");
    const testDB = m.getDB("test");
    const coll = testDB.getCollection("foo");
    adminDB.createUser({user: "admin", pwd: "pass", roles: jsTest.adminUserRoles});
    adminDB.auth("admin", "pass");

    // Start recording traffic
    assert.commandWorked(
        adminDB.runCommand({'startRecordingTraffic': 1, 'filename': 'recording.txt'}));

    // Run a few commands
    testDB.runCommand({"serverStatus": 1});
    coll.insert({"name": "foo biz bar"});
    coll.findOne();
    coll.insert({"name": "foo bar"});
    coll.findOne({"name": "foo bar"});
    coll.deleteOne({});

    // Stop recording traffic
    assert.commandWorked(testDB.runCommand({'stopRecordingTraffic': 1}));

    // Shutdown Mongod
    MongoRunner.stopMongod(m, null, {user: 'admin', pwd: 'password'});

    // Counters
    var opCodes = {};

    // Pass filepath to traffic_reader helper method to get recorded info in BSON
    var res = convertTrafficRecordingToBSON(recordingFilePath);

    // Iterate through the results and assert the above commands are properly recorded
    res.forEach((obj) => {
        opCodes[obj["rawop"]["header"]["opcode"]] =
            (opCodes[obj["rawop"]["header"]["opcode"]] || 0) + 1;
        assert.eq(obj["seenconnectionnum"], 1);
        var responseTo = obj["rawop"]["header"]["responseto"];
        if (responseTo == 0) {
            assert.eq(obj["destendpoint"], serverPort.toString());
        } else {
            assert.eq(obj["srcendpoint"], serverPort.toString());
        }
    });

    // ensure legacy operations worked properly
    assert.eq(opCodes[2002], 2);
    assert.eq(opCodes[2006], 1);

})();