Merge "Reproducer test for live migration with power management"
This commit is contained in:
commit
b10cca0282
|
@ -88,6 +88,86 @@ class PowerManagementTestsBase(base.ServersTestBase):
|
||||||
self.assertEqual('performance', core.governor)
|
self.assertEqual('performance', core.governor)
|
||||||
|
|
||||||
|
|
||||||
|
class FakeCore(object):
|
||||||
|
|
||||||
|
def __init__(self, i):
|
||||||
|
self.ident = i
|
||||||
|
self.power_state = 'online'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def online(self):
|
||||||
|
return self.power_state == 'online'
|
||||||
|
|
||||||
|
@online.setter
|
||||||
|
def online(self, state):
|
||||||
|
if state:
|
||||||
|
self.power_state = 'online'
|
||||||
|
else:
|
||||||
|
self.power_state = 'offline'
|
||||||
|
|
||||||
|
|
||||||
|
class CoresStub(object):
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.cores = {}
|
||||||
|
|
||||||
|
def __call__(self, i):
|
||||||
|
if i not in self.cores:
|
||||||
|
self.cores[i] = FakeCore(i)
|
||||||
|
return self.cores[i]
|
||||||
|
|
||||||
|
|
||||||
|
class PowerManagementLiveMigrationTests(base.LibvirtMigrationMixin,
|
||||||
|
PowerManagementTestsBase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super().setUp()
|
||||||
|
|
||||||
|
self.useFixture(nova_fixtures.SysFileSystemFixture())
|
||||||
|
self.flags(cpu_dedicated_set='1-9', cpu_shared_set=None,
|
||||||
|
group='compute')
|
||||||
|
self.flags(vcpu_pin_set=None)
|
||||||
|
self.flags(cpu_power_management=True, group='libvirt')
|
||||||
|
|
||||||
|
# NOTE(artom) Fill up all dedicated CPUs. This makes the assertions
|
||||||
|
# further down easier.
|
||||||
|
self.pcpu_flavor_id = self._create_flavor(
|
||||||
|
vcpu=9, extra_spec=self.extra_spec)
|
||||||
|
|
||||||
|
self.start_compute(
|
||||||
|
host_info=fakelibvirt.HostInfo(cpu_nodes=1, cpu_sockets=1,
|
||||||
|
cpu_cores=5, cpu_threads=2),
|
||||||
|
hostname='src')
|
||||||
|
self.src = self.computes['src']
|
||||||
|
self.src.driver.cpu_api.core = CoresStub()
|
||||||
|
# NOTE(artom) In init_host() the libvirt driver calls
|
||||||
|
# power_down_all_dedicated_cpus(). Call it again now after swapping to
|
||||||
|
# our stub to fake reality.
|
||||||
|
self.src.driver.cpu_api.power_down_all_dedicated_cpus()
|
||||||
|
|
||||||
|
self.start_compute(
|
||||||
|
host_info=fakelibvirt.HostInfo(cpu_nodes=1, cpu_sockets=1,
|
||||||
|
cpu_cores=5, cpu_threads=2),
|
||||||
|
hostname='dest')
|
||||||
|
self.dest = self.computes['dest']
|
||||||
|
self.dest.driver.cpu_api.power_down_all_dedicated_cpus()
|
||||||
|
|
||||||
|
def assert_cores(self, host, cores, online=True):
|
||||||
|
for i in cores:
|
||||||
|
self.assertEqual(online, host.driver.cpu_api.core(i).online)
|
||||||
|
|
||||||
|
def test_live_migrate_server(self):
|
||||||
|
self.server = self._create_server(
|
||||||
|
flavor_id=self.pcpu_flavor_id,
|
||||||
|
expected_state='ACTIVE', host='src')
|
||||||
|
server = self._live_migrate(self.server)
|
||||||
|
self.assertEqual('dest', server['OS-EXT-SRV-ATTR:host'])
|
||||||
|
# FIXME(artom) We've not powered up the dest cores, and left the src
|
||||||
|
# cores powered on.
|
||||||
|
self.assert_cores(self.src, range(1, 10), online=True)
|
||||||
|
self.assert_cores(self.dest, range(1, 10), online=False)
|
||||||
|
|
||||||
|
|
||||||
class PowerManagementTests(PowerManagementTestsBase):
|
class PowerManagementTests(PowerManagementTestsBase):
|
||||||
"""Test suite for a single host with 9 dedicated cores and 1 used for OS"""
|
"""Test suite for a single host with 9 dedicated cores and 1 used for OS"""
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue