From dbe8c9354dcbf9711ca449603554659c678541c5 Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Wed, 24 Feb 2016 11:02:05 -0500 Subject: [PATCH] make microversion a client level construct for tests Instead of passing around microversion in every method call, the way microversions are expected to be used by a client is by setting it globally for the client and using that microversion for all requests. This adds that support to the base test client, and updates nearly all tests to use it that way. test_server_group is tightly coupled and will require some much more specific unwind. Change-Id: I2263104c34328f11c687c6b8ef3a1cfd21980a63 --- nova/tests/functional/api/client.py | 3 ++ .../api_sample_tests/test_fixed_ips.py | 8 ++--- .../api_sample_tests/test_instance_actions.py | 7 ++--- .../api_sample_tests/test_keypairs.py | 30 ++++++++----------- .../api_sample_tests/test_remote_consoles.py | 8 ++--- .../test_server_migrations.py | 4 +-- .../api_sample_tests/test_servers.py | 16 +++++----- .../api_sample_tests/test_services.py | 22 +++++--------- .../test_service_update.py | 5 ++-- .../tests/functional/test_instance_actions.py | 7 +++-- 10 files changed, 51 insertions(+), 59 deletions(-) diff --git a/nova/tests/functional/api/client.py b/nova/tests/functional/api/client.py index 4a43c2abf898..db4d58c66fb9 100644 --- a/nova/tests/functional/api/client.py +++ b/nova/tests/functional/api/client.py @@ -124,6 +124,7 @@ class TestOpenStackClient(object): self.auth_key = auth_key self.auth_uri = auth_uri self.project_id = project_id + self.microversion = None def request(self, url, method='GET', body=None, headers=None): _headers = {'Content-Type': 'application/json'} @@ -167,6 +168,8 @@ class TestOpenStackClient(object): headers = kwargs.setdefault('headers', {}) headers['X-Auth-Token'] = auth_result['x-auth-token'] + if self.microversion: + headers['X-OpenStack-Nova-API-Version'] = self.microversion response = self.request(full_uri, **kwargs) diff --git a/nova/tests/functional/api_sample_tests/test_fixed_ips.py b/nova/tests/functional/api_sample_tests/test_fixed_ips.py index 2cf6b10bd2ec..3ba61cb23766 100644 --- a/nova/tests/functional/api_sample_tests/test_fixed_ips.py +++ b/nova/tests/functional/api_sample_tests/test_fixed_ips.py @@ -38,7 +38,7 @@ class FixedIpTest(test_servers.ServersSampleBase): def setUp(self): super(FixedIpTest, self).setUp() - + self.api.microversion = self.microversion instance = dict(test_utils.get_test_instance(), hostname='openstack', host='host') fake_fixed_ips = [{'id': 1, @@ -95,15 +95,13 @@ class FixedIpTest(test_servers.ServersSampleBase): def test_fixed_ip_reserve(self): # Reserve a Fixed IP. response = self._do_post('os-fixed-ips/192.168.1.1/action', - 'fixedip-post-req', {}, - api_version=self.microversion) + 'fixedip-post-req', {}) self.assertEqual(202, response.status_code) self.assertEqual("", response.content) def _test_get_fixed_ip(self, **kwargs): # Return data about the given fixed ip. - response = self._do_get('os-fixed-ips/192.168.1.1', - api_version=self.microversion) + response = self._do_get('os-fixed-ips/192.168.1.1') project = {'cidr': '192.168.1.0/24', 'hostname': 'openstack', 'host': 'host', diff --git a/nova/tests/functional/api_sample_tests/test_instance_actions.py b/nova/tests/functional/api_sample_tests/test_instance_actions.py index 25cbe241d989..742b12d6a567 100644 --- a/nova/tests/functional/api_sample_tests/test_instance_actions.py +++ b/nova/tests/functional/api_sample_tests/test_instance_actions.py @@ -47,6 +47,7 @@ class ServerActionsSampleJsonTest(api_sample_base.ApiSampleTestBaseV21): def setUp(self): super(ServerActionsSampleJsonTest, self).setUp() + self.api.microversion = self.microversion self.actions = fake_server_actions.FAKE_ACTIONS self.events = fake_server_actions.FAKE_EVENTS self.instance = test_utils.get_test_instance(obj=True) @@ -79,8 +80,7 @@ class ServerActionsSampleJsonTest(api_sample_base.ApiSampleTestBaseV21): fake_action = self.actions[fake_uuid][fake_request_id] response = self._do_get('servers/%s/os-instance-actions/%s' % - (fake_uuid, fake_request_id), - api_version=self.microversion) + (fake_uuid, fake_request_id)) subs = {} subs['action'] = '(reboot)|(resize)' subs['instance_uuid'] = fake_uuid @@ -93,8 +93,7 @@ class ServerActionsSampleJsonTest(api_sample_base.ApiSampleTestBaseV21): def test_instance_actions_list(self): fake_uuid = fake_server_actions.FAKE_UUID - response = self._do_get('servers/%s/os-instance-actions' % (fake_uuid), - api_version=self.microversion) + response = self._do_get('servers/%s/os-instance-actions' % (fake_uuid)) subs = {} subs['action'] = '(reboot)|(resize)' subs['integer_id'] = '[0-9]+' diff --git a/nova/tests/functional/api_sample_tests/test_keypairs.py b/nova/tests/functional/api_sample_tests/test_keypairs.py index f0312639e675..3065153d8e65 100644 --- a/nova/tests/functional/api_sample_tests/test_keypairs.py +++ b/nova/tests/functional/api_sample_tests/test_keypairs.py @@ -39,6 +39,10 @@ class KeyPairsSampleJsonTest(api_sample_base.ApiSampleTestBaseV21): 'nova.api.openstack.compute.contrib.keypairs.Keypairs') return f + def setUp(self): + super(KeyPairsSampleJsonTest, self).setUp() + self.api.microversion = self.microversion + # TODO(sdague): this is only needed because we randomly choose the # uuid each time. def generalize_subs(self, subs, vanilla_regexes): @@ -52,8 +56,7 @@ class KeyPairsSampleJsonTest(api_sample_base.ApiSampleTestBaseV21): """Get api sample of key pairs post request.""" key_name = 'keypair-' + str(uuid.uuid4()) subs = dict(keypair_name=key_name, **kwargs) - response = self._do_post('os-keypairs', 'keypairs-post-req', subs, - api_version=self.microversion) + response = self._do_post('os-keypairs', 'keypairs-post-req', subs) subs = {'keypair_name': key_name} self._verify_response('keypairs-post-resp', subs, response, @@ -77,31 +80,28 @@ class KeyPairsSampleJsonTest(api_sample_base.ApiSampleTestBaseV21): params['public_key'] = public_key params.update(**kwargs) response = self._do_post('os-keypairs', 'keypairs-import-post-req', - params, api_version=self.microversion) + params) self._verify_response('keypairs-import-post-resp', subs, response, self.expected_post_status_code) def test_keypairs_list(self): # Get api sample of key pairs list request. key_name = self.test_keypairs_post() - response = self._do_get('os-keypairs', - api_version=self.microversion) + response = self._do_get('os-keypairs') subs = {'keypair_name': key_name} self._verify_response('keypairs-list-resp', subs, response, 200) def test_keypairs_get(self): # Get api sample of key pairs get request. key_name = self.test_keypairs_post() - response = self._do_get('os-keypairs/%s' % key_name, - api_version=self.microversion) + response = self._do_get('os-keypairs/%s' % key_name) subs = {'keypair_name': key_name} self._verify_response('keypairs-get-resp', subs, response, 200) def test_keypairs_delete(self): # Get api sample of key pairs delete request. key_name = self.test_keypairs_post() - response = self._do_delete('os-keypairs/%s' % key_name, - api_version=self.microversion) + response = self._do_delete('os-keypairs/%s' % key_name) self.assertEqual(self.expected_delete_status_code, response.status_code) @@ -128,8 +128,7 @@ class KeyPairsV22SampleJsonTest(KeyPairsSampleJsonTest): def test_keypairs_post_invalid(self): key_name = 'keypair-' + str(uuid.uuid4()) subs = dict(keypair_name=key_name, keypair_type='fakey_type') - response = self._do_post('os-keypairs', 'keypairs-post-req', subs, - api_version=self.microversion) + response = self._do_post('os-keypairs', 'keypairs-post-req', subs) self.assertEqual(400, response.status_code) @@ -154,7 +153,7 @@ class KeyPairsV22SampleJsonTest(KeyPairsSampleJsonTest): 'public_key': fake_crypto.get_ssh_public_key() } response = self._do_post('os-keypairs', 'keypairs-import-post-req', - subs, api_version=self.microversion) + subs) self.assertEqual(400, response.status_code) @@ -203,8 +202,7 @@ class KeyPairsV210SampleJsonTest(KeyPairsSampleJsonTest): 'user_id': "fake" } key_name = self._check_keypairs_post(**subs) - response = self._do_delete('os-keypairs/%s?user_id=fake' % key_name, - api_version=self.microversion) + response = self._do_delete('os-keypairs/%s?user_id=fake' % key_name) self.assertEqual(self.expected_delete_status_code, response.status_code) @@ -222,8 +220,6 @@ class KeyPairsV210SampleJsonTestNotAdmin(KeyPairsV210SampleJsonTest): subs = dict(keypair_name=key_name, keypair_type=keypair_obj.KEYPAIR_TYPE_SSH, user_id='fake1') - response = self._do_post('os-keypairs', 'keypairs-post-req', subs, - api_version=self.microversion, - ) + response = self._do_post('os-keypairs', 'keypairs-post-req', subs) self.assertEqual(403, response.status_code) diff --git a/nova/tests/functional/api_sample_tests/test_remote_consoles.py b/nova/tests/functional/api_sample_tests/test_remote_consoles.py index 8a2bbfaf9f8a..83a93a464458 100644 --- a/nova/tests/functional/api_sample_tests/test_remote_consoles.py +++ b/nova/tests/functional/api_sample_tests/test_remote_consoles.py @@ -23,6 +23,7 @@ CONF.import_opt('osapi_compute_extension', class ConsolesSampleJsonTests(test_servers.ServersSampleBase): + microversion = None extension_name = "os-remote-consoles" def _get_flags(self): @@ -34,6 +35,7 @@ class ConsolesSampleJsonTests(test_servers.ServersSampleBase): def setUp(self): super(ConsolesSampleJsonTests, self).setUp() + self.api.microversion = self.microversion self.flags(enabled=True, group='vnc') self.flags(enabled=True, group='spice') self.flags(enabled=True, group='rdp') @@ -96,8 +98,7 @@ class ConsolesV26SampleJsonTests(test_servers.ServersSampleBase): body = {'protocol': 'vnc', 'type': 'novnc'} response = self._do_post('servers/%s/remote-consoles' % uuid, - 'create-vnc-console-req', body, - api_version='2.6') + 'create-vnc-console-req', body) subs = {"url": self.http_regex} self._verify_response('create-vnc-console-resp', subs, response, 200) @@ -117,7 +118,6 @@ class ConsolesV28SampleJsonTests(test_servers.ServersSampleBase): body = {'protocol': 'mks', 'type': 'webmks'} response = self._do_post('servers/%s/remote-consoles' % uuid, - 'create-mks-console-req', body, - api_version='2.8') + 'create-mks-console-req', body) subs = {"url": self.http_regex} self._verify_response('create-mks-console-resp', subs, response, 200) diff --git a/nova/tests/functional/api_sample_tests/test_server_migrations.py b/nova/tests/functional/api_sample_tests/test_server_migrations.py index b2829881b71b..0b063f584319 100644 --- a/nova/tests/functional/api_sample_tests/test_server_migrations.py +++ b/nova/tests/functional/api_sample_tests/test_server_migrations.py @@ -30,6 +30,7 @@ class ServerMigrationsSampleJsonTest(test_servers.ServersSampleBase): """setUp method for server usage.""" super(ServerMigrationsSampleJsonTest, self).setUp() self.uuid = self._post_server() + self.api.microversion = '2.22' @mock.patch.object(conductor_manager.ComputeTaskManager, '_live_migrate') @mock.patch.object(db, 'service_get_by_compute_host') @@ -47,6 +48,5 @@ class ServerMigrationsSampleJsonTest(test_servers.ServersSampleBase): self._do_post('servers/%s/action' % self.uuid, 'live-migrate-server', {'hostname': self.compute.host}) response = self._do_post('servers/%s/migrations/%s/action' - % (self.uuid, '3'), 'force_complete', - {}, api_version='2.22') + % (self.uuid, '3'), 'force_complete', {}) self.assertEqual(202, response.status_code) diff --git a/nova/tests/functional/api_sample_tests/test_servers.py b/nova/tests/functional/api_sample_tests/test_servers.py index 38d195c7d865..46917bd3f6f0 100644 --- a/nova/tests/functional/api_sample_tests/test_servers.py +++ b/nova/tests/functional/api_sample_tests/test_servers.py @@ -69,6 +69,10 @@ class ServersSampleJsonTest(ServersSampleBase): sample_dir = 'servers' microversion = None + def setUp(self): + super(ServersSampleJsonTest, self).setUp() + self.api.microversion = self.microversion + def _get_flags(self): f = super(ServersSampleBase, self)._get_flags() f['osapi_compute_extension'] = CONF.osapi_compute_extension[:] @@ -86,8 +90,7 @@ class ServersSampleJsonTest(ServersSampleBase): def test_servers_get(self): uuid = self.test_servers_post() - response = self._do_get('servers/%s' % uuid, - api_version=self.microversion) + response = self._do_get('servers/%s' % uuid) subs = {} subs['hostid'] = '[a-f0-9]+' subs['id'] = uuid @@ -99,15 +102,13 @@ class ServersSampleJsonTest(ServersSampleBase): def test_servers_list(self): uuid = self._post_server() - response = self._do_get('servers', - api_version=self.microversion) + response = self._do_get('servers') subs = {'id': uuid} self._verify_response('servers-list-resp', subs, response, 200) def test_servers_details(self): uuid = self.test_servers_post() - response = self._do_get('servers/detail', - api_version=self.microversion) + response = self._do_get('servers/detail') subs = {} subs['hostid'] = '[a-f0-9]+' subs['id'] = uuid @@ -349,7 +350,6 @@ class ServerTriggerCrashDumpJsonTest(ServersSampleBase): response = self._do_post('servers/%s/action' % uuid, 'server-action-trigger-crash-dump', - {}, - api_version=self.microversion) + {}) self.assertEqual(response.status_code, 202) self.assertEqual(response.content, "") diff --git a/nova/tests/functional/api_sample_tests/test_services.py b/nova/tests/functional/api_sample_tests/test_services.py index 236f4c6e09ee..fef17f8dfabe 100644 --- a/nova/tests/functional/api_sample_tests/test_services.py +++ b/nova/tests/functional/api_sample_tests/test_services.py @@ -44,6 +44,7 @@ class ServicesJsonTest(api_sample_base.ApiSampleTestBaseV21): def setUp(self): super(ServicesJsonTest, self).setUp() + self.api.microversion = self.microversion self.stub_out("nova.db.service_get_all", test_services.fake_db_api_service_get_all) self.stub_out("nova.db.service_get_by_host_and_binary", @@ -54,8 +55,7 @@ class ServicesJsonTest(api_sample_base.ApiSampleTestBaseV21): def test_services_list(self): """Return a list of all agent builds.""" - response = self._do_get('os-services', - api_version=self.microversion) + response = self._do_get('os-services') subs = {'binary': 'nova-compute', 'host': 'host1', 'zone': 'nova', @@ -68,8 +68,7 @@ class ServicesJsonTest(api_sample_base.ApiSampleTestBaseV21): subs = {"host": "host1", 'binary': 'nova-compute'} response = self._do_put('os-services/enable', - 'service-enable-put-req', subs, - api_version=self.microversion) + 'service-enable-put-req', subs) self._verify_response('service-enable-put-resp', subs, response, 200) def test_service_disable(self): @@ -77,8 +76,7 @@ class ServicesJsonTest(api_sample_base.ApiSampleTestBaseV21): subs = {"host": "host1", 'binary': 'nova-compute'} response = self._do_put('os-services/disable', - 'service-disable-put-req', subs, - api_version=self.microversion) + 'service-disable-put-req', subs) self._verify_response('service-disable-put-resp', subs, response, 200) def test_service_disable_log_reason(self): @@ -87,15 +85,13 @@ class ServicesJsonTest(api_sample_base.ApiSampleTestBaseV21): 'binary': 'nova-compute', 'disabled_reason': 'test2'} response = self._do_put('os-services/disable-log-reason', - 'service-disable-log-put-req', subs, - api_version=self.microversion) + 'service-disable-log-put-req', subs) self._verify_response('service-disable-log-put-resp', subs, response, 200) def test_service_delete(self): """Delete an existing service.""" - response = self._do_delete('os-services/1', - api_version=self.microversion) + response = self._do_delete('os-services/1') self.assertEqual(204, response.status_code) self.assertEqual("", response.content) @@ -108,8 +104,7 @@ class ServicesV211JsonTest(ServicesJsonTest): def test_services_list(self): """Return a list of all agent builds.""" - response = self._do_get('os-services', - api_version=self.microversion) + response = self._do_get('os-services') subs = {'binary': 'nova-compute', 'host': 'host1', 'zone': 'nova', @@ -124,7 +119,6 @@ class ServicesV211JsonTest(ServicesJsonTest): 'binary': 'nova-compute', 'forced_down': 'true'} response = self._do_put('os-services/force-down', - 'service-force-down-put-req', subs, - api_version=self.microversion) + 'service-force-down-put-req', subs) self._verify_response('service-force-down-put-resp', subs, response, 200) diff --git a/nova/tests/functional/notification_sample_tests/test_service_update.py b/nova/tests/functional/notification_sample_tests/test_service_update.py index 78238635a462..f8858c4baa31 100644 --- a/nova/tests/functional/notification_sample_tests/test_service_update.py +++ b/nova/tests/functional/notification_sample_tests/test_service_update.py @@ -56,9 +56,8 @@ class TestServiceUpdateNotificationSample( body = {'host': 'host1', 'binary': 'nova-compute', 'forced_down': True} - self.admin_api.api_put('os-services/force-down', - body, - api_version='2.12') + self.admin_api.microversion = '2.12' + self.admin_api.api_put('os-services/force-down', body) self._verify_notification('service-update', replacements={'forced_down': True, 'disabled': True, diff --git a/nova/tests/functional/test_instance_actions.py b/nova/tests/functional/test_instance_actions.py index 625f394cbd38..82c515374d2e 100644 --- a/nova/tests/functional/test_instance_actions.py +++ b/nova/tests/functional/test_instance_actions.py @@ -67,10 +67,13 @@ class InstanceActionsTestV21(InstanceActionsTestV2): class InstanceActionsTestV221(InstanceActionsTestV21): microversion = '2.21' + def setUp(self): + super(InstanceActionsTestV221, self).setUp() + self.api.microversion = self.microversion + def test_get_instance_actions_deleted(self): server = self._create_server() self._delete_server(server['id']) - actions = self.api.get_instance_actions(server['id'], - api_version=self.microversion) + actions = self.api.get_instance_actions(server['id']) self.assertEqual('delete', actions[0]['action']) self.assertEqual('create', actions[1]['action'])