diff options
author | Matt Cotter <matt.cotter@mongodb.com> | 2016-07-13 14:39:35 -0400 |
---|---|---|
committer | Matt Cotter <matt.cotter@mongodb.com> | 2016-08-18 14:13:01 -0400 |
commit | 88b540f0c14c7ab8af708aecc4cd6df83081b32e (patch) | |
tree | a6f01563ac2b8db7d34f98e5fab3d17f5416e315 /jstests/noPassthroughWithMongod/host_connection_string_validation.js | |
parent | ceeb17e4265c4c48765acbf9ad6a60b5f1889332 (diff) | |
download | mongo-88b540f0c14c7ab8af708aecc4cd6df83081b32e.tar.gz |
SERVER-22382 allow mongo --host to take uri
Diffstat (limited to 'jstests/noPassthroughWithMongod/host_connection_string_validation.js')
-rw-r--r-- | jstests/noPassthroughWithMongod/host_connection_string_validation.js | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/jstests/noPassthroughWithMongod/host_connection_string_validation.js b/jstests/noPassthroughWithMongod/host_connection_string_validation.js new file mode 100644 index 00000000000..89d77e707f1 --- /dev/null +++ b/jstests/noPassthroughWithMongod/host_connection_string_validation.js @@ -0,0 +1,125 @@ +// Test --host. + +// 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."); + } + } +}; + +var goodStrings = [ + "[::1]:27999", + "[::1]:27999/test", + "localhost:27999", + "localhost:27999/test", + "127.0.0.1:27999", + "127.0.0.1:27999/test", + "[0:0:0:0:0:0:0:1]:27999", + "[0:0:0:0:0:0:0:1]:27999/test", + "[0000:0000:0000:0000:0000:0000:0000:0001]:27999", + "[0000:0000:0000:0000:0000:0000:0000:0001]:27999/test", +]; + +var goodSocketStrings = [ + "/tmp/mongodb-27999.sock", + "/tmp/mongodb-27999.sock/test", +]; + +var badStrings = [ + "/", + ":", + ":/", + "/test", + ":/test", + ":27999/", + ":27999/test", + "::1]:27999/", + "[::1:27999/", + "[::1]:/test", + "[::1:]27999/", + "a[::1:]27999/", + "::1:27999/test", + "::1:65536/test", + "[::1]:cat/test", + "[::1]:1cat/test", + "localhost:/test", + "127.0.0.1:/test", + "[::1]:65536/test", + "[::1]:123456/test", + "127.0.0.1:cat/test", + "a[127.0.0.1]:27999/", + "127.0.0.1:1cat/test", + "127.0.0.1:65536/test", + "0:0::0:0:1:27999/test", + "127.0.0.1:123456/test", + "0000:0000:0000:0000:0000:0000:0000:0001:27999/test", +]; + +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); +} + +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("SUCCESSFUL test completion"); |