74 lines
2.8 KiB
JavaScript
74 lines
2.8 KiB
JavaScript
load("jstests/readonly/lib/read_only_test.js");
|
|
|
|
runReadOnlyTest(function() {
|
|
'use strict';
|
|
return {
|
|
name: 'catalog_ops',
|
|
|
|
collectionNames: ["foo", "bar", "baz", "garply"],
|
|
indexSpecs: [{a: 1}, {a: 1, b: -1}, {a: 1, b: 1, c: -1}],
|
|
|
|
load: function(writableCollection) {
|
|
|
|
// Catalog guarantees are neccessarily weaker in sharded systems since mongos is not
|
|
// read-only aware.
|
|
if (TestData.fixture === "sharded")
|
|
return;
|
|
|
|
var db = writableCollection.getDB();
|
|
|
|
// Create some collections so we can verify that listCollections works in read-only
|
|
// mode.
|
|
for (var collectionName of this.collectionNames) {
|
|
assert.commandWorked(db.runCommand({create: collectionName}));
|
|
}
|
|
|
|
// Create some indexes so we can verify that listIndexes works in read-only mode.
|
|
for (var indexSpec of this.indexSpecs) {
|
|
assert.commandWorked(writableCollection.createIndex(indexSpec));
|
|
}
|
|
},
|
|
exec: function(readableCollection) {
|
|
|
|
// Catalog guarantees are neccessarily weaker in sharded systems since mongos is not
|
|
// read-only aware.
|
|
if (TestData.fixture === "sharded")
|
|
return;
|
|
|
|
// Check that we can read our collections out.
|
|
var db = readableCollection.getDB();
|
|
var collections = db.getCollectionNames(); // runs listCollections internally.
|
|
for (var collectionName of this.collectionNames) {
|
|
assert.contains(collectionName,
|
|
collections,
|
|
"expected to have a collection '" + collectionName +
|
|
"' in the output of listCollections, which was " +
|
|
tojson(collections));
|
|
}
|
|
assert.gte(collections.length, this.collectionNames.length);
|
|
|
|
// Check that create fails.
|
|
assert.commandFailed(db.runCommand({create: "quux"}));
|
|
|
|
// Check that drop fails.
|
|
assert.commandFailed(db.runCommand({drop: "foo"}));
|
|
|
|
// Check that dropDatabase fails.
|
|
assert.commandFailed(db.runCommand({dropDatabase: 1}));
|
|
|
|
// Check that we can read our indexes out.
|
|
var indexes = readableCollection.getIndexes();
|
|
var actualIndexes = indexes.map((fullSpec) => {
|
|
return fullSpec.key;
|
|
});
|
|
var expectedIndexes = Array.concat([{_id: 1}], this.indexSpecs);
|
|
|
|
assert.docEq(actualIndexes, expectedIndexes);
|
|
|
|
// Check that createIndexes fails.
|
|
assert.commandFailed(
|
|
db.runCommand({createIndexes: this.name, indexes: [{key: {d: 1}, name: "foo"}]}));
|
|
}
|
|
};
|
|
}());
|