diff options
Diffstat (limited to 'jstests/libs/cluster_server_parameter_utils.js')
| -rw-r--r-- | jstests/libs/cluster_server_parameter_utils.js | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/jstests/libs/cluster_server_parameter_utils.js b/jstests/libs/cluster_server_parameter_utils.js index 7a0149cc7f9..4f84d5f42a6 100644 --- a/jstests/libs/cluster_server_parameter_utils.js +++ b/jstests/libs/cluster_server_parameter_utils.js @@ -763,3 +763,53 @@ export function testInvalidClusterParameterCommands(conn, tenantId) { })); } } + +// name => name of cluster parameter to get +// expectedValue => document that should be equal to document describing CP's value, excluding the +// _id +function checkGetClusterParameterMatch(db, tenantToken, name, expectedValue) { + const cps = assert + .commandWorked( + runCommandWithSecurityToken(tenantToken, db, {getClusterParameter: name})) + .clusterParameters; + // confirm we got the document we were looking for. + assert.eq(cps.length, 1); + let actualCp = cps[0]; + assert.eq(actualCp._id, name); + // confirm the value is expected. + // remove the id and clusterParameterTime fields + delete actualCp._id; + delete actualCp.clusterParameterTime; + assert(bsonWoCompare(actualCp, expectedValue) !== 0, + 'Server parameter mismatch for parameter ' + + '\n' + + 'Expected: ' + tojson(expectedValue) + '\n' + + 'Actual: ' + tojson(actualCp)); +} + +// Tests that getClusterParameter: "*" all have an _id element, and that all the parameters +// it returns match the result of directly querying with getClusterParameter: <paramName>. +export function testGetClusterParameterStar(conn, tenantId) { + let adminDB, getClusterParameterFn; + if (conn instanceof ReplSetTest) { + adminDB = conn.getPrimary().getDB('admin'); + } else if (conn instanceof ShardingTest) { + adminDB = conn.s0.getDB('admin'); + } else { + adminDB = conn.getDB('admin'); + } + + const tenantToken = + tenantId ? makeUnsignedSecurityToken(tenantId, {expectPrefix: false}) : undefined; + + const allParameters = assert + .commandWorked(runCommandWithSecurityToken( + tenantToken, adminDB, {getClusterParameter: '*'})) + .clusterParameters; + for (const param of allParameters) { + assert(param.hasOwnProperty("_id"), + 'Entry in {getClusterParameter: "*"} result is missing _id key:\n' + tojson(param)); + const name = param["_id"]; + checkGetClusterParameterMatch(adminDB, tenantToken, name, param); + } +} |
