function assertUnauthorized(res){
if (res.ok == 0 && res.errmsg.startsWith('not authorized'))
return;
var finalMsg = "command worked when it should have been unauthorized: " + tojson(res);
doassert(finalMsg);
}
var st = new ShardingTest({
auth: true,
keyFile: 'jstests/libs/key1'
});
st.stopBalancer();
var mongos = st.s0;
var mongosAdmin = mongos.getDB('admin');
var coll = mongos.getCollection('foo.bar');
assert.commandWorked(mongosAdmin.runCommand({
enableSharding: coll.getDB().getName()
}));
assert.commandWorked(mongosAdmin.runCommand({
shardCollection: coll.getFullName(),
key: {_id: 'hashed'}
}));
var shardAdmin = st.shard0.getDB('admin');
shardAdmin.createUser({'user':'admin', 'pwd': 'x', 'roles': ['clusterAdmin']});
assertUnauthorized(shardAdmin.runCommand({cleanupOrphaned: 'foo.bar'}));
shardAdmin.auth('admin', 'x');
printjson(shardAdmin.runCommand('connectionStatus'));
assert.commandWorked(shardAdmin.runCommand({cleanupOrphaned: 'foo.bar'}));
printjson(shardAdmin.runCommand('connectionStatus'));
assert.commandWorked(shardAdmin.logout());
printjson(shardAdmin.runCommand('connectionStatus'));
assertUnauthorized(shardAdmin.runCommand({cleanupOrphaned: 'foo.bar'}));