def test_user_change_password(request):
    user = User(
        name="user {}".format(fauxfactory.gen_alphanumeric()),
        credential=Credential(
            principal="user_principal_{}".format(fauxfactory.gen_alphanumeric()),
            secret="very_secret",
            verify_secret="very_secret"
        ),
        email="*****@*****.**",
        group=usergrp,
    )
    user.create()
    request.addfinalizer(user.delete)
    request.addfinalizer(login.login_admin)
    with user:
        assert not login.logged_in()
        login.login(user)
        assert login.current_full_name() == user.name
    login.login_admin()
    with update(user):
        user.credential = Credential(
            principal=user.credential.principal,
            secret="another_very_secret",
            verify_secret="another_very_secret",
        )
    with user:
        assert not login.logged_in()
        login.login(user)
        assert login.current_full_name() == user.name
def test_current_user_login_delete(request):
    """Test for deleting current user login.

    Steps:
        * Login as Admin user
        * Create a new user
        * Login with the new user
        * Try deleting the user
    """
    group_user = Group("EvmGroup-super_administrator")
    user = User(
        name='user' + fauxfactory.gen_alphanumeric(),
        credential=new_credential(),
        email='*****@*****.**',
        group=group_user)
    user.create()
    request.addfinalizer(user.delete)
    request.addfinalizer(login.login_admin)
    with user:
        if version.current_version() >= '5.7':
            navigate_to(user, 'Details')
            menu_item = ('Configuration', 'Delete this User')
            assert tb.exists(*menu_item) and tb.is_greyed(*menu_item), "Delete User is not dimmed"
        else:
            with error.expected("Current EVM User \"{}\" cannot be deleted".format(user.name)):
                user.delete()
def test_userid_required_error_validation():
    user = User(
        name='user' + fauxfactory.gen_alphanumeric(),
        credential=Credential(principal='', secret='redhat'),
        email='*****@*****.**',
        group=group_user)
    with error.expected("Userid can't be blank"):
        user.create()
Exemple #4
0
def user():
    user = User(
        credential=Credential(principal=fauxfactory.gen_alphanumeric(), secret=fauxfactory.gen_alphanumeric()),
        name=fauxfactory.gen_alphanumeric(),
        group=Group(description="EvmGroup-super_administrator"),
    )
    user.create()
    return user
def test_user_email_error_validation():
    user = User(
        name='user' + fauxfactory.gen_alphanumeric(),
        credential=new_credential(),
        email='xyzdhat.com',
        group=group_user)
    with error.expected("Email must be a valid email address"):
        user.create()
def test_user_group_error_validation():
    user = User(
        name='user{}'.format(fauxfactory.gen_alphanumeric()),
        credential=new_credential(),
        email='*****@*****.**',
        group='')
    with error.expected("A User must be assigned to a Group"):
        user.create()
def test_username_required_error_validation():
    user = User(
        name="",
        credential=new_credential(),
        email='*****@*****.**',
        group=group_user)
    with error.expected("Name can't be blank"):
        user.create()
def test_userid_required_error_validation():
    user = User(
        name="user" + fauxfactory.gen_alphanumeric(),
        credential=Credential(principal="", secret="redhat"),
        email="*****@*****.**",
        group=group_user,
    )
    with error.expected("Userid can't be blank"):
        user.create()
def test_delete_default_user():
    """Test for deleting default user Administrator.

    Steps:
        * Login as Administrator user
        * Try deleting the user
    """
    user = User(name='Administrator')
    with pytest.raises(RBACOperationBlocked):
        user.delete()
def test_username_required_error_validation(group_collection):
    group_name = 'EvmGroup-user'
    group = group_collection.instantiate(description=group_name)

    user = User(
        name="",
        credential=new_credential(),
        email='*****@*****.**',
        group=group)
    with error.expected("Name can't be blank"):
        user.create()
def test_user_email_error_validation(group_collection):
    group_name = 'EvmGroup-user'
    group = group_collection.instantiate(description=group_name)

    user = User(
        name='user{}'.format(fauxfactory.gen_alphanumeric()),
        credential=new_credential(),
        email='xyzdhat.com',
        group=group)
    with error.expected("Email must be a valid email address"):
        user.create()
