SEBA-108 call acquire_service_instance on fc service
Change-Id: I1cc26b8a25eefbf6b9f49f17326b0f23608e80d6
diff --git a/xos/synchronizer/model_policies/model_policy_voltserviceinstance.py b/xos/synchronizer/model_policies/model_policy_voltserviceinstance.py
index 227efa9..1321955 100644
--- a/xos/synchronizer/model_policies/model_policy_voltserviceinstance.py
+++ b/xos/synchronizer/model_policies/model_policy_voltserviceinstance.py
@@ -39,34 +39,17 @@
pass
def create_eastbound_instance(self, si):
-
- chain = si.subscribed_links.all()
-
- # Already has a chain
- if len(chain) > 0 and not si.is_new:
- self.logger.debug("MODEL_POLICY: VOLTServiceInstance %s is already part of a chain" % si.id)
- return
-
- # if it does not have a chain,
- # Find links to the next element in the service chain
- # and create one
-
links = si.owner.subscribed_dependencies.all()
-
for link in links:
# SEBA-216 prevent any attempt to create an ONOSServiceInstance
if "onos" in link.provider_service.name.lower():
continue
- si_class = link.provider_service.get_service_instance_class_name()
- self.logger.info("MODEL_POLICY: VOLTServiceInstance %s creating %s" % (si, si_class))
+ provider_service = link.provider_service.leaf_model
- eastbound_si_class = model_accessor.get_model_class(si_class)
- eastbound_si = eastbound_si_class()
- eastbound_si.owner_id = link.provider_service_id
- eastbound_si.save()
- link = ServiceInstanceLink(provider_service_instance=eastbound_si, subscriber_service_instance=si)
- link.save()
+ valid_provider_service_instance = provider_service.validate_links(si)
+ if not valid_provider_service_instance:
+ provider_service.acquire_service_instance(si)
def associate_onu_device(self, si):
diff --git a/xos/synchronizer/model_policies/test_model_policy_voltserviceinstance.py b/xos/synchronizer/model_policies/test_model_policy_voltserviceinstance.py
index e6fb171..f129de5 100644
--- a/xos/synchronizer/model_policies/test_model_policy_voltserviceinstance.py
+++ b/xos/synchronizer/model_policies/test_model_policy_voltserviceinstance.py
@@ -88,9 +88,14 @@
with patch.object(ServiceInstanceLink, "save", autospec=True) as save_link, \
patch.object(VSGServiceInstance, "save", autospec=True) as save_vsg:
+ subscriber_si = Mock()
+
link = Mock()
link.provider_service.get_service_instance_class_name.return_value = "VSGServiceInstance"
link.provider_service.name = "FabricCrossconnect"
+ link.provider_service.validate_links = Mock(return_value=[])
+ link.provider_service.acquire_service_instance = Mock(return_value=subscriber_si)
+ link.provider_service.leaf_model = link.provider_service
si = Mock()
si.subscribed_links.all.return_value = []
@@ -98,17 +103,30 @@
self.policy.create_eastbound_instance(si)
- # Should have created a vsg
+ link.provider_service.validate_links.assert_called_with(si)
+ link.provider_service.acquire_service_instance.assert_called_with(si)
- self.assertEqual(save_vsg.call_count, 1)
- vsg = save_vsg.call_args[0][0]
+ def test_create_vsg_already_exists(self):
+ with patch.object(ServiceInstanceLink, "save", autospec=True) as save_link, \
+ patch.object(VSGServiceInstance, "save", autospec=True) as save_vsg:
- # Should have created a link from OLT to vsg
+ subscriber_si = Mock()
- self.assertEqual(save_link.call_count, 1)
- link = save_link.call_args[0][0]
- self.assertEqual(link.provider_service_instance, vsg)
- self.assertEqual(link.subscriber_service_instance, si)
+ link = Mock()
+ link.provider_service.get_service_instance_class_name.return_value = "VSGServiceInstance"
+ link.provider_service.name = "FabricCrossconnect"
+ link.provider_service.validate_links = Mock(return_value=subscriber_si)
+ link.provider_service.acquire_service_instance = Mock()
+ link.provider_service.leaf_model = link.provider_service
+
+ si = Mock()
+ si.subscribed_links.all.return_value = []
+ si.owner.subscribed_dependencies.all.return_value = [link]
+
+ self.policy.create_eastbound_instance(si)
+
+ link.provider_service.validate_links.assert_called_with(si)
+ link.provider_service.acquire_service_instance.assert_not_called()
def test_associate_onu(self):
with patch.object(ServiceInstance.objects, "get") as get_si, \