diff options
Diffstat (limited to 'jstests')
13 files changed, 193 insertions, 121 deletions
diff --git a/jstests/multiVersion/0_test_launching.js b/jstests/multiVersion/0_test_launching.js index 061ee2223d0..c01e3c78fe2 100644 --- a/jstests/multiVersion/0_test_launching.js +++ b/jstests/multiVersion/0_test_launching.js @@ -2,17 +2,11 @@ // Tests whether or not multi-version mongos/mongod instances can be launched // -var verifyVersion = function( mongo, version ){ - - var result = mongo.getDB( "admin" ).runCommand({ serverStatus : 1 }) - - if( result.version != version ) printjson( result ) - - assert.eq( result.version, version ) -} +load('./jstests/multiVersion/libs/verify_versions.js'); -var versionsToCheck = [ "1.8.5", - "2.0.6" ] +// Check our oldest and newest versions +var versionsToCheck = [ "1.8", + "latest"]; for( var i = 0; i < versionsToCheck.length; i++ ){ @@ -22,8 +16,8 @@ for( var i = 0; i < versionsToCheck.length; i++ ){ var mongos = MongoRunner.runMongos({ binVersion : version, configdb : mongod }) // Make sure the started versions are actually the correct versions - verifyVersion( mongod, version ) - verifyVersion( mongos, version ) + assert.binVersion( mongod, version ); + assert.binVersion( mongos, version ); MongoRunner.stopMongos( mongos ) MongoRunner.stopMongod( mongod ) diff --git a/jstests/multiVersion/1_test_launching_replset.js b/jstests/multiVersion/1_test_launching_replset.js index a71e4b276c0..b2a7dce68f4 100644 --- a/jstests/multiVersion/1_test_launching_replset.js +++ b/jstests/multiVersion/1_test_launching_replset.js @@ -2,18 +2,12 @@ // Tests launching multi-version ReplSetTest replica sets // -var verifyVersion = function( mongo, version ){ - - var result = mongo.getDB( "admin" ).runCommand({ serverStatus : 1 }) - - if( result.version != version ) printjson( result ) - - assert.eq( result.version, version ) -} +// Check our latest versions +var versionsToCheck = [ "last-stable", + "latest" ]; + +load('./jstests/multiVersion/libs/verify_versions.js'); -var versionsToCheck = [ "1.8.5", - "2.0.6" ] - jsTest.log( "Testing legacy versions..." ) for( var i = 0; i < versionsToCheck.length; i++ ){ @@ -29,7 +23,7 @@ for( var i = 0; i < versionsToCheck.length; i++ ){ var nodes = rst.nodes // Make sure the started versions are actually the correct versions - for( var j = 0; j < nodes.length; j++ ) verifyVersion( nodes[j], version ) + for( var j = 0; j < nodes.length; j++ ) assert.binVersion(nodes[j], version); rst.stopSet() } @@ -44,30 +38,17 @@ rst.startSet({ binVersion : versionsToCheck }) var nodes = rst.nodes -var getVersion = function( mongo ){ - var result = mongo.getDB( "admin" ).runCommand({ serverStatus : 1 }) - return result.version -} - -var verifyAllVersionsFound = function( versionsFound ){ - for( var j = 0; j < versionsToCheck.length; j++ ) - assert( versionsFound[ versionsToCheck[j] ] ) -} - //Make sure we have hosts of all the different versions -var versionsFound = {} -for( var j = 0; j < nodes.length; j++ ) - versionsFound[ getVersion( nodes[j] ) ] = true +var versionsFound = [] +for( var j = 0; j < nodes.length; j++ ) + versionsFound.push(nodes[j].getBinVersion()); -verifyAllVersionsFound( versionsFound ) +assert.allBinVersions(versionsToCheck, versionsFound); rst.stopSet() jsTest.log( "Done!" ) - - - // // End // diff --git a/jstests/multiVersion/2_test_launching_cluster.js b/jstests/multiVersion/2_test_launching_cluster.js index ed23ff27eff..b186fc8beff 100644 --- a/jstests/multiVersion/2_test_launching_cluster.js +++ b/jstests/multiVersion/2_test_launching_cluster.js @@ -2,17 +2,11 @@ // Tests launching multi-version ShardingTest clusters // -var verifyVersion = function( mongo, version ){ - - var result = mongo.getDB( "admin" ).runCommand({ serverStatus : 1 }) - - if( result.version != version ) printjson( result ) - - assert.eq( result.version, version ) -} +load('./jstests/multiVersion/libs/verify_versions.js'); -var versionsToCheck = [ "1.8.5", - "2.0.6" ] +// Check our latest versions +var versionsToCheck = [ "last-stable", + "latest" ]; jsTest.log( "Testing legacy versions..." ) @@ -36,9 +30,9 @@ for( var i = 0; i < versionsToCheck.length; i++ ){ var configs = [ st.config0 ] // Make sure the started versions are actually the correct versions - for( var j = 0; j < shards.length; j++ ) verifyVersion( shards[j], version ) - for( var j = 0; j < mongoses.length; j++ ) verifyVersion( mongoses[j], version ) - for( var j = 0; j < configs.length; j++ ) verifyVersion( configs[j], version ) + for( var j = 0; j < shards.length; j++ ) assert.binVersion( shards[j], version ); + for( var j = 0; j < mongoses.length; j++ ) assert.binVersion( mongoses[j], version ); + for( var j = 0; j < configs.length; j++ ) assert.binVersion( configs[j], version ); st.stop() } @@ -65,34 +59,24 @@ var shards = [ st.shard0, st.shard1 ] var mongoses = [ st.s0, st.s1 ] var configs = [ st.config0, st.config1, st.config2 ] -var getVersion = function( mongo ){ - var result = mongo.getDB( "admin" ).runCommand({ serverStatus : 1 }) - return result.version -} - -var verifyAllVersionsFound = function( versionsFound ){ - for( var j = 0; j < versionsToCheck.length; j++ ) - assert( versionsFound[ versionsToCheck[j] ] ) -} - // Make sure we have hosts of all the different versions -var versionsFound = {} +var versionsFound = []; for( var j = 0; j < shards.length; j++ ) - versionsFound[ getVersion( shards[j] ) ] = true + versionsFound.push( shards[j].getBinVersion() ); -verifyAllVersionsFound( versionsFound ) +assert.allBinVersions( versionsToCheck, versionsFound ); -versionsFound = {} +versionsFound = []; for( var j = 0; j < mongoses.length; j++ ) - versionsFound[ getVersion( mongoses[j] ) ] = true + versionsFound.push( mongoses[j].getBinVersion() ); -verifyAllVersionsFound( versionsFound ) +assert.allBinVersions( versionsToCheck, versionsFound ); -versionsFound = {} +versionsFound = []; for( var j = 0; j < configs.length; j++ ) - versionsFound[ getVersion( configs[j] ) ] = true + versionsFound.push( configs[j].getBinVersion() ); -verifyAllVersionsFound( versionsFound ) +assert.allBinVersions( versionsToCheck, versionsFound ); st.stop() @@ -128,39 +112,34 @@ var getVersion = function( mongo ){ return result.version } -var verifyAllVersionsFound = function( versionsFound ){ - for( var j = 0; j < versionsToCheck.length; j++ ) - assert( versionsFound[ versionsToCheck[j] ] ) -} - // Make sure we have hosts of all the different versions -var versionsFound = {} +versionsFound = [] for( var j = 0; j < nodesA.length; j++ ) - versionsFound[ getVersion( nodesA[j] ) ] = true + versionsFound.push( nodesA[j].getBinVersion() ); -verifyAllVersionsFound( versionsFound ) +assert.allBinVersions( versionsToCheck, versionsFound ); -versionsFound = {} +versionsFound = [] for( var j = 0; j < nodesB.length; j++ ) - versionsFound[ getVersion( nodesA[j] ) ] = true + versionsFound.push( nodesB[j].getBinVersion() ); -verifyAllVersionsFound( versionsFound ) +assert.allBinVersions( versionsToCheck, versionsFound );( versionsFound ) -versionsFound = {} -for( var j = 0; j < mongoses.length; j++ ) - versionsFound[ getVersion( mongoses[j] ) ] = true +versionsFound = []; +for( var j = 0; j < mongoses.length; j++ ) + versionsFound.push( mongoses[j].getBinVersion() ); -verifyAllVersionsFound( versionsFound ) - -versionsFound = {} -for( var j = 0; j < configs.length; j++ ) - versionsFound[ getVersion( configs[j] ) ] = true - -verifyAllVersionsFound( versionsFound ) - -st.stop() +assert.allBinVersions( versionsToCheck, versionsFound ); + +versionsFound = []; +for( var j = 0; j < configs.length; j++ ) + versionsFound.push( configs[j].getBinVersion() ); -jsTest.log( "Done!" ) +assert.allBinVersions( versionsToCheck, versionsFound ); + +jsTest.log("DONE!"); + +st.stop() // // End diff --git a/jstests/multiVersion/3_upgrade_replset.js b/jstests/multiVersion/3_upgrade_replset.js index f78667901ee..30d9d92601b 100644 --- a/jstests/multiVersion/3_upgrade_replset.js +++ b/jstests/multiVersion/3_upgrade_replset.js @@ -5,8 +5,8 @@ load( './jstests/multiVersion/libs/multi_rs.js' ) load( './jstests/libs/test_background_ops.js' ) -var oldVersion = "2.0.6" -var newVersion = "latest" +var oldVersion = "2.0" +var newVersion = "2.2" var nodes = { n1 : { binVersion : oldVersion }, n2 : { binVersion : oldVersion }, diff --git a/jstests/multiVersion/4_upgrade_cluster.js b/jstests/multiVersion/4_upgrade_cluster.js index e5beedda96d..25bf15f9312 100644 --- a/jstests/multiVersion/4_upgrade_cluster.js +++ b/jstests/multiVersion/4_upgrade_cluster.js @@ -6,8 +6,8 @@ load( './jstests/multiVersion/libs/multi_rs.js' ) load( './jstests/multiVersion/libs/multi_cluster.js' ) load( './jstests/libs/test_background_ops.js' ) -var oldVersion = "2.0.6" -var newVersion = "latest" +var oldVersion = "2.0" +var newVersion = "2.2" // BIG OUTER LOOP, RS CLUSTER OR NOT! for( var test = 0; test < 1; test++ ){ @@ -147,4 +147,4 @@ jsTest.log( "DONE!" ) st.stop() -} // END OUTER LOOP FOR RS CLUSTER
\ No newline at end of file +} // END OUTER LOOP FOR RS CLUSTER diff --git a/jstests/multiVersion/auth_index_upgrade_downgrade.js b/jstests/multiVersion/auth_index_upgrade_downgrade.js index 04d75c37e11..ed84f1d6859 100644 --- a/jstests/multiVersion/auth_index_upgrade_downgrade.js +++ b/jstests/multiVersion/auth_index_upgrade_downgrade.js @@ -27,8 +27,8 @@ // * Verify that the desired indexes are present. // * Verify can insert privilege documents that would have conflicted in 2.2 into the database. -var oldVersion = "2.2.2"; -var newVersion = "latest"; +var oldVersion = "2.2"; +var newVersion = "2.4"; // Raises an exception if "status" is not a GetLastError object indicating success. function assertGLEOK(status) { diff --git a/jstests/multiVersion/config_version_excludes.js b/jstests/multiVersion/config_version_excludes.js index a549b739a59..95682bdbf1e 100644 --- a/jstests/multiVersion/config_version_excludes.js +++ b/jstests/multiVersion/config_version_excludes.js @@ -2,6 +2,8 @@ // Test checks whether or not config version excludes prevent mongos startup // +load('./jstests/multiVersion/libs/verify_versions.js'); + jsTest.log( "Starting cluster..." ); var options = { @@ -28,8 +30,12 @@ var configConnStr = st._configDB; jsTest.log("Testing excluded mongos versions...") -configVersion.update({ _id : 1 }, { $addToSet : { excluding : "2.3" } }); -configVersion.update({ _id : 1 }, { $addToSet : { excluding : "2.4" } }); +// Since the version isn't being tested via javascript, we want to find the actual version +// that "latest" is mapped to. +// Implicitly, the above cluster is started at "latest" version, so we can check this way. +var realLatestVersion = mongos.getBinVersion(); + +configVersion.update({ _id : 1 }, { $addToSet : { excluding : realLatestVersion } }); printjson(configVersion.findOne()); // Make sure down @@ -39,7 +45,8 @@ assert.eq(null, mongosNew); jsTest.log("Testing excluded ranges...") configVersion.update({ _id : 1 }, { $unset : { excluding : 1 } }); -configVersion.update({ _id : 1 }, { $addToSet : { excluding : ["2.3", "2.4"] } }); +configVersion.update({ _id : 1 }, { $addToSet : { excluding : ["1.8", + realLatestVersion] } }); printjson(configVersion.findOne()); // Make sure down diff --git a/jstests/multiVersion/libs/verify_versions.js b/jstests/multiVersion/libs/verify_versions.js new file mode 100644 index 00000000000..ae381f64508 --- /dev/null +++ b/jstests/multiVersion/libs/verify_versions.js @@ -0,0 +1,40 @@ +/** + * Helpers for verifying versions of started MongoDB processes + */ + +Mongo.prototype.getBinVersion = function() { + var result = this.getDB( "admin" ).runCommand({ serverStatus : 1 }) + return result.version +} + +// Checks that our mongodb process is of a certain version +assert.binVersion = function(mongo, version) { + var currVersion = mongo.getBinVersion(); + assert(MongoRunner.areBinVersionsTheSame(MongoRunner.getBinVersionFor(currVersion), + MongoRunner.getBinVersionFor(version)), + "version " + version + " (" + MongoRunner.getBinVersionFor(version) + ")" + + " is not the same as " + currVersion); +} + + +// Compares an array of desired versions and an array of found versions, +// looking for versions not found +assert.allBinVersions = function(versionsWanted, versionsFound) { + + for (var i = 0; i < versionsWanted.length; i++) { + + var found = false; + for (var j = 0; j < versionsFound.length; j++) { + if (MongoRunner.areBinVersionsTheSame(versionsWanted[i], + versionsFound[j])) + { + found = true; + break; + } + } + + assert(found, "could not find version " + + version + " (" + MongoRunner.getBinVersionFor(version) + ")" + + " in " + versionsFound); + } +} diff --git a/jstests/multiVersion/upgrade_cluster_v3_to_v4.js b/jstests/multiVersion/upgrade_cluster_v3_to_v4.js index fc806ab575d..89b50fefb90 100644 --- a/jstests/multiVersion/upgrade_cluster_v3_to_v4.js +++ b/jstests/multiVersion/upgrade_cluster_v3_to_v4.js @@ -41,10 +41,10 @@ var configConnStr = st._configDB; jsTest.log("Starting v2.4 mongos in 2.0 cluster...") -var mongos = MongoRunner.runMongos({ binVersion : "latest", configdb : configConnStr }) +var mongos = MongoRunner.runMongos({ binVersion : "2.4", configdb : configConnStr }) assert.eq(null, mongos); -var mongos = MongoRunner.runMongos({ binVersion : "latest", configdb : configConnStr, upgrade : "" }) +var mongos = MongoRunner.runMongos({ binVersion : "2.4", configdb : configConnStr, upgrade : "" }) assert.eq(null, mongos); jsTest.log("2.4 mongoses did not start or upgrade in 2.0 cluster (which is correct).") @@ -101,10 +101,10 @@ st.restartMongoses(); jsTest.log("Starting v2.4 mongos in 2.0/2.2 cluster....") -var mongos = MongoRunner.runMongos({ binVersion : "latest", configdb : configConnStr }) +var mongos = MongoRunner.runMongos({ binVersion : "2.4", configdb : configConnStr }) assert.eq(null, mongos); -var mongos = MongoRunner.runMongos({ binVersion : "latest", configdb : configConnStr, upgrade : "" }) +var mongos = MongoRunner.runMongos({ binVersion : "2.4", configdb : configConnStr, upgrade : "" }) assert.eq(null, mongos); jsTest.log("2.4 mongoses did not start or upgrade in 2.0/2.2 cluster (which is correct).") @@ -138,10 +138,10 @@ st.restartMongoses(); jsTest.log("Starting v2.4 mongos in 2.2 cluster....") -var mongos = MongoRunner.runMongos({ binVersion : "latest", configdb : configConnStr }) +var mongos = MongoRunner.runMongos({ binVersion : "2.4", configdb : configConnStr }) assert.eq(null, mongos); -var mongos = MongoRunner.runMongos({ binVersion : "latest", configdb : configConnStr, upgrade : "" }) +var mongos = MongoRunner.runMongos({ binVersion : "2.4", configdb : configConnStr, upgrade : "" }) assert.neq(null, mongos); MongoRunner.stopMongos(mongos); diff --git a/jstests/multiVersion/upgrade_cluster_v3_to_v4_db.js b/jstests/multiVersion/upgrade_cluster_v3_to_v4_db.js index 2df8e4d8fd7..1ae245e1c03 100644 --- a/jstests/multiVersion/upgrade_cluster_v3_to_v4_db.js +++ b/jstests/multiVersion/upgrade_cluster_v3_to_v4_db.js @@ -99,7 +99,7 @@ var checkUpgraded = function() { jsTest.log("Upgrading empty config server from v3 to v4..."); // Make sure up -var mongosNew = MongoRunner.runMongos({ binVersion : "latest", configdb : configConnStr, upgrade : "" }) +var mongosNew = MongoRunner.runMongos({ binVersion : "2.4", configdb : configConnStr, upgrade : "" }) assert.neq(null, mongosNew); MongoRunner.stopMongos(mongosNew); checkUpgraded(); @@ -117,7 +117,7 @@ config.getMongo().getCollection("config.version").remove({}) assert.eq(null, config.getLastError()); // Make sure down -var mongosNew = MongoRunner.runMongos({ binVersion : "latest", configdb : configConnStr, upgrade : "" }) +var mongosNew = MongoRunner.runMongos({ binVersion : "2.4", configdb : configConnStr, upgrade : "" }) assert.eq(null, mongosNew); resetVersion(); resetBackupDBs(); @@ -133,7 +133,7 @@ config.getMongo().getCollection("config.version").update({ _id : 1 }, { $unset : assert.eq(null, config.getLastError()); // Make sure down -var mongosNew = MongoRunner.runMongos({ binVersion : "latest", configdb : configConnStr, upgrade : "" }) +var mongosNew = MongoRunner.runMongos({ binVersion : "2.4", configdb : configConnStr, upgrade : "" }) assert.eq(null, mongosNew); resetVersion(); resetBackupDBs(); @@ -155,7 +155,7 @@ config.collections.update({ _id : coll + "" }, { $set : { lastmodEpoch : ObjectI assert.eq(null, config.getLastError()); // Make sure down -var mongosNew = MongoRunner.runMongos({ binVersion : "latest", configdb : configConnStr, upgrade : "" }) +var mongosNew = MongoRunner.runMongos({ binVersion : "2.4", configdb : configConnStr, upgrade : "" }) assert.eq(null, mongosNew); resetBackupDBs(); @@ -169,7 +169,7 @@ jsTest.log("Adding bad (dropped) sharded collection data...") config.collections.update({ _id : coll + "" }, { $set : { dropped : true }}); // Make sure up -var mongosNew = MongoRunner.runMongos({ binVersion : "latest", configdb : configConnStr, upgrade : "" }) +var mongosNew = MongoRunner.runMongos({ binVersion : "2.4", configdb : configConnStr, upgrade : "" }) assert.neq(null, mongosNew); MongoRunner.stopMongos(mongosNew); checkUpgraded(); @@ -193,7 +193,7 @@ config.chunks.update({ ns : coll + "" }, { $set : { lastmodEpoch : ObjectId() }} assert.eq(null, config.getLastError()); // Make sure down -var mongosNew = MongoRunner.runMongos({ binVersion : "latest", configdb : configConnStr, upgrade : "" }) +var mongosNew = MongoRunner.runMongos({ binVersion : "2.4", configdb : configConnStr, upgrade : "" }) assert.eq(null, mongosNew); resetBackupDBs(); diff --git a/jstests/multiVersion/upgrade_cluster_v3_to_v4_wait_for_mongos.js b/jstests/multiVersion/upgrade_cluster_v3_to_v4_wait_for_mongos.js new file mode 100644 index 00000000000..64da139e609 --- /dev/null +++ b/jstests/multiVersion/upgrade_cluster_v3_to_v4_wait_for_mongos.js @@ -0,0 +1,71 @@ +/** + * Tests upgrading a cluster where there was a recently active mongos process. + */ + +load( './jstests/multiVersion/libs/multi_rs.js' ) +load( './jstests/multiVersion/libs/multi_cluster.js' ) + +jsTest.log( "Starting 2.2 cluster..." ); + +var options = { + + mongosOptions : { binVersion : "2.2" }, + configOptions : { binVersion : "2.2" }, + shardOptions : { binVersion : "2.2" }, + + separateConfig : true, + sync : false +}; + +var st = new ShardingTest({ shards : 1, mongos : 1, other : options }); + +var mongos = st.s0; + +jsTest.log( "Starting v2.0 mongos..." ); + +var mongos20 = MongoRunner.runMongos({ binVersion : "2.0", configdb : st._configDB }) + +jsTest.log( "Waiting for 2.0 ping document..." ); + +var hasPing = function() { + return mongos.getCollection("config.mongos").findOne({ _id : RegExp(":" + mongos20.port + "$") }) != null; +} + +assert.soon( hasPing ); + +jsTest.log( "Stopping 2.0 mongos..." ); + +MongoRunner.stopMongos(mongos20); + +jsTest.log( "Upgrade should be unsuccessful..." ); + +// Make sure down +var mongosNew = MongoRunner.runMongos({ binVersion : "2.4", configdb : st._configDB, upgrade : "" }) +assert.eq(null, mongosNew); + +jsTest.log("Resetting time to zero..."); + +printjson(mongos.getCollection("config.mongos").findOne({ _id : RegExp(":" + mongos20.port + "$") })); + +mongos.getCollection("config.mongos").update({ _id : RegExp(":" + mongos20.port + "$") }, + { $set : { ping : new Date(0) } }); +assert.eq(null, mongos.getDB("config").getLastError()); + +printjson(mongos.getCollection("config.mongos").findOne({ _id : RegExp(":" + mongos20.port + "$") })); + +jsTest.log("Trying to restart mongos..."); + +// Make sure up +var mongosNew = MongoRunner.runMongos({ binVersion : "2.4", configdb : st._configDB, upgrade : "" }) +assert.neq(null, mongosNew); + +jsTest.log("Mongos started!"); + +MongoRunner.stopMongos(mongosNew); + +jsTest.log("DONE!") + +st.stop(); + + + diff --git a/jstests/multiVersion/upgrade_cluster_v3_to_v4_with_parallel_ops.js b/jstests/multiVersion/upgrade_cluster_v3_to_v4_with_parallel_ops.js index 589966adce4..ec8e459facb 100644 --- a/jstests/multiVersion/upgrade_cluster_v3_to_v4_with_parallel_ops.js +++ b/jstests/multiVersion/upgrade_cluster_v3_to_v4_with_parallel_ops.js @@ -179,7 +179,7 @@ jsTest.log("Upgrading config db from v3 to v4..."); var startTime = new Date(); // Make sure up -var mongosNew = MongoRunner.runMongos({ binVersion : "latest", configdb : configConnStr, upgrade : "" }) +var mongosNew = MongoRunner.runMongos({ binVersion : "2.4", configdb : configConnStr, upgrade : "" }) assert.neq(null, mongosNew); MongoRunner.stopMongos(mongosNew); diff --git a/jstests/multiVersion/upgrade_cluster_v3_to_v4_with_stale_mongod.js b/jstests/multiVersion/upgrade_cluster_v3_to_v4_with_stale_mongod.js index 2455a29f859..b67f15346f0 100644 --- a/jstests/multiVersion/upgrade_cluster_v3_to_v4_with_stale_mongod.js +++ b/jstests/multiVersion/upgrade_cluster_v3_to_v4_with_stale_mongod.js @@ -85,7 +85,7 @@ printjson(config.chunks.find().toArray()); jsTest.log("Starting v2.4 mongos in 2.2 cluster....") -var mongos = MongoRunner.runMongos({ binVersion : "latest", configdb : configConnStr, upgrade : "" }) +var mongos = MongoRunner.runMongos({ binVersion : "2.4", configdb : configConnStr, upgrade : "" }) assert.neq(null, mongos); MongoRunner.stopMongos(mongos); |