tests: Make '_IntegratedTestBase' subclass 'PlacementInstanceHelperMixin'

Querying placement is an increasingly common requirement of good
functional tests. Add the placement helper mixin into our uberclass so
as many tests as possible can benefit from it.

Change-Id: I969eb724b12114fde5660b855f359b40c23ccfec
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
This commit is contained in:
Stephen Finucane 2020-07-15 10:41:52 +01:00
parent 58ecd338c1
commit c60f90cb2f
1 changed files with 10 additions and 46 deletions

View File

@ -470,6 +470,11 @@ class PlacementHelperMixin:
'/resource_providers/%s' % rp_uuid, version='1.15',
).body
def _get_provider_uuid_by_name(self, name):
return self.placement_api.get(
'/resource_providers?name=%s' % name,
).body['resource_providers'][0]['uuid']
def _get_provider_usages(self, provider_uuid):
return self.placement_api.get(
'/resource_providers/%s/usages' % provider_uuid
@ -955,7 +960,7 @@ class PlacementInstanceHelperMixin(InstanceHelperMixin, PlacementHelperMixin):
self.assertEqual(expected_vcpu_usage, hypervisor['vcpus_used'])
class _IntegratedTestBase(test.TestCase, InstanceHelperMixin):
class _IntegratedTestBase(test.TestCase, PlacementInstanceHelperMixin):
#: Whether the test requires global external locking being configured for
#: them. New tests should set this to False.
REQUIRES_LOCKING = True
@ -988,8 +993,10 @@ class _IntegratedTestBase(test.TestCase, InstanceHelperMixin):
nova.tests.unit.image.fake.stub_out_image_service(self)
self.useFixture(cast_as_call.CastAsCall(self))
placement = self.useFixture(func_fixtures.PlacementFixture())
self.placement_api = placement.api
self.neutron = self.useFixture(nova_fixtures.NeutronFixture(self))
fake_notifier.stub_notifier(self)
@ -1051,52 +1058,9 @@ class _IntegratedTestBase(test.TestCase, InstanceHelperMixin):
("The expected wsgi middlewares %s are not "
"existed") % expected_middleware)
# TODO(sbauza): Drop this method once test classes inherit from a mixin
def _get_provider_uuid_by_name(self, name):
return self.placement_api.get(
'/resource_providers?name=%s' % name).body[
'resource_providers'][0]['uuid']
# TODO(sbauza): Drop this method once test classes inherit from a mixin
def _get_all_rp_uuids_in_a_tree(self, in_tree_rp_uuid):
rps = self.placement_api.get(
'/resource_providers?in_tree=%s' % in_tree_rp_uuid,
version='1.20').body['resource_providers']
return [rp['uuid'] for rp in rps]
# TODO(sbauza): Drop this method once test classes inherit from a mixin
def _get_provider_inventory(self, rp_uuid):
return self.placement_api.get(
'/resource_providers/%s/inventories' % rp_uuid).body['inventories']
# TODO(sbauza): Drop this method once test classes inherit from a mixin
def _get_provider_usages(self, provider_uuid):
return self.placement_api.get(
'/resource_providers/%s/usages' % provider_uuid).body['usages']
# TODO(sbauza): Drop this method once test classes inherit from a mixin
def _create_trait(self, trait):
return self.placement_api.put('/traits/%s' % trait, {}, version='1.6')
# TODO(sbauza): Drop this method once test classes inherit from a mixin
def _set_provider_traits(self, rp_uuid, traits):
"""This will overwrite any existing traits.
:param rp_uuid: UUID of the resource provider to update
:param traits: list of trait strings to set on the provider
:returns: APIResponse object with the results
"""
provider = self.placement_api.get(
'/resource_providers/%s' % rp_uuid).body
put_traits_req = {
'resource_provider_generation': provider['generation'],
'traits': traits
}
return self.placement_api.put(
'/resource_providers/%s/traits' % rp_uuid,
put_traits_req, version='1.6')
# TODO(stephenfin): This is almost identical to '_IntegratedTestBase' now and
# could be removed
class ProviderUsageBaseTestCase(test.TestCase, PlacementInstanceHelperMixin):
"""Base test class for functional tests that check provider usage
and consumer allocations in Placement during various operations.