summaryrefslogtreecommitdiff
path: root/jstests/aggregation
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/aggregation')
-rw-r--r--jstests/aggregation/bugs/server18198.js42
1 files changed, 42 insertions, 0 deletions
diff --git a/jstests/aggregation/bugs/server18198.js b/jstests/aggregation/bugs/server18198.js
new file mode 100644
index 00000000000..6d8d827e416
--- /dev/null
+++ b/jstests/aggregation/bugs/server18198.js
@@ -0,0 +1,42 @@
+// SERVER-18198 check read pref is only applied when there is no $out stage
+// in aggregate shell helper
+(function() {
+ "use strict";
+ var t = db.server18198;
+ t.drop();
+
+ var mongo = db.getMongo();
+
+ try {
+ var commandsRan = [];
+ // hook in our patched mongo
+ var mockMongo = {
+ getSlaveOk: function() { return true; },
+ runCommand: function(db, cmd, opts) {
+ commandsRan.push({db: db, cmd: cmd, opts: opts});
+ return {ok: 1.0};
+ },
+ getReadPref: function() { return {mode: "secondaryPreferred"}; },
+ getReadPrefMode: function() { return "secondaryPreferred"; }
+ };
+
+ db._mongo = mockMongo;
+
+ // this query should not get a read pref
+ t.aggregate([{$sort: {"x" : 1}}, {$out: "foo"}]);
+ assert.eq(commandsRan.length, 1);
+ // check that it doesn't have a read preference
+ assert(!commandsRan[0].cmd.hasOwnProperty("$readPreference"));
+
+ commandsRan = [];
+
+ t.aggregate([{$sort: {"x" : 1}}]);
+ // check another command was run
+ assert.eq(commandsRan.length, 1);
+ // check that it has a read preference
+ assert(commandsRan[0].cmd.hasOwnProperty("$readPreference"));
+ }
+ finally {
+ db._mongo = mongo;
+ }
+})();