jstests/core/connection_status.js
/**
 * Test that the output of connectionStatus makes sense.
 */
Test that the output of connectionStatus makes sense.
Test that the output of connectionStatus makes sense .
function validateConnectionStatus(expectedUser, expectedRole, showPrivileges) {
    var connectionStatus =
        myDB.runCommand({"connectionStatus": 1, "showPrivileges": showPrivileges});
    assert.commandWorked(connectionStatus);
    var authInfo = connectionStatus.authInfo;
    var users = authInfo.authenticatedUsers;
    var matches = 0;
    var infoStr = tojson(authInfo);
    for (var i = 0; i < users.length; i++) {
        var user = users[i].user;
        var db = users[i].db;
        assert(isString(user), "each authenticatedUsers should have a 'user' string:" + infoStr);
        assert(isString(db), "each authenticatedUsers should have a 'db' string:" + infoStr);
        if (user === expectedUser.user && db === expectedUser.db) {
            matches++;
        }
    }
    assert.eq(matches, 1, "expected user should be present once in authenticatedUsers:" + infoStr);
    var roles = authInfo.authenticatedUserRoles;
    matches = 0;
    for (var i = 0; i < roles.length; i++) {
        var role = roles[i].role;
        var db = roles[i].db;
        assert(isString(role), "each authenticatedUserRole should have a 'role' string:" + infoStr);
        assert(isString(db), "each authenticatedUserRole should have a 'db' string:" + infoStr);
        if (role === expectedRole.role && db === expectedRole.db) {
            matches++;
        }
    }
    assert.gte(matches, 1, "expected role should be present in authenticatedUserRoles:" + infoStr);
    var privileges = authInfo.authenticatedUserPrivileges;
    if (showPrivileges) {
        for (var i = 0; i < privileges.length; i++) {
            assert(isObject(privileges[i].resource),
                   "each authenticatedUserPrivilege should have a 'resource' object:" + infoStr);
            var actions = privileges[i].actions;
            for (var j = 0; j < actions.length; j++) {
                assert(isString(actions[j]),
                       "each authenticatedUserPrivilege action should be a string:" + infoStr);
            }
        }
    } else {
        assert.eq(privileges,
                  undefined,
                  "authenticatedUserPrivileges should not be returned by default:" + infoStr);
    }
}
function validateConnectionStatus ( expectedUser , expectedRole , showPrivileges ) { var connectionStatus = myDB . runCommand ( { "connectionStatus" : 1 , "showPrivileges" : showPrivileges } ) ; assert . commandWorked ( connectionStatus ) ; var authInfo = connectionStatus . authInfo ; var users = authInfo . authenticatedUsers ; var matches = 0 ; var infoStr = tojson ( authInfo ) ; for ( var i = 0 ; i < users . length ; i ++ ) { var user = users [ i ] . user ; var db = users [ i ] . db ; assert ( isString ( user ) , "each authenticatedUsers should have a 'user' string:" + infoStr ) ; assert ( isString ( db ) , "each authenticatedUsers should have a 'db' string:" + infoStr ) ; if ( user === expectedUser . user && db === expectedUser . db ) { matches ++ ; } } assert . eq ( matches , 1 , "expected user should be present once in authenticatedUsers:" + infoStr ) ; var roles = authInfo . authenticatedUserRoles ; matches = 0 ; for ( var i = 0 ; i < roles . length ; i ++ ) { var role = roles [ i ] . role ; var db = roles [ i ] . db ; assert ( isString ( role ) , "each authenticatedUserRole should have a 'role' string:" + infoStr ) ; assert ( isString ( db ) , "each authenticatedUserRole should have a 'db' string:" + infoStr ) ; if ( role === expectedRole . role && db === expectedRole . db ) { matches ++ ; } } assert . gte ( matches , 1 , "expected role should be present in authenticatedUserRoles:" + infoStr ) ; var privileges = authInfo . authenticatedUserPrivileges ; if ( showPrivileges ) { for ( var i = 0 ; i < privileges . length ; i ++ ) { assert ( isObject ( privileges [ i ] . resource ) , "each authenticatedUserPrivilege should have a 'resource' object:" + infoStr ) ; var actions = privileges [ i ] . actions ; for ( var j = 0 ; j < actions . length ; j ++ ) { assert ( isString ( actions [ j ] ) , "each authenticatedUserPrivilege action should be a string:" + infoStr ) ; } } } else { assert . eq ( privileges , undefined , "authenticatedUserPrivileges should not be returned by default:" + infoStr ) ; } }
Test that the output of connectionStatus makes sense.
Test that the output of connectionStatus makes sense .
// Test that authenticated users are properly returned. // Test that authenticated roles are properly returned. // Role will be duplicated when users with the same role are logged in at the same time. // Test that privileges are not returned without asking