diff options
-rw-r--r-- | jstests/core/shell_connection_strings.js | 33 | ||||
-rw-r--r-- | src/mongo/shell/dbshell.cpp | 6 |
2 files changed, 36 insertions, 3 deletions
diff --git a/jstests/core/shell_connection_strings.js b/jstests/core/shell_connection_strings.js new file mode 100644 index 00000000000..22861e6ce25 --- /dev/null +++ b/jstests/core/shell_connection_strings.js @@ -0,0 +1,33 @@ +// Test mongo shell connect strings. +(function() { + 'use strict'; + + const mongod = new MongoURI(db.getMongo().host).servers[0]; + const host = mongod.host; + const port = mongod.port; + + function testConnect(ok, ...args) { + const exitCode = runMongoProgram('mongo', '--eval', ';', ...args); + if (ok) { + assert.eq(exitCode, 0, "failed to connect with `" + args.join(' ') + "`"); + } else { + assert.neq( + exitCode, 0, "unexpectedly succeeded connecting with `" + args.join(' ') + "`"); + } + } + + testConnect(true, `${host}:${port}`); + testConnect(true, `${host}:${port}/test`); + testConnect(true, `${host}:${port}/admin`); + testConnect(true, host, '--port', port); + testConnect(true, '--host', host, '--port', port, 'test'); + testConnect(true, '--host', host, '--port', port, 'admin'); + testConnect(true, `mongodb://${host}:${port}/test`); + testConnect(true, `mongodb://${host}:${port}/test?connectTimeoutMS=10000`); + + // if a full URI is provided, you cannot also specify host or port + testConnect(false, `${host}/test`, '--port', port); + testConnect(false, `mongodb://${host}:${port}/test`, '--port', port); + testConnect(false, `mongodb://${host}:${port}/test`, '--host', host); + testConnect(false, `mongodb://${host}:${port}/test`, '--host', host, '--port', port); +})(); diff --git a/src/mongo/shell/dbshell.cpp b/src/mongo/shell/dbshell.cpp index 9273e7b6f25..34cdbed3d9e 100644 --- a/src/mongo/shell/dbshell.cpp +++ b/src/mongo/shell/dbshell.cpp @@ -332,11 +332,11 @@ string getURIFromArgs(const std::string& arg, const std::string& host, const std // --host provided, treat it as the connect string and get db from positional arg. return parseDbHost(arg, host); } else if (arg.size()) { - // --host missing, but we have a potential db/host positional arg. + // --host missing, but we have a potential host/db positional arg. const auto slashPos = arg.find('/'); if (slashPos != std::string::npos) { - // db/host pair. - return parseDbHost(arg.substr(0, slashPos), arg.substr(slashPos + 1)); + // host/db pair. + return parseDbHost(arg.substr(slashPos + 1), arg.substr(0, slashPos)); } // Compatability formats. |