summaryrefslogtreecommitdiff
path: root/jstests/noPassthroughWithMongod/bench_test_crud_commands.js
blob: 25060999d59965ecbe20a0a894fbaed6085d47df (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
// Tests the "writeCmd" and "readCmd" options to benchRun().
(function() {
    "use strict";

    var coll = db.bench_test_crud_commands;
    coll.drop();
    assert.commandWorked(coll.getDB().createCollection(coll.getName()));

    function makeDocument(docSize) {
        var doc = { "fieldName":"" };
        var longString = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
        while(Object.bsonsize(doc) < docSize) {
            if (Object.bsonsize(doc) < docSize - longString.length) {
                doc.fieldName += longString;
            } else {
                doc.fieldName += "x";
            }
        }
        return doc;
    }

    function executeBenchRun(benchOps) {
        var benchArgs = {ops: benchOps, parallel: 2, seconds: 1, host: db.getMongo().host};
        if (jsTest.options().auth) {
            benchArgs['db'] = 'admin';
            benchArgs['username'] = jsTest.options().adminUser;
            benchArgs['password'] = jsTest.options().adminPassword;
        }
        return benchRun(benchArgs);
    }

    function testInsert(docs, writeCmd, wc) {
        coll.drop();

        var res = executeBenchRun([{ns: coll.getFullName(),
                                    op: "insert",
                                    doc: docs,
                                    writeCmd: writeCmd,
                                    writeConcern : wc}]);

        assert.gt(coll.count(), 0);
        assert.eq(coll.findOne({}, {_id:0}), docs[0]);
    }

    function testFind(readCmd) {
        coll.drop();
        for (var i = 0; i < 100; i++) {
            assert.writeOK(coll.insert({}));
        }

        var res = executeBenchRun([{ns: coll.getFullName(),
                                    op: "find",
                                    query: {},
                                    batchSize: NumberInt(10),
                                    readCmd: readCmd}]);
        assert.gt(res.query, 0, tojson(res));
    }

    function testFindOne(readCmd) {
        coll.drop();
        for (var i = 0; i < 100; i++) {
            assert.writeOK(coll.insert({}));
        }

        var res = executeBenchRun([{ns: coll.getFullName(),
                                    op: "findOne",
                                    query: {},
                                    readCmd: readCmd}]);
        assert.gt(res.findOne, 0, tojson(res));
    }

    function testWriteConcern(writeCmd) {
        var bigDoc = makeDocument(260 * 1024);
        var docs = [];
        for (var i = 0; i < 100; i++) {
            docs.push({x: 1});
        }

        testInsert([bigDoc], writeCmd, {});
        testInsert(docs, writeCmd, {});
        testInsert(docs, writeCmd, {"writeConcern" : {"w" : "majority"}});
        testInsert(docs, writeCmd, {"writeConcern" : {"w" : 1, "j": false}});
        testInsert(docs, writeCmd, {"writeConcern" : {"j" : true}});
    }

    testWriteConcern(false);
    testWriteConcern(true);

    testFind(false);
    testFind(true);
    testFindOne(false);
    testFindOne(true);
})();