summaryrefslogtreecommitdiff
path: root/jstests/views
diff options
context:
space:
mode:
authorKyle Suarez <kyle.suarez@mongodb.com>2016-08-16 16:39:32 -0400
committerKyle Suarez <kyle.suarez@mongodb.com>2016-08-16 16:39:32 -0400
commit5ba553bd6c8ee827762debfb6f01ee1ae9f3e425 (patch)
tree6ef83f6cf58aad01b6d3eed3ed4983402fd3403c /jstests/views
parent551bcf3a4e31a2727b9877bacaf34c529078963f (diff)
downloadmongo-5ba553bd6c8ee827762debfb6f01ee1ae9f3e425.tar.gz
SERVER-25301 Test views with legacy reads/writes
Diffstat (limited to 'jstests/views')
-rw-r--r--jstests/views/views_legacy.js42
1 files changed, 42 insertions, 0 deletions
diff --git a/jstests/views/views_legacy.js b/jstests/views/views_legacy.js
new file mode 100644
index 00000000000..46154fbdc30
--- /dev/null
+++ b/jstests/views/views_legacy.js
@@ -0,0 +1,42 @@
+/**
+ * Tests that views properly reject queries in legacy read mode, and reject writes performed in
+ * legacy write mode.
+ *
+ * TODO(SERVER-25641): If the views test suite is moved under core, we can get rid of this test
+ * after ensuring that it is included in a legacy passthrough suite.
+ */
+(function() {
+ "use strict";
+
+ let conn = MongoRunner.runMongod({setParameter: "enableViews=1"});
+
+ let viewsDB = conn.getDB("views_legacy");
+ assert.commandWorked(viewsDB.dropDatabase());
+ assert.commandWorked(viewsDB.createView("view", "collection", []));
+
+ // Helper function for performing getLastError.
+ function assertGetLastErrorFailed() {
+ let gle = viewsDB.runCommand({getLastError: 1});
+ assert.commandWorked(gle);
+ assert.eq(gle.code, ErrorCodes.CommandNotSupportedOnView, tojson(gle));
+ }
+
+ // A view should reject all write CRUD operations performed in legacy write mode.
+ conn.forceWriteMode("legacy");
+
+ viewsDB.view.insert({x: 1});
+ assertGetLastErrorFailed();
+
+ viewsDB.view.remove({x: 1});
+ assertGetLastErrorFailed();
+
+ viewsDB.view.update({x: 1}, {x: 2});
+ assertGetLastErrorFailed();
+
+ // Legacy find is explicitly prohibited on views; you must use the find command.
+ conn.forceReadMode("legacy");
+ let res = assert.throws(function() {
+ viewsDB.view.find({x: 1}).toArray();
+ });
+ assert.eq(res.code, ErrorCodes.CommandNotSupportedOnView, tojson(res));
+}());