Fix the request context in ServiceFixture

Multiple cells are not considered in ServiceFixture.
So all compute nodes are registered to only one cell (cell1)
database regardless of their cells.
So change the ServiceFixture to use a request context
for the cell where the service runs.

Change-Id: I6e940518c6ec27c02c714db6c124eb88c72214ab
Closes-Bug: #1759792
This commit is contained in:
Takashi NATSUME 2018-04-02 11:55:53 +09:00 committed by Matt Riedemann
parent 338a3df403
commit 6a06fd28c2
2 changed files with 11 additions and 4 deletions

View File

@ -407,6 +407,7 @@ class TestCase(testtools.TestCase):
CONF.set_override(k, v, group)
def start_service(self, name, host=None, **kwargs):
cell = None
if name == 'compute' and self.USES_DB:
# NOTE(danms): We need to create the HostMapping first, because
# otherwise we'll fail to update the scheduler while running
@ -422,7 +423,7 @@ class TestCase(testtools.TestCase):
# Make sure that CONF.host is relevant to the right hostname
self.useFixture(nova_fixtures.ConfPatcher(host=host))
svc = self.useFixture(
nova_fixtures.ServiceFixture(name, host, **kwargs))
nova_fixtures.ServiceFixture(name, host, cell=cell, **kwargs))
return svc.service

View File

@ -65,7 +65,7 @@ SESSION_CONFIGURED = False
class ServiceFixture(fixtures.Fixture):
"""Run a service as a test fixture."""
def __init__(self, name, host=None, **kwargs):
def __init__(self, name, host=None, cell=None, **kwargs):
name = name
# If not otherwise specified, the host will default to the
# name of the service. Some things like aggregates care that
@ -73,12 +73,18 @@ class ServiceFixture(fixtures.Fixture):
host = host or name
kwargs.setdefault('host', host)
kwargs.setdefault('binary', 'nova-%s' % name)
self.cell = cell
self.kwargs = kwargs
def setUp(self):
super(ServiceFixture, self).setUp()
self.service = service.Service.create(**self.kwargs)
self.service.start()
self.ctxt = context.get_admin_context()
if self.cell:
context.set_target_cell(self.ctxt, self.cell)
with mock.patch('nova.context.get_admin_context',
return_value=self.ctxt):
self.service = service.Service.create(**self.kwargs)
self.service.start()
self.addCleanup(self.service.kill)