Exemple #12
0
def login(user, submit_method=_js_auth_fn):
    """
    Login to CFME with the given username and password.
    Optionally, submit_method can be press_enter_after_password
    to use the enter key to login, rather than clicking the button.

    Args:
        user: The username to fill in the username field.
        password: The password to fill in the password field.
        submit_method: A function to call after the username and password have been input.

    Raises:
        RuntimeError: If the login fails, ie. if a flash message appears
    """

    if not user:
        username = conf.credentials['default']['username']
        password = conf.credentials['default']['password']
        cred = Credential(principal=username, secret=password)
        user = User(credential=cred)

    if not logged_in() or user.credential.principal is not current_username():
        if logged_in():
            logout()
        # workaround for strange bug where we are logged out
        # as soon as we click something on the dashboard
        sel.sleep(1.0)

        logger.debug('Logging in as user %s', user.credential.principal)
        try:
            fill(form, {'username': user.credential.principal, 'password': user.credential.secret})
        except sel.InvalidElementStateException as e:
            logger.warning("Got an error. Details follow.")
            msg = str(e).lower()
            if "element is read-only" in msg:
                logger.warning("Got a read-only login form, will reload the browser.")
                # Reload browser
                quit()
                ensure_browser_open()
                sel.sleep(1.0)
                sel.wait_for_ajax()
                # And try filling the form again
                fill(form, {'username': user.credential.principal,
                    'password': user.credential.secret})
            else:
                logger.warning("Unknown error, reraising.")
                logger.exception(e)
                raise
        with sel.ajax_timeout(90):
            submit_method()
        flash.assert_no_errors()
        user.full_name = _full_name()
        store.user = user
def test_user_password_required_error_validation():
    user = User(
        name='user' + fauxfactory.gen_alphanumeric(),
        credential=Credential(principal='uid' + fauxfactory.gen_alphanumeric(), secret=None),
        email='*****@*****.**',
        group=group_user)
    if version.current_version() < "5.5":
        check = "Password_digest can't be blank"
    else:
        check = "Password can't be blank"
    with error.expected(check):
        user.create()
Exemple #14
0
def login_admin(self, **kwargs):
    """
    Convenience function to log into CFME using the admin credentials from the yamls.
    Args:
        kwargs: A dict of keyword arguments to supply to the :py:meth:`login` method.
    """
    username = conf.credentials['default']['username']
    password = conf.credentials['default']['password']
    cred = Credential(principal=username, secret=password)
    from cfme.configure.access_control import User
    user = User(credential=cred)
    user.name = 'Administrator'
    self.login(user, **kwargs)
Exemple #15
0
def user_restricted(group_with_tag, new_credential):
    """
        Returns restricted user object assigned
        to group with tag filter used in test module
    """
    user = User(
        name='user{}'.format(fauxfactory.gen_alphanumeric()),
        credential=new_credential,
        email='*****@*****.**',
        group=group_with_tag,
        cost_center='Workload',
        value_assign='Database')
    user.create()
    yield user
    user.delete()
def test_userid_required_error_validation(group_collection):
    group_name = 'EvmGroup-user'
    group = group_collection.instantiate(description=group_name)

    user = User(
        name='user{}'.format(fauxfactory.gen_alphanumeric()),
        credential=Credential(principal='', secret='redhat'),
        email='*****@*****.**',
        group=group)
    with error.expected("Userid can't be blank"):
        user.create()

    # Navigating away from this page will create an "Abandon Changes" alert
    # Since group creation failed we need to reset the state of the page
    navigate_to(user.appliance.server, 'Dashboard')
def test_bad_password(context, request, appliance):
    """ Tests logging in with a bad password. """

    username = conf.credentials['default']['username']
    password = "******"
    cred = Credential(principal=username, secret=password)
    user = User(credential=cred)
    user.name = 'Administrator'
    if appliance.version.is_in_series('5.7'):
        error_message = "Sorry, the username or password you entered is incorrect."
    else:
        error_message = "Incorrect username or password"

    with appliance.context.use(context):
        with error.expected(error_message):
            appliance.server.login(user)
def test_bad_password(request):
    """ Tests logging in with a bad password. """
    appliance = get_or_create_current_appliance()

    request.addfinalizer(lambda: navigate_to(appliance.server, 'LoginScreen'))

    login_page = navigate_to(appliance.server, 'LoginScreen')

    username = conf.credentials['default']['username']
    password = "******"
    cred = Credential(principal=username, secret=password)
    user = User(credential=cred)
    user.name = 'Administrator'

    with error.expected("Sorry, the username or password you entered is incorrect."):
        login_page.log_in(user)
        assert login.page.is_displayed
