summaryrefslogtreecommitdiff
path: root/jstests/noPassthrough/replica_set_connection_getmore.js
blob: c1abc0e074d8a2144b0fb5eefca85f6a624cb67f (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
43
44
45
46
47
48
49
/**
 * Tests the behavior of how getMore operations are routed by the mongo shell when using a replica
 * set connection and cursors are established on a secondary.
 * @tags: [
 *   requires_replication,
 * ]
 */
(function() {
"use strict";
var rst = new ReplSetTest({nodes: 2});
rst.startSet();
rst.initiate();

const dbName = "test";
const collName = "getmore";

// We create our own replica set connection because 'rst.nodes' is an array of direct
// connections to each individual node.
var conn = new Mongo(rst.getURL());

// We force a read mode of "compatibility" so that we can test Mongo.prototype.readMode()
// resolves to "commands" independently of the --readMode passed to the mongo shell running this
// test.
conn.forceReadMode("compatibility");
assert.eq("commands",
          conn.readMode(),
          "replica set connections created by the mongo shell should use 'commands' read mode");
var coll = conn.getDB(dbName)[collName];
coll.drop();

// Insert several document so that we can use a cursor to fetch them in multiple batches.
var res = coll.insert([{}, {}, {}, {}, {}]);
assert.commandWorked(res);
assert.eq(5, res.nInserted);

// Wait for the secondary to catch up because we're going to try and do reads from it.
rst.awaitReplication();

// Establish a cursor on the secondary and verify that the getMore operations are routed to it.
var cursor = coll.find().readPref("secondary").batchSize(2);
assert.eq(5, cursor.itcount(), "failed to read the documents from the secondary");

// Verify that queries work when the read mode is forced to "legacy" reads.
conn.forceReadMode("legacy");
var cursor = coll.find().readPref("secondary").batchSize(2);
assert.eq(5, cursor.itcount(), "failed to read the documents from the secondary");

rst.stopSet();
})();