Files
mongo/jstests/core/query/invalid_db_name.js
Daniel Gómez Ferro 32dc61396b SERVER-91862 Validate DB name before writing to config.databases (#24414)
GitOrigin-RevId: 2251c50cc4f991e8788f6bba0194296cca2e7112
2024-07-10 15:58:48 +00:00

63 lines
2.0 KiB
JavaScript

// Ensures that invalid DB names are reported as write errors
//
// Can't create a collection with invalid database name
// @tags: [
// assumes_no_implicit_collection_creation_on_get_collection
// ]
import {FixtureHelpers} from "jstests/libs/fixture_helpers.js";
function testInvalidDBName(invalidName) {
const isMongos = FixtureHelpers.isMongos(db);
const errMsg = `'${invalidName}' database with invalid name was created`;
let invalidDB = db.getSiblingDB("NonExistentDB");
// This is a hack to bypass invalid database name checking by the DB constructor
invalidDB._name = invalidName;
function validateState() {
// Ensure that no database was created
var dbList = db.getSiblingDB('admin').runCommand({listDatabases: 1}).databases;
dbList.forEach(function(dbInfo) {
assert.neq(invalidName, dbInfo.name, errMsg);
});
// On sharding ensure no entry was added to config.databases
if (isMongos) {
assert.eq(
db.getSiblingDB('config').databases.countDocuments({_id: invalidName}), 0, errMsg);
}
}
function testCommandFailsAndValidate(command) {
assert.commandFailedWithCode(command(), ErrorCodes.InvalidNamespace, errMsg);
validateState();
}
function testWriteErrorAndValidate(command) {
assert.writeError(command(), errMsg);
validateState();
}
testWriteErrorAndValidate(() => {
return invalidDB.test.insert({x: 1});
});
testCommandFailsAndValidate(() => {
return invalidDB.createCollection("test");
});
testCommandFailsAndValidate(() => {
return invalidDB.createView("a", "b", [{$match: {year: 1}}]);
});
if (isMongos) {
testCommandFailsAndValidate(() => {
return sh.shardCollection(invalidName + ".test", {a: 1});
});
testCommandFailsAndValidate(() => {
return sh.enableSharding(invalidName);
});
}
}
testInvalidDBName("Invalid DB Name");
testInvalidDBName("$invalidDBName");