Change in vdsm[master]: Add unit test to caps.py to prepare for minidom replacement

mmirecki at redhat.com mmirecki at redhat.com
Mon May 18 17:36:36 UTC 2015


Marcin Mirecki has uploaded a new change for review.

Change subject: Add unit test to caps.py to prepare for minidom replacement
......................................................................

Add unit test to caps.py to prepare for minidom replacement

minidom will be replaced by ElementTree in caps.py
As some of the code in which the changes will occur is not unit tested,
tests had to be written for it.

Change-Id: I86c2203bf245ba209e10b0905ae1090835408201
Signed-off-by: mmirecki <mmirecki at redhat.com>
---
M tests/capsTests.py
A tests/cpu_map.xml
M vdsm/caps.py
3 files changed, 733 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/77/41077/1

diff --git a/tests/capsTests.py b/tests/capsTests.py
index f1563e9..0212758 100644
--- a/tests/capsTests.py
+++ b/tests/capsTests.py
@@ -21,6 +21,7 @@
 
 import os
 import platform
+import xml.etree.ElementTree as ET
 from testlib import VdsmTestCase as TestCaseBase
 from monkeypatch import MonkeyPatch
 
@@ -194,3 +195,67 @@
         support = caps._getLiveSnapshotSupport(caps.Architecture.X86_64,
                                                capsData)
         self.assertEqual(support, False)
