diff options
Diffstat (limited to 'jstests/sharding/mrShardedOutputAuth.js')
-rw-r--r-- | jstests/sharding/mrShardedOutputAuth.js | 171 |
1 files changed, 85 insertions, 86 deletions
diff --git a/jstests/sharding/mrShardedOutputAuth.js b/jstests/sharding/mrShardedOutputAuth.js index 0536c6a51b9..c860c16148e 100644 --- a/jstests/sharding/mrShardedOutputAuth.js +++ b/jstests/sharding/mrShardedOutputAuth.js @@ -6,90 +6,89 @@ (function() { - // TODO SERVER-35447: Multiple users cannot be authenticated on one connection within a session. - TestData.disableImplicitSessions = true; - - function doMapReduce(connection, outputDb) { - // clean output db and run m/r - outputDb.numbers_out.drop(); - printjson(connection.getDB('input').runCommand({ - mapreduce: "numbers", - map: function() { - emit(this.num, {count: 1}); - }, - reduce: function(k, values) { - var result = {}; - values.forEach(function(value) { - result.count = 1; - }); - return result; - }, - out: {merge: "numbers_out", sharded: true, db: "output"}, - verbose: true, - query: {} - })); - } - - function assertSuccess(configDb, outputDb) { - assert.eq(outputDb.numbers_out.count(), 50, "map/reduce failed"); - assert(!configDb.collections.findOne().dropped, "no sharded collections"); - } - - function assertFailure(configDb, outputDb) { - assert.eq(outputDb.numbers_out.count(), 0, "map/reduce should not have succeeded"); - } - - // TODO: Remove 'shardAsReplicaSet: false' when SERVER-32672 is fixed. - var st = new ShardingTest({ - name: "mrShardedOutputAuth", - shards: 1, - mongos: 1, - other: {keyFile: 'jstests/libs/key1', shardAsReplicaSet: false} - }); - - // Setup the users to the input, output and admin databases - var mongos = st.s; - var adminDb = mongos.getDB("admin"); - adminDb.createUser({user: "user", pwd: "pass", roles: jsTest.adminUserRoles}); - - var authenticatedConn = new Mongo(mongos.host); - authenticatedConn.getDB('admin').auth("user", "pass"); - adminDb = authenticatedConn.getDB("admin"); - - var configDb = authenticatedConn.getDB("config"); - - var inputDb = authenticatedConn.getDB("input"); - inputDb.createUser({user: "user", pwd: "pass", roles: jsTest.basicUserRoles}); - - var outputDb = authenticatedConn.getDB("output"); - outputDb.createUser({user: "user", pwd: "pass", roles: jsTest.basicUserRoles}); - - // Setup the input db - inputDb.numbers.drop(); - for (var i = 0; i < 50; i++) { - inputDb.numbers.insert({num: i}); - } - assert.eq(inputDb.numbers.count(), 50); - - // Setup a connection authenticated to both input and output db - var inputOutputAuthConn = new Mongo(mongos.host); - inputOutputAuthConn.getDB('input').auth("user", "pass"); - inputOutputAuthConn.getDB('output').auth("user", "pass"); - doMapReduce(inputOutputAuthConn, outputDb); - assertSuccess(configDb, outputDb); - - // setup a connection authenticated to only input db - var inputAuthConn = new Mongo(mongos.host); - inputAuthConn.getDB('input').auth("user", "pass"); - doMapReduce(inputAuthConn, outputDb); - assertFailure(configDb, outputDb); - - // setup a connection authenticated to only output db - var outputAuthConn = new Mongo(mongos.host); - outputAuthConn.getDB('output').auth("user", "pass"); - doMapReduce(outputAuthConn, outputDb); - assertFailure(configDb, outputDb); - - st.stop(); - +// TODO SERVER-35447: Multiple users cannot be authenticated on one connection within a session. +TestData.disableImplicitSessions = true; + +function doMapReduce(connection, outputDb) { + // clean output db and run m/r + outputDb.numbers_out.drop(); + printjson(connection.getDB('input').runCommand({ + mapreduce: "numbers", + map: function() { + emit(this.num, {count: 1}); + }, + reduce: function(k, values) { + var result = {}; + values.forEach(function(value) { + result.count = 1; + }); + return result; + }, + out: {merge: "numbers_out", sharded: true, db: "output"}, + verbose: true, + query: {} + })); +} + +function assertSuccess(configDb, outputDb) { + assert.eq(outputDb.numbers_out.count(), 50, "map/reduce failed"); + assert(!configDb.collections.findOne().dropped, "no sharded collections"); +} + +function assertFailure(configDb, outputDb) { + assert.eq(outputDb.numbers_out.count(), 0, "map/reduce should not have succeeded"); +} + +// TODO: Remove 'shardAsReplicaSet: false' when SERVER-32672 is fixed. +var st = new ShardingTest({ + name: "mrShardedOutputAuth", + shards: 1, + mongos: 1, + other: {keyFile: 'jstests/libs/key1', shardAsReplicaSet: false} +}); + +// Setup the users to the input, output and admin databases +var mongos = st.s; +var adminDb = mongos.getDB("admin"); +adminDb.createUser({user: "user", pwd: "pass", roles: jsTest.adminUserRoles}); + +var authenticatedConn = new Mongo(mongos.host); +authenticatedConn.getDB('admin').auth("user", "pass"); +adminDb = authenticatedConn.getDB("admin"); + +var configDb = authenticatedConn.getDB("config"); + +var inputDb = authenticatedConn.getDB("input"); +inputDb.createUser({user: "user", pwd: "pass", roles: jsTest.basicUserRoles}); + +var outputDb = authenticatedConn.getDB("output"); +outputDb.createUser({user: "user", pwd: "pass", roles: jsTest.basicUserRoles}); + +// Setup the input db +inputDb.numbers.drop(); +for (var i = 0; i < 50; i++) { + inputDb.numbers.insert({num: i}); +} +assert.eq(inputDb.numbers.count(), 50); + +// Setup a connection authenticated to both input and output db +var inputOutputAuthConn = new Mongo(mongos.host); +inputOutputAuthConn.getDB('input').auth("user", "pass"); +inputOutputAuthConn.getDB('output').auth("user", "pass"); +doMapReduce(inputOutputAuthConn, outputDb); +assertSuccess(configDb, outputDb); + +// setup a connection authenticated to only input db +var inputAuthConn = new Mongo(mongos.host); +inputAuthConn.getDB('input').auth("user", "pass"); +doMapReduce(inputAuthConn, outputDb); +assertFailure(configDb, outputDb); + +// setup a connection authenticated to only output db +var outputAuthConn = new Mongo(mongos.host); +outputAuthConn.getDB('output').auth("user", "pass"); +doMapReduce(outputAuthConn, outputDb); +assertFailure(configDb, outputDb); + +st.stop(); })(); |