diff options
Diffstat (limited to 'jstests/noPassthrough/queryStats/query_stats_redact_find_cmd.js')
-rw-r--r-- | jstests/noPassthrough/queryStats/query_stats_redact_find_cmd.js | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/jstests/noPassthrough/queryStats/query_stats_redact_find_cmd.js b/jstests/noPassthrough/queryStats/query_stats_redact_find_cmd.js new file mode 100644 index 00000000000..b2cce48cdb7 --- /dev/null +++ b/jstests/noPassthrough/queryStats/query_stats_redact_find_cmd.js @@ -0,0 +1,69 @@ +/** + * Test that $queryStats properly applies hmac to find commands, on mongod and mongos. + */ +load("jstests/libs/telemetry_utils.js"); +(function() { +"use strict"; + +const kHashedCollName = "w6Ax20mVkbJu4wQWAMjL8Sl+DfXAr2Zqdc3kJRB7Oo0="; +const kHashedFieldName = "lU7Z0mLRPRUL+RfAD5jhYPRRpXBsZBxS/20EzDwfOG4="; + +function runTest(conn) { + const db = conn.getDB("test"); + const admin = conn.getDB("admin"); + + db.test.drop(); + db.test.insert({v: 1}); + + db.test.find({v: 1}).toArray(); + + let telemetry = getTelemetryRedacted(admin); + + assert.eq(1, telemetry.length); + assert.eq("find", telemetry[0].key.queryShape.command); + assert.eq({[kHashedFieldName]: {$eq: "?number"}}, telemetry[0].key.queryShape.filter); + + db.test.insert({v: 2}); + + const cursor = db.test.find({v: {$gt: 0, $lt: 3}}).batchSize(1); + telemetry = getTelemetryRedacted(admin); + // Cursor isn't exhausted, so there shouldn't be another entry yet. + assert.eq(1, telemetry.length); + + assert.commandWorked( + db.runCommand({getMore: cursor.getId(), collection: db.test.getName(), batchSize: 2})); + + telemetry = getTelemetryRedacted(admin); + assert.eq(2, telemetry.length); + assert.eq("find", telemetry[1].key.queryShape.command); + assert.eq({ + "$and": [{[kHashedFieldName]: {"$gt": "?number"}}, {[kHashedFieldName]: {"$lt": "?number"}}] + }, + telemetry[1].key.queryShape.filter); +} + +const conn = MongoRunner.runMongod({ + setParameter: { + internalQueryStatsSamplingRate: -1, + featureFlagQueryStats: true, + } +}); +runTest(conn); +MongoRunner.stopMongod(conn); + +const st = new ShardingTest({ + mongos: 1, + shards: 1, + config: 1, + rs: {nodes: 1}, + mongosOptions: { + setParameter: { + internalQueryStatsSamplingRate: -1, + featureFlagQueryStats: true, + 'failpoint.skipClusterParameterRefresh': "{'mode':'alwaysOn'}" + } + }, +}); +runTest(st.s); +st.stop(); +}()); |