Exemple #19
0
def login(self, user=None, method=LOGIN_METHODS[-1]):
    """
    Login to CFME with the given username and password.
    Optionally, submit_method can be press_enter_after_password
    to use the enter key to login, rather than clicking the button.
    Args:
        user: The username to fill in the username field.
        password: The password to fill in the password field.
        submit_method: A function to call after the username and password have been input.
    Raises:
        RuntimeError: If the login fails, ie. if a flash message appears
    """
    # Circular import
    if not user:
        username = conf.credentials['default']['username']
        password = conf.credentials['default']['password']
        cred = Credential(principal=username, secret=password)
        from cfme.configure.access_control import User
        user = User(credential=cred, name='Administrator')

    logged_in_view = self.appliance.browser.create_view(BaseLoggedInPage)

    if not logged_in_view.logged_in_as_user(user):
        if logged_in_view.logged_in:
            logged_in_view.logout()

        from cfme.utils.appliance.implementations.ui import navigate_to
        login_view = navigate_to(self.appliance.server, 'LoginScreen')

        time.sleep(1)

        logger.debug('Logging in as user %s', user.credential.principal)
        login_view.flush_widget_cache()

        login_view.log_in(user, method=method)
        logged_in_view.flush_widget_cache()
        user.name = logged_in_view.current_fullname
        try:
            assert logged_in_view.is_displayed
            assert logged_in_view.logged_in_as_user
            self.appliance.user = user
        except AssertionError:
            login_view.flash.assert_no_error()
    return logged_in_view
def test_current_user_login_delete(request):
    """Test for deleting current user login.

    Steps:
        * Login as Admin user
        * Create a new user
        * Login with the new user
        * Try deleting the user
    """
    group_user = Group("EvmGroup-super_administrator")
    user = User(
        name='user' + fauxfactory.gen_alphanumeric(),
        credential=new_credential(),
        email='*****@*****.**',
        group=group_user)
    user.create()
    request.addfinalizer(user.delete)
    request.addfinalizer(login.login_admin)
    with user:
        with error.expected("Current EVM User \"{}\" cannot be deleted".format(user.name)):
            user.delete()
Exemple #21
0
def test_bad_password(request, appliance):
    """ Tests logging in with a bad password. """

    request.addfinalizer(lambda: navigate_to(appliance.server, 'LoginScreen'))

    login_page = navigate_to(appliance.server, 'LoginScreen')

    username = conf.credentials['default']['username']
    password = "******"
    cred = Credential(principal=username, secret=password)
    user = User(credential=cred)
    user.name = 'Administrator'

    if appliance.version.is_in_series('5.7'):
        error_message = "Sorry, the username or password you entered is incorrect."
    else:
        error_message = "Incorrect username or password"

    with error.expected(error_message):
        login_page.log_in(user)

    assert login_page.is_displayed
Exemple #22
0
def login_admin(**kwargs):
    """
    Convenience function to log into CFME using the admin credentials from the yamls.

    Args:
        kwargs: A dict of keyword arguments to supply to the :py:meth:`login` method.
    """
    if current_full_name() != 'Administrator':
        logout()

        username = conf.credentials['default']['username']
        password = conf.credentials['default']['password']
        cred = Credential(principal=username, secret=password)
        user = User(credential=cred)
        login(user, **kwargs)
def user(request, data, add_group):
    if not data:
        pytest.skip("No data specified for user")
    username, password = data["username"], data["password"]
    if 'evm_default_group' in add_group:
        username, password = data['default_username'], data['default_password']
        data['fullname'] = data['default_userfullname']
    credentials = Credential(
        principal=username,
        secret=password,
        verify_secret=password,
    )
    user_obj = User(name=data['fullname'], credential=credentials)
    request.addfinalizer(user_obj.delete)
    return user_obj
def test_delete_default_user():
    """Test for deleting default user Administrator.

    Steps:
        * Login as Administrator user
        * Try deleting the user
    """
    user = User(name='Administrator')
    navigate_to(User, 'All')
    row = records_table.find_row_by_cells({'Full Name': user.name})
    sel.check(sel.element(".//input[@type='checkbox']", root=row[0]))
    tb.select('Configuration', 'Delete selected Users', invokes_alert=True)
    sel.handle_alert()
    flash.assert_message_match(
        'Default EVM User "{}" cannot be deleted'.format(user.name))
