// Tests that running mapReduce does not crash anything if the shards have scripting disabled. (function() { "use strict"; const shardOpts = [ {noscripting: ''}, {} // just use default params ]; const st = new ShardingTest({shards: shardOpts}); const mongos = st.s; const testDB = mongos.getDB('test'); const coll = testDB.bar; // Shard the collection and make sure there is a non-empty chunk on each shard. st.shardColl(coll.getName(), {x: 1}, {x: 0}, {x: 1}); assert.commandWorked(coll.insert([{x: 1}, {x: -1}])); const mapFn = function() { emit(this.x, 1); }; const reduceFn = function(key, values) { return 1; }; const mrCmd = { mapreduce: 'bar', map: mapFn, reduce: reduceFn, out: {inline: 1} }; // If the command succeeds when it should have failed, having the explain plan in the log may help. assert.commandFailedWithCode(testDB.runCommand(mrCmd), 31264, () => { const explain = tojson(testDB.runCommand({explain: mrCmd})); return `mapReduce command was expected to fail, but succeeded; explain plan is ${explain}`; }); st.stop(); }());