mirror of https://github.com/mongodb/mongo
40 lines
1.4 KiB
JavaScript
40 lines
1.4 KiB
JavaScript
// Tests that the "failCommand" failpoint ignores commands from internal clients: SERVER-34943.
|
|
// @tags: [requires_replication]
|
|
(function() {
|
|
"use strict";
|
|
|
|
// Prevent elections.
|
|
const replTest = new ReplSetTest({nodes: [{}, {rsConfig: {votes: 0, priority: 0}}]});
|
|
replTest.startSet();
|
|
replTest.initiate();
|
|
const primary = replTest.getPrimary();
|
|
const testDB = primary.getDB("test_failcommand_ignores_internal");
|
|
|
|
// Enough documents for three getMores.
|
|
assert.commandWorked(testDB.collection.insertMany([{}, {}, {}]));
|
|
const findReply = assert.commandWorked(testDB.runCommand({find: "collection", batchSize: 0}));
|
|
const cursorId = findReply.cursor.id;
|
|
|
|
// Test failing twice with a particular error code.
|
|
assert.commandWorked(testDB.adminCommand({
|
|
configureFailPoint: "failCommand",
|
|
mode: {times: 2},
|
|
data: {errorCode: ErrorCodes.BadValue, failCommands: ["getMore"]}
|
|
}));
|
|
const getMore = {
|
|
getMore: cursorId,
|
|
collection: "collection",
|
|
batchSize: 1
|
|
};
|
|
assert.commandFailedWithCode(testDB.runCommand(getMore), ErrorCodes.BadValue);
|
|
|
|
// Waits for secondaries to do getMores on the oplog, which should be ignored by failCommand.
|
|
assert.commandWorked(testDB.collection.insertOne({}, {writeConcern: {w: 2}}));
|
|
|
|
// Second getMore fails but third succeeds, because configureFailPoint was passed {times: 2}.
|
|
assert.commandFailedWithCode(testDB.runCommand(getMore), ErrorCodes.BadValue);
|
|
assert.commandWorked(testDB.runCommand(getMore));
|
|
|
|
replTest.stopSet();
|
|
}());
|