diff options
author | Jonathan Reams <jbreams@mongodb.com> | 2017-01-10 15:37:04 -0500 |
---|---|---|
committer | Jonathan Reams <jbreams@mongodb.com> | 2017-01-12 11:26:24 -0500 |
commit | f3d5da919580d6ab7a332fab604b056451994af3 (patch) | |
tree | a1a7275a102da72c8c1b7db7e963db8183cf3c9e /jstests/noPassthroughWithMongod | |
parent | e3cf6a7d9f6e0320c1e23b3d7d935f880d70869f (diff) | |
download | mongo-f3d5da919580d6ab7a332fab604b056451994af3.tar.gz |
SERVER-27576 Fix quit() in shell and all the tests that depend on it
Diffstat (limited to 'jstests/noPassthroughWithMongod')
3 files changed, 255 insertions, 256 deletions
diff --git a/jstests/noPassthroughWithMongod/host_connection_string_validation.js b/jstests/noPassthroughWithMongod/host_connection_string_validation.js index bb6bba625dd..a252ef39230 100644 --- a/jstests/noPassthroughWithMongod/host_connection_string_validation.js +++ b/jstests/noPassthroughWithMongod/host_connection_string_validation.js @@ -1,115 +1,115 @@ // Test --host. +(function() { + // This "inner_mode" method of spawning a mongod and re-running was copied from + // ipv6_connection_string_validation.js + if ("undefined" == typeof inner_mode) { + // Start a mongod with --ipv6 + jsTest.log("Outer mode test starting mongod with --ipv6"); + // NOTE: bind_ip arg is present to test if it can parse ipv6 addresses (::1 in this case). + // Unfortunately, having bind_ip = ::1 won't work in the test framework (But does work when + // tested manually), so 127.0.0.1 is also present so the test mongo shell can connect + // with that address. + var mongod = MongoRunner.runMongod({ipv6: "", bind_ip: "::1,127.0.0.1"}); + var args = [ + "mongo", + "--nodb", + "--ipv6", + "--host", + "::1", + "--port", + mongod.port, + "--eval", + "inner_mode=true;port=" + mongod.port + ";", + "jstests/noPassthroughWithMongod/host_connection_string_validation.js" + ]; + var exitCode = _runMongoProgram.apply(null, args); + jsTest.log("Inner mode test finished, exit code was " + exitCode); -// This "inner_mode" method of spawning a mongod and re-running was copied from -// ipv6_connection_string_validation.js -if ("undefined" == typeof inner_mode) { - // Start a mongod with --ipv6 - jsTest.log("Outer mode test starting mongod with --ipv6"); - // NOTE: bind_ip arg is present to test if it can parse ipv6 addresses (::1 in this case). - // Unfortunately, having bind_ip = ::1 won't work in the test framework (But does work when - // tested manually), so 127.0.0.1 is also present so the test mongo shell can connect - // with that address. - var mongod = MongoRunner.runMongod({ipv6: "", bind_ip: "::1,127.0.0.1"}); - var args = [ - "mongo", - "--nodb", - "--ipv6", - "--host", - "::1", - "--port", - mongod.port, - "--eval", - "inner_mode=true;port=" + mongod.port + ";", - "jstests/noPassthroughWithMongod/host_connection_string_validation.js" - ]; - var exitCode = _runMongoProgram.apply(null, args); - jsTest.log("Inner mode test finished, exit code was " + exitCode); - - // Stop the server we started - jsTest.log("Outer mode test stopping server"); - MongoRunner.stopMongod(mongod.port, 15); - - // Pass the inner test's exit code back as the outer test's exit code - quit(exitCode); -} - -var testHost = function(host, shouldSucceed) { - var exitCode = runMongoProgram('mongo', '--ipv6', '--eval', ';', '--host', host); - if (shouldSucceed) { - if (exitCode !== 0) { - doassert("failed to connect with `--host " + host + - "`, but expected success. Exit code: " + exitCode); - } - } else { - if (exitCode === 0) { - doassert("successfully connected with `--host " + host + "`, but expected to fail."); + // Pass the inner test's exit code back as the outer test's exit code + if (exitCode != 0) { + doassert("inner test failed with exit code " + exitcode); } + return; } -}; -var goodStrings = [ - "[::1]:27999", - "localhost:27999", - "127.0.0.1:27999", - "[0:0:0:0:0:0:0:1]:27999", - "[0000:0000:0000:0000:0000:0000:0000:0001]:27999", -]; + var testHost = function(host, shouldSucceed) { + var exitCode = runMongoProgram('mongo', '--ipv6', '--eval', ';', '--host', host); + if (shouldSucceed) { + if (exitCode !== 0) { + doassert("failed to connect with `--host " + host + + "`, but expected success. Exit code: " + exitCode); + } + } else { + if (exitCode === 0) { + doassert("successfully connected with `--host " + host + + "`, but expected to fail."); + } + } + }; + + var goodStrings = [ + "[::1]:27999", + "localhost:27999", + "127.0.0.1:27999", + "[0:0:0:0:0:0:0:1]:27999", + "[0000:0000:0000:0000:0000:0000:0000:0001]:27999", + ]; -var goodSocketStrings = [ - "/tmp/mongodb-27999.sock", -]; + var goodSocketStrings = [ + "/tmp/mongodb-27999.sock", + ]; -var badStrings = [ - "::1:27999", - "::1:65536", - "::1]:27999", - ":", - ":27999", - "", - "[::1:]27999", - "[::1:27999", - "[::1]:", - "[::1]:123456", - "[::1]:1cat", - "[::1]:65536", - "[::1]:cat", - "0:0::0:0:1:27999", - "0000:0000:0000:0000:0000:0000:0000:0001:27999", - "127.0.0.1:", - "127.0.0.1:123456", - "127.0.0.1:1cat", - "127.0.0.1:65536", - "127.0.0.1:cat", - "a[::1:]27999", - "a[127.0.0.1]:27999", - "localhost:", -]; + var badStrings = [ + "::1:27999", + "::1:65536", + "::1]:27999", + ":", + ":27999", + "[::1:]27999", + "[::1:27999", + "[::1]:", + "[::1]:123456", + "[::1]:1cat", + "[::1]:65536", + "[::1]:cat", + "0:0::0:0:1:27999", + "0000:0000:0000:0000:0000:0000:0000:0001:27999", + "127.0.0.1:", + "127.0.0.1:123456", + "127.0.0.1:1cat", + "127.0.0.1:65536", + "127.0.0.1:cat", + "a[::1:]27999", + "a[127.0.0.1]:27999", + "localhost:", + ]; -function runUriTestFor(i, connectionString, isGood) { - connectionString = connectionString.replace("27999", "" + port); - print("Testing " + (isGood ? "good" : "bad") + " connection string " + i + "..."); - print(" * testing " + connectionString); - testHost(connectionString, isGood); - print(" * testing mongodb://" + connectionString); - testHost("mongodb://" + connectionString, isGood); -} + function runUriTestFor(i, connectionString, isGood) { + connectionString = connectionString.replace("27999", "" + port); + print("Testing " + (isGood ? "good" : "bad") + " connection string " + i + "..."); + print(" * testing " + connectionString); + testHost(connectionString, isGood); + print(" * testing mongodb://" + connectionString); + testHost("mongodb://" + connectionString, isGood); + } -var i; -jsTest.log("TESTING " + goodStrings.length + " good uri strings"); -for (i = 0; i < goodStrings.length; ++i) { - runUriTestFor(i, goodStrings[i], true); -} + var i; + jsTest.log("TESTING " + goodStrings.length + " good uri strings"); + for (i = 0; i < goodStrings.length; ++i) { + runUriTestFor(i, goodStrings[i], true); + } -if (!_isWindows()) { - jsTest.log("TESTING " + goodSocketStrings.length + " good uri socket strings"); - for (i = 0; i < goodSocketStrings.length; ++i) { - runUriTestFor(i, goodSocketStrings[i], true); + if (!_isWindows()) { + jsTest.log("TESTING " + goodSocketStrings.length + " good uri socket strings"); + for (i = 0; i < goodSocketStrings.length; ++i) { + runUriTestFor(i, goodSocketStrings[i], true); + } } -} -jsTest.log("TESTING " + badStrings.length + " bad uri strings"); -for (i = 0; i < badStrings.length; ++i) { - runUriTestFor(i, badStrings[i], false); -} + jsTest.log("TESTING " + badStrings.length + " bad uri strings"); + for (i = 0; i < badStrings.length; ++i) { + runUriTestFor(i, badStrings[i], false); + } -jsTest.log("SUCCESSFUL test completion"); + jsTest.log("SUCCESSFUL test completion"); +})(); diff --git a/jstests/noPassthroughWithMongod/ipv6_connection_string_validation.js b/jstests/noPassthroughWithMongod/ipv6_connection_string_validation.js index 881c77c96d9..6d80b2aec70 100644 --- a/jstests/noPassthroughWithMongod/ipv6_connection_string_validation.js +++ b/jstests/noPassthroughWithMongod/ipv6_connection_string_validation.js @@ -4,162 +4,162 @@ // This file runs in two modes: outer and inner. This is to enable testing with --ipv6. // The outer mode test starts a mongod with --ipv6 and then starts a mongo shell with --ipv6 // and a command line to run the test in inner_mode. The inner mode test is the actual test. +(function() { + if ("undefined" == typeof inner_mode) { + // Start a mongod with --ipv6 + jsTest.log("Outer mode test starting mongod with --ipv6"); + // NOTE: bind_ip arg is present to test if it can parse ipv6 addresses (::1 in this case). + // Unfortunately, having bind_ip = ::1 won't work in the test framework (But does work when + // tested manually), so 127.0.0.1 is also present so the test mongo shell can connect + // with that address. + var mongod = MongoRunner.runMongod({ipv6: "", bind_ip: "::1,127.0.0.1"}); + var args = [ + "mongo", + "--nodb", + "--ipv6", + "--host", + "::1", + "--port", + mongod.port, + "--eval", + "inner_mode=true;port=" + mongod.port + ";", + "jstests/noPassthroughWithMongod/ipv6_connection_string_validation.js" + ]; + var exitCode = _runMongoProgram.apply(null, args); + jsTest.log("Inner mode test finished, exit code was " + exitCode); -if ("undefined" == typeof inner_mode) { - // Start a mongod with --ipv6 - jsTest.log("Outer mode test starting mongod with --ipv6"); - // NOTE: bind_ip arg is present to test if it can parse ipv6 addresses (::1 in this case). - // Unfortunately, having bind_ip = ::1 won't work in the test framework (But does work when - // tested manually), so 127.0.0.1 is also present so the test mongo shell can connect - // with that address. - var mongod = MongoRunner.runMongod({ipv6: "", bind_ip: "::1,127.0.0.1"}); - var args = [ - "mongo", - "--nodb", - "--ipv6", - "--host", - "::1", - "--port", - mongod.port, - "--eval", - "inner_mode=true;port=" + mongod.port + ";", - "jstests/noPassthroughWithMongod/ipv6_connection_string_validation.js" - ]; - var exitCode = _runMongoProgram.apply(null, args); - jsTest.log("Inner mode test finished, exit code was " + exitCode); + // Pass the inner test's exit code back as the outer test's exit code + if (exitCode != 0) { + doassert("inner test failed with exit code " + exitcode); + } + return; + } - // Stop the server we started - jsTest.log("Outer mode test stopping server"); - MongoRunner.stopMongod(mongod.port, 15); + var goodStrings = [ + "localhost:27999/test", + "[::1]:27999/test", + "[0:0:0:0:0:0:0:1]:27999/test", + "[0000:0000:0000:0000:0000:0000:0000:0001]:27999/test", + "localhost:27999", + "[::1]:27999", + "[0:0:0:0:0:0:0:1]:27999", + "[0000:0000:0000:0000:0000:0000:0000:0001]:27999", + ]; - // Pass the inner test's exit code back as the outer test's exit code - quit(exitCode); -} + var missingConnString = /^Missing connection string$/; + var incorrectType = /^Incorrect type/; + var emptyConnString = /^Empty connection string$/; + var badHost = /^Failed to parse mongodb/; + var emptyHost = /^Empty host component/; + var noPort = /^No digits/; + var badPort = /^Bad digit/; + var invalidPort = /^Port number \d+ out of range/; + var moreThanOneColon = /^More than one ':' detected/; + var charBeforeSquareBracket = /^'\[' present, but not first character/; + var noCloseBracket = /^ipv6 address is missing closing '\]'/; + var noOpenBracket = /^'\]' present without '\['/; + var noColonPrePort = /^missing colon after '\]' before the port/; + var badStrings = [ + {s: undefined, r: missingConnString}, + {s: 7, r: incorrectType}, + {s: null, r: incorrectType}, + {s: "", r: emptyConnString}, + {s: " ", r: emptyConnString}, + {s: ":", r: emptyHost}, + {s: "/", r: badHost}, + {s: ":/", r: emptyHost}, + {s: ":/test", r: emptyHost}, + {s: ":27999/", r: emptyHost}, + {s: ":27999/test", r: emptyHost}, + {s: "/test", r: badHost}, + {s: "localhost:/test", r: noPort}, + {s: "[::1]:/test", r: noPort}, + {s: "[::1]:cat/test", r: badPort}, + {s: "[::1]:1cat/test", r: badPort}, + {s: "[::1]:123456/test", r: invalidPort}, + {s: "[::1]:65536/test", r: invalidPort}, + {s: "127.0.0.1:65536/test", r: invalidPort}, + {s: "::1:27999/test", r: moreThanOneColon}, + {s: "0:0::0:0:1:27999/test", r: moreThanOneColon}, + {s: "0000:0000:0000:0000:0000:0000:0000:0001:27999/test", r: moreThanOneColon}, + {s: "a[127.0.0.1]:27999/", r: charBeforeSquareBracket}, + {s: "a[::1:]27999/", r: charBeforeSquareBracket}, + {s: "[::1:27999/", r: noCloseBracket}, + {s: "[::1:]27999/", r: noColonPrePort}, + {s: "::1]:27999/", r: noOpenBracket}, + ]; -var goodStrings = [ - "localhost:27999/test", - "[::1]:27999/test", - "[0:0:0:0:0:0:0:1]:27999/test", - "[0000:0000:0000:0000:0000:0000:0000:0001]:27999/test", - "localhost:27999", - "[::1]:27999", - "[0:0:0:0:0:0:0:1]:27999", - "[0000:0000:0000:0000:0000:0000:0000:0001]:27999", -]; + var substitutePort = function(connectionString) { + // This will be called with non-strings as well as strings, so we need to catch exceptions + try { + return connectionString.replace("27999", "" + port); + } catch (e) { + return connectionString; + } + }; -var missingConnString = /^Missing connection string$/; -var incorrectType = /^Incorrect type/; -var emptyConnString = /^Empty connection string$/; -var badHost = /^Failed to parse mongodb/; -var emptyHost = /^Empty host component/; -var noPort = /^No digits/; -var badPort = /^Bad digit/; -var invalidPort = /^Port number \d+ out of range/; -var moreThanOneColon = /^More than one ':' detected/; -var charBeforeSquareBracket = /^'\[' present, but not first character/; -var noCloseBracket = /^ipv6 address is missing closing '\]'/; -var noOpenBracket = /^'\]' present without '\['/; -var noColonPrePort = /^missing colon after '\]' before the port/; -var badStrings = [ - {s: undefined, r: missingConnString}, - {s: 7, r: incorrectType}, - {s: null, r: incorrectType}, - {s: "", r: emptyConnString}, - {s: " ", r: emptyConnString}, - {s: ":", r: emptyHost}, - {s: "/", r: badHost}, - {s: ":/", r: emptyHost}, - {s: ":/test", r: emptyHost}, - {s: ":27999/", r: emptyHost}, - {s: ":27999/test", r: emptyHost}, - {s: "/test", r: badHost}, - {s: "localhost:/test", r: noPort}, - {s: "[::1]:/test", r: noPort}, - {s: "[::1]:cat/test", r: badPort}, - {s: "[::1]:1cat/test", r: badPort}, - {s: "[::1]:123456/test", r: invalidPort}, - {s: "[::1]:65536/test", r: invalidPort}, - {s: "127.0.0.1:65536/test", r: invalidPort}, - {s: "::1:27999/test", r: moreThanOneColon}, - {s: "0:0::0:0:1:27999/test", r: moreThanOneColon}, - {s: "0000:0000:0000:0000:0000:0000:0000:0001:27999/test", r: moreThanOneColon}, - {s: "a[127.0.0.1]:27999/", r: charBeforeSquareBracket}, - {s: "a[::1:]27999/", r: charBeforeSquareBracket}, - {s: "[::1:27999/", r: noCloseBracket}, - {s: "[::1:]27999/", r: noColonPrePort}, - {s: "::1]:27999/", r: noOpenBracket}, -]; + var testGood = function(i, connectionString) { + print("\n---\nTesting good connection string " + i + " (\"" + connectionString + "\") ..."); + var gotException = false; + var exception; + try { + var connectDB = connect(connectionString); + connectDB = null; + } catch (e) { + gotException = true; + exception = e; + } + if (!gotException) { + print("Good connection string " + i + " (\"" + connectionString + + "\") correctly validated"); + return; + } + var message = "FAILED to correctly validate goodString " + i + " (\"" + connectionString + + "\"): exception was \"" + tojson(exception) + "\""; + doassert(message); + }; -var substitutePort = function(connectionString) { - // This will be called with non-strings as well as strings, so we need to catch exceptions - try { - return connectionString.replace("27999", "" + port); - } catch (e) { - return connectionString; - } -}; + var testBad = function(i, connectionString, errorRegex) { + print("\n---\nTesting bad connection string " + i + " (\"" + connectionString + "\") ..."); + var gotException = false; + var gotCorrectErrorText = false; + var exception; + try { + var connectDB = connect(connectionString); + connectDB = null; + } catch (e) { + gotException = true; + exception = e; + if (errorRegex.test(e.message)) { + gotCorrectErrorText = true; + } + } + if (gotCorrectErrorText) { + print("Bad connection string " + i + " (\"" + connectionString + + "\") correctly rejected:\n" + tojson(exception)); + return; + } + var message = "FAILED to generate correct exception for badString " + i + " (\"" + + connectionString + "\"): "; + if (gotException) { + message += "exception was \"" + tojson(exception) + "\", it should have matched \"" + + errorRegex.toString() + "\""; + } else { + message += "no exception was thrown"; + } + doassert(message); + }; -var testGood = function(i, connectionString) { - print("\n---\nTesting good connection string " + i + " (\"" + connectionString + "\") ..."); - var gotException = false; - var exception; - try { - var connectDB = connect(connectionString); - connectDB = null; - } catch (e) { - gotException = true; - exception = e; + var i; + jsTest.log("TESTING " + goodStrings.length + " good connection strings"); + for (i = 0; i < goodStrings.length; ++i) { + testGood(i, substitutePort(goodStrings[i])); } - if (!gotException) { - print("Good connection string " + i + " (\"" + connectionString + - "\") correctly validated"); - return; - } - var message = "FAILED to correctly validate goodString " + i + " (\"" + connectionString + - "\"): exception was \"" + tojson(exception) + "\""; - doassert(message); -}; -var testBad = function(i, connectionString, errorRegex) { - print("\n---\nTesting bad connection string " + i + " (\"" + connectionString + "\") ..."); - var gotException = false; - var gotCorrectErrorText = false; - var exception; - try { - var connectDB = connect(connectionString); - connectDB = null; - } catch (e) { - gotException = true; - exception = e; - if (errorRegex.test(e.message)) { - gotCorrectErrorText = true; - } + jsTest.log("TESTING " + badStrings.length + " bad connection strings"); + for (i = 0; i < badStrings.length; ++i) { + testBad(i, substitutePort(badStrings[i].s), badStrings[i].r); } - if (gotCorrectErrorText) { - print("Bad connection string " + i + " (\"" + connectionString + - "\") correctly rejected:\n" + tojson(exception)); - return; - } - var message = "FAILED to generate correct exception for badString " + i + " (\"" + - connectionString + "\"): "; - if (gotException) { - message += "exception was \"" + tojson(exception) + "\", it should have matched \"" + - errorRegex.toString() + "\""; - } else { - message += "no exception was thrown"; - } - doassert(message); -}; - -var i; -jsTest.log("TESTING " + goodStrings.length + " good connection strings"); -for (i = 0; i < goodStrings.length; ++i) { - testGood(i, substitutePort(goodStrings[i])); -} - -jsTest.log("TESTING " + badStrings.length + " bad connection strings"); -for (i = 0; i < badStrings.length; ++i) { - testBad(i, substitutePort(badStrings[i].s), badStrings[i].r); -} -jsTest.log("SUCCESSFUL test completion"); + jsTest.log("SUCCESSFUL test completion"); +})(); diff --git a/jstests/noPassthroughWithMongod/replset_host_connection_validation.js b/jstests/noPassthroughWithMongod/replset_host_connection_validation.js index 076b5f931ae..7e48de363e2 100644 --- a/jstests/noPassthroughWithMongod/replset_host_connection_validation.js +++ b/jstests/noPassthroughWithMongod/replset_host_connection_validation.js @@ -19,17 +19,16 @@ "--nodb", "--eval", "inner_mode=true;port=" + primary.port + ";", - "jstests/noPassthroughWithMongod/host_connection_string_validation.js" + "jstests/noPassthroughWithMongod/replset_host_connection_validation.js" ]; const exitCode = _runMongoProgram(...args); jsTest.log("Inner mode test finished, exit code was " + exitCode); - // Stop the server we started - jsTest.log("Outer mode test stopping server"); - MongoRunner.stopMongod(primary.port, 15); - // Pass the inner test's exit code back as the outer test's exit code - quit(exitCode); + if (exitCode != 0) { + doassert("inner test failed with exit code " + exitcode); + } + return; } const testHost = function(host) { |