From 97e3e3a556b91c58559f17dc353de648c4256df6 Mon Sep 17 00:00:00 2001 From: "A.Shakhmatov" Date: Sun, 9 Aug 2026 13:11:43 +0300 Subject: [PATCH] tests/spec: assert expectEvents The headline is not the delta, it is that `pass` changed meaning. 354 of the 487 cases declare `expectEvents` and until now the runner read none of them, so a case could send the wrong command entirely and still be counted a pass as long as the *result* came back right. The old column was an upper bound by construction. 193/99/195 becomes 159/133/195, and the two numbers are not comparable. Two rules decide how far the assertion reaches, both taken from the spec rather than from what would be convenient: - `command` and `reply` match as *root* documents (unified-test-format.md:1020-1022, :1037-1039). The driver hangs `lsid`, `$db` and `maxTimeMS` off nearly everything it sends; as nested documents essentially the whole corpus would fail on keys no expectation was ever written to mention, and the number would say nothing. - the event list is exact in number and order, not a prefix (unified-test-format.md:3088-3091). 23 cases expect an empty list and a prefix rule would pass every one of them without looking. The assertion runs after the operations, so a wrong result is still reported as a wrong result rather than being masked, and after the listeners are disabled, so the teardown's own commands cannot reach the buffer. `cmap` and `sdam` event types, `ignoreExtraEvents`, and any event field beyond `command`/`reply`/`commandName`/`databaseName` are reported unsupported at the point of assertion. None occurs in this corpus -- all 354 blocks are `eventType: command`, carrying 349 `commandStartedEvent` and 6 `commandSucceededEvent` -- so nothing is being quietly waived. All 34 newly-failing cases, triaged. Not one is a wrong answer from the engine; every one is a command the driver never sent: - 22x `command.writeConcern: missing` -- runner gap, and the sharpest thing this commit found. `buildEntities` drops `collectionOptions` on the floor, so `writeConcern: {w: 0}` never reached the driver and every "unacknowledged write" case in the corpus has been running an acknowledged write. They passed because the results of the two agree. This is precisely the class of error the instrument was built to find, and it was invisible to the result column. - 5x `command.sort.: missing` -- runner gap. The driver holds a sort as a JS `Map` (lib/sort.js), so `Object.keys` on it is empty and the matcher reports every expected key as absent. Measured, not guessed: EJSON prints a `Map` exactly like a document, which is why the dump looks correct. - 4x `command.bypassDocumentValidation: missing` -- unclassified. The option is absent from the wire for the `false` cases; the driver only forwards it when true on some paths (lib/operations/find_and_modify.js:19), and whether the runner also drops it has not been established. - 2x `command.comment: missing` on getMore -- server gap, most likely. The driver gates it on `maxWireVersion >= 9` (lib/operations/get_more.js:43) and this engine advertises 8 while reporting itself as 4.4.0, which is wire 9. The inconsistency is ours. - 1x `command.maxTimeMS: expected 6000, got 10000` -- the CSOT rewrite, dealt with in the next commit. Each of those gets its own commit, and none of them is fixed here: a check and the fix for what the check caught do not belong in one change. --- tests/spec/run.js | 54 ++++++++++++++++++++++++++++ tests/spec/scorecard.txt | 78 ++++++++++++++++++++++++++++------------ 2 files changed, 110 insertions(+), 22 deletions(-) diff --git a/tests/spec/run.js b/tests/spec/run.js index e62988d..b4f96f4 100644 --- a/tests/spec/run.js +++ b/tests/spec/run.js @@ -606,6 +606,59 @@ async function buildEntities(url, createEntities, clients, events) { return { map, clients, events }; } +// Two rules decide how much of the corpus this assertion can reach, and both +// come from the spec rather than from taste: +// +// - `command` and `reply` are matched as *root* documents +// (unified-test-format.md:1020-1022 and :1037-1039). The driver puts +// `lsid`, `$db` and `$readPreference` on nearly everything it sends; +// matched as nested documents, almost every case in the corpus would fail +// on keys its expectation was never written to mention. +// - the event list is exact in number and order, not a prefix +// (unified-test-format.md:3088-3091). 23 cases here expect an empty list, +// and a prefix rule would pass every one of them without looking. +function verifyEvents(expectEvents, entities) { + if (!expectEvents) return; + for (const spec of expectEvents) { + const type = spec.eventType || 'command'; + if (type !== 'command') throw new Unsupported(`${type} events`); + if (spec.ignoreExtraEvents) throw new Unsupported('ignoreExtraEvents'); + const buf = entities.events.get(spec.client); + // Not treated as an empty list: a client that never subscribed and a + // client that saw nothing are the same thing to a comparison and very + // different things to a runner, and the second one is a runner bug + // that would quietly pass the 23 empty-list cases. + if (!buf) fail(`events ${spec.client}`, 'the client entity is not observing command events'); + const expected = spec.events || []; + if (expected.length !== buf.length) { + fail(`events ${spec.client}`, `expected ${expected.length} events, observed ${buf.length}` + + ` [${buf.map((e) => `${e.kind}:${e.ev.commandName}`).join(', ')}]`); + } + expected.forEach((e, i) => matchEvent(e, buf[i], entities, `events ${spec.client}[${i}]`)); + } +} + +function matchEvent(expected, actual, entities, pathStr) { + const [name, body] = Object.entries(expected)[0]; + if (!(name in COMMAND_EVENTS)) throw new Unsupported(`event ${name}`); + const kind = name.replace(/Event$/, ''); + if (actual.kind !== kind) fail(pathStr, `expected ${kind}, got ${actual.kind} of ${actual.ev.commandName}`); + for (const [k, v] of Object.entries(body || {})) { + switch (k) { + case 'command': + case 'reply': + match(v, actual.ev[k], entities, `${pathStr}.${k}`, true); + break; + case 'commandName': + case 'databaseName': + match(v, actual.ev[k], entities, `${pathStr}.${k}`, false); + break; + default: + throw new Unsupported(`event assertion ${name}.${k}`); + } + } +} + async function verifyOutcome(outcome, entities) { if (!outcome) return; for (const spec of outcome) { @@ -649,6 +702,7 @@ async function runFile(file, url, server) { const entities = await buildEntities(url, doc.createEntities, clients, events); for (const op of test.operations) await runOne(op, entities); disableEvents(events); + verifyEvents(test.expectEvents, entities); await verifyOutcome(test.outcome, entities); }, CASE_TIMEOUT_MS, `case exceeded ${CASE_TIMEOUT_MS} ms`); out.pass++; diff --git a/tests/spec/scorecard.txt b/tests/spec/scorecard.txt index 1973557..4ef782b 100644 --- a/tests/spec/scorecard.txt +++ b/tests/spec/scorecard.txt @@ -13,7 +13,7 @@ # semantics; ignoring them makes some cases pass that a full runner would # fail, so treat `pass` as an upper bound until M1 wires events up. -total 193 pass 99 fail 195 skip 175 files 0 errored +total 159 pass 133 fail 195 skip 175 files 0 errored # per-file: name pass fail skip aggregate-allowdiskuse.json 3 0 0 @@ -25,40 +25,40 @@ aggregate-out-readConcern.json 0 0 4 aggregate-out.json 0 2 0 aggregate-rawdata.json 1 0 1 aggregate-write-readPreference.json 0 0 4 -aggregate.json 5 0 2 +aggregate.json 4 1 2 bulkWrite-arrayFilters.json 0 3 0 bulkWrite-collation.json 0 2 0 bulkWrite-comment.json 2 0 1 bulkWrite-delete-hint-serverError.json 0 0 2 bulkWrite-delete-hint.json 2 0 0 -bulkWrite-deleteMany-hint-unacknowledged.json 2 0 2 +bulkWrite-deleteMany-hint-unacknowledged.json 0 2 2 bulkWrite-deleteMany-let.json 0 1 1 bulkWrite-deleteMany-rawdata.json 1 0 1 -bulkWrite-deleteOne-hint-unacknowledged.json 2 0 2 +bulkWrite-deleteOne-hint-unacknowledged.json 0 2 2 bulkWrite-deleteOne-let.json 0 1 1 bulkWrite-deleteOne-rawdata.json 1 0 1 bulkWrite-errorResponse.json 0 0 1 bulkWrite-insertOne-dots_and_dollars.json 3 1 1 bulkWrite-replaceOne-dots_and_dollars.json 2 1 1 -bulkWrite-replaceOne-hint-unacknowledged.json 2 0 0 +bulkWrite-replaceOne-hint-unacknowledged.json 0 2 0 bulkWrite-replaceOne-let.json 0 1 1 bulkWrite-replaceOne-rawdata.json 1 0 1 -bulkWrite-replaceOne-sort.json 1 0 1 +bulkWrite-replaceOne-sort.json 0 1 1 bulkWrite-update-hint.json 3 0 0 bulkWrite-update-validation.json 3 0 0 bulkWrite-updateMany-dots_and_dollars.json 0 0 4 -bulkWrite-updateMany-hint-unacknowledged.json 2 0 0 +bulkWrite-updateMany-hint-unacknowledged.json 0 2 0 bulkWrite-updateMany-let.json 0 1 1 bulkWrite-updateMany-pipeline.json 0 1 0 bulkWrite-updateMany-rawdata.json 0 1 1 bulkWrite-updateOne-dots_and_dollars.json 0 0 4 -bulkWrite-updateOne-hint-unacknowledged.json 2 0 0 +bulkWrite-updateOne-hint-unacknowledged.json 0 2 0 bulkWrite-updateOne-let.json 0 1 1 bulkWrite-updateOne-pipeline.json 0 1 0 bulkWrite-updateOne-rawdata.json 0 1 1 -bulkWrite-updateOne-sort.json 1 0 1 +bulkWrite-updateOne-sort.json 0 1 1 bulkWrite.json 10 0 0 -bypassDocumentValidation.json 8 1 0 +bypassDocumentValidation.json 4 5 0 client-bulkWrite-delete-options.json 0 0 2 client-bulkWrite-delete-rawdata.json 0 0 2 client-bulkWrite-errorResponse.json 0 0 1 @@ -88,7 +88,7 @@ db-aggregate.json 0 2 0 deleteMany-collation.json 0 1 0 deleteMany-comment.json 2 0 1 deleteMany-hint-serverError.json 0 0 2 -deleteMany-hint-unacknowledged.json 2 0 2 +deleteMany-hint-unacknowledged.json 0 2 2 deleteMany-hint.json 2 0 0 deleteMany-let.json 0 1 1 deleteMany-rawdata.json 1 0 1 @@ -97,7 +97,7 @@ deleteOne-collation.json 0 1 0 deleteOne-comment.json 2 0 1 deleteOne-errorResponse.json 0 0 1 deleteOne-hint-serverError.json 0 0 2 -deleteOne-hint-unacknowledged.json 2 0 2 +deleteOne-hint-unacknowledged.json 0 2 2 deleteOne-hint.json 2 0 0 deleteOne-let.json 0 1 1 deleteOne-rawdata.json 1 0 1 @@ -109,15 +109,15 @@ distinct-rawdata.json 0 1 1 distinct.json 0 2 0 estimatedDocumentCount-comment.json 1 1 1 estimatedDocumentCount-rawdata.json 1 0 1 -estimatedDocumentCount.json 3 1 2 +estimatedDocumentCount.json 2 2 2 find-allowdiskuse-serverError.json 0 0 2 find-allowdiskuse.json 3 0 0 find-collation.json 0 1 0 -find-comment.json 1 2 2 +find-comment.json 0 3 2 find-let.json 0 1 1 find-rawdata.json 1 0 1 find.json 5 0 0 -findOne.json 2 0 0 +findOne.json 1 1 0 findOneAndDelete-collation.json 0 1 0 findOneAndDelete-comment.json 2 0 1 findOneAndDelete-hint-serverError.json 0 0 2 @@ -153,25 +153,25 @@ insertMany-dots_and_dollars.json 3 1 1 insertMany-rawdata.json 1 0 1 insertMany.json 3 0 0 insertOne-comment.json 2 0 1 -insertOne-dots_and_dollars.json 6 2 1 +insertOne-dots_and_dollars.json 5 3 1 insertOne-errorResponse.json 0 0 1 insertOne-rawdata.json 1 0 1 insertOne.json 1 0 0 replaceOne-collation.json 0 1 0 replaceOne-comment.json 2 0 1 -replaceOne-dots_and_dollars.json 3 1 1 -replaceOne-hint-unacknowledged.json 2 0 0 +replaceOne-dots_and_dollars.json 2 2 1 +replaceOne-hint-unacknowledged.json 0 2 0 replaceOne-hint.json 2 0 0 replaceOne-let.json 0 1 1 replaceOne-rawdata.json 1 0 1 -replaceOne-sort.json 1 0 1 +replaceOne-sort.json 0 1 1 replaceOne-validation.json 1 0 0 replaceOne.json 5 0 0 updateMany-arrayFilters.json 0 3 0 updateMany-collation.json 0 1 0 updateMany-comment.json 2 0 1 updateMany-dots_and_dollars.json 0 0 4 -updateMany-hint-unacknowledged.json 2 0 0 +updateMany-hint-unacknowledged.json 0 2 0 updateMany-hint.json 2 0 0 updateMany-let.json 0 1 1 updateMany-pipeline.json 0 1 0 @@ -183,12 +183,12 @@ updateOne-collation.json 0 1 0 updateOne-comment.json 2 0 1 updateOne-dots_and_dollars.json 0 0 4 updateOne-errorResponse.json 0 0 1 -updateOne-hint-unacknowledged.json 2 0 0 +updateOne-hint-unacknowledged.json 0 2 0 updateOne-hint.json 2 0 0 updateOne-let.json 0 1 1 updateOne-pipeline.json 0 1 0 updateOne-rawdata.json 1 0 1 -updateOne-sort.json 1 0 1 +updateOne-sort.json 0 1 1 updateOne-validation.json 1 0 0 updateOne.json 4 0 0 @@ -210,6 +210,7 @@ aggregate-out.json FAIL Aggregate with $out and batch size of 0 MongoServerError aggregate-rawdata.json SKIP Aggregate with rawData option needs server >= 8.2.0 aggregate-write-readPreference.json SKIP * needs topology replicaset/sharded/load-balanced aggregate.json SKIP aggregate with a document comment - pre 4.4 needs server <= 4.2.99 +aggregate.json FAIL aggregate with comment sets comment on getMore events client0[1].command.comment: missing from actual aggregate.json SKIP aggregate with comment does not set comment on getMore - pre 4.4 needs server <= 4.3.99 bulkWrite-arrayFilters.json FAIL BulkWrite updateOne with arrayFilters outcome crud-tests.test[0].y: expected an array, got {"$[i]":{"b":2}} bulkWrite-arrayFilters.json FAIL BulkWrite updateMany with arrayFilters outcome crud-tests.test[0].y: expected an array, got {"$[i]":{"b":2}} @@ -220,11 +221,15 @@ bulkWrite-comment.json SKIP BulkWrite with comment - pre 4.4 needs server <= 4.2 bulkWrite-delete-hint-serverError.json SKIP * needs server <= 4.3.3 bulkWrite-deleteMany-hint-unacknowledged.json SKIP Unacknowledged deleteMany with hint string fails with client-side error on pre-4.4 server needs server <= 4.2.99 bulkWrite-deleteMany-hint-unacknowledged.json SKIP Unacknowledged deleteMany with hint document fails with client-side error on pre-4.4 server needs server <= 4.2.99 +bulkWrite-deleteMany-hint-unacknowledged.json FAIL Unacknowledged deleteMany with hint string on 4.4+ server events client0[0].command.writeConcern: missing from actual +bulkWrite-deleteMany-hint-unacknowledged.json FAIL Unacknowledged deleteMany with hint document on 4.4+ server events client0[0].command.writeConcern: missing from actual bulkWrite-deleteMany-let.json SKIP BulkWrite deleteMany with let option needs server >= 5.0 bulkWrite-deleteMany-let.json FAIL BulkWrite deleteMany with let option unsupported (server-side error) bulkWrite: expected an error, the operation succeeded bulkWrite-deleteMany-rawdata.json SKIP BulkWrite deleteMany with rawData option needs server >= 8.2.0 bulkWrite-deleteOne-hint-unacknowledged.json SKIP Unacknowledged deleteOne with hint string fails with client-side error on pre-4.4 server needs server <= 4.2.99 bulkWrite-deleteOne-hint-unacknowledged.json SKIP Unacknowledged deleteOne with hint document fails with client-side error on pre-4.4 server needs server <= 4.2.99 +bulkWrite-deleteOne-hint-unacknowledged.json FAIL Unacknowledged deleteOne with hint string on 4.4+ server events client0[0].command.writeConcern: missing from actual +bulkWrite-deleteOne-hint-unacknowledged.json FAIL Unacknowledged deleteOne with hint document on 4.4+ server events client0[0].command.writeConcern: missing from actual bulkWrite-deleteOne-let.json SKIP BulkWrite deleteOne with let option needs server >= 5.0 bulkWrite-deleteOne-let.json FAIL BulkWrite deleteOne with let option unsupported (server-side error) bulkWrite: expected an error, the operation succeeded bulkWrite-deleteOne-rawdata.json SKIP BulkWrite deleteOne with rawData option needs server >= 8.2.0 @@ -233,14 +238,19 @@ bulkWrite-insertOne-dots_and_dollars.json SKIP Inserting document with top-level bulkWrite-insertOne-dots_and_dollars.json FAIL Inserting document with top-level dollar-prefixed key on pre-5.0 server yields server-side error bulkWrite: expected an error, the operation succeeded bulkWrite-replaceOne-dots_and_dollars.json SKIP Replacing document with dollar-prefixed key in embedded doc on 5.0+ server needs server >= 5.0 bulkWrite-replaceOne-dots_and_dollars.json FAIL Replacing document with dollar-prefixed key in embedded doc on pre-5.0 server yields server-side error bulkWrite: expected an error, the operation succeeded +bulkWrite-replaceOne-hint-unacknowledged.json FAIL Unacknowledged replaceOne with hint string on 4.2+ server events client0[0].command.writeConcern: missing from actual +bulkWrite-replaceOne-hint-unacknowledged.json FAIL Unacknowledged replaceOne with hint document on 4.2+ server events client0[0].command.writeConcern: missing from actual bulkWrite-replaceOne-let.json SKIP BulkWrite replaceOne with let option needs server >= 5.0 bulkWrite-replaceOne-let.json FAIL BulkWrite replaceOne with let option unsupported (server-side error) bulkWrite: expected an error, the operation succeeded bulkWrite-replaceOne-rawdata.json SKIP BulkWrite replaceOne with rawData option needs server >= 8.2.0 bulkWrite-replaceOne-sort.json SKIP BulkWrite replaceOne with sort option needs server >= 8.0 +bulkWrite-replaceOne-sort.json FAIL BulkWrite replaceOne with sort option unsupported (server-side error) events client0[0].command.updates[0].sort._id: missing from actual bulkWrite-updateMany-dots_and_dollars.json SKIP Updating document to set top-level dollar-prefixed key on 5.0+ server needs server >= 5.0 bulkWrite-updateMany-dots_and_dollars.json SKIP Updating document to set top-level dotted key on 5.0+ server needs server >= 5.0 bulkWrite-updateMany-dots_and_dollars.json SKIP Updating document to set dollar-prefixed key in embedded doc on 5.0+ server needs server >= 5.0 bulkWrite-updateMany-dots_and_dollars.json SKIP Updating document to set dotted key in embedded doc on 5.0+ server needs server >= 5.0 +bulkWrite-updateMany-hint-unacknowledged.json FAIL Unacknowledged updateMany with hint string on 4.2+ server events client0[0].command.writeConcern: missing from actual +bulkWrite-updateMany-hint-unacknowledged.json FAIL Unacknowledged updateMany with hint document on 4.2+ server events client0[0].command.writeConcern: missing from actual bulkWrite-updateMany-let.json SKIP BulkWrite updateMany with let option needs server >= 5.0 bulkWrite-updateMany-let.json FAIL BulkWrite updateMany with let option unsupported (server-side error) bulkWrite: error message "update spec requires u" does not contain "'update.let' is an unknown field" bulkWrite-updateMany-pipeline.json FAIL UpdateMany in bulk write using pipelines MongoBulkWriteError: update spec requires u @@ -250,13 +260,20 @@ bulkWrite-updateOne-dots_and_dollars.json SKIP Updating document to set top-leve bulkWrite-updateOne-dots_and_dollars.json SKIP Updating document to set top-level dotted key on 5.0+ server needs server >= 5.0 bulkWrite-updateOne-dots_and_dollars.json SKIP Updating document to set dollar-prefixed key in embedded doc on 5.0+ server needs server >= 5.0 bulkWrite-updateOne-dots_and_dollars.json SKIP Updating document to set dotted key in embedded doc on 5.0+ server needs server >= 5.0 +bulkWrite-updateOne-hint-unacknowledged.json FAIL Unacknowledged updateOne with hint string on 4.2+ server events client0[0].command.writeConcern: missing from actual +bulkWrite-updateOne-hint-unacknowledged.json FAIL Unacknowledged updateOne with hint document on 4.2+ server events client0[0].command.writeConcern: missing from actual bulkWrite-updateOne-let.json SKIP BulkWrite updateOne with let option needs server >= 5.0 bulkWrite-updateOne-let.json FAIL BulkWrite updateOne with let option unsupported (server-side error) bulkWrite: error message "update spec requires u" does not contain "'update.let' is an unknown field" bulkWrite-updateOne-pipeline.json FAIL UpdateOne in bulk write using pipelines MongoBulkWriteError: update spec requires u bulkWrite-updateOne-rawdata.json SKIP BulkWrite updateOne with rawData option needs server >= 8.2.0 bulkWrite-updateOne-rawdata.json FAIL BulkWrite updateOne with rawData option on less than 8.2.0 - ignore argument MongoBulkWriteError: update spec requires u bulkWrite-updateOne-sort.json SKIP BulkWrite updateOne with sort option needs server >= 8.0 +bulkWrite-updateOne-sort.json FAIL BulkWrite updateOne with sort option unsupported (server-side error) events client0[0].command.updates[0].sort._id: missing from actual bypassDocumentValidation.json FAIL Aggregate with $out passes bypassDocumentValidation: false MongoServerError: Unrecognized pipeline stage name: '$out' +bypassDocumentValidation.json FAIL BulkWrite passes bypassDocumentValidation: false events client0[0].command.bypassDocumentValidation: missing from actual +bypassDocumentValidation.json FAIL FindOneAndReplace passes bypassDocumentValidation: false events client0[0].command.bypassDocumentValidation: missing from actual +bypassDocumentValidation.json FAIL FindOneAndUpdate passes bypassDocumentValidation: false events client0[0].command.bypassDocumentValidation: missing from actual +bypassDocumentValidation.json FAIL InsertMany passes bypassDocumentValidation: false events client0[0].command.bypassDocumentValidation: missing from actual client-bulkWrite-delete-options.json SKIP * needs server >= 8.0 client-bulkWrite-delete-rawdata.json SKIP client bulk write delete with rawData option needs server >= 8.2.0 client-bulkWrite-delete-rawdata.json SKIP client bulk write delete with rawData option on less than 8.2.0 - ignore argument needs server >= 8.0 @@ -304,6 +321,8 @@ deleteMany-comment.json SKIP deleteMany with comment - pre 4.4 needs server <= 4 deleteMany-hint-serverError.json SKIP * needs server <= 4.3.3 deleteMany-hint-unacknowledged.json SKIP Unacknowledged deleteMany with hint string fails with client-side error on pre-4.4 server needs server <= 4.2.99 deleteMany-hint-unacknowledged.json SKIP Unacknowledged deleteMany with hint document fails with client-side error on pre-4.4 server needs server <= 4.2.99 +deleteMany-hint-unacknowledged.json FAIL Unacknowledged deleteMany with hint string on 4.4+ server events client0[0].command.writeConcern: missing from actual +deleteMany-hint-unacknowledged.json FAIL Unacknowledged deleteMany with hint document on 4.4+ server events client0[0].command.writeConcern: missing from actual deleteMany-let.json SKIP deleteMany with let option needs server >= 5.0 deleteMany-let.json FAIL deleteMany with let option unsupported (server-side error) deleteMany: expected an error, the operation succeeded deleteMany-rawdata.json SKIP deleteMany with rawData option needs server >= 8.2.0 @@ -313,6 +332,8 @@ deleteOne-errorResponse.json SKIP delete operations support errorResponse assert deleteOne-hint-serverError.json SKIP * needs server <= 4.3.3 deleteOne-hint-unacknowledged.json SKIP Unacknowledged deleteOne with hint string fails with client-side error on pre-4.4 server needs server <= 4.2.99 deleteOne-hint-unacknowledged.json SKIP Unacknowledged deleteOne with hint document fails with client-side error on pre-4.4 server needs server <= 4.2.99 +deleteOne-hint-unacknowledged.json FAIL Unacknowledged deleteOne with hint string on 4.4+ server events client0[0].command.writeConcern: missing from actual +deleteOne-hint-unacknowledged.json FAIL Unacknowledged deleteOne with hint document on 4.4+ server events client0[0].command.writeConcern: missing from actual deleteOne-let.json SKIP deleteOne with let option needs server >= 5.0 deleteOne-let.json FAIL deleteOne with let option unsupported (server-side error) deleteOne: expected an error, the operation succeeded deleteOne-rawdata.json SKIP deleteOne with rawData option needs server >= 8.2.0 @@ -327,6 +348,7 @@ distinct.json FAIL Distinct with a filter MongoServerError: no such command: 'di estimatedDocumentCount-comment.json SKIP estimatedDocumentCount with document comment needs server >= 4.4.14 estimatedDocumentCount-comment.json FAIL estimatedDocumentCount with document comment - pre 4.4.14, server error estimatedDocumentCount: expected an error, the operation succeeded estimatedDocumentCount-rawdata.json SKIP Estimated document count with rawData option needs server >= 8.2.0 +estimatedDocumentCount.json FAIL estimatedDocumentCount with maxTimeMS events client0[0].command.maxTimeMS: expected 6000, got 10000 estimatedDocumentCount.json SKIP estimatedDocumentCount errors correctly--command error runner: failPoint estimatedDocumentCount.json SKIP estimatedDocumentCount errors correctly--socket error runner: failPoint estimatedDocumentCount.json FAIL estimatedDocumentCount works correctly on views estimatedDocumentCount: expected 2, got 0 @@ -335,10 +357,12 @@ find-collation.json FAIL Find with a collation find: expected 1 elements, got 0 find-comment.json FAIL find with string comment find[0]: unexpected extra keys ["x"] find-comment.json FAIL find with document comment find[0]: unexpected extra keys ["x"] find-comment.json SKIP find with document comment - pre 4.4 needs server <= 4.2.99 +find-comment.json FAIL find with comment sets comment on getMore events client0[1].command.comment: missing from actual find-comment.json SKIP find with comment does not set comment on getMore - pre 4.4 needs server <= 4.3.99 find-let.json SKIP Find with let option needs server >= 5.0 find-let.json FAIL Find with let option unsupported (server-side error) find: expected an error, the operation succeeded find-rawdata.json SKIP Find with rawData option needs server >= 8.2.0 +findOne.json FAIL FindOne with filter, sort, and skip events client0[0].command.sort._id: missing from actual findOneAndDelete-collation.json FAIL FindOneAndDelete when one document matches with collation findOneAndDelete: expected a document, got null findOneAndDelete-comment.json SKIP findOneAndDelete with comment - pre 4.4 needs server <= 4.2.99 findOneAndDelete-hint-serverError.json SKIP * needs server <= 4.3.3 @@ -399,16 +423,21 @@ insertOne-comment.json SKIP insertOne with comment - pre 4.4 needs server <= 4.2 insertOne-dots_and_dollars.json SKIP Inserting document with top-level dollar-prefixed key on 5.0+ server needs server >= 5.0 insertOne-dots_and_dollars.json FAIL Inserting document with top-level dollar-prefixed key on pre-5.0 server yields server-side error insertOne: expected an error, the operation succeeded insertOne-dots_and_dollars.json FAIL Inserting document with dollar-prefixed key in _id yields server-side error insertOne: expected an error, the operation succeeded +insertOne-dots_and_dollars.json FAIL Unacknowledged write using dollar-prefixed or dotted keys may be silently rejected on pre-5.0 server events client0[0].command.writeConcern: missing from actual insertOne-errorResponse.json SKIP insert operations support errorResponse assertions runner: failPoint insertOne-rawdata.json SKIP insertOne with rawData option needs server >= 8.2.0 replaceOne-collation.json FAIL ReplaceOne when one document matches with collation replaceOne.matchedCount: expected 1, got 0 replaceOne-comment.json SKIP ReplaceOne with comment - pre 4.4 needs server <= 4.2.99 replaceOne-dots_and_dollars.json SKIP Replacing document with dollar-prefixed key in embedded doc on 5.0+ server needs server >= 5.0 replaceOne-dots_and_dollars.json FAIL Replacing document with dollar-prefixed key in embedded doc on pre-5.0 server yields server-side error replaceOne: expected an error, the operation succeeded +replaceOne-dots_and_dollars.json FAIL Unacknowledged write using dollar-prefixed or dotted keys may be silently rejected on pre-5.0 server events client0[0].command.writeConcern: missing from actual +replaceOne-hint-unacknowledged.json FAIL Unacknowledged replaceOne with hint string on 4.2+ server events client0[0].command.writeConcern: missing from actual +replaceOne-hint-unacknowledged.json FAIL Unacknowledged replaceOne with hint document on 4.2+ server events client0[0].command.writeConcern: missing from actual replaceOne-let.json SKIP ReplaceOne with let option needs server >= 5.0 replaceOne-let.json FAIL ReplaceOne with let option unsupported (server-side error) replaceOne: expected an error, the operation succeeded replaceOne-rawdata.json SKIP ReplaceOne with rawData option needs server >= 8.2.0 replaceOne-sort.json SKIP ReplaceOne with sort option needs server >= 8.0 +replaceOne-sort.json FAIL replaceOne with sort option unsupported (server-side error) events client0[0].command.updates[0].sort._id: missing from actual updateMany-arrayFilters.json FAIL UpdateMany when no documents match arrayFilters updateMany.modifiedCount: expected 0, got 2 updateMany-arrayFilters.json FAIL UpdateMany when one document matches arrayFilters updateMany.modifiedCount: expected 1, got 2 updateMany-arrayFilters.json FAIL UpdateMany when multiple documents match arrayFilters outcome crud-v1.coll[0].y: expected an array, got {"$[i]":{"b":2}} @@ -418,6 +447,8 @@ updateMany-dots_and_dollars.json SKIP Updating document to set top-level dollar- updateMany-dots_and_dollars.json SKIP Updating document to set top-level dotted key on 5.0+ server needs server >= 5.0 updateMany-dots_and_dollars.json SKIP Updating document to set dollar-prefixed key in embedded doc on 5.0+ server needs server >= 5.0 updateMany-dots_and_dollars.json SKIP Updating document to set dotted key in embedded doc on 5.0+ server needs server >= 5.0 +updateMany-hint-unacknowledged.json FAIL Unacknowledged updateMany with hint string on 4.2+ server events client0[0].command.writeConcern: missing from actual +updateMany-hint-unacknowledged.json FAIL Unacknowledged updateMany with hint document on 4.2+ server events client0[0].command.writeConcern: missing from actual updateMany-let.json SKIP updateMany with let option needs server >= 5.0 updateMany-let.json FAIL updateMany with let option unsupported (server-side error) updateMany: error message "update spec requires u" does not contain "'update.let' is an unknown field" updateMany-pipeline.json FAIL UpdateMany using pipelines MongoServerError: update spec requires u @@ -434,8 +465,11 @@ updateOne-dots_and_dollars.json SKIP Updating document to set top-level dotted k updateOne-dots_and_dollars.json SKIP Updating document to set dollar-prefixed key in embedded doc on 5.0+ server needs server >= 5.0 updateOne-dots_and_dollars.json SKIP Updating document to set dotted key in embedded doc on 5.0+ server needs server >= 5.0 updateOne-errorResponse.json SKIP update operations support errorResponse assertions runner: failPoint +updateOne-hint-unacknowledged.json FAIL Unacknowledged updateOne with hint string on 4.2+ server events client0[0].command.writeConcern: missing from actual +updateOne-hint-unacknowledged.json FAIL Unacknowledged updateOne with hint document on 4.2+ server events client0[0].command.writeConcern: missing from actual updateOne-let.json SKIP UpdateOne with let option needs server >= 5.0 updateOne-let.json FAIL UpdateOne with let option unsupported (server-side error) updateOne: error message "update spec requires u" does not contain "'update.let' is an unknown field" updateOne-pipeline.json FAIL UpdateOne using pipelines MongoServerError: update spec requires u updateOne-rawdata.json SKIP UpdateOne with rawData option needs server >= 8.2.0 updateOne-sort.json SKIP UpdateOne with sort option needs server >= 8.0 +updateOne-sort.json FAIL updateOne with sort option unsupported (server-side error) events client0[0].command.updates[0].sort._id: missing from actual