예제 #1
0
def create_test_user(admin_credentials: Credentials,
                     add_password: bool = False) -> Credentials:
    username = get_random_string()
    create_user(username, admin_credentials)

    password = ""
    if add_password:
        password = get_random_string()
        assert change_user_password(username, password, admin_credentials) == 0

    return Credentials(username, password)
예제 #2
0
def test_change_password(auth: Authentication) -> None:
    # Create a user without a password.
    creds = create_test_user(ADMIN_CREDENTIALS, False)

    # Attempt to log in.
    assert log_in_user(creds) == 0

    # Log out.
    assert log_out_user() == 0

    newPassword = get_random_string()
    assert change_user_password(creds.username, newPassword,
                                ADMIN_CREDENTIALS) == 0

    assert log_in_user(Credentials(creds.username, newPassword)) == 0
예제 #3
0
def test_logout(auth: Authentication) -> None:
    creds = create_test_user(ADMIN_CREDENTIALS, True)

    # Set Determined passwordto something in order to disable auto-login.
    password = get_random_string()
    assert change_user_password(constants.DEFAULT_DETERMINED_USER, password,
                                ADMIN_CREDENTIALS) == 0

    # Log in as new user.
    with logged_in_user(creds):
        # Now we should be able to list experiments.
        child = det_spawn(["e", "list"])
        child.read()
        child.wait()
        child.close()
        assert child.status == 0

        # Exiting the logged_in_user context logs out and asserts that the exit code is 0.

    # Now trying to list experiments should result in an error.
    child = det_spawn(["e", "list"])
    child.expect(".*Unauthenticated.*", timeout=EXPECT_TIMEOUT)
    child.read()
    child.wait()
    assert child.exitstatus != 0

    # Log in as determined.
    log_in_user(Credentials(constants.DEFAULT_DETERMINED_USER, password))

    # Log back in as new user.
    log_in_user(creds)

    # Now log out as determined.
    assert log_out_user(constants.DEFAULT_DETERMINED_USER) == 0

    # Should still be able to list experiments because new user is logged in.
    child = det_spawn(["e", "list"])
    child.read()
    child.wait()
    child.close()
    assert child.status == 0

    # Change Determined passwordback to "".
    change_user_password(constants.DEFAULT_DETERMINED_USER, "",
                         ADMIN_CREDENTIALS)
예제 #4
0
from typing import Dict, Generator, List, Optional, Tuple, cast

import appdirs
import pexpect
import pytest
from pexpect import spawn

from determined.common import constants, yaml
from determined.common.api.authentication import Authentication, Credentials, TokenStore
from tests import command
from tests import config as conf
from tests import experiment as exp
from tests.filetree import FileTree

EXPECT_TIMEOUT = 5
ADMIN_CREDENTIALS = Credentials("admin", "")


@pytest.fixture(scope="session")  # type: ignore
def auth() -> Authentication:
    a = Authentication.instance()
    a.reset_session()
    yield a
    TokenStore.delete_token_cache()


@contextlib.contextmanager
def logged_in_user(credentials: Credentials) -> Generator:
    assert log_in_user(credentials) == 0
    yield
    assert log_out_user() == 0