Exemple #25
0
def test_edit_user_password(rest_api, user):
    if "edit" not in rest_api.collections.users.action.all:
        pytest.skip("Edit action for users is not implemented in this version")
    try:
        for cur_user in rest_api.collections.users:
            if cur_user.userid != conf.credentials['default']['username']:
                rest_user = cur_user
                break
    except:
        pytest.skip("There is no user to change password")

    new_password = fauxfactory.gen_alphanumeric()
    rest_user.action.edit(password=new_password)
    cred = Credential(principal=rest_user.userid, secret=new_password)
    new_user = User(credential=cred)
    login(new_user)
Exemple #26
0
def login(self, user=None, **kwargs):
    if not user:
        username = conf.credentials['default']['username']
        password = conf.credentials['default']['password']
        cred = Credential(principal=username, secret=password)
        user = User(credential=cred)
    login_view = navigate_to(self.appliance.server, 'LoginScreen')
    login_view.fill({
        'username': user.credential.principal,
        'password': user.credential.secret,
    })
    login_view.login.click()
    # Without this the login screen just exits after logging in
    time.sleep(3)
    login_view.flash.assert_no_error()
    self.browser.plugin.ensure_page_safe()
Exemple #27
0
def new_user(group=usergrp):
    from fixtures.blockers import bug

    uppercase_username_bug = bug(1487199)

    user = User(name='user' + fauxfactory.gen_alphanumeric(),
                credential=new_credential(),
                email='*****@*****.**',
                group=group,
                cost_center='Workload',
                value_assign='Database')

    # Version 5.8.2 has a regression blocking logins for usernames w/ uppercase chars
    if '5.8.2' <= user.appliance.version < '5.9' and uppercase_username_bug:
        user.credential.principal = user.credential.principal.lower()

    return user
def test_openldap_auth(request, setup_first_provider,
                       configure_openldap_auth_mode):
    data = cfme_data.get("openldap_test", {})
    if not data:
        pytest.skip("No openldap_test section in yaml")
    group = Group(description=data["group_name"], role="EvmRole-user")
    request.addfinalizer(group.delete)
    group.create()
    credentials = Credential(
        principal=data["username"],
        secret=data["password"],
        verify_secret=data["password"],
    )
    user = User(name=data["fullname"], credential=credentials)
    request.addfinalizer(user.delete)
    request.addfinalizer(login.login_admin)
    login.login(data["username"], data["password"])
    assert login.current_full_name() == data["fullname"]
Exemple #29
0
def user_restricted(group_with_tag, new_credential):
    """
        Returns restricted user object assigned
        to group with tag filter used in test module
    """
    user = User(name='user{}'.format(fauxfactory.gen_alphanumeric()),
                credential=new_credential,
                email='*****@*****.**',
                group=group_with_tag,
                cost_center='Workload',
                value_assign='Database')
    user.create()
    yield user
    user.delete()
def test_openldap_auth(request, group, add_from_ldap, configure_openldap_auth_mode):
    data = cfme_data.get("openldap_test", {})
    if add_from_ldap:
        group.add_group_from_ldap_lookup()
    else:
        group.create()
    request.addfinalizer(group.delete)
    credentials = Credential(
        principal=data["username"],
        secret=data["password"],
        verify_secret=data["password"],
    )
    user = User(name=data["fullname"], credential=credentials)
    request.addfinalizer(user.delete)
    request.addfinalizer(login.login_admin)
    with user:
        login.login(user)
        assert login.current_full_name() == data["fullname"]
        login.logout()
    login.login_admin()
    assert user.exists is True
Exemple #31
0
def login(self, user=None, method=LOGIN_METHODS[-1]):
    if not user:
        username = conf.credentials['default']['username']
        password = conf.credentials['default']['password']
        cred = Credential(principal=username, secret=password)
        user = User(credential=cred)

    logged_in_view = self.appliance.ssui.create_view(SSUIBaseLoggedInPage)

    if logged_in_view.logged_in_as_user(user):
        return

    if logged_in_view.logged_in:
        logged_in_view.logout()

    login_view = navigate_to(self.appliance.server, 'LoginScreen')
    login_view.log_in(user, method=method)
    # Without this the login screen just exits after logging in
    time.sleep(3)
    login_view.flash.assert_no_error()
    self.browser.plugin.ensure_page_safe()
    assert logged_in_view.is_displayed
    return logged_in_view
