Move test utility to common location

Several of the test clases for testing the service provider API were
duplicating a method to build a request body. Instead of duplicating
a common and useful utility, we can move it to a generic place and
share it.

This commit creates a new method in keystone.tests.unit.core for
building service provider entities to be used in API and backend
tests. A subsequent patch will rely on this for testing policy
protection of the service provider API.

Change-Id: I78e697f9f5fb975b4694ab1a61f608a6dce0fd3b
This commit is contained in:
Lance Bragstad 2018-11-26 19:19:07 +00:00
parent ffeb6b3ad7
commit cb5a1fe036
2 changed files with 34 additions and 51 deletions

View File

@ -339,6 +339,18 @@ def new_identity_provider_ref(idp_id=None, **kwargs):
return ref
def new_service_provider_ref(**kwargs):
ref = {
'auth_url': 'https://' + uuid.uuid4().hex + '.com',
'enabled': True,
'description': uuid.uuid4().hex,
'sp_url': 'https://' + uuid.uuid4().hex + '.com',
'relay_state_prefix': CONF.saml.relay_state_prefix
}
ref.update(kwargs)
return ref
def new_group_ref(domain_id, **kwargs):
ref = {
'id': uuid.uuid4().hex,

View File

@ -3630,22 +3630,13 @@ class SAMLGenerationTests(test_v3.RestfulTestCase):
ASSERTION_VERSION = "2.0"
SERVICE_PROVDIER_ID = 'ACME'
def sp_ref(self):
ref = {
'auth_url': self.SP_AUTH_URL,
'enabled': True,
'description': uuid.uuid4().hex,
'sp_url': self.RECIPIENT,
'relay_state_prefix': CONF.saml.relay_state_prefix,
}
return ref
def setUp(self):
super(SAMLGenerationTests, self).setUp()
self.signed_assertion = saml2.create_class_from_xml_string(
saml.Assertion, _load_xml(self.ASSERTION_FILE))
self.sp = self.sp_ref()
self.sp = core.new_service_provider_ref(
auth_url=self.SP_AUTH_URL, sp_url=self.RECIPIENT
)
url = '/OS-FEDERATION/service_providers/' + self.SERVICE_PROVDIER_ID
self.put(url, body={'service_provider': self.sp},
expected_status=http_client.CREATED)
@ -4283,21 +4274,11 @@ class ServiceProviderTests(test_v3.RestfulTestCase):
super(ServiceProviderTests, self).setUp()
# Add a Service Provider
url = self.base_url(suffix=self.SERVICE_PROVIDER_ID)
self.SP_REF = self.sp_ref()
self.SP_REF = core.new_service_provider_ref()
self.SERVICE_PROVIDER = self.put(
url, body={'service_provider': self.SP_REF},
expected_status=http_client.CREATED).result
def sp_ref(self):
ref = {
'auth_url': 'https://' + uuid.uuid4().hex + '.com',
'enabled': True,
'description': uuid.uuid4().hex,
'sp_url': 'https://' + uuid.uuid4().hex + '.com',
'relay_state_prefix': CONF.saml.relay_state_prefix
}
return ref
def base_url(self, suffix=None):
if suffix is not None:
return '/OS-FEDERATION/service_providers/' + str(suffix)
@ -4307,7 +4288,7 @@ class ServiceProviderTests(test_v3.RestfulTestCase):
"""Create default Service Provider."""
url = self.base_url(suffix=uuid.uuid4().hex)
if body is None:
body = self.sp_ref()
body = core.new_service_provider_ref()
resp = self.put(url, body={'service_provider': body},
expected_status=http_client.CREATED)
return resp
@ -4325,7 +4306,7 @@ class ServiceProviderTests(test_v3.RestfulTestCase):
def test_create_service_provider(self):
url = self.base_url(suffix=uuid.uuid4().hex)
sp = self.sp_ref()
sp = core.new_service_provider_ref()
resp = self.put(url, body={'service_provider': sp},
expected_status=http_client.CREATED)
self.assertValidEntity(resp.result['service_provider'],
@ -4343,7 +4324,7 @@ class ServiceProviderTests(test_v3.RestfulTestCase):
# Create a new service provider.
url = self.base_url(suffix=uuid.uuid4().hex)
sp = self.sp_ref()
sp = core.new_service_provider_ref()
self.put(url, body={'service_provider': sp},
expected_status=http_client.CREATED)
@ -4367,7 +4348,7 @@ class ServiceProviderTests(test_v3.RestfulTestCase):
# Create a new service provider.
url = self.base_url(suffix=uuid.uuid4().hex)
sp = self.sp_ref()
sp = core.new_service_provider_ref()
self.put(url, body={'service_provider': sp},
expected_status=http_client.CREATED)
@ -4403,7 +4384,7 @@ class ServiceProviderTests(test_v3.RestfulTestCase):
# Create a new service provider.
service_provider_id = uuid.uuid4().hex
url = self.base_url(suffix=service_provider_id)
sp = self.sp_ref()
sp = core.new_service_provider_ref()
self.put(url, body={'service_provider': sp},
expected_status=http_client.CREATED)
@ -4433,7 +4414,7 @@ class ServiceProviderTests(test_v3.RestfulTestCase):
def test_create_sp_relay_state_default(self):
"""Create an SP without relay state, should default to `ss:mem`."""
url = self.base_url(suffix=uuid.uuid4().hex)
sp = self.sp_ref()
sp = core.new_service_provider_ref()
del sp['relay_state_prefix']
resp = self.put(url, body={'service_provider': sp},
expected_status=http_client.CREATED)
@ -4444,7 +4425,7 @@ class ServiceProviderTests(test_v3.RestfulTestCase):
def test_create_sp_relay_state_non_default(self):
"""Create an SP with custom relay state."""
url = self.base_url(suffix=uuid.uuid4().hex)
sp = self.sp_ref()
sp = core.new_service_provider_ref()
non_default_prefix = uuid.uuid4().hex
sp['relay_state_prefix'] = non_default_prefix
resp = self.put(url, body={'service_provider': sp},
@ -4456,7 +4437,7 @@ class ServiceProviderTests(test_v3.RestfulTestCase):
def test_create_service_provider_fail(self):
"""Try adding SP object with unallowed attribute."""
url = self.base_url(suffix=uuid.uuid4().hex)
sp = self.sp_ref()
sp = core.new_service_provider_ref()
sp[uuid.uuid4().hex] = uuid.uuid4().hex
self.put(url, body={'service_provider': sp},
expected_status=http_client.BAD_REQUEST)
@ -4470,8 +4451,8 @@ class ServiceProviderTests(test_v3.RestfulTestCase):
"""
ref_service_providers = {
uuid.uuid4().hex: self.sp_ref(),
uuid.uuid4().hex: self.sp_ref(),
uuid.uuid4().hex: core.new_service_provider_ref(),
uuid.uuid4().hex: core.new_service_provider_ref(),
}
for id, sp in ref_service_providers.items():
url = self.base_url(suffix=id)
@ -4503,7 +4484,7 @@ class ServiceProviderTests(test_v3.RestfulTestCase):
properly changed.
"""
new_sp_ref = self.sp_ref()
new_sp_ref = core.new_service_provider_ref()
url = self.base_url(suffix=self.SERVICE_PROVIDER_ID)
resp = self.patch(url, body={'service_provider': new_sp_ref})
patch_result = resp.result
@ -4531,14 +4512,14 @@ class ServiceProviderTests(test_v3.RestfulTestCase):
expected_status=http_client.BAD_REQUEST)
def test_update_service_provider_unknown_parameter(self):
new_sp_ref = self.sp_ref()
new_sp_ref = core.new_service_provider_ref()
new_sp_ref[uuid.uuid4().hex] = uuid.uuid4().hex
url = self.base_url(suffix=self.SERVICE_PROVIDER_ID)
self.patch(url, body={'service_provider': new_sp_ref},
expected_status=http_client.BAD_REQUEST)
def test_update_service_provider_returns_not_found(self):
new_sp_ref = self.sp_ref()
new_sp_ref = core.new_service_provider_ref()
new_sp_ref['description'] = uuid.uuid4().hex
url = self.base_url(suffix=uuid.uuid4().hex)
self.patch(url, body={'service_provider': new_sp_ref},
@ -4546,7 +4527,7 @@ class ServiceProviderTests(test_v3.RestfulTestCase):
def test_update_sp_relay_state(self):
"""Update an SP with custom relay state."""
new_sp_ref = self.sp_ref()
new_sp_ref = core.new_service_provider_ref()
non_default_prefix = uuid.uuid4().hex
new_sp_ref['relay_state_prefix'] = non_default_prefix
url = self.base_url(suffix=self.SERVICE_PROVIDER_ID)
@ -4593,7 +4574,7 @@ class ServiceProviderTests(test_v3.RestfulTestCase):
return sp.get('id')
sp1_id = get_id(self._create_default_sp())
sp2_ref = self.sp_ref()
sp2_ref = core.new_service_provider_ref()
sp2_ref['enabled'] = False
sp2_id = get_id(self._create_default_sp(body=sp2_ref))
@ -4762,15 +4743,15 @@ class K2KServiceCatalogTests(test_v3.RestfulTestCase):
def setUp(self):
super(K2KServiceCatalogTests, self).setUp()
sp = self.sp_ref()
sp = core.new_service_provider_ref()
PROVIDERS.federation_api.create_sp(self.SP1, sp)
self.sp_alpha = {self.SP1: sp}
sp = self.sp_ref()
sp = core.new_service_provider_ref()
PROVIDERS.federation_api.create_sp(self.SP2, sp)
self.sp_beta = {self.SP2: sp}
sp = self.sp_ref()
sp = core.new_service_provider_ref()
PROVIDERS.federation_api.create_sp(self.SP3, sp)
self.sp_gamma = {self.SP3: sp}
@ -4781,16 +4762,6 @@ class K2KServiceCatalogTests(test_v3.RestfulTestCase):
ref['id'] = id
return ref
def sp_ref(self):
ref = {
'auth_url': uuid.uuid4().hex,
'enabled': True,
'description': uuid.uuid4().hex,
'sp_url': uuid.uuid4().hex,
'relay_state_prefix': CONF.saml.relay_state_prefix,
}
return ref
def _validate_service_providers(self, token, ref):
token_data = token['token']
self.assertIn('service_providers', token_data)