summaryrefslogtreecommitdiff
path: root/jstests/multiVersion/2_test_launching_cluster.js
blob: 24b06f223190dfee374ccea853c5e09922145d78 (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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
//
// 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 legacy versions..." );

for( var i = 0; i < versionsToCheck.length; i++ ){

    var version = versionsToCheck[ i ];
    
    // Set up a cluster
    
    var st = new ShardingTest({ shards : 2, 
                                mongos : 2,
                                sync: true, // Old clusters can't use replsets for config servers
                                other : { 
                                    mongosOptions : { binVersion : version },
                                    configOptions : { binVersion : version },
                                    shardOptions : { binVersion : version }
                                } });
    
    var shards = [ st.shard0, st.shard1 ];
    var mongoses = [ st.s0, st.s1 ];
    var configs = [ st.config0 ];
    
    // Make sure the started versions are actually the correct versions
    for( var j = 0; j < shards.length; j++ ) assert.binVersion( shards[j], version );
    for( j = 0; j < mongoses.length; j++ ) assert.binVersion( mongoses[j], version );
    for( j = 0; j < configs.length; j++ ) assert.binVersion( configs[j], version );
    
    st.stop();
}

jsTest.log( "Testing mixed versions..." );
        
// Set up a multi-version cluster

st = new ShardingTest({ shards : 2,
                            mongos : 2,
                            other : {
                                
                                // Three config servers
                                sync : true,
                                
                                mongosOptions : { binVersion : versionsToCheckMongos },
                                configOptions : { binVersion : versionsToCheck },
                                shardOptions : { binVersion : versionsToCheck }

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

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

assert.allBinVersions( versionsToCheck, versionsFound );

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

assert.allBinVersions( versionsToCheckMongos, versionsFound );
    
versionsFound = [];
for ( 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 : {
                                
                                // Three config servers
                                sync : true,
                                
                                // Replica set shards
                                rs : true,
                                
                                mongosOptions : { binVersion : versionsToCheckMongos },
                                configOptions : { binVersion : versionsToCheck },
                                rsOptions : { binVersion : versionsToCheck, protocolVersion: 0 }
                            } });
    
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 ( j = 0; j < nodesA.length; j++ ) 
    versionsFound.push( nodesA[j].getBinVersion() );

assert.allBinVersions( versionsToCheck, versionsFound );

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

assert.allBinVersions( versionsToCheck, versionsFound );

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

assert.allBinVersions( versionsToCheckMongos, versionsFound );

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

assert.allBinVersions( versionsToCheck, versionsFound );

jsTest.log("DONE!");
   
st.stop();
})();