From da2145e8e8e336f70316145dad18a8002dd437f1 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Tue, 19 Jun 2012 14:34:03 +0100 Subject: [PATCH] Switch libvirt get_cpu_info method over to use config APIs The get_cpu_info method in the libvirt driver currently uses XPath queries to extract information from the capabilities XML document. Switch this over to use the new config class LibvirtConfigCaps. Also provide a test case to validate the data being returned Fixes: bug #1003373 Implements: blueprint libvirt-xml-cpu-model Change-Id: I4946a16d27f712ae2adf8441ce78e6c0bb0bb657 Signed-off-by: Daniel P. Berrange --- nova/tests/test_libvirt.py | 45 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py index 2bc20d2b..3bb377e2 100644 --- a/nova/tests/test_libvirt.py +++ b/nova/tests/test_libvirt.py @@ -1747,6 +1747,51 @@ class LibvirtConnTestCase(test.TestCase): space = fake_libvirt_utils.get_fs_info(FLAGS.instances_path)['free'] self.assertEqual(result, space / 1024 ** 3) + def test_cpu_info(self): + conn = libvirt_driver.LibvirtDriver(True) + + def get_host_capabilities_stub(self): + cpu = config.LibvirtConfigCPU() + cpu.model = "Opteron_G4" + cpu.vendor = "AMD" + cpu.arch = "x86_64" + + cpu.cores = 2 + cpu.threads = 1 + cpu.sockets = 4 + + cpu.add_feature(config.LibvirtConfigCPUFeature("extapic")) + cpu.add_feature(config.LibvirtConfigCPUFeature("3dnow")) + + caps = config.LibvirtConfigCaps() + caps.host = config.LibvirtConfigCapsHost() + caps.host.cpu = cpu + + guest = config.LibvirtConfigGuest() + guest.ostype = "hvm" + guest.arch = "x86_64" + caps.guests.append(guest) + + guest = config.LibvirtConfigGuest() + guest.ostype = "hvm" + guest.arch = "i686" + caps.guests.append(guest) + + return caps + + self.stubs.Set(libvirt_driver.LibvirtDriver, + 'get_host_capabilities', + get_host_capabilities_stub) + + want = {"vendor": "AMD", + "features": ["extapic", "3dnow"], + "permitted_instance_types": ["x86_64", "i686"], + "model": "Opteron_G4", + "arch": "x86_64", + "topology": {"cores": 2, "threads": 1, "sockets": 4}} + got = jsonutils.loads(conn.get_cpu_info()) + self.assertEqual(want, got) + class HostStateTestCase(test.TestCase):