mirror of https://github.com/mongodb/mongo
63 lines
2.3 KiB
JavaScript
63 lines
2.3 KiB
JavaScript
// Tests that the "failCommand" failpoint ignores commands from internal clients: SERVER-34943.
|
|
import {ShardingTest} from "jstests/libs/shardingtest.js";
|
|
|
|
const st = new ShardingTest({shards: 1});
|
|
const mongosDB = st.s0.getDB("test_failcommand_ignores_internal");
|
|
|
|
// Enough documents for three getMores.
|
|
assert.commandWorked(mongosDB.collection.insertMany([{}, {}, {}]));
|
|
const findReply = assert.commandWorked(mongosDB.runCommand({find: "collection", batchSize: 0}));
|
|
const cursorId = findReply.cursor.id;
|
|
|
|
// Test failing "getMore" twice with a particular error code.
|
|
assert.commandWorked(
|
|
mongosDB.adminCommand({
|
|
configureFailPoint: "failCommand",
|
|
mode: {times: 2},
|
|
data: {errorCode: ErrorCodes.BadValue, failCommands: ["getMore"]},
|
|
}),
|
|
);
|
|
const getMore = {
|
|
getMore: cursorId,
|
|
collection: "collection",
|
|
batchSize: 1,
|
|
};
|
|
assert.commandFailedWithCode(mongosDB.runCommand(getMore), ErrorCodes.BadValue);
|
|
assert.commandFailedWithCode(mongosDB.runCommand(getMore), ErrorCodes.BadValue);
|
|
assert.commandWorked(mongosDB.runCommand(getMore));
|
|
|
|
// Setting a failpoint for "distinct" on a shard has no effect on mongos.
|
|
assert.commandWorked(
|
|
st.shard0.getDB("admin").runCommand({
|
|
configureFailPoint: "failCommand",
|
|
mode: "alwaysOn",
|
|
data: {errorCode: ErrorCodes.BadValue, failCommands: ["distinct"]},
|
|
}),
|
|
);
|
|
const distinct = {
|
|
distinct: "collection",
|
|
key: "x",
|
|
};
|
|
assert.commandFailedWithCode(
|
|
st.shard0.getDB("test_failcommand_ignores_internal").runCommand(distinct),
|
|
ErrorCodes.BadValue,
|
|
);
|
|
assert.commandWorked(mongosDB.runCommand(distinct));
|
|
assert.commandWorked(st.shard0.getDB("admin").runCommand({configureFailPoint: "failCommand", mode: "off"}));
|
|
|
|
// Setting a failpoint for "distinct" on a shard with failInternalCommands DOES affect mongos.
|
|
assert.commandWorked(
|
|
st.shard0.getDB("admin").runCommand({
|
|
configureFailPoint: "failCommand",
|
|
mode: "alwaysOn",
|
|
data: {errorCode: ErrorCodes.BadValue, failCommands: ["distinct"], failInternalCommands: true},
|
|
}),
|
|
);
|
|
assert.commandFailedWithCode(mongosDB.runCommand(distinct), ErrorCodes.BadValue);
|
|
assert.commandFailedWithCode(
|
|
st.shard0.getDB("test_failcommand_ignores_internal").runCommand(distinct),
|
|
ErrorCodes.BadValue,
|
|
);
|
|
|
|
st.stop();
|