summaryrefslogtreecommitdiff
path: root/jstests/views/views_legacy.js
blob: 46154fbdc301c973ca85b2b6927eec0b3780af0b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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));
}());