// Check that the shell can authenticate as the __system user using X509, which is a use case for // our auth performance tests (through the dbhash hook). import {ReplSetTest} from "jstests/libs/replsettest.js"; const x509Options = { clusterAuthMode: "x509", tlsMode: "requireTLS", tlsCertificateKeyFile: "jstests/libs/server.pem", tlsCAFile: "jstests/libs/ca.pem", tlsAllowInvalidCertificates: "", }; const rst = new ReplSetTest({nodes: 1, nodeOptions: x509Options, waitForKeys: false}); rst.startSet(); rst.initiate(); const primaryConnString = rst.getPrimary().host; const subShellCommands = async function () { TestData = { authUser: "C=US,ST=New York,L=New York City,O=MongoDB,OU=Kernel,CN=server", authenticationDatabase: "$external", keyFile: "dummyKeyFile", clusterAuthMode: "x509", }; // Explicitly check asCluster can succeed. authutil.asCluster(db.getMongo(), "dummyKeyFile", function () { // No need to do anything here. We just need to check we don't error out in the // previous auth step. }); // Indirectly check that ReplSetTest can successfully call asCluster. new ReplSetTest(db.getMongo().host); // Directly check that the use case for our auth perf tests can succeed. await import("jstests/hooks/run_check_repl_dbhash.js"); }; const subShellArgs = [ "mongo", "--ssl", "--tlsCAFile=jstests/libs/ca.pem", "--tlsCertificateKeyFile=jstests/libs/server.pem", "--tlsAllowInvalidHostnames", "--authenticationDatabase=$external", "--authenticationMechanism=MONGODB-X509", primaryConnString, "--eval", `(${subShellCommands.toString()})();`, ]; const retVal = _runMongoProgram(...subShellArgs); assert.eq(retVal, 0, "mongo shell did not succeed with exit code 0"); rst.stopSet();