mirror of https://github.com/mongodb/mongo
44 lines
2.0 KiB
JavaScript
44 lines
2.0 KiB
JavaScript
// Tests that running validate in read-only mode doesn't try to fix metadata
|
|
// @tags: [assumes_against_mongod_not_mongos]
|
|
|
|
import {runReadOnlyTest} from "jstests/readonly/lib/read_only_test.js";
|
|
|
|
// We skip doing the data consistency checks while terminating the cluster because we leave data in
|
|
// an inconsitent state on purpose.
|
|
TestData.skipCollectionAndIndexValidation = true;
|
|
|
|
runReadOnlyTest(
|
|
(function () {
|
|
return {
|
|
name: "validate",
|
|
load: function (writableCollection) {
|
|
const db = writableCollection.getDB();
|
|
assert.commandWorked(
|
|
db.adminCommand({configureFailPoint: "skipUpdateIndexMultikey", mode: "alwaysOn"}),
|
|
);
|
|
assert.commandWorked(writableCollection.createIndex({a: 1, b: 1}, {name: "idx"}));
|
|
assert.commandWorked(writableCollection.insert({_id: 0, a: [0, 1]}));
|
|
assert.commandWorked(db.adminCommand({configureFailPoint: "skipUpdateIndexMultikey", mode: "off"}));
|
|
},
|
|
exec: function (readableCollection) {
|
|
// Make sure we don't try to adjust multikey indices in read-only mode
|
|
const res = readableCollection.validate({full: true});
|
|
assert.eq(1, res.ok, "Expected success of validate on read-only mode");
|
|
assert.eq(false, res.valid);
|
|
assert.eq(1, res.errors.length);
|
|
|
|
const idx = res.indexDetails.idx;
|
|
assert.eq(false, idx.valid);
|
|
assert.eq(1, idx.errors.length);
|
|
|
|
// Test that validate { repair: true } fails in read-only mode.
|
|
assert.commandFailedWithCode(
|
|
readableCollection.validate({full: true, repair: true}),
|
|
ErrorCodes.InvalidOptions,
|
|
"Expected validate to fail because repairing a read-only database is not possible",
|
|
);
|
|
},
|
|
};
|
|
})(),
|
|
);
|