|
|
|
@ -15,6 +15,8 @@
|
|
|
|
|
from unittest import mock
|
|
|
|
|
import uuid
|
|
|
|
|
|
|
|
|
|
from oslo_config import cfg
|
|
|
|
|
|
|
|
|
|
from neutron.agent.common import placement_report
|
|
|
|
|
from neutron.common import _constants as n_const
|
|
|
|
|
from neutron.conf.plugins.ml2 import config as ml2_config
|
|
|
|
@ -243,6 +245,48 @@ class PlacementStateTestCase(base.BaseTestCase):
|
|
|
|
|
{'CUSTOM_VNIC_TYPE_NORMAL'}],
|
|
|
|
|
actual_traits)
|
|
|
|
|
|
|
|
|
|
def test_deferred_update_resource_provider_traits_shared_rp(self):
|
|
|
|
|
import uuid
|
|
|
|
|
self.kwargs.update({
|
|
|
|
|
'device_mappings': {
|
|
|
|
|
'physnet0': ['eth0'],
|
|
|
|
|
},
|
|
|
|
|
'rp_bandwidths': {
|
|
|
|
|
'eth0': {'egress': 1, 'ingress': 1},
|
|
|
|
|
},
|
|
|
|
|
'supported_vnic_types': ['normal'],
|
|
|
|
|
})
|
|
|
|
|
cfg.CONF.set_override('tunnelled_network_rp_name', 'eth0', group='ml2')
|
|
|
|
|
state = placement_report.PlacementState(**self.kwargs)
|
|
|
|
|
|
|
|
|
|
for deferred in state.deferred_update_resource_provider_traits():
|
|
|
|
|
deferred.execute()
|
|
|
|
|
|
|
|
|
|
expected_calls = [
|
|
|
|
|
# uuid below generated by the following command:
|
|
|
|
|
# uuid -v5 '00000000-0000-0000-0000-000000000001' 'fakehost:eth0'
|
|
|
|
|
mock.call(
|
|
|
|
|
resource_provider_uuid=uuid.UUID(
|
|
|
|
|
'1ea6f823-bcf2-5dc5-9bee-4ee6177a6451'),
|
|
|
|
|
traits=mock.ANY),
|
|
|
|
|
|
|
|
|
|
# uuid -v5 '00000000-0000-0000-0000-000000000001' 'fakehost'
|
|
|
|
|
mock.call(
|
|
|
|
|
resource_provider_uuid=uuid.UUID(
|
|
|
|
|
'c0b4abe5-516f-54b8-b965-ff94060dcbcc'),
|
|
|
|
|
traits=mock.ANY)]
|
|
|
|
|
self.client_mock.update_resource_provider_traits.assert_has_calls(
|
|
|
|
|
expected_calls)
|
|
|
|
|
|
|
|
|
|
# NOTE(bence romsics): To avoid testing the _order_ of traits.
|
|
|
|
|
actual_traits = [set(args[1]['traits']) for args in
|
|
|
|
|
self.client_mock.update_resource_provider_traits.call_args_list]
|
|
|
|
|
self.assertEqual(
|
|
|
|
|
[{n_const.TRAIT_NETWORK_TUNNEL, 'CUSTOM_PHYSNET_PHYSNET0',
|
|
|
|
|
'CUSTOM_VNIC_TYPE_NORMAL'},
|
|
|
|
|
{'CUSTOM_VNIC_TYPE_NORMAL'}],
|
|
|
|
|
actual_traits)
|
|
|
|
|
|
|
|
|
|
def test_deferred_update_resource_provider_inventories_bw(self):
|
|
|
|
|
self.kwargs.update({
|
|
|
|
|
'device_mappings': {
|
|
|
|
|