mirror of
https://github.com/mongodb/mongo.git
synced 2024-12-01 01:21:03 +01:00
0e9564888a
Give the "NonRetryableChangeStreamError" error class a more appropriate name and propagate it to an "errorLabel" in the command response.
33 lines
1.5 KiB
JavaScript
33 lines
1.5 KiB
JavaScript
/**
|
|
* Test that an erroneous Change Stream pipeline responds with an error that includes the
|
|
* "NonResumableChangeStreamError" label.
|
|
*/
|
|
|
|
(function() {
|
|
"use strict";
|
|
|
|
load("jstests/libs/collection_drop_recreate.js"); // For assertDropAndRecreateCollection.
|
|
|
|
// Drop and recreate the collections to be used in this set of tests.
|
|
const coll = assertDropAndRecreateCollection(db, "change_stream_error_label");
|
|
|
|
// Attaching a projection to the Change Stream that filters out the resume token (stored in the
|
|
// _id field) guarantees a ChangeStreamFatalError as soon as we get the first change.
|
|
const changeStream = coll.watch([{$project: {_id: 0}}], {batchSize: 1});
|
|
assert.commandWorked(coll.insert({a: 1}));
|
|
|
|
const err = assert.throws(function() {
|
|
// Call hasNext() until it throws an error or unexpectedly returns true. We need the
|
|
// assert.soon() to keep trying here, because the above insert command isn't immediately
|
|
// observable to the change stream in sharded configurations.
|
|
assert.soon(function() {
|
|
return changeStream.hasNext();
|
|
});
|
|
});
|
|
|
|
// The hasNext() sends a getMore command, which should generate a ChangeStreamFatalError reply
|
|
// that includes the NonResumableChangeStreamError errorLabel.
|
|
assert.commandFailedWithCode(err, ErrorCodes.ChangeStreamFatalError);
|
|
assert("errorLabels" in err, err);
|
|
assert.contains("NonResumableChangeStreamError", err.errorLabels, err);
|
|
}()); |