Exemple #32
0
def login(user, submit_method=_js_auth_fn):
    """
    Login to CFME with the given username and password.
    Optionally, submit_method can be press_enter_after_password
    to use the enter key to login, rather than clicking the button.

    Args:
        user: The username to fill in the username field.
        password: The password to fill in the password field.
        submit_method: A function to call after the username and password have been input.

    Raises:
        RuntimeError: If the login fails, ie. if a flash message appears
    """

    if not user:
        username = conf.credentials['default']['username']
        password = conf.credentials['default']['password']
        cred = Credential(principal=username, secret=password)
        user = User(credential=cred)

    if not logged_in() or user.credential.principal is not current_username():
        if logged_in():
            logout()
        # workaround for strange bug where we are logged out
        # as soon as we click something on the dashboard
        sel.sleep(1.0)

        logger.debug('Logging in as user %s', user.credential.principal)
        try:
            fill(
                form, {
                    'username': user.credential.principal,
                    'password': user.credential.secret
                })
        except sel.InvalidElementStateException as e:
            logger.warning("Got an error. Details follow.")
            msg = str(e).lower()
            if "element is read-only" in msg:
                logger.warning(
                    "Got a read-only login form, will reload the browser.")
                # Reload browser
                quit()
                ensure_browser_open()
                sel.sleep(1.0)
                sel.wait_for_ajax()
                # And try filling the form again
                fill(
                    form, {
                        'username': user.credential.principal,
                        'password': user.credential.secret
                    })
            else:
                logger.warning("Unknown error, reraising.")
                logger.exception(e)
                raise
        with sel.ajax_timeout(90):
            submit_method()
        flash.assert_no_errors()
        user.full_name = _full_name()
        store.user = user
Exemple #33
0
def user():
    user = User(credential=Credential(principal=fauxfactory.gen_alphanumeric(),
        secret=fauxfactory.gen_alphanumeric()), name=fauxfactory.gen_alphanumeric(),
        group=Group(description='EvmGroup-super_administrator'))
    user.create()
    return user
Exemple #34
0
def pytest_pyfunc_call(pyfuncitem):
    """Inspects and consumes certain exceptions

    The guts of this function are explained above in the module documentation.

    Args:
        pyfuncitem: A pytest test item.
    """
    # do whatever you want before the next hook executes
    if not enable_rbac:
        yield
        return

    # Login as the "new" user to run the test under
    if 'rbac_role' in pyfuncitem.fixturenames:
        user = pyfuncitem._request.getfuncargvalue('rbac_role')
        really_logout()
        logger.info("setting user to {}".format(user))
        user_obj = User(username=conf.credentials[user]['username'],
                        password=conf.credentials[user]['password'])

        # Actually perform the test. outcome is set to be a result object from the test
        with user_obj:
            outcome = yield

            screenshot, screenshot_error = take_screenshot()

        # Handle the Exception
        logger.error(pyfuncitem.location[0])
        loc = "{}/{}".format(pyfuncitem.location[0], pyfuncitem.location[2])
        # loc = loc[:min([loc.rfind('['), len(loc)])]
        logger.error(loc)
        # errors = [v for k, v in tests.iteritems() if loc.startswith(k)]
        errors = pyfuncitem.function.meta.kwargs['from_docs']['rbac']['roles']
        if errors:
            # errors = errors[0]
            user = pyfuncitem.funcargs['rbac_role']
            if errors[user]:
                if not outcome.excinfo:
                    logger.error("RBAC: Test should fail!")
                    raise Exception("RBAC: You should fail!")
                else:
                    if outcome.excinfo[1].__repr__().startswith(errors[user]):
                        logger.info("RBAC: Test failed as expected")
                        outcome.force_result(True)
                    else:
                        contents = "".join(
                            traceback.format_list(
                                traceback.extract_tb(outcome.excinfo[2])))
                        save_traceback_file(pyfuncitem, contents)
                        save_screenshot(pyfuncitem, screenshot,
                                        screenshot_error)
                        logger.error("RBAC: You blithering idiot, "
                                     "you failed with the wrong exception")
                        raise Exception(
                            "RBAC: You should fail with {}!".format(
                                errors[user]))
            else:
                if not outcome.excinfo:
                    logger.info("RBAC: Test passed as expected")
                else:
                    logger.error("RBAC: Test should have passed!")
                    contents = "".join(
                        traceback.format_list(
                            traceback.extract_tb(outcome.excinfo[2])))
                    save_traceback_file(pyfuncitem, contents)
                    save_screenshot(pyfuncitem, screenshot, screenshot_error)
                    raise Exception("RBAC: Test should have passed!")
def test_user_group_error_validation():
    user = User(
        name="user" + fauxfactory.gen_alphanumeric(), credential=new_credential(), email="*****@*****.**", group=""
    )
    with error.expected("A User must be assigned to a Group"):
        user.create()