Make sure we pass propert dicts to validate

In register_uris, validate takes a dict that matches the dict one
normally passes to requests_mock - that is, it can take json, headers,
etc.

Unfortunately, our fixture doesn't error when one passes a normal dict
to it thinking you're passing a json dict for it to validate.

This fixes the call sites - the associated tests need to be fixed.

Change-Id: I16f265fe41219be0f3b031eb8be26f740a65d665
This commit is contained in:
Monty Taylor 2017-06-28 12:38:05 -05:00 committed by Morgan Fainberg
parent ce587ccfe0
commit 10e6fbe44f
10 changed files with 80 additions and 36 deletions

View File

@ -929,17 +929,21 @@ class OperatorCloud(openstackcloud.OpenStackCloud):
urlkwargs['interface'] = interface
endpoint_args.append(urlkwargs)
else:
expected_endpoints = {'public': public_url,
'internal': internal_url,
'admin': admin_url}
# NOTE(notmorgan): This is done as a list of tuples to ensure we
# have a deterministic order we try and create the endpoint
# elements. This is done mostly so that it is possible to test the
# requests themselves.
expected_endpoints = [('public', public_url),
('internal', internal_url),
('admin', admin_url)]
if self.cloud_config.get_api_version('identity').startswith('2'):
urlkwargs = {}
for interface, url in expected_endpoints.items():
for interface, url in expected_endpoints:
if url:
urlkwargs['{}url'.format(interface)] = url
endpoint_args.append(urlkwargs)
else:
for interface, url in expected_endpoints.items():
for interface, url in expected_endpoints:
if url:
urlkwargs = {}
urlkwargs['url'] = url

View File

@ -259,9 +259,11 @@ class RequestsMockTestCase(BaseTestCase):
response['enabled'] = enabled
request['enabled'] = enabled
response.setdefault('enabled', True)
request.setdefault('enabled', True)
if description:
response['description'] = description
request['description'] = description
request.setdefault('description', None)
if v3:
project_key = 'project'
else:
@ -275,7 +277,7 @@ class RequestsMockTestCase(BaseTestCase):
name = name or self.getUniqueString('groupname')
domain_id = uuid.UUID(domain_id or uuid.uuid4().hex).hex
response = {'id': group_id, 'name': name, 'domain_id': domain_id}
request = {'name': name}
request = {'name': name, 'domain_id': domain_id}
if description is not None:
response['description'] = description
request['description'] = description
@ -374,6 +376,8 @@ class RequestsMockTestCase(BaseTestCase):
response = {'id': endpoint_id, 'service_id': service_id,
'region': region}
v3_endpoints = {}
request = response.copy()
request.pop('id')
if admin_url:
response['adminURL'] = admin_url
v3_endpoints['admin'] = self._get_endpoint_v3_data(
@ -388,6 +392,8 @@ class RequestsMockTestCase(BaseTestCase):
service_id, region, public_url, interface='public')
request = response.copy()
request.pop('id')
for u in ('publicURL', 'internalURL', 'adminURL'):
request[u.lower()] = request.pop(u, None)
return _EndpointDataV2(endpoint_id, service_id, region, public_url,
internal_url, admin_url, v3_endpoints,
{'endpoint': response}, {'endpoint': request})

View File

