import pytest from util.config.validators import ConfigValidationException from util.config.validators.validate_keystone import KeystoneValidator from util.morecollections import AttrDict from test.test_keystone_auth import fake_keystone @pytest.mark.parametrize('unvalidated_config', [ ({}), ({'AUTHENTICATION_TYPE': 'Database'}), ]) def test_validate_noop(unvalidated_config): KeystoneValidator.validate(unvalidated_config, None, None) @pytest.mark.parametrize('unvalidated_config', [ ({'AUTHENTICATION_TYPE': 'Keystone'}), ({'AUTHENTICATION_TYPE': 'Keystone', 'KEYSTONE_AUTH_URL': 'foo'}), ({'AUTHENTICATION_TYPE': 'Keystone', 'KEYSTONE_AUTH_URL': 'foo', 'KEYSTONE_ADMIN_USERNAME': 'bar'}), ({'AUTHENTICATION_TYPE': 'Keystone', 'KEYSTONE_AUTH_URL': 'foo', 'KEYSTONE_ADMIN_USERNAME': 'bar', 'KEYSTONE_ADMIN_PASSWORD': 'baz'}), ]) def test_invalid_config(unvalidated_config): with pytest.raises(ConfigValidationException): KeystoneValidator.validate(unvalidated_config, None, None) @pytest.mark.parametrize('username, password, expected_exception', [ ('invaliduser', 'invalidpass', ConfigValidationException), ('cool.user', 'invalidpass', ConfigValidationException), ('invaliduser', 'somepass', ConfigValidationException), ('cool.user', 'password', None), ]) def test_validated_keystone(username, password, expected_exception): with fake_keystone(2) as keystone_auth: auth_url = keystone_auth.auth_url config = {} config['AUTHENTICATION_TYPE'] = 'Keystone' config['KEYSTONE_AUTH_URL'] = auth_url config['KEYSTONE_ADMIN_USERNAME'] = 'adminuser' config['KEYSTONE_ADMIN_PASSWORD'] = 'adminpass' config['KEYSTONE_ADMIN_TENANT'] = 'admintenant' if expected_exception is not None: with pytest.raises(ConfigValidationException): KeystoneValidator.validate(config, AttrDict(dict(username=username)), password) else: KeystoneValidator.validate(config, AttrDict(dict(username=username)), password)