nova/nova/tests/functional/regressions/test_bug_1886418.py
Stephen Finucane 8750c4e173 functional: Enable real policy fixture by default
Enable the policy fixture by default, which should yield more realistic
functional tests. We need to update some tests to use admin APIs where
policy dictates they are necessary. Note that we're currently testing
the legacy policy - not the updated, scoped policy - since the legacy
policy is the default one currently.

Note that we also need to modify the 'SingleCellSimple' fixture in this
change to use the same project ID as the 'OSAPIFixture'.

Change-Id: Ia3dea78f16cb3c7081714c4db36e20d5ee76ed7d
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
2020-09-16 11:31:23 +01:00

83 lines
3.1 KiB
Python

# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from nova.tests.functional import integrated_helpers
class TestServices(integrated_helpers._IntegratedTestBase):
api_major_version = 'v2.1'
microversion = 'latest'
def setUp(self):
super(TestServices, self).setUp()
self.compute_rp_uuid = self.admin_api.api_get(
'os-hypervisors?hypervisor_hostname_pattern=fake-mini'
).body['hypervisors'][0]['id']
self.compute_service_id = self.admin_api.get_services(
host='compute', binary='nova-compute')[0]['id']
def _get_traits_on_compute(self):
return self.placement.get(
'/resource_providers/%s/traits' % self.compute_rp_uuid,
version='1.6'
).body['traits']
def _disable_compute(self):
self.admin_api.put_service(
self.compute_service_id, {'status': 'disabled'})
def _enable_compute(self):
self.admin_api.put_service(
self.compute_service_id, {'status': 'enabled'})
def _has_disabled_trait(self):
return "COMPUTE_STATUS_DISABLED" in self._get_traits_on_compute()
def test_compute_disable_after_server_create(self):
# Check that COMPUTE_STATUS_DISABLED is not on the compute
self.assertFalse(self._has_disabled_trait())
self._disable_compute()
# Check that COMPUTE_STATUS_DISABLED is now on the compute
self.assertTrue(self._has_disabled_trait())
self._enable_compute()
# Check that COMPUTE_STATUS_DISABLED is not on the compute
self.assertFalse(self._has_disabled_trait())
# Create a server.
self._create_server(networks=[])
self._disable_compute()
# Check that COMPUTE_STATUS_DISABLED is now on the compute.
self.assertTrue(self._has_disabled_trait())
# This would be the expected behavior
#
# self.assertTrue(self._has_disabled_trait())
#
# Alternatively the test could wait for the periodic to run or trigger
# it manually.
# This passes now but not because enabling works but because the
# above fault caused that COMPUTE_STATUS_DISABLED is not on the compute
# RP in the first place.
self._enable_compute()
# Check that COMPUTE_STATUS_DISABLED is removed from the compute
self.assertFalse(self._has_disabled_trait())
self.assertNotIn(
'An error occurred while updating COMPUTE_STATUS_DISABLED trait '
'on compute node resource provider',
self.stdlog.logger.output,
"This is probably bug 1886418.")