summaryrefslogtreecommitdiff
path: root/jstests/multiVersion/2_test_launching_cluster.js
blob: 1d126e79c8572eeb87f101ba643d8d8bef2d561f (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
//
// Tests launching multi-version ShardingTest clusters
//

load('./jstests/multiVersion/libs/verify_versions.js');

(function() {
    "use strict";
    // Check our latest versions
    var versionsToCheck = ["last-stable", "latest"];
    var versionsToCheckMongos = ["last-stable"];

    jsTest.log("Testing mixed versions...");

    // Set up a multi-version cluster
    var st = new ShardingTest({
        shards: 2,
        mongos: 2,
        other: {
            mongosOptions: {binVersion: versionsToCheckMongos},
            configOptions: {binVersion: versionsToCheck},
            shardOptions: {binVersion: versionsToCheck},
            enableBalancer: true,
            // TODO: SERVER-24163 remove after v3.4
            waitForCSRSSecondaries: false,
        }
    });

    var shards = [st.shard0, st.shard1];
    var mongoses = [st.s0, st.s1];
    var configs = [st.config0, st.config1, st.config2];

    // Make sure we have hosts of all the different versions
    var versionsFound = [];
    for (var j = 0; j < shards.length; j++)
        versionsFound.push(shards[j].getBinVersion());

    assert.allBinVersions(versionsToCheck, versionsFound);

    versionsFound = [];
    for (var j = 0; j < mongoses.length; j++)
        versionsFound.push(mongoses[j].getBinVersion());

    assert.allBinVersions(versionsToCheckMongos, versionsFound);

    versionsFound = [];
    for (var j = 0; j < configs.length; j++)
        versionsFound.push(configs[j].getBinVersion());

    assert.allBinVersions(versionsToCheck, versionsFound);

    st.stop();

    jsTest.log("Testing mixed versions with replica sets...");

    // Set up a multi-version cluster w/ replica sets

    st = new ShardingTest({
        shards: 2,
        mongos: 2,
        other: {
            // Replica set shards
            rs: true,
            mongosOptions: {binVersion: versionsToCheckMongos},
            configOptions: {binVersion: versionsToCheck},
            rsOptions: {binVersion: versionsToCheck, protocolVersion: 0},
            enableBalancer: true,
            // TODO: SERVER-24163 remove after v3.4
            waitForCSRSSecondaries: false,
        }
    });

    var nodesA = st.rs0.nodes;
    var nodesB = st.rs1.nodes;
    mongoses = [st.s0, st.s1];
    configs = [st.config0, st.config1, st.config2];

    var getVersion = function(mongo) {
        var result = mongo.getDB("admin").runCommand({serverStatus: 1});
        return result.version;
    };

    // Make sure we have hosts of all the different versions
    versionsFound = [];
    for (var j = 0; j < nodesA.length; j++)
        versionsFound.push(nodesA[j].getBinVersion());

    assert.allBinVersions(versionsToCheck, versionsFound);

    versionsFound = [];
    for (var j = 0; j < nodesB.length; j++)
        versionsFound.push(nodesB[j].getBinVersion());

    assert.allBinVersions(versionsToCheck, versionsFound);

    versionsFound = [];
    for (var j = 0; j < mongoses.length; j++)
        versionsFound.push(mongoses[j].getBinVersion());

    assert.allBinVersions(versionsToCheckMongos, versionsFound);

    versionsFound = [];
    for (var j = 0; j < configs.length; j++)
        versionsFound.push(configs[j].getBinVersion());

    assert.allBinVersions(versionsToCheck, versionsFound);

    st.stop();
})();