diff options
author | Adam Midvidy <amidvidy@gmail.com> | 2015-05-11 08:42:34 -0400 |
---|---|---|
committer | Adam Midvidy <amidvidy@gmail.com> | 2015-05-15 17:07:06 -0400 |
commit | cb8164f6f738179b0b3372c69b16670d6931fa2b (patch) | |
tree | 2107ac4898b90ce746af4c83cee9adc08044c25c /jstests/aggregation | |
parent | f3c262d1ab45e6fa59cd84ea90a150bde3372dd0 (diff) | |
download | mongo-cb8164f6f738179b0b3372c69b16670d6931fa2b.tar.gz |
SERVER-18198 fix incorrect logic for applying read pref to aggregate command
Diffstat (limited to 'jstests/aggregation')
-rw-r--r-- | jstests/aggregation/bugs/server18198.js | 42 |
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; + } +})(); |