@ -338,7 +338,7 @@ class TestMemoryCache(base.RequestsMockTestCase):
user_data = self._get_user_data(email='test@example.com')
new_resp = {'user': user_data.json_response['user'].copy()}
new_resp['user']['email'] = 'updated@example.com'
new_resp['user']['email'] = 'Nope@Nope.Nope'
new_req = {'user': {'email': new_resp['user']['email']}}
mock_users_url = self.get_mock_url(
@ -355,6 +355,9 @@ class TestMemoryCache(base.RequestsMockTestCase):
users_list_resp = {'users': [user_data.json_response['user']]}
updated_users_list_resp = {'users': [new_resp['user']]}
# Password is None in the original create below
user_data.json_request['user']['password'] = None
uris_to_mock = [
# Inital User List is Empty
dict(method='GET', uri=mock_users_url, status_code=200,
@ -363,7 +366,7 @@ class TestMemoryCache(base.RequestsMockTestCase):
# GET to get the user data after POST
dict(method='POST', uri=mock_users_url, status_code=200,
json=user_data.json_response,
validate=user_data.json_request),
validate=dict(json=user_data.json_request)),
# List Users Call
dict(method='GET', uri=mock_users_url, status_code=200,
json=users_list_resp),
@ -376,7 +379,7 @@ class TestMemoryCache(base.RequestsMockTestCase):
dict(method='GET', uri=mock_user_resource_url, status_code=200,
json=user_data.json_response),
dict(method='PUT', uri=mock_user_resource_url, status_code=200,
json=new_resp, validate=new_req),
json=new_resp, validate=dict(json=new_req)),
dict(method='GET', uri=mock_user_resource_url, status_code=200,
json=new_resp),
# List Users Call

View File

@ -111,7 +111,8 @@ class TestDomains(base.RequestsMockTestCase):
domain_resource_uri = self.get_mock_url(append=[domain_data.domain_id])
self.register_uris([
dict(method='PATCH', uri=domain_resource_uri, status_code=200,
json=new_resp, validate={'domain': {'enabled': False}}),
json=new_resp,
validate=dict(json={'domain': {'enabled': False}})),
dict(method='DELETE', uri=domain_resource_uri, status_code=204)])
self.op_cloud.delete_domain(domain_data.domain_id)
self.assert_calls()
@ -126,7 +127,8 @@ class TestDomains(base.RequestsMockTestCase):
dict(method='GET', uri=self.get_mock_url(), status_code=200,
json={'domains': [domain_data.json_response['domain']]}),
dict(method='PATCH', uri=domain_resource_uri, status_code=200,
json=new_resp, validate={'domain': {'enabled': False}}),
json=new_resp,
validate=dict(json={'domain': {'enabled': False}})),
dict(method='DELETE', uri=domain_resource_uri, status_code=204)])
self.op_cloud.delete_domain(name_or_id=domain_data.domain_id)
self.assert_calls()
@ -143,7 +145,8 @@ class TestDomains(base.RequestsMockTestCase):
domain_resource_uri = self.get_mock_url(append=[domain_data.domain_id])
self.register_uris([
dict(method='PATCH', uri=domain_resource_uri, status_code=200,
json=new_resp, validate={'domain': {'enabled': False}}),
json=new_resp,
validate=dict(json={'domain': {'enabled': False}})),
dict(method='DELETE', uri=domain_resource_uri, status_code=404)])
with testtools.ExpectedException(
shade.OpenStackCloudURINotFound,

View File

@ -44,7 +44,9 @@ class TestCloudEndpoints(base.RequestsMockTestCase):
service_data.service_id, public_url=self._dummy_url(),
internal_url=self._dummy_url(), admin_url=self._dummy_url())
other_endpoint_data = self._get_endpoint_v2_data(
service_data.service_id, public_url=self._dummy_url())
service_data.service_id, region=endpoint_data.region,
public_url=endpoint_data.public_url)
# correct the keys
self.register_uris([
dict(method='GET',
@ -57,7 +59,7 @@ class TestCloudEndpoints(base.RequestsMockTestCase):
uri=self.get_mock_url(base_url_append=None),
status_code=200,
json=endpoint_data.json_response,
validate=endpoint_data.json_request),
validate=dict(json=endpoint_data.json_request)),
dict(method='GET',
uri=self.get_mock_url(
resource='services', base_url_append='OS-KSADM'),
@ -77,7 +79,7 @@ class TestCloudEndpoints(base.RequestsMockTestCase):
uri=self.get_mock_url(base_url_append=None),
status_code=200,
json=other_endpoint_data.json_response,
validate=other_endpoint_data.json_request)
validate=dict(json=other_endpoint_data.json_request))
])
endpoints = self.op_cloud.create_endpoint(
@ -151,7 +153,8 @@ class TestCloudEndpoints(base.RequestsMockTestCase):
uri=self.get_mock_url(),
status_code=200,
json=public_endpoint_data_disabled.json_response,
validate=public_endpoint_data_disabled.json_request),
validate=dict(
json=public_endpoint_data_disabled.json_request)),
dict(method='GET',
uri=self.get_mock_url(
append=[public_endpoint_data_disabled.endpoint_id]),
@ -166,7 +169,7 @@ class TestCloudEndpoints(base.RequestsMockTestCase):
uri=self.get_mock_url(),
status_code=200,
json=public_endpoint_data.json_response,
validate=public_endpoint_data.json_request),
validate=dict(json=public_endpoint_data.json_request)),
dict(method='GET',
uri=self.get_mock_url(
append=[public_endpoint_data.endpoint_id]),
@ -176,7 +179,7 @@ class TestCloudEndpoints(base.RequestsMockTestCase):
uri=self.get_mock_url(),
status_code=200,
json=internal_endpoint_data.json_response,
validate=internal_endpoint_data.json_request),
validate=dict(json=internal_endpoint_data.json_request)),
dict(method='GET',
uri=self.get_mock_url(
append=[internal_endpoint_data.endpoint_id]),
@ -186,7 +189,7 @@ class TestCloudEndpoints(base.RequestsMockTestCase):
uri=self.get_mock_url(),
status_code=200,
json=admin_endpoint_data.json_response,
validate=admin_endpoint_data.json_request),
validate=dict(json=admin_endpoint_data.json_request)),
dict(method='GET',
uri=self.get_mock_url(
append=[admin_endpoint_data.endpoint_id]),
@ -251,15 +254,18 @@ class TestCloudEndpoints(base.RequestsMockTestCase):
def test_update_endpoint_v3(self):
service_data = self._get_service_data()
dummy_url = self._dummy_url()
endpoint_data = self._get_endpoint_v3_data(
service_id=service_data.service_id, interface='admin',
enabled=False)
reference_request = endpoint_data.json_request.copy()
reference_request['endpoint']['url'] = dummy_url
self.register_uris([
dict(method='PATCH',
uri=self.get_mock_url(append=[endpoint_data.endpoint_id]),
status_code=200,
json=endpoint_data.json_response,
validate=endpoint_data.json_request),
validate=dict(json=reference_request)),
dict(method='GET',
uri=self.get_mock_url(append=[endpoint_data.endpoint_id]),
status_code=200,
@ -269,7 +275,7 @@ class TestCloudEndpoints(base.RequestsMockTestCase):
endpoint_data.endpoint_id,
service_name_or_id=service_data.service_id,
region=endpoint_data.region,
url=self._dummy_url(),
url=dummy_url,
interface=endpoint_data.interface,
enabled=False
)

View File

@ -72,7 +72,7 @@ class TestGroups(base.RequestsMockTestCase):
uri=self.get_mock_url(),
status_code=200,
json=group_data.json_response,
validate=group_data.json_request),
validate=dict(json=group_data.json_request)),
dict(method='GET',
uri=self.get_mock_url(append=[group_data.group_id]),
status_code=200,
@ -84,6 +84,8 @@ class TestGroups(base.RequestsMockTestCase):
def test_update_group(self):
group_data = self._get_group_data()
# Domain ID is not sent
group_data.json_request['group'].pop('domain_id')
self.register_uris([
dict(method='GET',
uri=self.get_mock_url(),
@ -93,7 +95,7 @@ class TestGroups(base.RequestsMockTestCase):
uri=self.get_mock_url(append=[group_data.group_id]),
status_code=200,
json=group_data.json_response,
validate=group_data.json_request),
validate=dict(json=group_data.json_request)),
dict(method='GET',
uri=self.get_mock_url(append=[group_data.group_id]),
status_code=200,

View File

@ -39,7 +39,7 @@ class TestProject(base.RequestsMockTestCase):
self.register_uris([
dict(method='POST', uri=self.get_mock_url(v3=False),
status_code=200, json=project_data.json_response,
validate=project_data.json_request)
validate=dict(json=project_data.json_request))
])
project = self.op_cloud.create_project(
name=project_data.project_name,
@ -52,12 +52,14 @@ class TestProject(base.RequestsMockTestCase):
def test_create_project_v3(self,):
project_data = self._get_project_data(
description=self.getUniqueString('projectDesc'))
reference_req = project_data.json_request.copy()
reference_req['project']['enabled'] = True
self.register_uris([
dict(method='POST',
uri=self.get_mock_url(),
status_code=200,
json=project_data.json_response,
validate=project_data.json_request)
validate=dict(json=reference_req))
])
project = self.op_cloud.create_project(
name=project_data.project_name,
@ -135,6 +137,9 @@ class TestProject(base.RequestsMockTestCase):
project_data = self._get_project_data(
v3=False,
description=self.getUniqueString('projectDesc'))
# remove elements that are not updated in this test.
project_data.json_request['tenant'].pop('name')
project_data.json_request['tenant'].pop('enabled')
self.register_uris([
dict(method='GET',
uri=self.get_mock_url(v3=False),
@ -145,7 +150,7 @@ class TestProject(base.RequestsMockTestCase):
v3=False, append=[project_data.project_id]),
status_code=200,
json=project_data.json_response,
validate=project_data.json_request)
validate=dict(json=project_data.json_request))
])
project = self.op_cloud.update_project(
project_data.project_id,
@ -160,6 +165,11 @@ class TestProject(base.RequestsMockTestCase):
def test_update_project_v3(self):
project_data = self._get_project_data(
description=self.getUniqueString('projectDesc'))
reference_req = project_data.json_request.copy()
# Remove elements not actually sent in the update
reference_req['project'].pop('domain_id')
reference_req['project'].pop('name')
reference_req['project'].pop('enabled')
self.register_uris([
dict(method='GET',
uri=self.get_mock_url(
@ -170,7 +180,7 @@ class TestProject(base.RequestsMockTestCase):
dict(method='PATCH',
uri=self.get_mock_url(append=[project_data.project_id]),
status_code=200, json=project_data.json_response,
validate=project_data.json_request)
validate=dict(json=reference_req))
])
project = self.op_cloud.update_project(
project_data.project_id,

View File

@ -588,7 +588,8 @@ class TestSecurityGroups(base.RequestsMockTestCase):
dict(
method='POST',
uri='%s/servers/%s/action' % (fakes.COMPUTE_ENDPOINT, '1234'),
validate={'addSecurityGroup': {'name': 'nova-sec-group'}},
validate=dict(
json={'addSecurityGroup': {'name': 'nova-sec-group'}}),
status_code=202,
),
])
@ -620,7 +621,8 @@ class TestSecurityGroups(base.RequestsMockTestCase):
json={'security_groups': [neutron_grp_dict]}),
dict(method='POST',
uri='%s/servers/%s/action' % (fakes.COMPUTE_ENDPOINT, '1234'),
validate={'addSecurityGroup': {'name': 'neutron-sec-group'}},
validate=dict(
json={'addSecurityGroup': {'name': 'neutron-sec-group'}}),
status_code=202),
])
@ -642,7 +644,8 @@ class TestSecurityGroups(base.RequestsMockTestCase):
dict(
method='POST',
uri='%s/servers/%s/action' % (fakes.COMPUTE_ENDPOINT, '1234'),
validate={'removeSecurityGroup': {'name': 'nova-sec-group'}},
validate=dict(
json={'removeSecurityGroup': {'name': 'nova-sec-group'}}),
),
])
@ -673,7 +676,7 @@ class TestSecurityGroups(base.RequestsMockTestCase):
json={'security_groups': [neutron_grp_dict]}),
dict(method='POST',
uri='%s/servers/%s/action' % (fakes.COMPUTE_ENDPOINT, '1234'),
validate=validate),
validate=dict(json=validate)),
])
self.assertTrue(self.cloud.remove_server_security_groups(

View File

@ -40,12 +40,14 @@ class CloudServices(base.RequestsMockTestCase):
self.use_keystone_v2()
service_data = self._get_service_data(name='a service', type='network',
description='A test service')
reference_req = service_data.json_request.copy()
reference_req.pop('enabled')
self.register_uris([
dict(method='POST',
uri=self.get_mock_url(base_url_append='OS-KSADM'),
status_code=200,
json=service_data.json_response_v2,
validate=service_data.json_request),
validate=dict(json={'OS-KSADM:service': reference_req})),
dict(method='GET',
uri=self.get_mock_url(base_url_append='OS-KSADM',
append=[service_data.service_id]),
@ -74,7 +76,7 @@ class CloudServices(base.RequestsMockTestCase):
uri=self.get_mock_url(),
status_code=200,
json=service_data.json_response_v3,
validate=service_data.json_request),
validate=dict(json={'service': service_data.json_request})),
dict(method='GET',
uri=self.get_mock_url(append=[service_data.service_id]),
status_code=200,
@ -108,12 +110,15 @@ class CloudServices(base.RequestsMockTestCase):
request['enabled'] = False
resp = service_data.json_response_v3.copy()
resp['enabled'] = False
request.pop('description')
request.pop('name')
request.pop('type')
self.register_uris([
dict(method='PATCH',
uri=self.get_mock_url(append=[service_data.service_id]),
status_code=200,
json=resp,
validate=request),
validate=dict(json={'service': request})),
dict(method='GET',
uri=self.get_mock_url(append=[service_data.service_id]),
status_code=200,

View File

@ -51,7 +51,8 @@ class TestUsers(base.RequestsMockTestCase):
uri=self._get_keystone_mock_url(resource='users', v3=False),
status_code=200,
json=user_data.json_response,
validate=dict(json=user_data.json_request))])
validate=dict(json=user_data.json_request)),
])
user = self.op_cloud.create_user(
name=user_data.name, email=user_data.email,
@ -71,7 +72,8 @@ class TestUsers(base.RequestsMockTestCase):
dict(method='POST',
uri=self._get_keystone_mock_url(resource='users'),
status_code=200, json=user_data.json_response,
validate=dict(json=user_data.json_request))])
validate=dict(json=user_data.json_request)),
])
user = self.op_cloud.create_user(
name=user_data.name, email=user_data.email,