diff options
| author | Daniel P. Berrange <berrange@redhat.com> | 2012-06-19 14:42:59 +0100 |
|---|---|---|
| committer | Daniel P. Berrange <berrange@redhat.com> | 2012-07-02 19:59:33 +0100 |
| commit | 2a236d24a84875ee17df427ed90457414aaa9149 (patch) | |
| tree | 656419955e70b5189668f56e76805f7a597ef9ff /nova/tests | |
| parent | 7504c13711da5e372918b60393f497349e523994 (diff) | |
Add compatibility for CPU model config with libvirt < 0.9.10
Libvirt versions prior to 0.9.10 do not support the simpler
'mode' attribute for choosing CPU model. So with such libvirt
releases we must explicitly construct the guest CPU model
from the host capabilities info when mode=host-model. We
can not support mode=host-passthrough at all with these
earlier libvirt versions
This change can be reverted in the future, if the value of
the MIN_LIBVIRT_VERSION constant is increased to 0.9.10
or later
Fixes: bug #1003373
Implements: blueprint libvirt-xml-cpu-model
Change-Id: I3e55ffccf38be18454f810efeb5c201aab94ddb0
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Diffstat (limited to 'nova/tests')
| -rw-r--r-- | nova/tests/test_libvirt.py | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py index 55163b4c4..982d08554 100644 --- a/nova/tests/test_libvirt.py +++ b/nova/tests/test_libvirt.py @@ -684,6 +684,79 @@ class LibvirtConnTestCase(test.TestCase): self.assertEquals(conf.cpu.mode, "custom") self.assertEquals(conf.cpu.model, "Penryn") + @test.skip_if(missing_libvirt(), "Test requires libvirt") + def test_get_guest_cpu_config_host_passthrough_old(self): + def get_lib_version_stub(self): + return (0 * 1000 * 1000) + (9 * 1000) + 7 + + self.stubs.Set(libvirt.virConnect, "getLibVersion", + get_lib_version_stub) + conn = libvirt_driver.LibvirtDriver(True) + instance_ref = db.instance_create(self.context, self.test_instance) + + self.flags(libvirt_cpu_mode="host-passthrough") + self.assertRaises(exception.NovaException, + conn.get_guest_config, + instance_ref, + _fake_network_info(self.stubs, 1), + None, None) + + @test.skip_if(missing_libvirt(), "Test requires libvirt") + def test_get_guest_cpu_config_host_model_old(self): + def get_lib_version_stub(self): + return (0 * 1000 * 1000) + (9 * 1000) + 7 + + # Ensure we have a predictable host CPU + def get_host_capabilities_stub(self): + cpu = config.LibvirtConfigGuestCPU() + cpu.model = "Opteron_G4" + cpu.vendor = "AMD" + + caps = config.LibvirtConfigCaps() + caps.host = config.LibvirtConfigCapsHost() + caps.host.cpu = cpu + return caps + + self.stubs.Set(libvirt.virConnect, + "getLibVersion", + get_lib_version_stub) + self.stubs.Set(libvirt_driver.LibvirtDriver, + "get_host_capabilities", + get_host_capabilities_stub) + conn = libvirt_driver.LibvirtDriver(True) + instance_ref = db.instance_create(self.context, self.test_instance) + + self.flags(libvirt_cpu_mode="host-model") + conf = conn.get_guest_config(instance_ref, + _fake_network_info(self.stubs, 1), + None, None) + self.assertEquals(type(conf.cpu), + config.LibvirtConfigGuestCPU) + self.assertEquals(conf.cpu.mode, None) + self.assertEquals(conf.cpu.model, "Opteron_G4") + self.assertEquals(conf.cpu.vendor, "AMD") + + @test.skip_if(missing_libvirt(), "Test requires libvirt") + def test_get_guest_cpu_config_custom_old(self): + def get_lib_version_stub(self): + return (0 * 1000 * 1000) + (9 * 1000) + 7 + + self.stubs.Set(libvirt.virConnect, + "getLibVersion", + get_lib_version_stub) + conn = libvirt_driver.LibvirtDriver(True) + instance_ref = db.instance_create(self.context, self.test_instance) + + self.flags(libvirt_cpu_mode="custom") + self.flags(libvirt_cpu_model="Penryn") + conf = conn.get_guest_config(instance_ref, + _fake_network_info(self.stubs, 1), + None, None) + self.assertEquals(type(conf.cpu), + config.LibvirtConfigGuestCPU) + self.assertEquals(conf.cpu.mode, None) + self.assertEquals(conf.cpu.model, "Penryn") + def test_xml_and_uri_no_ramdisk_no_kernel(self): instance_data = dict(self.test_instance) self._check_xml_and_uri(instance_data, |
