42
42
from os_brick import exception as brick_exception
43
43
from os_brick.initiator import connector
44
44
import os_resource_classes as orc
45
+ import os_traits as ot
45
46
import os_vif
46
47
from oslo_concurrency import lockutils
47
48
from oslo_concurrency import processutils
@@ -18617,7 +18618,8 @@ def _get_inventory(self):
18617
18618
},
18618
18619
}
18619
18620
18620
- @mock.patch('nova.virt.libvirt.driver.LibvirtDriver._get_cpu_traits',
18621
+ @mock.patch('nova.virt.libvirt.driver.LibvirtDriver.'
18622
+ '_get_cpu_feature_traits',
18621
18623
new=mock.Mock(return_value=cpu_traits))
18622
18624
@mock.patch('nova.virt.libvirt.driver.LibvirtDriver._get_gpu_inventories')
18623
18625
@mock.patch('nova.virt.libvirt.driver.LibvirtDriver._get_local_gb_info',
@@ -18751,7 +18753,8 @@ def test_update_provider_tree_with_cpu_traits(self):
18751
18753
self.assertEqual(set(['HW_CPU_X86_AVX512F', 'HW_CPU_X86_BMI']),
18752
18754
self.pt.data(self.cn_rp['uuid']).traits)
18753
18755
18754
- @mock.patch('nova.virt.libvirt.driver.LibvirtDriver._get_cpu_traits',
18756
+ @mock.patch('nova.virt.libvirt.driver.LibvirtDriver.'
18757
+ '_get_cpu_feature_traits',
18755
18758
new=mock.Mock(return_value=cpu_traits))
18756
18759
@mock.patch('nova.virt.libvirt.driver.LibvirtDriver.'
18757
18760
'_get_mediated_device_information')
@@ -18883,7 +18886,8 @@ def test_update_provider_tree_for_vgpu_reshape(
18883
18886
self.assertEqual(original_allocations[uuids.consumer2],
18884
18887
allocations[uuids.consumer2])
18885
18888
18886
- @mock.patch('nova.virt.libvirt.driver.LibvirtDriver._get_cpu_traits',
18889
+ @mock.patch('nova.virt.libvirt.driver.LibvirtDriver.'
18890
+ '_get_cpu_feature_traits',
18887
18891
new=mock.Mock(return_value=cpu_traits))
18888
18892
@mock.patch('nova.virt.libvirt.driver.LibvirtDriver._get_gpu_inventories')
18889
18893
@mock.patch('nova.virt.libvirt.driver.LibvirtDriver._get_local_gb_info',
@@ -21678,6 +21682,10 @@ def test_recreate_mediated_device_on_init_host(
21678
21682
21679
21683
# Fake the fact that mdev1 is existing but mdev2 not
21680
21684
def _exists(path):
21685
+ # Keep the AMD SEV support check happy
21686
+ if path == '/sys/module/kvm_amd/parameters/sev':
21687
+ return False
21688
+
21681
21689
# Just verify what we ask
21682
21690
self.assertIn('/sys/bus/mdev/devices/', path)
21683
21691
return True if uuids.mdev1 in path else False
@@ -21750,13 +21758,21 @@ def test_detach_mediated_devices_raises_exc(self):
21750
21758
self.assertRaises(test.TestingException,
21751
21759
self._test_detach_mediated_devices, exc)
21752
21760
21761
+ @mock.patch.object(libvirt_driver.LibvirtDriver, '_get_cpu_feature_traits',
21762
+ new=mock.Mock(return_value=None))
21763
+ def test_cpu_traits_sev_no_feature_traits(self):
21764
+ for support in (False, True):
21765
+ self.drvr._host._supports_amd_sev = support
21766
+ self.assertEqual({ot.HW_CPU_X86_AMD_SEV: support},
21767
+ self.drvr._get_cpu_traits())
21768
+
21753
21769
def test_cpu_traits_with_passthrough_mode(self):
21754
21770
"""Test getting CPU traits when cpu_mmode is 'host-passthrough', traits
21755
21771
are calculated from fakelibvirt's baseline CPU features.
21756
21772
"""
21757
21773
self.flags(cpu_mode='host-passthrough', group='libvirt')
21758
21774
self.assertTraitsEqual(['HW_CPU_X86_AESNI', 'HW_CPU_X86_VMX'],
21759
- self.drvr._get_cpu_traits ())
21775
+ self.drvr._get_cpu_feature_traits ())
21760
21776
21761
21777
@mock.patch('nova.virt.libvirt.host.libvirt.Connection.baselineCPU')
21762
21778
def test_cpu_traits_with_mode_none(self, mock_baseline):
@@ -21767,7 +21783,7 @@ def test_cpu_traits_with_mode_none(self, mock_baseline):
21767
21783
mock_baseline.return_value = _fake_qemu64_cpu_feature
21768
21784
self.assertTraitsEqual(['HW_CPU_X86_SSE', 'HW_CPU_X86_SVM',
21769
21785
'HW_CPU_X86_MMX', 'HW_CPU_X86_SSE2'],
21770
- self.drvr._get_cpu_traits ())
21786
+ self.drvr._get_cpu_feature_traits ())
21771
21787
21772
21788
mock_baseline.assert_called_with([u'''<cpu>
21773
21789
<arch>x86_64</arch>
@@ -21803,7 +21819,7 @@ def test_cpu_traits_with_mode_custom(self, mock_baseline):
21803
21819
'HW_CPU_X86_SSE2',
21804
21820
'HW_CPU_X86_SSE',
21805
21821
'HW_CPU_X86_MMX'
21806
- ], self.drvr._get_cpu_traits ()
21822
+ ], self.drvr._get_cpu_feature_traits ()
21807
21823
)
21808
21824
mock_baseline.assert_called_with([u'''<cpu>
21809
21825
<arch>x86_64</arch>
@@ -21822,7 +21838,7 @@ def test_cpu_traits_with_no_baseline_support(self, mock_baseline):
21822
21838
'this function is not supported by the connection driver',
21823
21839
error_code=fakelibvirt.VIR_ERR_NO_SUPPORT)
21824
21840
mock_baseline.side_effect = not_supported_exc
21825
- self.assertTraitsEqual([], self.drvr._get_cpu_traits ())
21841
+ self.assertTraitsEqual([], self.drvr._get_cpu_feature_traits ())
21826
21842
21827
21843
@mock.patch('nova.virt.libvirt.host.libvirt.Connection.getCapabilities')
21828
21844
@mock.patch('nova.virt.libvirt.host.libvirt.Connection.baselineCPU')
@@ -21865,7 +21881,7 @@ def mocked_baseline(cpu_xml, *args):
21865
21881
raise missing_model_exc
21866
21882
mock_baseline.side_effect = mocked_baseline
21867
21883
21868
- self.assertTraitsEqual([], self.drvr._get_cpu_traits ())
21884
+ self.assertTraitsEqual([], self.drvr._get_cpu_feature_traits ())
21869
21885
21870
21886
def test_cpu_traits_with_invalid_virt_type(self):
21871
21887
"""Test getting CPU traits when using a virt_type that doesn't support
@@ -21876,7 +21892,7 @@ def test_cpu_traits_with_invalid_virt_type(self):
21876
21892
virt_type='lxc',
21877
21893
group='libvirt'
21878
21894
)
21879
- self.assertRaises(exception.Invalid, self.drvr._get_cpu_traits )
21895
+ self.assertRaises(exception.Invalid, self.drvr._get_cpu_feature_traits )
21880
21896
21881
21897
@mock.patch('nova.virt.libvirt.host.libvirt.Connection.getCapabilities')
21882
21898
@mock.patch('nova.virt.libvirt.utils.cpu_features_to_traits')
@@ -21902,7 +21918,7 @@ def test_cpu_traits_with_mode_passthrough_and_extra_flags(
21902
21918
</host>
21903
21919
</capabilities>
21904
21920
"""
21905
- self.drvr._get_cpu_traits ()
21921
+ self.drvr._get_cpu_feature_traits ()
21906
21922
self.assertItemsEqual(['pcid', 'erms'], mock_to_traits.call_args[0][0])
21907
21923
21908
21924
@mock.patch('nova.virt.libvirt.host.libvirt.Connection.baselineCPU')
@@ -21924,7 +21940,7 @@ def test_cpu_traits_with_mode_custom_and_extra_flags(self, mock_to_traits,
21924
21940
<feature policy='require' name='pcid'/>
21925
21941
</cpu>
21926
21942
"""
21927
- self.drvr._get_cpu_traits ()
21943
+ self.drvr._get_cpu_feature_traits ()
21928
21944
mock_baseline.assert_called_with([u'''<cpu>
21929
21945
<arch>x86_64</arch>
21930
21946
<model>IvyBridge</model>
@@ -21952,7 +21968,7 @@ def test_cpu_traits_with_mode_not_set_and_extra_flags(self, mock_to_traits,
21952
21968
<feature policy='require' name='erms'/>
21953
21969
</cpu>
21954
21970
"""
21955
- self.drvr._get_cpu_traits ()
21971
+ self.drvr._get_cpu_feature_traits ()
21956
21972
self.assertItemsEqual(['pcid', 'erms'], mock_to_traits.call_args[0][0])
21957
21973
21958
21974
def test_cpu_traits_with_mode_none_and_invalid_virt_type(self):
@@ -21962,7 +21978,7 @@ def test_cpu_traits_with_mode_none_and_invalid_virt_type(self):
21962
21978
self.flags(cpu_mode='none',
21963
21979
virt_type='lxc',
21964
21980
group='libvirt')
21965
- self.assertIsNone(self.drvr._get_cpu_traits ())
21981
+ self.assertIsNone(self.drvr._get_cpu_feature_traits ())
21966
21982
21967
21983
@mock.patch('nova.virt.libvirt.host.libvirt.Connection.getCapabilities')
21968
21984
@mock.patch('nova.virt.libvirt.host.libvirt.Connection.baselineCPU')
@@ -21989,7 +22005,7 @@ def test_cpu_traits_with_mode_none_on_power(self, mock_baseline, mock_cap):
21989
22005
<vendor>IBM</vendor>
21990
22006
</cpu>
21991
22007
'''
21992
- self.drvr._get_cpu_traits ()
22008
+ self.drvr._get_cpu_feature_traits ()
21993
22009
mock_baseline.assert_called_with([u'''<cpu>
21994
22010
<arch>ppc64le</arch>
21995
22011
<model>POWER8</model>
0 commit comments