diff options
Diffstat (limited to 'jstests/noPassthrough/views_legacy.js')
-rw-r--r-- | jstests/noPassthrough/views_legacy.js | 155 |
1 files changed, 77 insertions, 78 deletions
diff --git a/jstests/noPassthrough/views_legacy.js b/jstests/noPassthrough/views_legacy.js index c52aca93bc3..8ded34730ae 100644 --- a/jstests/noPassthrough/views_legacy.js +++ b/jstests/noPassthrough/views_legacy.js @@ -3,82 +3,81 @@ * legacy write mode. Also confirms that legacy killCursors execution is successful. */ (function() { - "use strict"; - - let conn = MongoRunner.runMongod({}); - - let viewsDB = conn.getDB("views_legacy"); - assert.commandWorked(viewsDB.dropDatabase()); - assert.commandWorked(viewsDB.createView("view", "collection", [])); - let coll = viewsDB.getCollection("collection"); - - for (let i = 0; i < 10; ++i) { - assert.writeOK(coll.insert({a: i})); - } - - conn.forceReadMode("legacy"); - conn.forceWriteMode("legacy"); - - // - // Legacy getMore is explicitly prohibited on views; you must use the getMore command. - // - let cmdRes = - viewsDB.runCommand({find: "view", filter: {a: {$gt: 0}}, sort: {a: 1}, batchSize: 0}); - assert.commandWorked(cmdRes); - let cursor = new DBCommandCursor(viewsDB, cmdRes, 2); - - let err = assert.throws(function() { - cursor.itcount(); - }, [], "Legacy getMore expected to fail on a view cursor"); - assert.eq(ErrorCodes.CommandNotSupportedOnView, err.code, tojson(err)); - - // - // Legacy killcursors is expected to work on views. - // - cmdRes = viewsDB.runCommand({find: "view", filter: {a: {$gt: 0}}, sort: {a: 1}, batchSize: 0}); - assert.commandWorked(cmdRes); - cursor = new DBCommandCursor(viewsDB, cmdRes, 2); - - // When DBCommandCursor is constructed under legacy readMode, cursor.close() will execute a - // legacy killcursors operation. - cursor.close(); - assert.gleSuccess(viewsDB, "legacy killcursors expected to work on view cursor"); - - // - // A view should reject all write CRUD operations performed in legacy write mode. - // - viewsDB.view.insert({x: 1}); - assert.gleErrorCode(viewsDB, ErrorCodes.CommandNotSupportedOnView); - - viewsDB.view.remove({x: 1}); - assert.gleErrorCode(viewsDB, ErrorCodes.CommandNotSupportedOnView); - - viewsDB.view.update({x: 1}, {x: 2}); - assert.gleErrorCode(viewsDB, ErrorCodes.CommandNotSupportedOnView); - - // - // Legacy find is explicitly prohibited on views; you must use the find command. - // - let res = assert.throws(function() { - viewsDB.view.find({x: 1}).toArray(); - }); - assert.eq(res.code, ErrorCodes.CommandNotSupportedOnView, tojson(res)); - - // Ensure that legacy getMore succeeds even when a cursor is established on a namespace whose - // database does not exist. Legacy getMore must check that the cursor is not over a view, and - // this must handle the case where the namespace is not a view by virtue of the database not - // existing. - assert.commandWorked(viewsDB.dropDatabase()); - - cmdRes = viewsDB.runCommand({find: "view", filter: {a: {$gt: 0}}, sort: {a: 1}, batchSize: 0}); - assert.commandWorked(cmdRes); - cursor = new DBCommandCursor(viewsDB, cmdRes, 2); - assert.eq(0, cursor.itcount()); - - cmdRes = viewsDB.runCommand({aggregate: "view", pipeline: [], cursor: {batchSize: 0}}); - assert.commandWorked(cmdRes); - cursor = new DBCommandCursor(viewsDB, cmdRes, 2); - assert.eq(0, cursor.itcount()); - - MongoRunner.stopMongod(conn); +"use strict"; + +let conn = MongoRunner.runMongod({}); + +let viewsDB = conn.getDB("views_legacy"); +assert.commandWorked(viewsDB.dropDatabase()); +assert.commandWorked(viewsDB.createView("view", "collection", [])); +let coll = viewsDB.getCollection("collection"); + +for (let i = 0; i < 10; ++i) { + assert.writeOK(coll.insert({a: i})); +} + +conn.forceReadMode("legacy"); +conn.forceWriteMode("legacy"); + +// +// Legacy getMore is explicitly prohibited on views; you must use the getMore command. +// +let cmdRes = viewsDB.runCommand({find: "view", filter: {a: {$gt: 0}}, sort: {a: 1}, batchSize: 0}); +assert.commandWorked(cmdRes); +let cursor = new DBCommandCursor(viewsDB, cmdRes, 2); + +let err = assert.throws(function() { + cursor.itcount(); +}, [], "Legacy getMore expected to fail on a view cursor"); +assert.eq(ErrorCodes.CommandNotSupportedOnView, err.code, tojson(err)); + +// +// Legacy killcursors is expected to work on views. +// +cmdRes = viewsDB.runCommand({find: "view", filter: {a: {$gt: 0}}, sort: {a: 1}, batchSize: 0}); +assert.commandWorked(cmdRes); +cursor = new DBCommandCursor(viewsDB, cmdRes, 2); + +// When DBCommandCursor is constructed under legacy readMode, cursor.close() will execute a +// legacy killcursors operation. +cursor.close(); +assert.gleSuccess(viewsDB, "legacy killcursors expected to work on view cursor"); + +// +// A view should reject all write CRUD operations performed in legacy write mode. +// +viewsDB.view.insert({x: 1}); +assert.gleErrorCode(viewsDB, ErrorCodes.CommandNotSupportedOnView); + +viewsDB.view.remove({x: 1}); +assert.gleErrorCode(viewsDB, ErrorCodes.CommandNotSupportedOnView); + +viewsDB.view.update({x: 1}, {x: 2}); +assert.gleErrorCode(viewsDB, ErrorCodes.CommandNotSupportedOnView); + +// +// Legacy find is explicitly prohibited on views; you must use the find command. +// +let res = assert.throws(function() { + viewsDB.view.find({x: 1}).toArray(); +}); +assert.eq(res.code, ErrorCodes.CommandNotSupportedOnView, tojson(res)); + +// Ensure that legacy getMore succeeds even when a cursor is established on a namespace whose +// database does not exist. Legacy getMore must check that the cursor is not over a view, and +// this must handle the case where the namespace is not a view by virtue of the database not +// existing. +assert.commandWorked(viewsDB.dropDatabase()); + +cmdRes = viewsDB.runCommand({find: "view", filter: {a: {$gt: 0}}, sort: {a: 1}, batchSize: 0}); +assert.commandWorked(cmdRes); +cursor = new DBCommandCursor(viewsDB, cmdRes, 2); +assert.eq(0, cursor.itcount()); + +cmdRes = viewsDB.runCommand({aggregate: "view", pipeline: [], cursor: {batchSize: 0}}); +assert.commandWorked(cmdRes); +cursor = new DBCommandCursor(viewsDB, cmdRes, 2); +assert.eq(0, cursor.itcount()); + +MongoRunner.stopMongod(conn); }()); |