diff options
Diffstat (limited to 'jstests/readonly')
-rw-r--r-- | jstests/readonly/catalog_ops.js | 71 | ||||
-rw-r--r-- | jstests/readonly/write_ops.js (renamed from jstests/readonly/insert.js) | 9 |
2 files changed, 79 insertions, 1 deletions
diff --git a/jstests/readonly/catalog_ops.js b/jstests/readonly/catalog_ops.js new file mode 100644 index 00000000000..e41293b1d96 --- /dev/null +++ b/jstests/readonly/catalog_ops.js @@ -0,0 +1,71 @@ +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"} + ]})); + } + }; +}()); diff --git a/jstests/readonly/insert.js b/jstests/readonly/write_ops.js index 503399fd20c..bde5d231ca6 100644 --- a/jstests/readonly/insert.js +++ b/jstests/readonly/write_ops.js @@ -3,12 +3,19 @@ load("jstests/readonly/lib/read_only_test.js"); runReadOnlyTest(function() { 'use strict'; return { - name: 'insert', + name: 'write_ops', load: function(writableCollection) { assert.writeOK(writableCollection.insert({x: 1})); }, exec: function(readableCollection) { + // Test that insert fails. assert.writeError(readableCollection.insert({x: 2})); + + // Test that delete fails. + assert.writeError(readableCollection.remove({x: 1})); + + // Test that update fails. + assert.writeError(readableCollection.update({x: 1}, {$inc: {x: 1}})); } }; }()); |