diff options
Diffstat (limited to 'jstests/core/notablescan.js')
| -rw-r--r-- | jstests/core/notablescan.js | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/jstests/core/notablescan.js b/jstests/core/notablescan.js new file mode 100644 index 00000000000..baef5d56ae6 --- /dev/null +++ b/jstests/core/notablescan.js @@ -0,0 +1,61 @@ +// check notablescan mode +// +// @tags: [ +// assumes_against_mongod_not_mongos, +// # This test attempts to perform read operations after having enabled the notablescan server +// # parameter. The former operations may be routed to a secondary in the replica set, whereas the +// # latter must be routed to the primary. +// assumes_read_preference_unchanged, +// assumes_superuser_permissions, +// does_not_support_stepdowns, +// # Server parameters are stored in-memory only so are not transferred onto the recipient. This +// # test sets the server parameter "notablescan" to force the node to not execute queries that +// # require a collection scan and return an error. +// tenant_migration_incompatible, +// ] + +t = db.test_notablescan; +t.drop(); + +try { + assert.commandWorked(db._adminCommand({setParameter: 1, notablescan: true})); + // commented lines are SERVER-2222 + if (0) { // SERVER-2222 + assert.throws(function() { + t.find({a: 1}).toArray(); + }); + } + t.save({a: 1}); + assert.throws(function() { + t.count({a: 1}); + }); + if (0) { + assert.throws(function() { + t.find({}).toArray(); + }); + } + assert.eq(1, t.find({}).itcount()); // SERVER-274 + + let err = assert.throws(function() { + t.find({a: 1}).toArray(); + }); + assert.includes(err.toString(), "No indexed plans available, and running with 'notablescan'"); + + err = assert.throws(function() { + t.find({a: 1}).hint({$natural: 1}).toArray(); + }); + assert.includes(err.toString(), + "hint $natural is not allowed, because 'notablescan' is enabled"); + + t.createIndex({a: 1}); + assert.eq(0, t.find({a: 1, b: 1}).itcount()); + assert.eq(1, t.find({a: 1, b: null}).itcount()); + + // SERVER-4327 + assert.eq(0, t.find({a: {$in: []}}).itcount()); + assert.eq(0, t.find({a: {$in: []}, b: 0}).itcount()); +} finally { + // We assume notablescan was false before this test started and restore that + // expected value. + assert.commandWorked(db._adminCommand({setParameter: 1, notablescan: false})); +} |
