diff options
author | Sophia Tan <sophia_tll@hotmail.com> | 2023-04-18 07:41:17 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2023-04-18 08:57:59 +0000 |
commit | 274cb477d2a1b64ac81b85e9f1b3172387ce0184 (patch) | |
tree | e89f778fa52a40413403b6a125b69271cf8469c0 /jstests/libs | |
parent | 8863b04c282557081cf2634bce0e26f4fa5389b2 (diff) | |
download | mongo-274cb477d2a1b64ac81b85e9f1b3172387ce0184.tar.gz |
SERVER-74486 Always include tenant in collection name attributes in error messages
Diffstat (limited to 'jstests/libs')
3 files changed, 22 insertions, 24 deletions
diff --git a/jstests/libs/override_methods/inject_dollar_tenant.js b/jstests/libs/override_methods/inject_dollar_tenant.js index a336d8d2023..66d318c826b 100644 --- a/jstests/libs/override_methods/inject_dollar_tenant.js +++ b/jstests/libs/override_methods/inject_dollar_tenant.js @@ -23,7 +23,7 @@ function runCommandWithDollarTenant( let res = originalRunCommand.apply(conn, makeRunCommandArgs(cmdToRun)); const prefixedDbName = kTenantId + "_" + dbName; - assertExpectedDbNameInResponse(res, dbName, prefixedDbName); + assertExpectedDbNameInResponse(res, dbName, prefixedDbName, tojsononeline(res)); updateDbNamesInResponse(res, dbName, prefixedDbName); return res; } diff --git a/jstests/libs/override_methods/inject_security_token.js b/jstests/libs/override_methods/inject_security_token.js index 813384be613..e4819718b21 100644 --- a/jstests/libs/override_methods/inject_security_token.js +++ b/jstests/libs/override_methods/inject_security_token.js @@ -137,7 +137,7 @@ function runCommandWithResponseCheck( let res = originalRunCommand.apply(conn, makeRunCommandArgs(cmdObj)); const prefixedDbName = kTenantId + "_" + dbName; - assertExpectedDbNameInResponse(res, dbName, prefixedDbName); + assertExpectedDbNameInResponse(res, dbName, prefixedDbName, tojsononeline(res)); updateDbNamesInResponse(res, dbName, prefixedDbName); return res; } diff --git a/jstests/libs/override_methods/tenant_aware_response_checker.js b/jstests/libs/override_methods/tenant_aware_response_checker.js index 9c9e9a0ef77..84c6e9bb0df 100644 --- a/jstests/libs/override_methods/tenant_aware_response_checker.js +++ b/jstests/libs/override_methods/tenant_aware_response_checker.js @@ -12,12 +12,13 @@ function wordInString(str, word) { return regexp.test(str); } -function checkExpectedDbNameInString(str, dbName, prefixedDbName) { +function checkExpectedDbNameInString(str, dbName, prefixedDbName, originalRes) { // System db names (admin, local and config) should never be tenant prefixed. if (dbName == "admin" || dbName == "local" || dbName == "config") { assert.eq(false, wordInString(str, prefixedDbName), - `Response db name "${str}" does not match sent db name "${dbName}"`); + `Response db name "${str}" does not match sent db name "${ + dbName}". The response is "${originalRes}"`); return; } // Currently, we do not expect prefixed db name in db name field as we only test with @@ -25,10 +26,11 @@ function checkExpectedDbNameInString(str, dbName, prefixedDbName) { // TODO SERVER-70740: expect prefixed db name if "expectPrefix" option in request is true. assert.eq(false, wordInString(str, prefixedDbName), - `Response db name "${str}" does not match sent db name "${dbName}"`); + `Response db name "${str}" does not match sent db name "${ + dbName}". The response is "${originalRes}"`); } -function checkExpectedDbInErrorMsg(errMsg, dbName, prefixedDbName) { +function checkExpectedDbInErrorMsg(errMsg, dbName, prefixedDbName, originalRes) { // The db name in error message should always include tenant prefixed db name regardless how the // tenantId was received in the request. @@ -38,17 +40,8 @@ function checkExpectedDbInErrorMsg(errMsg, dbName, prefixedDbName) { return; } - // TODO SERVER-74486: We will check collection ns string in future. - if (errMsg.includes(dbName + ".")) { - // Do not check ns until we change error mssage to include tenant in ns. - return; - } - - // System db names (admin, local and config) should never be tenant prefixed. + // Skip check system db names (admin, local and config) which could be tenant prefixed or not. if (dbName == "admin" || dbName == "local" || dbName == "config") { - assert.eq(false, - wordInString(errMsg, prefixedDbName), - `Response db name "${errMsg}" does not match sent db name "${dbName}"`); return; } @@ -61,7 +54,7 @@ function checkExpectedDbInErrorMsg(errMsg, dbName, prefixedDbName) { assert.eq(true, errMsg.includes(prefixedDbName), `The db name in the errmsg does not contain expected tenant prefixed db name "${ - prefixedDbName}", error msg: ${errMsg}`); + prefixedDbName}". The response is "${originalRes}"`); } /** @@ -70,8 +63,9 @@ function checkExpectedDbInErrorMsg(errMsg, dbName, prefixedDbName) { * @param {*} requestDbName the original db name requested by jstest. * @param {*} prefixedDbName the tenant prefixed db name expected by inject_dollar_tenant.js and * inject_security_toiken.js. + * @param {*} originalResForLogging the original response for logging. */ -function assertExpectedDbNameInResponse(res, requestDbName, prefixedDbName) { +function assertExpectedDbNameInResponse(res, requestDbName, prefixedDbName, originalResForLogging) { if (requestDbName.length === 0) { return; } @@ -80,21 +74,25 @@ function assertExpectedDbNameInResponse(res, requestDbName, prefixedDbName) { let v = res[k]; if (typeof v === "string") { if (k === "dbName" || k == "db" || k == "dropped") { - checkExpectedDbNameInString(v, requestDbName, prefixedDbName); + checkExpectedDbNameInString( + v, requestDbName, prefixedDbName, originalResForLogging); } else if (k === "namespace" || k === "ns") { - checkExpectedDbNameInString(getDbName(v), requestDbName, prefixedDbName); + checkExpectedDbNameInString( + getDbName(v), requestDbName, prefixedDbName, originalResForLogging); } else if (k == "name") { - checkExpectedDbNameInString(v, requestDbName, prefixedDbName); + checkExpectedDbNameInString( + v, requestDbName, prefixedDbName, originalResForLogging); } else if (k === "errmsg") { - checkExpectedDbInErrorMsg(v, requestDbName, prefixedDbName); + checkExpectedDbInErrorMsg(v, requestDbName, prefixedDbName, originalResForLogging); } } else if (Array.isArray(v)) { v.forEach((item) => { if (typeof item === "object" && item !== null) - assertExpectedDbNameInResponse(item, requestDbName, prefixedDbName); + assertExpectedDbNameInResponse( + item, requestDbName, prefixedDbName, originalResForLogging); }); } else if (typeof v === "object" && v !== null && Object.keys(v).length > 0) { - assertExpectedDbNameInResponse(v, requestDbName, prefixedDbName); + assertExpectedDbNameInResponse(v, requestDbName, prefixedDbName, originalResForLogging); } } } |