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
50
51
52
53
54
55
56
57
58
|
/**
* Tests authorization when a config server has no primary.
*
* This test cannot be run on ephemeral storage engines because it requires the users to persist
* across a restart.
* @tags: [requires_persistence]
*/
// Checking UUID and index consistency involves talking to the config server primary, but there is
// no config server primary by the end of this test.
TestData.skipCheckingUUIDsConsistentAcrossCluster = true;
TestData.skipCheckingIndexesConsistentAcrossCluster = true;
TestData.skipCheckDBHashes = true;
TestData.skipCheckOrphans = true;
(function() {
'use strict';
var st = new ShardingTest({shards: 1, other: {keyFile: 'jstests/libs/key1'}});
st.s.getDB('admin').createUser({user: 'root', pwd: 'pass', roles: ['root']});
st.s.getDB('admin').auth('root', 'pass');
var testDB = st.s.getDB('test');
testDB.user.insert({hello: 'world'});
// Kill all secondaries, forcing the current primary to step down.
st.configRS.getSecondaries().forEach(function(secondaryConn) {
MongoRunner.stopMongod(secondaryConn);
});
// Test authenticate through a fresh connection.
var newConn = new Mongo(st.s.host);
assert.commandFailedWithCode(newConn.getDB('test').runCommand({find: 'user'}),
ErrorCodes.Unauthorized);
newConn.getDB('admin').auth('root', 'pass');
var res = newConn.getDB('test').user.findOne();
assert.neq(null, res);
assert.eq('world', res.hello);
// Test authenticate through new mongos.
var otherMongos =
MongoRunner.runMongos({keyFile: "jstests/libs/key1", configdb: st.s.savedOptions.configdb});
assert.commandFailedWithCode(otherMongos.getDB('test').runCommand({find: 'user'}),
ErrorCodes.Unauthorized);
otherMongos.getDB('admin').auth('root', 'pass');
var res = otherMongos.getDB('test').user.findOne();
assert.neq(null, res);
assert.eq('world', res.hello);
st.stop();
MongoRunner.stopMongos(otherMongos);
})();
|