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
This commit is contained in:
Sean Dague 2016-02-24 11:02:05 -05:00
parent 5d97e62d19
commit dbe8c9354d
10 changed files with 51 additions and 59 deletions

View File

@ -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)

View File

@ -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',

View File

@ -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]+'

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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, "")

View File

@ -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)

View File

@ -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,

View File

@ -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'])