+
+    def testGetLiveSnapshotSupport(self):
+        capsData = self._readCaps("caps_libvirt_intel_i73770_nosnap.out")
+
+        result = caps._getLiveSnapshotSupport('i686', capsData)
+        self.assertEqual(result, None)
+
+        result = caps._getLiveSnapshotSupport(caps.Architecture.X86_64,
+                                              capsData)
+        self.assertEqual(result, False)
+
+        capsData = self._readCaps("caps_libvirt_intel_i73770.out")
+
+        result = caps._getLiveSnapshotSupport('i686', capsData)
+        self.assertEqual(result, None)
+
+        result = caps._getLiveSnapshotSupport(caps.Architecture.X86_64,
+                                              capsData)
+        self.assertEqual(result, True)
+
+    def testGetAllCpuModels(self):
+        fileName = '/usr/share/libvirt/cpu_map.xml'
+        result = caps._getAllCpuModels(capfile=fileName,
+                                       arch='x86')
+
+        expected = {'qemu32': None, 'Haswell': 'Intel', 'cpu64-rhel6': None,
+                    'cpu64-rhel5': None, 'Broadwell': 'Intel', 'pentium2':
+                    None, 'pentiumpro': None, 'athlon': 'AMD', 'Nehalem':
+                    'Intel', 'Conroe': 'Intel', 'kvm32': None, 'pentium': None,
+                    'Opteron_G3': 'AMD', 'coreduo': 'Intel', 'Opteron_G1':
+                    'AMD', 'Opteron_G5': 'AMD', 'Opteron_G4': 'AMD',
+                    'core2duo': 'Intel', 'Penryn': 'Intel', 'qemu64': None,
+                    'phenom': 'AMD', 'Opteron_G2': 'AMD', '486': None,
+                    'Westmere': 'Intel', 'pentium3': None, 'n270': 'Intel',
+                    'SandyBridge': 'Intel', 'kvm64': None}
+        self.assertEqual(expected, result)
+
+    def testGetAllCpuModels_noArch(self):
+        fileName = '/usr/share/libvirt/cpu_map.xml'
+        result = caps._getAllCpuModels(capfile=fileName,
+                                       arch='zzz')
+        self.assertEqual(dict(), result)
+
+    def testGetEmulatedMachines(self):
+        capsData = self._readCaps("caps_libvirt_intel_i73770_nosnap.out")
+        result = caps._getEmulatedMachines('x86_64', capsData)
+        expected = ['rhel6.5.0', 'pc', 'rhel6.4.0', 'rhel6.3.0', 'rhel6.2.0',
+                    'rhel6.1.0', 'rhel6.0.0', 'rhel5.5.0', 'rhel5.4.4',
+                    'rhel5.4.0']
+        self.assertEqual(expected, result)
+
+    def testGetNumaTopology(self):
+        capsData = self._readCaps("caps_libvirt_intel_i73770_nosnap.out")
+        result = caps.getNumaTopology(capsData)
+        # only check cpus, memory does not come from file
+        expected = [0, 1, 2, 3, 4, 5, 6, 7]
+        self.assertEqual(expected, result['0']['cpus'])
+
+    def testGetCpuTopology(self):
+        capsData = self._readCaps("caps_libvirt_intel_i73770_nosnap.out")
+        result = caps._getCpuTopology(capsData)
+        expected = {'cores': 4, 'threads': 8, 'sockets': 1,
+                    'onlineCpus': ['0', '1', '2', '3', '4', '5', '6', '7']}
+        self.assertEqual(expected, result)
\ No newline at end of file
diff --git a/tests/cpu_map.xml b/tests/cpu_map.xml
new file mode 100644
index 0000000..bd9b056
--- /dev/null
+++ b/tests/cpu_map.xml
@@ -0,0 +1,661 @@
+<cpus>
+  <arch name='x86'>
+    <!-- vendor definitions -->
+    <vendor name='Intel' string='GenuineIntel'/>
+    <vendor name='AMD' string='AuthenticAMD'/>
+
+    <!-- standard features, EDX -->
+    <feature name='fpu'> <!-- CPUID_FP87 -->
+      <cpuid function='0x00000001' edx='0x00000001'/>
+    </feature>
+    <feature name='vme'> <!-- CPUID_VME -->
+      <cpuid function='0x00000001' edx='0x00000002'/>
+    </feature>
+    <feature name='de'> <!-- CPUID_DE -->
+      <cpuid function='0x00000001' edx='0x00000004'/>
+    </feature>
+    <feature name='pse'> <!-- CPUID_PSE -->
+      <cpuid function='0x00000001' edx='0x00000008'/>
+    </feature>
+    <feature name='tsc'> <!-- CPUID_TSC -->
+      <cpuid function='0x00000001' edx='0x00000010'/>
+    </feature>
+    <feature name='msr'> <!-- CPUID_MSR -->
+      <cpuid function='0x00000001' edx='0x00000020'/>
+    </feature>
+    <feature name='pae'> <!-- CPUID_PAE -->
+      <cpuid function='0x00000001' edx='0x00000040'/>
+    </feature>
+    <feature name='mce'> <!-- CPUID_MCE -->
+      <cpuid function='0x00000001' edx='0x00000080'/>
+    </feature>
+    <feature name='cx8'> <!-- CPUID_CX8 -->
+      <cpuid function='0x00000001' edx='0x00000100'/>
+    </feature>
+    <feature name='apic'> <!-- CPUID_APIC -->
+      <cpuid function='0x00000001' edx='0x00000200'/>
+    </feature>
+    <feature name='sep'> <!-- CPUID_SEP -->
+      <cpuid function='0x00000001' edx='0x00000800'/>
+    </feature>
+    <feature name='mtrr'> <!-- CPUID_MTRR -->
+      <cpuid function='0x00000001' edx='0x00001000'/>
+    </feature>
+    <feature name='pge'> <!-- CPUID_PGE -->
+      <cpuid function='0x00000001' edx='0x00002000'/>
+    </feature>
+    <feature name='mca'> <!-- CPUID_MCA -->
+      <cpuid function='0x00000001' edx='0x00004000'/>
+    </feature>
+    <feature name='cmov'> <!-- CPUID_CMOV -->
+      <cpuid function='0x00000001' edx='0x00008000'/>
+    </feature>
+    <feature name='pat'> <!-- CPUID_PAT -->
+      <cpuid function='0x00000001' edx='0x00010000'/>
+    </feature>
+    <feature name='pse36'> <!-- CPUID_PSE36 -->
+      <cpuid function='0x00000001' edx='0x00020000'/>
+    </feature>
+    <feature name='pn'> <!-- CPUID_PN -->
+      <cpuid function='0x00000001' edx='0x00040000'/>
+    </feature>
+    <feature name='clflush'> <!-- CPUID_CLFLUSH -->
+      <cpuid function='0x00000001' edx='0x00080000'/>
+    </feature>
+    <feature name='ds'> <!-- CPUID_DTS -->
+      <cpuid function='0x00000001' edx='0x00200000'/>
+    </feature>
+    <feature name='acpi'> <!-- CPUID_ACPI -->
+      <cpuid function='0x00000001' edx='0x00400000'/>
+    </feature>
+    <feature name='mmx'> <!-- CPUID_MMX -->
+      <cpuid function='0x00000001' edx='0x00800000'/>
+    </feature>
+    <feature name='fxsr'> <!-- CPUID_FXSR -->
+      <cpuid function='0x00000001' edx='0x01000000'/>
+    </feature>
+    <feature name='sse'> <!-- CPUID_SSE -->
+      <cpuid function='0x00000001' edx='0x02000000'/>
+    </feature>
+    <feature name='sse2'> <!-- CPUID_SSE2 -->
+      <cpuid function='0x00000001' edx='0x04000000'/>
+    </feature>
+    <feature name='ss'> <!-- CPUID_SS -->
+      <cpuid function='0x00000001' edx='0x08000000'/>
+    </feature>
+    <feature name='ht'> <!-- CPUID_HT -->
+      <cpuid function='0x00000001' edx='0x10000000'/>
+    </feature>
+    <feature name='tm'> <!-- CPUID_TM -->
+      <cpuid function='0x00000001' edx='0x20000000'/>
+    </feature>
+    <feature name='ia64'> <!-- CPUID_IA64 -->
+      <cpuid function='0x00000001' edx='0x40000000'/>
+    </feature>
+    <feature name='pbe'> <!-- CPUID_PBE -->
+      <cpuid function='0x00000001' edx='0x80000000'/>
+    </feature>
+
+    <!-- standard features, ECX -->
+    <feature name='pni'> <!-- CPUID_EXT_SSE3 -->
+      <cpuid function='0x00000001' ecx='0x00000001'/>
+    </feature>
+    <feature name='pclmuldq'>
+      <cpuid function='0x00000001' ecx='0x00000002'/>
+    </feature>
+    <feature name='dtes64'>
+      <cpuid function='0x00000001' ecx='0x00000004'/>
+    </feature>
+    <feature name='monitor'> <!-- CPUID_EXT_MONITOR -->
+      <cpuid function='0x00000001' ecx='0x00000008'/>
+    </feature>
+    <feature name='ds_cpl'> <!-- CPUID_EXT_DSCPL -->
+      <cpuid function='0x00000001' ecx='0x00000010'/>
+    </feature>
+    <feature name='vmx'> <!-- CPUID_EXT_VMX -->
+      <cpuid function='0x00000001' ecx='0x00000020'/>
+    </feature>
+     <feature name='smx'>
+      <cpuid function='0x00000001' ecx='0x00000040'/>
+    </feature>
+    <feature name='est'> <!-- CPUID_EXT_EST -->
+      <cpuid function='0x00000001' ecx='0x00000080'/>
+    </feature>
+    <feature name='tm2'> <!-- CPUID_EXT_TM2 -->
+      <cpuid function='0x00000001' ecx='0x00000100'/>
+    </feature>
+    <feature name='ssse3'> <!-- CPUID_EXT_SSSE3 -->
+      <cpuid function='0x00000001' ecx='0x00000200'/>
+    </feature>
+    <feature name='cid'> <!-- CPUID_EXT_CID -->
+      <cpuid function='0x00000001' ecx='0x00000400'/>
+    </feature>
+    <feature name='fma'>
+      <cpuid function='0x00000001' ecx='0x00001000'/>
+    </feature>
+    <feature name='cx16'> <!-- CPUID_EXT_CX16 -->
+      <cpuid function='0x00000001' ecx='0x00002000'/>
+    </feature>
+    <feature name='xtpr'> <!-- CPUID_EXT_XTPR -->
+      <cpuid function='0x00000001' ecx='0x00004000'/>
+    </feature>
+    <feature name='pdcm'>
+      <cpuid function='0x00000001' ecx='0x00008000'/>
+    </feature>
+    <feature name='pcid'>
+      <cpuid function='0x00000001' ecx='0x00020000'/>
+    </feature>
+    <feature name='dca'> <!-- CPUID_EXT_DCA -->
+      <cpuid function='0x00000001' ecx='0x00040000'/>
+    </feature>
+    <feature name='sse4.1'> <!-- CPUID_EXT_SSE41 -->
+      <cpuid function='0x00000001' ecx='0x00080000'/>
+    </feature>
+    <feature name='sse4.2'> <!-- CPUID_EXT_SSE42 -->
+      <cpuid function='0x00000001' ecx='0x00100000'/>
+    </feature>
+    <feature name='x2apic'> <!-- CPUID_EXT_X2APIC -->
+      <cpuid function='0x00000001' ecx='0x00200000'/>
+    </feature>
+    <feature name='movbe'>
+      <cpuid function='0x00000001' ecx='0x00400000'/>
+    </feature>
+    <feature name='popcnt'> <!-- CPUID_EXT_POPCNT -->
+      <cpuid function='0x00000001' ecx='0x00800000'/>
+    </feature>
+    <feature name='tsc-deadline'>
+      <cpuid function='0x00000001' ecx='0x01000000'/>
+    </feature>
+    <feature name='aes'>
+      <cpuid function='0x00000001' ecx='0x02000000'/>
+    </feature>
+    <feature name='xsave'>
+      <cpuid function='0x00000001' ecx='0x04000000'/>
+    </feature>
+    <feature name='osxsave'>
+      <cpuid function='0x00000001' ecx='0x08000000'/>
+    </feature>
+    <feature name='avx'>
+      <cpuid function='0x00000001' ecx='0x10000000'/>
+    </feature>
+    <feature name='f16c'>
+      <cpuid function='0x00000001' ecx='0x20000000'/>
+    </feature>
+    <feature name='rdrand'>
+      <cpuid function='0x00000001' ecx='0x40000000'/>
+    </feature>
+    <feature name='hypervisor'> <!-- CPUID_EXT_HYPERVISOR -->
+      <cpuid function='0x00000001' ecx='0x80000000'/>
+    </feature>
+
+    <!-- extended features, EDX -->
+    <feature name='syscall'> <!-- CPUID_EXT2_SYSCALL -->
+      <cpuid function='0x80000001' edx='0x00000800'/>
+    </feature>
+    <feature name='nx'> <!-- CPUID_EXT2_NX -->
+      <cpuid function='0x80000001' edx='0x00100000'/>
+    </feature>
+    <feature name='mmxext'> <!-- CPUID_EXT2_MMXEXT -->
+      <cpuid function='0x80000001' edx='0x00400000'/>
+    </feature>
+    <feature name='fxsr_opt'> <!-- CPUID_EXT2_FFXSR -->
+      <cpuid function='0x80000001' edx='0x02000000'/>
+    </feature>
+    <feature name='pdpe1gb'> <!-- CPUID_EXT2_PDPE1GB -->
+      <cpuid function='0x80000001' edx='0x04000000'/>
+    </feature>
+    <feature name='rdtscp'> <!-- CPUID_EXT2_RDTSCP -->
+      <cpuid function='0x80000001' edx='0x08000000'/>
+    </feature>
+    <feature name='lm'> <!-- CPUID_EXT2_LM -->
+      <cpuid function='0x80000001' edx='0x20000000'/>
+    </feature>
+    <feature name='3dnowext'> <!-- CPUID_EXT2_3DNOWEXT -->
+      <cpuid function='0x80000001' edx='0x40000000'/>
+    </feature>
+    <feature name='3dnow'> <!-- CPUID_EXT2_3DNOW -->
+      <cpuid function='0x80000001' edx='0x80000000'/>
+    </feature>
+
+    <!-- extended features, ECX -->
+    <feature name='lahf_lm'> <!-- CPUID_EXT3_LAHF_LM -->
+      <cpuid function='0x80000001' ecx='0x00000001'/>
+    </feature>
+    <feature name='cmp_legacy'> <!-- CPUID_EXT3_CMP_LEG -->
+      <cpuid function='0x80000001' ecx='0x00000002'/>
+    </feature>
+    <feature name='svm'> <!-- CPUID_EXT3_SVM -->
+      <cpuid function='0x80000001' ecx='0x00000004'/>
+    </feature>
+    <feature name='extapic'> <!-- CPUID_EXT3_EXTAPIC -->
+      <cpuid function='0x80000001' ecx='0x00000008'/>
+    </feature>
+    <feature name='cr8legacy'> <!-- CPUID_EXT3_CR8LEG -->
+      <cpuid function='0x80000001' ecx='0x00000010'/>
+    </feature>
+    <feature name='abm'> <!-- CPUID_EXT3_ABM -->
+      <cpuid function='0x80000001' ecx='0x00000020'/>
+    </feature>
+    <feature name='sse4a'> <!-- CPUID_EXT3_SSE4A -->
+      <cpuid function='0x80000001' ecx='0x00000040'/>
+    </feature>
+    <feature name='misalignsse'> <!-- CPUID_EXT3_MISALIGNSSE -->
+      <cpuid function='0x80000001' ecx='0x00000080'/>
+    </feature>
+    <feature name='3dnowprefetch'> <!-- CPUID_EXT3_3DNOWPREFETCH -->
+      <cpuid function='0x80000001' ecx='0x00000100'/>
+    </feature>
+    <feature name='osvw'> <!-- CPUID_EXT3_OSVW -->
+      <cpuid function='0x80000001' ecx='0x00000200'/>
+    </feature>
+    <feature name='ibs'>
+      <cpuid function='0x80000001' ecx='0x00000400'/>
+    </feature>
+    <feature name='xop'>
+      <cpuid function='0x80000001' ecx='0x00000800'/>
+    </feature>
+    <feature name='skinit'> <!-- CPUID_EXT3_SKINIT -->
+      <cpuid function='0x80000001' ecx='0x00001000'/>
+    </feature>
+    <feature name='wdt'>
+      <cpuid function='0x80000001' ecx='0x00002000'/>
+    </feature>
+    <feature name='lwp'>
+      <cpuid function='0x80000001' ecx='0x00008000'/>
+    </feature>
+    <feature name='fma4'>
+      <cpuid function='0x80000001' ecx='0x00010000'/>
+    </feature>
+    <feature name='tce'>
+      <cpuid function='0x80000001' ecx='0x00020000'/>
+    </feature>
+    <feature name='cvt16'>
+      <cpuid function='0x80000001' ecx='0x00040000'/>
+    </feature>
+    <feature name='nodeid_msr'>
+      <cpuid function='0x80000001' ecx='0x00080000'/>
+    </feature>
+    <feature name='tbm'>
+      <cpuid function='0x80000001' ecx='0x00200000'/>
+    </feature>
+    <feature name='topoext'>
+      <cpuid function='0x80000001' ecx='0x00400000'/>
+    </feature>
+    <feature name='perfctr_core'>
+      <cpuid function='0x80000001' ecx='0x00800000'/>
+    </feature>
+    <feature name='perfctr_nb'>
+      <cpuid function='0x80000001' ecx='0x01000000'/>
+    </feature>
+
+    <!-- cpuid function 0x7 ecx 0x0 features -->
+    <!-- We support only ecx 0x0 now as it's done by a workaround -->
+    <feature name='fsgsbase'>
+      <cpuid function='0x00000007' ebx='0x00000001'/>
+    </feature>
+    <feature name='bmi1'>
+      <cpuid function='0x00000007' ebx='0x00000008'/>
+    </feature>
+    <feature name='hle'>
+      <cpuid function='0x00000007' ebx='0x00000010'/>
+    </feature>
+    <feature name='avx2'>
+      <cpuid function='0x00000007' ebx='0x00000020'/>
+    </feature>
+    <feature name='smep'>
+      <cpuid function='0x00000007' ebx='0x00000080'/>
+    </feature>
+    <feature name='bmi2'>
+      <cpuid function='0x00000007' ebx='0x00000100'/>
+    </feature>
+    <feature name='erms'>
+      <cpuid function='0x00000007' ebx='0x00000200'/>
+    </feature>
+    <feature name='invpcid'>
+      <cpuid function='0x00000007' ebx='0x00000400'/>
+    </feature>
+    <feature name='rtm'>
+      <cpuid function='0x00000007' ebx='0x00000800'/>
+    </feature>
+    <feature name='rdseed'>
+      <cpuid function='0x00000007' ebx='0x00040000'/>
+    </feature>
+    <feature name='adx'>
+      <cpuid function='0x00000007' ebx='0x00080000'/>
+    </feature>
+    <feature name='smap'>
+      <cpuid function='0x00000007' ebx='0x00100000'/>
+    </feature>
+
+    <!-- Advanced Power Management edx features -->
+    <feature name='invtsc' migratable='no'>
+      <cpuid function='0x80000007' edx='0x00000100'/>
+    </feature>
+
+    <!-- models -->
+    <model name='486'>
+      <feature name='fpu'/>
+      <feature name='vme'/>
+      <feature name='pse'/>
+    </model>
+
+    <!-- Intel-based QEMU generic CPU models -->
+    <model name='pentium'>
+      <model name='486'/>
+      <feature name='de'/>
+      <feature name='tsc'/>
+      <feature name='msr'/>
+      <feature name='mce'/>
+      <feature name='cx8'/>
+      <feature name='mmx'/>
+    </model>
+
+    <model name='pentium2'>
+      <model name='pentium'/>
+      <feature name='pae'/>
+      <feature name='sep'/>
+      <feature name='mtrr'/>
+      <feature name='pge'/>
+      <feature name='mca'/>
+      <feature name='cmov'/>
+      <feature name='pat'/>
+      <feature name='pse36'/>
+      <feature name='fxsr'/>
+    </model>
+
+    <model name='pentium3'>
+      <model name='pentium2'/>
+      <feature name='sse'/>
+    </model>
+
+    <model name='pentiumpro'>
+      <feature name='fpu'/>
+      <feature name='de'/>
+      <feature name='pse'/>
+      <feature name='tsc'/>
+      <feature name='msr'/>
+      <feature name='pae'/>
+      <feature name='mce'/>
+      <feature name='cx8'/>
+      <feature name='apic'/>
+      <feature name='sep'/>
+      <feature name='pge'/>
+      <feature name='cmov'/>
+      <feature name='pat'/>
+      <feature name='mmx'/>
+      <feature name='fxsr'/>
+      <feature name='sse'/>
+      <feature name='sse2'/>
+    </model>
+
+    <model name='coreduo'>
+      <model name='pentiumpro'/>
+      <vendor name='Intel'/>
+      <feature name='vme'/>
+      <feature name='mtrr'/>
+      <feature name='mca'/>
+      <feature name='clflush'/>
+      <feature name='pni'/>
+      <feature name='monitor'/>
+      <feature name='nx'/>
+    </model>
+
+    <model name='n270'>
+      <model name='coreduo'/>
+      <feature name='ssse3'/>
+    </model>
+
+    <model name='core2duo'>
+      <model name='n270'/>
+      <feature name='pse36'/>
+      <feature name='syscall'/>
+      <feature name='lm'/>
+    </model>
+
+    <!-- Generic QEMU CPU models -->
+    <model name='qemu32'>
+      <model name='pentiumpro'/>
+      <feature name='pni'/>
+    </model>
+
+    <model name='kvm32'>
+      <model name='qemu32'/>
+      <feature name='mtrr'/>
+      <feature name='mca'/>
+      <feature name='pse36'/>
+      <feature name='clflush'/>
+    </model>
+
+    <model name='cpu64-rhel5'>
+      <model name='kvm32'/>
+      <feature name='syscall'/>
+      <feature name='nx'/>
+      <feature name='lm'/>
+    </model>
+
+    <model name='cpu64-rhel6'>
+      <model name='cpu64-rhel5'/>
+      <feature name='cx16'/>
+      <feature name='lahf_lm'/>
+    </model>
+
+    <model name='kvm64'>
+      <model name='cpu64-rhel5'/>
+      <feature name='cx16'/>
+    </model>
+
+    <model name='qemu64'>
+      <model name='kvm64'/>
+      <!-- These are supported only by TCG.  KVM supports them only if the
+           host does.  So we leave them out:
+
+           <feature name='popcnt'/>
+           <feature name='lahf_lm'/>
+           <feature name='sse4a'/>
+           <feature name='abm'/>
+      -->
+      <feature name='svm'/>
+    </model>
+
+    <!-- Intel CPU models -->
+    <model name='Conroe'>
+      <model name='pentiumpro'/>
+      <vendor name='Intel'/>
+      <feature name='mtrr'/>
+      <feature name='mca'/>
+      <feature name='pse36'/>
+      <feature name='clflush'/>
+      <feature name='pni'/>
+      <feature name='ssse3'/>
+      <feature name='syscall'/>
+      <feature name='nx'/>
+      <feature name='lm'/>
+      <feature name='lahf_lm'/>
+    </model>
+
+    <model name='Penryn'>
+      <model name='Conroe'/>
+      <feature name='cx16'/>
+      <feature name='sse4.1'/>
+    </model>
+
+    <model name='Nehalem'>
+      <model name='Penryn'/>
+      <feature name='sse4.2'/>
+      <feature name='popcnt'/>
+    </model>
+
+    <model name='Westmere'>
+      <model name='Nehalem'/>
+      <feature name='aes'/>
+    </model>
+
+    <model name='SandyBridge'>
+      <model name='Westmere'/>
+      <feature name='pclmuldq'/>
+      <feature name='x2apic'/>
+      <feature name='tsc-deadline'/>
+      <feature name='xsave'/>
+      <feature name='avx'/>
+      <feature name='rdtscp'/>
+    </model>
+
+    <model name='Haswell'>
+      <model name='SandyBridge'/>
+      <feature name='fma'/>
+      <feature name='pcid'/>
+      <feature name='movbe'/>
+      <feature name='fsgsbase'/>
+      <feature name='bmi1'/>
+      <feature name='hle'/>
+      <feature name='avx2'/>
+      <feature name='smep'/>
+      <feature name='bmi2'/>
+      <feature name='erms'/>
+      <feature name='invpcid'/>
+      <feature name='rtm'/>
+    </model>
+
+    <model name='Broadwell'>
+      <model name='Haswell'/>
+      <feature name='3dnowprefetch'/>
+      <feature name='rdseed'/>
+      <feature name='adx'/>
+      <feature name='smap'/>
+    </model>
+
+    <!-- AMD CPUs -->
+    <model name='athlon'>
+      <model name='pentiumpro'/>
+      <vendor name='AMD'/>
+      <feature name='vme'/>
+      <feature name='mtrr'/>
+      <feature name='pse36'/>
+      <feature name='mmxext'/>
+      <feature name='3dnowext'/>
+      <feature name='3dnow'/>
+    </model>
+
+    <model name='phenom'>
+      <model name='cpu64-rhel5'/>
+      <vendor name='AMD'/>
+      <feature name='monitor'/>
+      <feature name='mmxext'/>
+      <feature name='fxsr_opt'/>
+      <feature name='3dnowext'/>
+      <feature name='3dnow'/>
+      <feature name='svm'/>
+    </model>
+
+    <model name='Opteron_G1'>
+      <model name='cpu64-rhel5'/>
+      <vendor name='AMD'/>
+    </model>
+
+    <model name='Opteron_G2'>
+      <model name='Opteron_G1'/>
+      <feature name='cx16'/>
+      <feature name='rdtscp'/>
+      <feature name='lahf_lm'/>
+      <feature name='svm'/>
+    </model>
+
+    <model name='Opteron_G3'>
+      <model name='Opteron_G2'/>
+      <feature name='monitor'/>
+      <feature name='popcnt'/>
+      <feature name='abm'/>
+      <feature name='sse4a'/>
+      <feature name='misalignsse'/>
+    </model>
+
+    <model name='Opteron_G4'>
+      <model name='Opteron_G2'/>
+      <!-- Can't inherit from G3 because of missing "monitor"
+           feature -->
+      <feature name='pclmuldq'/>
+      <feature name='ssse3'/>
+      <feature name='sse4.1'/>
+      <feature name='sse4.2'/>
+      <feature name='popcnt'/>
+      <feature name='aes'/>
+      <feature name='xsave'/>
+      <feature name='avx'/>
+      <feature name='pdpe1gb'/>
+      <feature name='abm'/>
+      <feature name='sse4a'/>
+      <feature name='misalignsse'/>
+      <feature name='3dnowprefetch'/>
+      <feature name='xop'/>
+      <feature name='fma4'/>
+    </model>
+
+    <model name='Opteron_G5'>
+      <model name='Opteron_G4'/>
+      <feature name='f16c'/>
+      <feature name='fma'/>
+      <feature name='tbm'/>
+    </model>
+  </arch>
+  <arch name='ppc64'>
+    <!-- vendor definitions -->
+    <vendor name='IBM'/>
+
+    <!-- IBM-based CPU models -->
+    <model name='POWER7'>
+      <vendor name='IBM'/>
+      <pvr value='0x003f0200'/>
+    </model>
+
+    <model name='POWER7_v2.1'>
+      <vendor name='IBM'/>
+      <pvr value='0x003f0201'/>
+    </model>
+
+    <model name='POWER7_v2.3'>
+      <vendor name='IBM'/>
+      <pvr value='0x003f0203'/>
+    </model>
+
+    <model name='POWER7+_v2.1'>
+      <vendor name='IBM'/>
+      <pvr value='0x004a0201'/>
+    </model>
+
+    <model name='POWER8_v1.0'>
+      <vendor name='IBM'/>
+      <pvr value='0x004b0100'/>
+    </model>
+
+    <model name='power6'>
+      <vendor name='IBM'/>
+      <compat isa='2.05'/>
+      <pvr value='0x003e0000'/>
+    </model>
+
+    <model name='power7'>
+      <vendor name='IBM'/>
+      <compat isa='2.06'/>
+      <pvr value='0x003f0000'/>
+    </model>
+
+    <model name='power7+'>
+      <vendor name='IBM'/>
+      <compat isa='2.06B'/>
+      <pvr value='0x004a0000'/>
+    </model>
+
+    <model name='power8e'>
+      <vendor name='IBM'/>
+      <compat isa='2.07'/>
+      <pvr value='0x004b0000'/>
+    </model>
+
+    <model name='power8'>
+      <vendor name='IBM'/>
+      <compat isa='2.07'/>
+      <pvr value='0x004d0000'/>
+    </model>
+
+  </arch>
+</cpus>
diff --git a/vdsm/caps.py b/vdsm/caps.py
index 7f8027f..578b3fd 100644
--- a/vdsm/caps.py
+++ b/vdsm/caps.py
@@ -298,8 +298,9 @@
 
 
 @utils.memoized
-def getNumaTopology():
-    capabilities = _getCapsXMLStr()
+def getNumaTopology(capabilities=None):
+    if capabilities is None:
+        capabilities = _getCapsXMLStr()
     caps = minidom.parseString(capabilities)
     host = caps.getElementsByTagName('host')[0]
     cells = host.getElementsByTagName('cells')[0]
@@ -391,11 +392,12 @@
     return []
 
 
-def _getAllCpuModels():
-    with open('/usr/share/libvirt/cpu_map.xml') as xml:
+def _getAllCpuModels(capfile='/usr/share/libvirt/cpu_map.xml', arch=None):
+    with open(capfile) as xml:
         cpu_map = minidom.parseString(xml.read())
 
-    arch = platform.machine()
+    if arch is None:
+        arch = platform.machine()
 
     # In libvirt CPU map XML, both x86_64 and x86 are
     # the same architecture, so in order to find all


-- 
To view, visit https://gerrit.ovirt.org/41077
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I86c2203bf245ba209e10b0905ae1090835408201
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Marcin Mirecki <mmirecki at redhat.com>


More information about the vdsm-patches mailing list