Files
mongo/jstests/core/repair_database_input_validation.js
2016-11-21 09:54:39 -05:00

54 lines
2.0 KiB
JavaScript

/**
* This tests checks that repair database validates the database exists before executing the
* repair. Particularly when a command is issued on a different casing than a database that does
* exist.
* 1.) Drop "repairDB", "repairdb" and "nonExistantDb" database.
* 2.) Create "repairDB" by inserting a document.
* 3.) Repair "repairdb", expect an input validation error.
* 4.) Repair "nonExistantDb", expect an OK.
* 5.) Using "listDatabases" verify only "repairDB" exists.
*/
(function() {
"use strict";
// 1. Drop databases.
var casing1db = db.getSisterDB("repair_database_input_validation_REPAIRDB");
casing1db.dropDatabase();
var casing2db = db.getSisterDB("repair_database_input_validation_repairdb");
casing2db.dropDatabase();
var nonExistentDb = db.getSisterDB("repair_database_input_validation_nonExistentDb");
nonExistentDb.dropDatabase();
// 2. Create "repairDB".
casing1db.a.insert({_id: 1, a: "hello world"});
var foundDoc = casing1db.a.findOne();
assert.neq(null, foundDoc);
assert.eq(1, foundDoc._id);
// 3. Repair "repairdb", verify error.
var res1 = casing2db.repairDatabase();
assert.eq(0, res1["ok"]);
assert.eq(
true,
res1["errmsg"].indexOf(
"Database exists with a different case. Given: `repair_database_input_validation_repairdb` Found: `repair_database_input_validation_REPAIRDB`") >
-1,
tojson(res1));
// 4. Repair "nonExistentDb", verify error.
assert.commandWorked(nonExistentDb.repairDatabase());
// 5. Verify only "repairDB" exists.
var dbNames = db.getMongo().getDBNames();
assert.contains(
"repair_database_input_validation_REPAIRDB", dbNames, "Should contain REPAIRDB");
assert.eq(false, dbNames.some(function(x) {
return x == "repair_database_input_validation_repairdb";
}));
assert.eq(false, dbNames.some(function(x) {
return x == "repair_database_input_validation_nonExistentDb";
}));
})();