mirror of
https://github.com/mongodb/mongo.git
synced 2024-12-01 01:21:03 +01:00
51 lines
2.0 KiB
JavaScript
51 lines
2.0 KiB
JavaScript
(function() {
|
|
// Test applyOps behavior for collection creation with explicit UUIDs.
|
|
"use strict";
|
|
|
|
const replTest = new ReplSetTest({nodes: 1});
|
|
replTest.startSet();
|
|
replTest.initiate();
|
|
|
|
const db = replTest.getPrimary().getDB('test');
|
|
|
|
const uuid = UUID();
|
|
// Two applyOps to create a foo collection with given uuid, one each for 'test' and 'test2' dbs.
|
|
var ops = (uuid => ["test", "test2"].map(db => {
|
|
return {op: "c", ns: db + ".$cmd", ui: uuid, o: {create: "foo"}};
|
|
}))(uuid);
|
|
|
|
function checkUUID(coll, uuid) {
|
|
const cmd = {listCollections: 1, filter: {name: coll}};
|
|
const res = assert.commandWorked(db.runCommand(cmd), tojson(cmd));
|
|
assert.eq(res.cursor.firstBatch[0].info.uuid,
|
|
uuid,
|
|
tojson(cmd) + " did not return expected uuid: " + tojson(res));
|
|
}
|
|
|
|
jsTestLog("Create a test.foo collection with uuid " + uuid + " through applyOps.");
|
|
let cmd = {applyOps: [ops[0]]};
|
|
let res = assert.commandWorked(db.runCommand(cmd), tojson(cmd));
|
|
|
|
// Check that test.foo has the expected UUID.
|
|
jsTestLog("Check that test.foo has UUID " + uuid);
|
|
checkUUID("foo", uuid);
|
|
|
|
// Change the ops to refer to bar, instead of foo. Command should still work, renaming the
|
|
// collection. Second command should fail as it tries to associate the "test2.foo" name with
|
|
// an existing collection in the "test" database. This must fail.
|
|
jsTestLog("Create test.bar and try to create test2.foo collections with the same UUID.");
|
|
ops[0].o.create = "bar";
|
|
res = assert.commandFailed(db.runCommand({applyOps: ops}));
|
|
assert.eq(res.results,
|
|
[true, false],
|
|
"expected first operation " + tojson(ops[0]) + " to succeed, and second operation " +
|
|
tojson(ops[1]) + " to fail, got " + tojson(res));
|
|
|
|
jsTestLog("Check that test.bar has UUID " + uuid);
|
|
checkUUID("bar", uuid);
|
|
jsTestLog("Check that test.foo no longer exists");
|
|
assert.eq(
|
|
db.getCollectionInfos({name: "foo"}).length, 0, "expected foo collection to no longer exist");
|
|
replTest.stopSet();
|
|
}());
|