diff --git a/nova/test.py b/nova/test.py index c96b05dbd114..af5e4131bb74 100644 --- a/nova/test.py +++ b/nova/test.py @@ -347,7 +347,7 @@ class TestCase(testtools.TestCase): svc = self.useFixture( nova_fixtures.ServiceFixture(name, host, **kwargs)) - if name == 'compute': + if name == 'compute' and self.USES_DB: ctxt = context.get_context() cell = self.cell_mappings[kwargs.pop('cell', CELL1_NAME)] hm = objects.HostMapping(context=ctxt, diff --git a/nova/tests/functional/api_sample_tests/api_sample_base.py b/nova/tests/functional/api_sample_tests/api_sample_base.py index 65a5cdea531b..aab616f76d45 100644 --- a/nova/tests/functional/api_sample_tests/api_sample_base.py +++ b/nova/tests/functional/api_sample_tests/api_sample_base.py @@ -56,6 +56,8 @@ CONF = nova.conf.CONF class ApiSampleTestBaseV21(testscenarios.WithScenarios, api_samples_test_base.ApiSampleTestBase): + SUPPORTS_CELLS = False + api_major_version = 'v2' # any additional fixtures needed for this scenario _additional_fixtures = [] @@ -87,13 +89,29 @@ class ApiSampleTestBaseV21(testscenarios.WithScenarios, for fix in self._additional_fixtures: self.useFixture(fix()) + if not self.SUPPORTS_CELLS: + # NOTE(danms): Disable base automatic DB (and cells) config + self.USES_DB = False + self.USES_DB_SELF = True + # super class call is delayed here so that we have the right # paste and conf before loading all the services, as we can't # change these later. super(ApiSampleTestBaseV21, self).setUp() + if not self.SUPPORTS_CELLS: + self.useFixture(fixtures.Database()) + self.useFixture(fixtures.Database(database='api')) + self.useFixture(fixtures.DefaultFlavorsFixture()) + self.useFixture(fixtures.SingleCellSimple()) + + super(ApiSampleTestBaseV21, self)._setup_services() + self.useFixture(test.SampleNetworks(host=self.network.host)) fake_network.stub_compute_with_ips(self.stubs) self.useFixture(fixtures.SpawnIsSynchronousFixture()) # this is used to generate sample docs self.generate_samples = os.getenv('GENERATE_SAMPLES') is not None + + def _setup_services(self): + pass diff --git a/nova/tests/functional/integrated_helpers.py b/nova/tests/functional/integrated_helpers.py index d59297fcf4dd..192b465592c0 100644 --- a/nova/tests/functional/integrated_helpers.py +++ b/nova/tests/functional/integrated_helpers.py @@ -79,19 +79,6 @@ class _IntegratedTestBase(test.TestCase): nova.tests.unit.image.fake.stub_out_image_service(self) self._setup_services() - self.api_fixture = self.useFixture( - nova_fixtures.OSAPIFixture(self.api_major_version)) - - # if the class needs to run as admin, make the api endpoint - # the admin, otherwise it's safer to run as non admin user. - if self.ADMIN_API: - self.api = self.api_fixture.admin_api - else: - self.api = self.api_fixture.api - - if hasattr(self, 'microversion'): - self.api.microversion = self.microversion - self.useFixture(cast_as_call.CastAsCall(self.stubs)) self.addCleanup(nova.tests.unit.image.fake.FakeImageService_reset) @@ -104,14 +91,32 @@ class _IntegratedTestBase(test.TestCase): return self.start_service('scheduler') def _setup_services(self): + # NOTE(danms): Set the global MQ connection to that of our first cell + # for any cells-ignorant code. Normally this is defaulted in the tests + # which will result in us not doing the right thing. + if 'cell1' in self.cell_mappings: + self.flags(transport_url=self.cell_mappings['cell1'].transport_url) self.conductor = self.start_service('conductor') - self.compute = self._setup_compute_service() self.consoleauth = self.start_service('consoleauth') self.network = self.start_service('network', manager=CONF.network_manager) self.scheduler = self._setup_scheduler_service() + self.compute = self._setup_compute_service() + self.api_fixture = self.useFixture( + nova_fixtures.OSAPIFixture(self.api_major_version)) + + # if the class needs to run as admin, make the api endpoint + # the admin, otherwise it's safer to run as non admin user. + if self.ADMIN_API: + self.api = self.api_fixture.admin_api + else: + self.api = self.api_fixture.api + + if hasattr(self, 'microversion'): + self.api.microversion = self.microversion + def get_unused_server_name(self): servers = self.api.get_servers() server_names = [server['name'] for server in servers] diff --git a/nova/tests/unit/cmd/test_status.py b/nova/tests/unit/cmd/test_status.py index fbb43066d6a6..6e53419a7487 100644 --- a/nova/tests/unit/cmd/test_status.py +++ b/nova/tests/unit/cmd/test_status.py @@ -370,9 +370,13 @@ class TestUpgradeCheckCellsV2(test.NoDBTestCase): """Tests a successful cells v2 upgrade check.""" # create the cell0 and first cell mappings self._setup_cells() - # create the host mapping indirectly - host mappings existing implies - # there is a compute node so that's not checked. - self.start_service('compute') + # Start a compute service and create a hostmapping for it + svc = self.start_service('compute') + cell = self.cell_mappings[test.CELL1_NAME] + hm = objects.HostMapping(context=context.get_admin_context(), + host=svc.host, + cell_mapping=cell) + hm.create() result = self.cmd._check_cellsv2() self.assertEqual(status.UpgradeCheckCode.SUCCESS, result.code)