Removal of test .conf files
The following configuration files used for testing purposes have been migrated to use the configuration fixture instead of relying on a mechanism to load a large number of configuration options from various locations on disk. keystone/tests/auth_plugin_external_default_legacy.conf keystone/tests/auth_plugin_external_disabled.conf keystone/tests/auth_plugin_external_domain.conf keystone/tests/auth_plugin_external_domain_legacy.conf keystone/tests/backend_rules.conf keystone/tests/test_associate_project_endpoint_extension.conf keystone/tests/test_auth_plugin_by_class_name.conf keystone/tests/test_overrides.conf keystone/tests/test_pki_token_provider.conf keystone/tests/test_revoke_kvs.conf keystone/tests/test_revoke_sql.conf keystone/tests/test_uuid_token_provider.conf The following configuration files have had a number of elements extracted to be used within the config fixture instead of the configuration files. Most of these files contain controls that need to be overridden to test against alternative (non internal / in-memory) "live" configurations. keystone/tests/backend_ldap.conf keystone/tests/backend_liveldap.conf keystone/tests/backend_multi_ldap_sql.conf keystone/tests/backend_sql.conf keystone/tests/backend_tls_liveldap.conf This patchset also consolidates the setting of the default [database] ``connection`` option so that it can be overridden as needed for testing against non-sqlite database engines. Change-Id: I996709546f713c36bf654c5aea64cbf3472ffef1
This commit is contained in:
parent
5180cf10c4
commit
fa807ae345
@ -69,9 +69,16 @@ class LiveLDAPIdentity(test_backend_ldap.LDAPIdentity):
|
||||
{'objectclass': 'organizationalUnit',
|
||||
'ou': 'UserGroups'})
|
||||
|
||||
def _set_config(self):
|
||||
self.config([tests.dirs.tests('test_overrides.conf'),
|
||||
tests.dirs.tests('backend_liveldap.conf')])
|
||||
def config_files(self):
|
||||
config_files = super(LiveLDAPIdentity, self).config_files()
|
||||
config_files.append(tests.dirs.tests('backend_liveldap.conf'))
|
||||
return config_files
|
||||
|
||||
def config_overrides(self):
|
||||
super(LiveLDAPIdentity, self).config_overrides()
|
||||
self.config_fixture.config(
|
||||
group='identity',
|
||||
driver='keystone.identity.backends.ldap.Identity')
|
||||
|
||||
def test_build_tree(self):
|
||||
"""Regression test for building the tree names
|
||||
|
@ -36,9 +36,16 @@ def create_object(dn, attrs):
|
||||
|
||||
class LiveTLSLDAPIdentity(_ldap_livetest.LiveLDAPIdentity):
|
||||
|
||||
def _set_config(self):
|
||||
self.config([tests.dirs.tests('test_overrides.conf'),
|
||||
tests.dirs.tests('backend_tls_liveldap.conf')])
|
||||
def config_files(self):
|
||||
config_files = super(LiveTLSLDAPIdentity, self).config_files()
|
||||
config_files.append(tests.dirs.tests('backend_tls_liveldap.conf'))
|
||||
return config_files
|
||||
|
||||
def config_overrides(self):
|
||||
super(LiveTLSLDAPIdentity, self).config_overrides()
|
||||
self.config_fixture.config(
|
||||
group='identity',
|
||||
driver='keystone.identity.backends.ldap.Identity')
|
||||
|
||||
def test_tls_certfile_demand_option(self):
|
||||
self.config_fixture.config(group='ldap',
|
||||
|
@ -1,3 +0,0 @@
|
||||
[auth]
|
||||
methods = external, password, token
|
||||
external = keystone.auth.plugins.external.LegacyDefaultDomain
|
@ -1,2 +0,0 @@
|
||||
[auth]
|
||||
methods = password, token
|
@ -1,3 +0,0 @@
|
||||
[auth]
|
||||
methods = external, password, token
|
||||
external = keystone.auth.plugins.external.Domain
|
@ -1,3 +0,0 @@
|
||||
[auth]
|
||||
methods = external, password, token
|
||||
external = keystone.auth.plugins.external.LegacyDomain
|
@ -4,6 +4,3 @@ user = cn=Admin
|
||||
password = password
|
||||
backend_entities = ['Tenant', 'User', 'UserRoleAssociation', 'Role', 'Group', 'Domain']
|
||||
suffix = cn=example,cn=com
|
||||
|
||||
[identity]
|
||||
driver = keystone.identity.backends.ldap.Identity
|
||||
|
@ -1,6 +1,5 @@
|
||||
[database]
|
||||
connection = sqlite://
|
||||
#For a file based sqlite use
|
||||
#For a specific location file based sqlite use:
|
||||
#connection = sqlite:////tmp/keystone.db
|
||||
#To Test MySQL:
|
||||
#connection = mysql://keystone:keystone@localhost/keystone?charset=utf8
|
||||
@ -13,25 +12,3 @@ url = fake://memory
|
||||
user = cn=Admin
|
||||
password = password
|
||||
suffix = cn=example,cn=com
|
||||
|
||||
[identity]
|
||||
driver = keystone.identity.backends.ldap.Identity
|
||||
|
||||
[assignment]
|
||||
driver = keystone.assignment.backends.sql.Assignment
|
||||
|
||||
[token]
|
||||
driver = keystone.token.backends.sql.Token
|
||||
|
||||
[ec2]
|
||||
driver = keystone.contrib.ec2.backends.sql.Ec2
|
||||
|
||||
[catalog]
|
||||
driver = keystone.catalog.backends.sql.Catalog
|
||||
|
||||
[policy]
|
||||
driver = keystone.policy.backends.sql.Policy
|
||||
|
||||
[trust]
|
||||
driver = keystone.trust.backends.sql.Trust
|
||||
|
||||
|
@ -12,6 +12,3 @@ user_enabled_emulation = True
|
||||
user_mail_attribute = mail
|
||||
use_dumb_member = True
|
||||
|
||||
[identity]
|
||||
driver = keystone.identity.backends.ldap.Identity
|
||||
|
||||
|
@ -7,29 +7,3 @@ connection = sqlite://
|
||||
#To Test PostgreSQL:
|
||||
#connection = postgresql://keystone:keystone@localhost/keystone?client_encoding=utf8
|
||||
idle_timeout = 200
|
||||
|
||||
[identity]
|
||||
# common identity backend is SQL, domain specific configs will
|
||||
# set their backends to ldap
|
||||
driver = keystone.identity.backends.sql.Identity
|
||||
# The test setup will set this to True, to allow easier creation
|
||||
# of initial domain data
|
||||
# domain_specific_drivers_enabled = True
|
||||
|
||||
[assignment]
|
||||
driver = keystone.assignment.backends.sql.Assignment
|
||||
|
||||
[token]
|
||||
driver = keystone.token.backends.sql.Token
|
||||
|
||||
[ec2]
|
||||
driver = keystone.contrib.ec2.backends.sql.Ec2
|
||||
|
||||
[catalog]
|
||||
driver = keystone.catalog.backends.sql.Catalog
|
||||
|
||||
[policy]
|
||||
driver = keystone.policy.backends.sql.Policy
|
||||
|
||||
[trust]
|
||||
driver = keystone.trust.backends.sql.Trust
|
||||
|
@ -1,2 +0,0 @@
|
||||
[policy]
|
||||
driver = keystone.policy.backends.rules.Policy
|
@ -1,30 +1,8 @@
|
||||
[database]
|
||||
connection = sqlite://
|
||||
#For a file based sqlite use
|
||||
#For a specific location file based sqlite use:
|
||||
#connection = sqlite:////tmp/keystone.db
|
||||
#To Test MySQL:
|
||||
#connection = mysql://keystone:keystone@localhost/keystone?charset=utf8
|
||||
#To Test PostgreSQL:
|
||||
#connection = postgresql://keystone:keystone@localhost/keystone?client_encoding=utf8
|
||||
idle_timeout = 200
|
||||
|
||||
[identity]
|
||||
driver = keystone.identity.backends.sql.Identity
|
||||
|
||||
[token]
|
||||
driver = keystone.token.backends.sql.Token
|
||||
|
||||
[ec2]
|
||||
driver = keystone.contrib.ec2.backends.sql.Ec2
|
||||
|
||||
[catalog]
|
||||
driver = keystone.catalog.backends.sql.Catalog
|
||||
|
||||
[policy]
|
||||
driver = keystone.policy.backends.sql.Policy
|
||||
|
||||
[trust]
|
||||
driver = keystone.trust.backends.sql.Trust
|
||||
|
||||
[revoke]
|
||||
driver = keystone.contrib.revoke.backends.sql.Revoke
|
@ -15,7 +15,3 @@ use_tls = True
|
||||
tls_cacertfile = /etc/keystone/ssl/certs/cacert.pem
|
||||
tls_cacertdir = /etc/keystone/ssl/certs/
|
||||
tls_req_cert = demand
|
||||
|
||||
[identity]
|
||||
driver = keystone.identity.backends.ldap.Identity
|
||||
|
||||
|
@ -117,9 +117,12 @@ class dirs:
|
||||
|
||||
# keystone.common.sql.initialize() for testing.
|
||||
def _initialize_sql_session():
|
||||
# Make sure the DB is located in the correct location, in this case set
|
||||
# the default value, as this should be able to be overridden in some
|
||||
# test cases.
|
||||
db_file = dirs.tmp('test.db')
|
||||
db_options.set_defaults(
|
||||
sql_connection="sqlite:///" + db_file,
|
||||
sql_connection='sqlite:///%s' % db_file,
|
||||
sqlite_db=db_file)
|
||||
|
||||
|
||||
@ -350,13 +353,54 @@ class BaseTestCase(testtools.TestCase):
|
||||
|
||||
class TestCase(BaseTestCase):
|
||||
|
||||
_config_file_list = [dirs.tests('test_overrides.conf')]
|
||||
_config_file_list = []
|
||||
|
||||
def config_files(self):
|
||||
return copy.copy(self._config_file_list)
|
||||
|
||||
def config_overrides(self):
|
||||
self.config_fixture.config(policy_file=dirs.etc('policy.json'))
|
||||
self.config_fixture.config(
|
||||
group='auth',
|
||||
methods=['keystone.auth.plugins.external.DefaultDomain',
|
||||
'keystone.auth.plugins.password.Password',
|
||||
'keystone.auth.plugins.token.Token',
|
||||
'keystone.auth.plugins.oauth1.OAuth',
|
||||
'keystone.auth.plugins.saml2.Saml2'])
|
||||
self.config_fixture.config(
|
||||
# TODO(morganfainberg): Make Cache Testing a separate test case
|
||||
# in tempest, and move it out of the base unit tests.
|
||||
group='cache',
|
||||
backend='dogpile.cache.memory',
|
||||
enabled=True,
|
||||
debug_cache_backend=True,
|
||||
proxies=['keystone.tests.test_cache.CacheIsolatingProxy'])
|
||||
self.config_fixture.config(
|
||||
group='catalog',
|
||||
driver='keystone.catalog.backends.templated.Catalog',
|
||||
template_file=dirs.tests('default_catalog.templates'))
|
||||
self.config_fixture.config(
|
||||
group='identity',
|
||||
driver='keystone.identity.backends.kvs.Identity')
|
||||
self.config_fixture.config(
|
||||
group='kvs',
|
||||
backends=[
|
||||
'keystone.tests.test_kvs.KVSBackendForcedKeyMangleFixture',
|
||||
'keystone.tests.test_kvs.KVSBackendFixture'])
|
||||
self.config_fixture.config(
|
||||
group='revoke',
|
||||
driver='keystone.contrib.revoke.backends.kvs.Revoke')
|
||||
self.config_fixture.config(
|
||||
group='signing',
|
||||
certfile='examples/pki/certs/signing_cert.pem',
|
||||
keyfile='examples/pki/private/signing_key.pem',
|
||||
ca_certs='examples/pki/certs/cacert.pem')
|
||||
self.config_fixture.config(
|
||||
group='token',
|
||||
driver='keystone.token.backends.kvs.Token')
|
||||
self.config_fixture.config(
|
||||
group='trust',
|
||||
driver='keystone.trust.backends.kvs.Trust')
|
||||
|
||||
def setUp(self):
|
||||
super(TestCase, self).setUp()
|
||||
@ -688,3 +732,31 @@ class TestCase(BaseTestCase):
|
||||
|
||||
standardMsg = '\n'.join(lines)
|
||||
self.fail(self._formatMessage(msg, standardMsg))
|
||||
|
||||
|
||||
class SQLDriverOverrides(object):
|
||||
"""A mixin for consolidating sql-specific test overrides."""
|
||||
def config_overrides(self):
|
||||
super(SQLDriverOverrides, self).config_overrides()
|
||||
# SQL specific driver overrides
|
||||
self.config_fixture.config(
|
||||
group='catalog',
|
||||
driver='keystone.catalog.backends.sql.Catalog')
|
||||
self.config_fixture.config(
|
||||
group='ec2',
|
||||
driver='keystone.contrib.ec2.backends.sql.Ec2')
|
||||
self.config_fixture.config(
|
||||
group='identity',
|
||||
driver='keystone.identity.backends.sql.Identity')
|
||||
self.config_fixture.config(
|
||||
group='policy',
|
||||
driver='keystone.policy.backends.sql.Policy')
|
||||
self.config_fixture.config(
|
||||
group='revoke',
|
||||
driver='keystone.contrib.revoke.backends.sql.Revoke')
|
||||
self.config_fixture.config(
|
||||
group='token',
|
||||
driver='keystone.token.backends.sql.Token')
|
||||
self.config_fixture.config(
|
||||
group='trust',
|
||||
driver='keystone.trust.backends.sql.Trust')
|
||||
|
@ -1,2 +0,0 @@
|
||||
[catalog]
|
||||
driver = keystone.contrib.endpoint_filter.backends.catalog_sql.EndpointFilterCatalog
|
@ -20,7 +20,6 @@ from keystone.common.sql import migration_helpers
|
||||
from keystone import contrib
|
||||
from keystone.openstack.common.db.sqlalchemy import migration
|
||||
from keystone.openstack.common import importutils
|
||||
from keystone import tests
|
||||
from keystone.tests import test_v3
|
||||
|
||||
|
||||
@ -29,12 +28,6 @@ class TestExtensionCase(test_v3.RestfulTestCase):
|
||||
EXTENSION_NAME = 'endpoint_filter'
|
||||
EXTENSION_TO_ADD = 'endpoint_filter_extension'
|
||||
|
||||
def config_files(self):
|
||||
conf_files = super(TestExtensionCase, self).config_files()
|
||||
conf_files.append(tests.dirs.tests(
|
||||
'test_associate_project_endpoint_extension.conf'))
|
||||
return conf_files
|
||||
|
||||
def setup_database(self):
|
||||
super(TestExtensionCase, self).setup_database()
|
||||
package_name = '.'.join((contrib.__name__, self.EXTENSION_NAME))
|
||||
@ -43,6 +36,13 @@ class TestExtensionCase(test_v3.RestfulTestCase):
|
||||
migration.db_version_control(sql.get_engine(), abs_path)
|
||||
migration.db_sync(sql.get_engine(), abs_path)
|
||||
|
||||
def config_overrides(self):
|
||||
super(TestExtensionCase, self).config_overrides()
|
||||
self.config_fixture.config(
|
||||
group='catalog',
|
||||
driver='keystone.contrib.endpoint_filter.backends.catalog_sql.'
|
||||
'EndpointFilterCatalog')
|
||||
|
||||
def setUp(self):
|
||||
super(TestExtensionCase, self).setUp()
|
||||
self.default_request_url = (
|
||||
|
@ -967,14 +967,15 @@ class TokenExpirationTest(AuthTest):
|
||||
self._maintain_token_expiration()
|
||||
|
||||
|
||||
class AuthCatalog(AuthTest):
|
||||
class AuthCatalog(tests.SQLDriverOverrides, AuthTest):
|
||||
"""Tests for the catalog provided in the auth response."""
|
||||
|
||||
def config(self, config_files):
|
||||
def config_files(self):
|
||||
config_files = super(AuthCatalog, self).config_files()
|
||||
# We need to use a backend that supports disabled endpoints, like the
|
||||
# SQL backend.
|
||||
config_files.append(tests.dirs.tests('backend_sql.conf'))
|
||||
super(AuthCatalog, self).config(config_files)
|
||||
return config_files
|
||||
|
||||
def _create_endpoints(self):
|
||||
def create_endpoint(service_id, region, **kwargs):
|
||||
|
@ -54,7 +54,7 @@ class NoMethodAuthPlugin(auth.AuthMethodHandler):
|
||||
pass
|
||||
|
||||
|
||||
class TestAuthPlugin(tests.TestCase):
|
||||
class TestAuthPlugin(tests.SQLDriverOverrides, tests.TestCase):
|
||||
def setUp(self):
|
||||
super(TestAuthPlugin, self).setUp()
|
||||
self.load_backends()
|
||||
@ -66,14 +66,19 @@ class TestAuthPlugin(tests.TestCase):
|
||||
self.api = auth.controllers.Auth()
|
||||
|
||||
def config_files(self):
|
||||
return [tests.dirs.tests('test_overrides.conf'),
|
||||
tests.dirs.tests('backend_sql.conf'),
|
||||
tests.dirs.tests('test_auth_plugin.conf')]
|
||||
config_files = super(TestAuthPlugin, self).config_files()
|
||||
config_files.append(tests.dirs.tests('test_auth_plugin.conf'))
|
||||
return config_files
|
||||
|
||||
def config(self, config_files):
|
||||
super(TestAuthPlugin, self).config(config_files)
|
||||
db_conn = 'sqlite:///%s' % tests.dirs.tmp('test.db')
|
||||
self.config_fixture.config(group='database', connection=db_conn)
|
||||
def config_overrides(self):
|
||||
super(TestAuthPlugin, self).config_overrides()
|
||||
self.config_fixture.config(
|
||||
group='auth',
|
||||
methods=[
|
||||
'keystone.auth.plugins.external.DefaultDomain',
|
||||
'keystone.auth.plugins.password.Password',
|
||||
'keystone.auth.plugins.token.Token',
|
||||
'keystone.tests.test_auth_plugin.SimpleChallengeResponse'])
|
||||
|
||||
def test_unsupported_auth_method(self):
|
||||
method_name = uuid.uuid4().hex
|
||||
@ -124,11 +129,17 @@ class TestAuthPlugin(tests.TestCase):
|
||||
auth_context)
|
||||
|
||||
|
||||
class TestByClassNameAuthMethodRegistration(TestAuthPlugin):
|
||||
class TestAuthPluginDynamicOptions(TestAuthPlugin):
|
||||
def config_overrides(self):
|
||||
super(TestAuthPluginDynamicOptions, self).config_overrides()
|
||||
# Clear the override for the [auth] ``methods`` option so it is
|
||||
# possible to load the options from the config file.
|
||||
self.config_fixture.conf.clear_override('methods', group='auth')
|
||||
|
||||
def config_files(self):
|
||||
return [tests.dirs.tests('test_overrides.conf'),
|
||||
tests.dirs.tests('backend_sql.conf'),
|
||||
tests.dirs.tests('test_auth_plugin_by_class_name.conf')]
|
||||
config_files = super(TestAuthPluginDynamicOptions, self).config_files()
|
||||
config_files.append(tests.dirs.tests('test_auth_plugin.conf'))
|
||||
return config_files
|
||||
|
||||
|
||||
class TestInvalidAuthMethodRegistration(tests.TestCase):
|
||||
|
@ -1,2 +0,0 @@
|
||||
[auth]
|
||||
methods = keystone.auth.plugins.external.DefaultDomain,keystone.auth.plugins.password.Password,keystone.auth.plugins.token.Token,keystone.tests.test_auth_plugin.SimpleChallengeResponse
|
@ -52,9 +52,16 @@ class BaseLDAPIdentity(test_backend.IdentityTests):
|
||||
# Only one conf structure unless we are using separate domain backends
|
||||
return CONF
|
||||
|
||||
def _set_config(self):
|
||||
self.config([tests.dirs.tests('test_overrides.conf'),
|
||||
tests.dirs.tests('backend_ldap.conf')])
|
||||
def config_overrides(self):
|
||||
super(BaseLDAPIdentity, self).config_overrides()
|
||||
self.config_fixture.config(
|
||||
group='identity',
|
||||
driver='keystone.identity.backends.ldap.Identity')
|
||||
|
||||
def config_files(self):
|
||||
config_files = super(BaseLDAPIdentity, self).config_files()
|
||||
config_files.append(tests.dirs.tests('backend_ldap.conf'))
|
||||
return config_files
|
||||
|
||||
def test_build_tree(self):
|
||||
"""Regression test for building the tree names
|
||||
@ -511,10 +518,9 @@ class BaseLDAPIdentity(test_backend.IdentityTests):
|
||||
self.skipTest("Using arbitrary attributes doesn't work under LDAP")
|
||||
|
||||
|
||||
class LDAPIdentity(tests.TestCase, BaseLDAPIdentity):
|
||||
class LDAPIdentity(BaseLDAPIdentity, tests.TestCase):
|
||||
def setUp(self):
|
||||
super(LDAPIdentity, self).setUp()
|
||||
self._set_config()
|
||||
self.clear_database()
|
||||
|
||||
common_ldap.register_handler('fake://', fakeldap.FakeLdap)
|
||||
@ -853,8 +859,8 @@ class LDAPIdentity(tests.TestCase, BaseLDAPIdentity):
|
||||
|
||||
def test_user_api_get_connection_no_user_password(self):
|
||||
"""Don't bind in case the user and password are blank."""
|
||||
self.config([tests.dirs.tests('test_overrides.conf')])
|
||||
CONF.ldap.url = "fake://memory"
|
||||
# Ensure the username/password are in-fact blank
|
||||
self.config_fixture.config(group='ldap', user=None, password=None)
|
||||
user_api = identity.backends.ldap.UserApi(CONF)
|
||||
self.stubs.Set(fakeldap, 'FakeLdap',
|
||||
self.mox.CreateMock(fakeldap.FakeLdap))
|
||||
@ -1111,8 +1117,6 @@ class LDAPIdentity(tests.TestCase, BaseLDAPIdentity):
|
||||
class LDAPIdentityEnabledEmulation(LDAPIdentity):
|
||||
def setUp(self):
|
||||
super(LDAPIdentityEnabledEmulation, self).setUp()
|
||||
self.config([tests.dirs.tests('test_overrides.conf'),
|
||||
tests.dirs.tests('backend_ldap.conf')])
|
||||
self.clear_database()
|
||||
self.load_backends()
|
||||
self.load_fixtures(default_fixtures)
|
||||
@ -1120,6 +1124,11 @@ class LDAPIdentityEnabledEmulation(LDAPIdentity):
|
||||
self.user_two, self.user_badguy]:
|
||||
obj.setdefault('enabled', True)
|
||||
|
||||
def config_files(self):
|
||||
config_files = super(LDAPIdentityEnabledEmulation, self).config_files()
|
||||
config_files.append(tests.dirs.tests('backend_ldap.conf'))
|
||||
return config_files
|
||||
|
||||
def config_overrides(self):
|
||||
super(LDAPIdentityEnabledEmulation, self).config_overrides()
|
||||
self.config_fixture.config(group='ldap',
|
||||
@ -1185,15 +1194,16 @@ class LDAPIdentityEnabledEmulation(LDAPIdentity):
|
||||
"Enabled emulation conflicts with enabled mask")
|
||||
|
||||
|
||||
class LdapIdentitySqlAssignment(tests.TestCase, BaseLDAPIdentity):
|
||||
class LdapIdentitySqlAssignment(BaseLDAPIdentity, tests.SQLDriverOverrides,
|
||||
tests.TestCase):
|
||||
|
||||
def _set_config(self):
|
||||
self.config([tests.dirs.tests('test_overrides.conf'),
|
||||
tests.dirs.tests('backend_ldap_sql.conf')])
|
||||
def config_files(self):
|
||||
config_files = super(LdapIdentitySqlAssignment, self).config_files()
|
||||
config_files.append(tests.dirs.tests('backend_ldap_sql.conf'))
|
||||
return config_files
|
||||
|
||||
def setUp(self):
|
||||
super(LdapIdentitySqlAssignment, self).setUp()
|
||||
self._set_config()
|
||||
self.clear_database()
|
||||
self.load_backends()
|
||||
cache.configure_cache_region(cache.REGION)
|
||||
@ -1207,6 +1217,15 @@ class LdapIdentitySqlAssignment(tests.TestCase, BaseLDAPIdentity):
|
||||
#defaulted by the data load
|
||||
self.user_foo['enabled'] = True
|
||||
|
||||
def config_overrides(self):
|
||||
super(LdapIdentitySqlAssignment, self).config_overrides()
|
||||
self.config_fixture.config(
|
||||
group='identity',
|
||||
driver='keystone.identity.backends.ldap.Identity')
|
||||
self.config_fixture.config(
|
||||
group='assignment',
|
||||
driver='keystone.assignment.backends.sql.Assignment')
|
||||
|
||||
def test_domain_crud(self):
|
||||
pass
|
||||
|
||||
@ -1248,7 +1267,8 @@ class LdapIdentitySqlAssignment(tests.TestCase, BaseLDAPIdentity):
|
||||
self.skipTest('Blocked by bug 1221805')
|
||||
|
||||
|
||||
class MultiLDAPandSQLIdentity(tests.TestCase, BaseLDAPIdentity):
|
||||
class MultiLDAPandSQLIdentity(BaseLDAPIdentity, tests.SQLDriverOverrides,
|
||||
tests.TestCase):
|
||||
"""Class to test common SQL plus individual LDAP backends.
|
||||
|
||||
We define a set of domains and domain-specific backends:
|
||||
@ -1269,7 +1289,6 @@ class MultiLDAPandSQLIdentity(tests.TestCase, BaseLDAPIdentity):
|
||||
def setUp(self):
|
||||
super(MultiLDAPandSQLIdentity, self).setUp()
|
||||
|
||||
self._set_config()
|
||||
self.load_backends()
|
||||
|
||||
self.engine = sql.get_engine()
|
||||
@ -1291,9 +1310,16 @@ class MultiLDAPandSQLIdentity(tests.TestCase, BaseLDAPIdentity):
|
||||
self.clear_database()
|
||||
self.load_fixtures(default_fixtures)
|
||||
|
||||
def _set_config(self):
|
||||
self.config([tests.dirs.tests('test_overrides.conf'),
|
||||
tests.dirs.tests('backend_multi_ldap_sql.conf')])
|
||||
def config_overrides(self):
|
||||
super(MultiLDAPandSQLIdentity, self).config_overrides()
|
||||
# Make sure identity and assignment are actually SQL drivers,
|
||||
# BaseLDAPIdentity sets these options to use LDAP.
|
||||
self.config_fixture.config(
|
||||
group='identity',
|
||||
driver='keystone.identity.backends.sql.Identity')
|
||||
self.config_fixture.config(
|
||||
group='assignment',
|
||||
driver='keystone.assignment.backends.sql.Assignment')
|
||||
|
||||
def _setup_domain_test_data(self):
|
||||
|
||||
@ -1321,21 +1347,15 @@ class MultiLDAPandSQLIdentity(tests.TestCase, BaseLDAPIdentity):
|
||||
# test overrides are included.
|
||||
self.identity_api.domain_configs._load_config(
|
||||
self.identity_api.assignment_api,
|
||||
[tests.dirs.tests('test_overrides.conf'),
|
||||
tests.dirs.tests('backend_multi_ldap_sql.conf'),
|
||||
tests.dirs.tests('keystone.Default.conf')],
|
||||
[tests.dirs.tests('keystone.Default.conf')],
|
||||
'Default')
|
||||
self.identity_api.domain_configs._load_config(
|
||||
self.identity_api.assignment_api,
|
||||
[tests.dirs.tests('test_overrides.conf'),
|
||||
tests.dirs.tests('backend_multi_ldap_sql.conf'),
|
||||
tests.dirs.tests('keystone.domain1.conf')],
|
||||
[tests.dirs.tests('keystone.domain1.conf')],
|
||||
'domain1')
|
||||
self.identity_api.domain_configs._load_config(
|
||||
self.identity_api.assignment_api,
|
||||
[tests.dirs.tests('test_overrides.conf'),
|
||||
tests.dirs.tests('backend_multi_ldap_sql.conf'),
|
||||
tests.dirs.tests('keystone.domain2.conf')],
|
||||
[tests.dirs.tests('keystone.domain2.conf')],
|
||||
'domain2')
|
||||
|
||||
def reload_backends(self, domain_id):
|
||||
|
@ -21,11 +21,14 @@ from keystone.tests import test_backend
|
||||
class RulesPolicy(tests.TestCase, test_backend.PolicyTests):
|
||||
def setUp(self):
|
||||
super(RulesPolicy, self).setUp()
|
||||
self.config([tests.dirs.tests('test_overrides.conf'),
|
||||
tests.dirs.tests('backend_rules.conf')])
|
||||
|
||||
self.load_backends()
|
||||
|
||||
def config_overrides(self):
|
||||
super(RulesPolicy, self).config_overrides()
|
||||
self.config_fixture.config(
|
||||
group='policy',
|
||||
driver='keystone.policy.backends.rules.Policy')
|
||||
|
||||
def test_create(self):
|
||||
self.assertRaises(exception.NotImplemented,
|
||||
super(RulesPolicy, self).test_create)
|
||||
|
@ -34,13 +34,10 @@ CONF = config.CONF
|
||||
DEFAULT_DOMAIN_ID = CONF.identity.default_domain_id
|
||||
|
||||
|
||||
class SqlTests(tests.TestCase):
|
||||
class SqlTests(tests.SQLDriverOverrides, tests.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(SqlTests, self).setUp()
|
||||
self.config([tests.dirs.tests('test_overrides.conf'),
|
||||
tests.dirs.tests('backend_sql.conf')])
|
||||
|
||||
self.load_backends()
|
||||
|
||||
# populate the engine with tables & fixtures
|
||||
@ -48,6 +45,11 @@ class SqlTests(tests.TestCase):
|
||||
#defaulted by the data load
|
||||
self.user_foo['enabled'] = True
|
||||
|
||||
def config_files(self):
|
||||
config_files = super(SqlTests, self).config_files()
|
||||
config_files.append(tests.dirs.tests('backend_sql.conf'))
|
||||
return config_files
|
||||
|
||||
|
||||
class SqlModels(SqlTests):
|
||||
def setUp(self):
|
||||
|
@ -53,10 +53,10 @@ class ConfigTestCase(tests.TestCase):
|
||||
class DeprecatedTestCase(tests.TestCase):
|
||||
"""Test using the original (deprecated) name for renamed options."""
|
||||
|
||||
def setUp(self):
|
||||
super(DeprecatedTestCase, self).setUp()
|
||||
self.config([tests.dirs.tests('test_overrides.conf'),
|
||||
tests.dirs.tests('deprecated.conf'), ])
|
||||
def config_files(self):
|
||||
config_files = super(DeprecatedTestCase, self).config_files()
|
||||
config_files.append(tests.dirs.tests('deprecated.conf'))
|
||||
return config_files
|
||||
|
||||
def test_sql(self):
|
||||
# Options in [sql] were moved to [database] in Icehouse for the change
|
||||
@ -69,10 +69,10 @@ class DeprecatedTestCase(tests.TestCase):
|
||||
class DeprecatedOverrideTestCase(tests.TestCase):
|
||||
"""Test using the deprecated AND new name for renamed options."""
|
||||
|
||||
def setUp(self):
|
||||
super(DeprecatedOverrideTestCase, self).setUp()
|
||||
self.config([tests.dirs.tests('test_overrides.conf'),
|
||||
tests.dirs.tests('deprecated_override.conf'), ])
|
||||
def config_files(self):
|
||||
config_files = super(DeprecatedOverrideTestCase, self).config_files()
|
||||
config_files.append(tests.dirs.tests('deprecated_override.conf'))
|
||||
return config_files
|
||||
|
||||
def test_sql(self):
|
||||
# Options in [sql] were moved to [database] in Icehouse for the change
|
||||
|
@ -18,7 +18,6 @@ import six
|
||||
|
||||
from keystone.common import extension
|
||||
from keystone import config
|
||||
from keystone import tests
|
||||
from keystone.tests import rest
|
||||
|
||||
|
||||
@ -1313,10 +1312,15 @@ class JsonTestCase(RestfulTestCase, CoreApiTests, LegacyV2UsernameTests):
|
||||
|
||||
|
||||
class RevokeApiJsonTestCase(JsonTestCase):
|
||||
def config_files(self):
|
||||
cfg_list = self._config_file_list[:]
|
||||
cfg_list.append(tests.dirs.tests('test_revoke_kvs.conf'))
|
||||
return cfg_list
|
||||
def config_overrides(self):
|
||||
super(RevokeApiJsonTestCase, self).config_overrides()
|
||||
self.config_fixture.config(
|
||||
group='revoke',
|
||||
driver='keystone.contrib.revoke.backends.kvs.Revoke')
|
||||
self.config_fixture.config(
|
||||
group='token',
|
||||
provider='keystone.token.providers.pki.Provider',
|
||||
revoke_by_id=False)
|
||||
|
||||
def test_fetch_revocation_list_admin_200(self):
|
||||
self.skipTest('Revoke API disables revocation_list.')
|
||||
|
@ -26,10 +26,10 @@ CONF = config.CONF
|
||||
|
||||
|
||||
class KcMasterSqlTestCase(test_keystoneclient.KcMasterTestCase):
|
||||
def config(self, config_files):
|
||||
super(KcMasterSqlTestCase, self).config([
|
||||
tests.dirs.tests('test_overrides.conf'),
|
||||
tests.dirs.tests('backend_sql.conf')])
|
||||
def config_files(self):
|
||||
config_files = super(KcMasterSqlTestCase, self).config_files()
|
||||
config_files.append(tests.dirs.tests('backend_sql.conf'))
|
||||
return config_files
|
||||
|
||||
def setUp(self):
|
||||
super(KcMasterSqlTestCase, self).setUp()
|
||||
|
@ -1,37 +0,0 @@
|
||||
[DEFAULT]
|
||||
crypt_strength = 1000
|
||||
|
||||
[identity]
|
||||
driver = keystone.identity.backends.kvs.Identity
|
||||
|
||||
[catalog]
|
||||
driver = keystone.catalog.backends.templated.Catalog
|
||||
template_file = default_catalog.templates
|
||||
|
||||
[trust]
|
||||
driver = keystone.trust.backends.kvs.Trust
|
||||
|
||||
[token]
|
||||
driver = keystone.token.backends.kvs.Token
|
||||
|
||||
[cache]
|
||||
backend = dogpile.cache.memory
|
||||
enabled = True
|
||||
debug_cache_backend = True
|
||||
proxies = keystone.tests.test_cache.CacheIsolatingProxy
|
||||
|
||||
[signing]
|
||||
certfile = examples/pki/certs/signing_cert.pem
|
||||
keyfile = examples/pki/private/signing_key.pem
|
||||
ca_certs = examples/pki/certs/cacert.pem
|
||||
|
||||
[kvs]
|
||||
backends = keystone.tests.test_kvs.KVSBackendForcedKeyMangleFixture, keystone.tests.test_kvs.KVSBackendFixture
|
||||
|
||||
[auth]
|
||||
methods = external,password,token,oauth1,saml2
|
||||
oauth1 = keystone.auth.plugins.oauth1.OAuth
|
||||
saml2 = keystone.auth.plugins.saml2.Saml2
|
||||
|
||||
[revoke]
|
||||
driver=keystone.contrib.revoke.backends.kvs.Revoke
|
@ -1,2 +0,0 @@
|
||||
[token]
|
||||
provider = keystone.token.providers.pki.Provider
|
@ -172,15 +172,30 @@ class RevokeTests(object):
|
||||
|
||||
|
||||
class SqlRevokeTests(test_backend_sql.SqlTests, RevokeTests):
|
||||
def setUp(self):
|
||||
super(SqlRevokeTests, self).setUp()
|
||||
self.config([tests.dirs.tests('test_revoke_sql.conf')])
|
||||
def config_overrides(self):
|
||||
super(SqlRevokeTests, self).config_overrides()
|
||||
self.config_fixture.config(
|
||||
group='revoke',
|
||||
driver='keystone.contrib.revoke.backends.sql.Revoke')
|
||||
self.config_fixture.config(
|
||||
group='token',
|
||||
provider='keystone.token.providers.pki.Provider',
|
||||
revoke_by_id=False)
|
||||
|
||||
|
||||
class KvsRevokeTests(tests.TestCase, RevokeTests):
|
||||
def config_overrides(self):
|
||||
super(KvsRevokeTests, self).config_overrides()
|
||||
self.config_fixture.config(
|
||||
group='revoke',
|
||||
driver='keystone.contrib.revoke.backends.kvs.Revoke')
|
||||
self.config_fixture.config(
|
||||
group='token',
|
||||
provider='keystone.token.providers.pki.Provider',
|
||||
revoke_by_id=False)
|
||||
|
||||
def setUp(self):
|
||||
super(KvsRevokeTests, self).setUp()
|
||||
self.config([tests.dirs.tests('test_revoke_kvs.conf')])
|
||||
self.load_backends()
|
||||
|
||||
|
||||
|
@ -1,6 +0,0 @@
|
||||
[token]
|
||||
provider = keystone.token.providers.pki.Provider
|
||||
revoke_by_id = False
|
||||
|
||||
[revoke]
|
||||
driver = keystone.contrib.revoke.backends.kvs.Revoke
|
@ -1,6 +0,0 @@
|
||||
[token]
|
||||
provider = keystone.token.providers.pki.Provider
|
||||
revoke_by_id = False
|
||||
|
||||
[revoke]
|
||||
driver = keystone.contrib.revoke.backends.sql.Revoke
|
@ -56,17 +56,15 @@ CONF = config.CONF
|
||||
DEFAULT_DOMAIN_ID = CONF.identity.default_domain_id
|
||||
|
||||
|
||||
class SqlMigrateBase(tests.TestCase):
|
||||
class SqlMigrateBase(tests.SQLDriverOverrides, tests.TestCase):
|
||||
def initialize_sql(self):
|
||||
self.metadata = sqlalchemy.MetaData()
|
||||
self.metadata.bind = self.engine
|
||||
|
||||
_config_file_list = [tests.dirs.tests('test_overrides.conf'),
|
||||
tests.dirs.tests('backend_sql.conf')]
|
||||
|
||||
#override this to specify the complete list of configuration files
|
||||
def config_files(self):
|
||||
return self._config_file_list
|
||||
config_files = super(SqlMigrateBase, self).config_files()
|
||||
config_files.append(tests.dirs.tests('backend_sql.conf'))
|
||||
return config_files
|
||||
|
||||
def repo_package(self):
|
||||
return sql
|
||||
|
@ -1,2 +0,0 @@
|
||||
[token]
|
||||
provider = keystone.token.providers.uuid.Provider
|
@ -12,7 +12,6 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import copy
|
||||
import datetime
|
||||
import uuid
|
||||
|
||||
@ -37,15 +36,11 @@ DEFAULT_DOMAIN_ID = 'default'
|
||||
TIME_FORMAT = '%Y-%m-%dT%H:%M:%S.%fZ'
|
||||
|
||||
|
||||
class RestfulTestCase(rest.RestfulTestCase):
|
||||
_config_file_list = [tests.dirs.tests('test_overrides.conf'),
|
||||
tests.dirs.tests('backend_sql.conf')]
|
||||
|
||||
#Subclasses can override this to specify the complete list of configuration
|
||||
#files. The base version makes a copy of the original values, otherwise
|
||||
#additional tests end up appending to them and corrupting other tests.
|
||||
class RestfulTestCase(tests.SQLDriverOverrides, rest.RestfulTestCase):
|
||||
def config_files(self):
|
||||
return copy.copy(self._config_file_list)
|
||||
config_files = super(RestfulTestCase, self).config_files()
|
||||
config_files.append(tests.dirs.tests('backend_sql.conf'))
|
||||
return config_files
|
||||
|
||||
def setup_database(self):
|
||||
tests.setup_database()
|
||||
@ -88,11 +83,6 @@ class RestfulTestCase(rest.RestfulTestCase):
|
||||
|
||||
self.addCleanup(self.teardown_database)
|
||||
|
||||
def config(self, config_files):
|
||||
super(RestfulTestCase, self).config(config_files)
|
||||
db_conn = 'sqlite:///%s' % tests.dirs.tmp('test.db')
|
||||
self.config_fixture.config(group='database', connection=db_conn)
|
||||
|
||||
def load_backends(self):
|
||||
self.setup_database()
|
||||
|
||||
|
@ -381,10 +381,11 @@ class TokenAPITests(object):
|
||||
|
||||
|
||||
class TestPKITokenAPIs(test_v3.RestfulTestCase, TokenAPITests):
|
||||
def config_files(self):
|
||||
conf_files = super(TestPKITokenAPIs, self).config_files()
|
||||
conf_files.append(tests.dirs.tests('test_pki_token_provider.conf'))
|
||||
return conf_files
|
||||
def config_overrides(self):
|
||||
super(TestPKITokenAPIs, self).config_overrides()
|
||||
self.config_fixture.config(
|
||||
group='token',
|
||||
provider='keystone.token.providers.pki.Provider')
|
||||
|
||||
def setUp(self):
|
||||
super(TestPKITokenAPIs, self).setUp()
|
||||
@ -392,10 +393,11 @@ class TestPKITokenAPIs(test_v3.RestfulTestCase, TokenAPITests):
|
||||
|
||||
|
||||
class TestUUIDTokenAPIs(test_v3.RestfulTestCase, TokenAPITests):
|
||||
def config_files(self):
|
||||
conf_files = super(TestUUIDTokenAPIs, self).config_files()
|
||||
conf_files.append(tests.dirs.tests('test_uuid_token_provider.conf'))
|
||||
return conf_files
|
||||
def config_overrides(self):
|
||||
super(TestUUIDTokenAPIs, self).config_overrides()
|
||||
self.config_fixture.config(
|
||||
group='token',
|
||||
provider='keystone.token.providers.uuid.Provider')
|
||||
|
||||
def setUp(self):
|
||||
super(TestUUIDTokenAPIs, self).setUp()
|
||||
@ -570,11 +572,15 @@ class TestTokenRevokeSelfAndAdmin(test_v3.RestfulTestCase):
|
||||
class TestTokenRevokeById(test_v3.RestfulTestCase):
|
||||
"""Test token revocation on the v3 Identity API."""
|
||||
|
||||
def config_files(self):
|
||||
conf_files = super(TestTokenRevokeById, self).config_files()
|
||||
conf_files.append(tests.dirs.tests(
|
||||
'test_revoke_kvs.conf'))
|
||||
return conf_files
|
||||
def config_overrides(self):
|
||||
super(TestTokenRevokeById, self).config_overrides()
|
||||
self.config_fixture.config(
|
||||
group='revoke',
|
||||
driver='keystone.contrib.revoke.backends.kvs.Revoke')
|
||||
self.config_fixture.config(
|
||||
group='token',
|
||||
provider='keystone.token.providers.pki.Provider',
|
||||
revoke_by_id=False)
|
||||
|
||||
def setUp(self):
|
||||
"""Setup for Token Revoking Test Cases.
|
||||
@ -1187,11 +1193,15 @@ class TestTokenRevokeApi(TestTokenRevokeById):
|
||||
EXTENSION_TO_ADD = 'revoke_extension'
|
||||
|
||||
"""Test token revocation on the v3 Identity API."""
|
||||
def config_files(self):
|
||||
conf_files = super(TestTokenRevokeApi, self).config_files()
|
||||
conf_files.append(tests.dirs.tests(
|
||||
'test_revoke_kvs.conf'))
|
||||
return conf_files
|
||||
def config_overrides(self):
|
||||
super(TestTokenRevokeApi, self).config_overrides()
|
||||
self.config_fixture.config(
|
||||
group='revoke',
|
||||
driver='keystone.contrib.revoke.backends.kvs.Revoke')
|
||||
self.config_fixture.config(
|
||||
group='token',
|
||||
provider='keystone.token.providers.pki.Provider',
|
||||
revoke_by_id=False)
|
||||
|
||||
def assertValidDeletedProjectResponse(self, events_response, project_id):
|
||||
events = events_response['events']
|
||||
@ -1372,10 +1382,12 @@ class TestTokenRevokeApi(TestTokenRevokeById):
|
||||
|
||||
|
||||
class TestAuthExternalDisabled(test_v3.RestfulTestCase):
|
||||
def config_files(self):
|
||||
cfg_list = self._config_file_list[:]
|
||||
cfg_list.append(tests.dirs.tests('auth_plugin_external_disabled.conf'))
|
||||
return cfg_list
|
||||
def config_overrides(self):
|
||||
super(TestAuthExternalDisabled, self).config_overrides()
|
||||
self.config_fixture.config(
|
||||
group='auth',
|
||||
methods=['keystone.auth.plugins.password.Password',
|
||||
'keystone.auth.plugins.token.Token'])
|
||||
|
||||
def test_remote_user_disabled(self):
|
||||
api = auth.controllers.Auth()
|
||||
@ -1392,11 +1404,13 @@ class TestAuthExternalDisabled(test_v3.RestfulTestCase):
|
||||
class TestAuthExternalLegacyDefaultDomain(test_v3.RestfulTestCase):
|
||||
content_type = 'json'
|
||||
|
||||
def config_files(self):
|
||||
cfg_list = self._config_file_list[:]
|
||||
cfg_list.append(
|
||||
tests.dirs.tests('auth_plugin_external_default_legacy.conf'))
|
||||
return cfg_list
|
||||
def config_overrides(self):
|
||||
super(TestAuthExternalLegacyDefaultDomain, self).config_overrides()
|
||||
self.config_fixture.config(
|
||||
group='auth',
|
||||
methods=['keystone.auth.plugins.external.LegacyDefaultDomain',
|
||||
'keystone.auth.plugins.password.Password',
|
||||
'keystone.auth.plugins.token.Token'])
|
||||
|
||||
def test_remote_user_no_realm(self):
|
||||
CONF.auth.methods = 'external'
|
||||
@ -1421,11 +1435,13 @@ class TestAuthExternalLegacyDefaultDomain(test_v3.RestfulTestCase):
|
||||
class TestAuthExternalLegacyDomain(test_v3.RestfulTestCase):
|
||||
content_type = 'json'
|
||||
|
||||
def config_files(self):
|
||||
cfg_list = self._config_file_list[:]
|
||||
cfg_list.append(
|
||||
tests.dirs.tests('auth_plugin_external_domain_legacy.conf'))
|
||||
return cfg_list
|
||||
def config_overrides(self):
|
||||
super(TestAuthExternalLegacyDomain, self).config_overrides()
|
||||
self.config_fixture.config(
|
||||
group='auth',
|
||||
methods=['keystone.auth.plugins.external.LegacyDomain',
|
||||
'keystone.auth.plugins.password.Password',
|
||||
'keystone.auth.plugins.token.Token'])
|
||||
|
||||
def test_remote_user_with_realm(self):
|
||||
api = auth.controllers.Auth()
|
||||
@ -1472,10 +1488,13 @@ class TestAuthExternalLegacyDomain(test_v3.RestfulTestCase):
|
||||
class TestAuthExternalDomain(test_v3.RestfulTestCase):
|
||||
content_type = 'json'
|
||||
|
||||
def config_files(self):
|
||||
cfg_list = self._config_file_list[:]
|
||||
cfg_list.append(tests.dirs.tests('auth_plugin_external_domain.conf'))
|
||||
return cfg_list
|
||||
def config_overrides(self):
|
||||
super(TestAuthExternalDomain, self).config_overrides()
|
||||
self.config_fixture.config(
|
||||
group='auth',
|
||||
methods=['keystone.auth.plugins.external.Domain',
|
||||
'keystone.auth.plugins.password.Password',
|
||||
'keystone.auth.plugins.token.Token'])
|
||||
|
||||
def test_remote_user_with_realm(self):
|
||||
api = auth.controllers.Auth()
|
||||
@ -2263,11 +2282,16 @@ class TestTrustAuth(TestAuthInfo):
|
||||
EXTENSION_NAME = 'revoke'
|
||||
EXTENSION_TO_ADD = 'revoke_extension'
|
||||
|
||||
def config_files(self):
|
||||
conf_files = super(TestTrustAuth, self).config_files()
|
||||
conf_files.append(tests.dirs.tests(
|
||||
'test_revoke_kvs.conf'))
|
||||
return conf_files
|
||||
def config_overrides(self):
|
||||
super(TestTrustAuth, self).config_overrides()
|
||||
self.config_fixture.config(
|
||||
group='revoke',
|
||||
driver='keystone.contrib.revoke.backends.kvs.Revoke')
|
||||
self.config_fixture.config(
|
||||
group='token',
|
||||
provider='keystone.token.providers.pki.Provider',
|
||||
revoke_by_id=False)
|
||||
self.config_fixture.config(group='trust', enabled=True)
|
||||
|
||||
def setUp(self):
|
||||
super(TestTrustAuth, self).setUp()
|
||||
@ -2278,10 +2302,6 @@ class TestTrustAuth(TestAuthInfo):
|
||||
self.trustee_user['id'] = self.trustee_user_id
|
||||
self.identity_api.create_user(self.trustee_user_id, self.trustee_user)
|
||||
|
||||
def config_overrides(self):
|
||||
super(TestTrustAuth, self).config_overrides()
|
||||
self.config_fixture.config(group='trust', enabled=True)
|
||||
|
||||
def test_create_trust_400(self):
|
||||
# The server returns a 403 Forbidden rather than a 400, see bug 1133435
|
||||
self.post('/OS-TRUST/trusts', body={'trust': {}}, expected_status=403)
|
||||
|
Loading…
Reference in New Issue
Block a user