[CORD-3131] Reading uni_port_id from voltha based info

Change-Id: I0fecf37b3fe1286b12f50fc97046164eb5a9bf70
diff --git a/xos/synchronizer/steps/sync_volt_service_instance.py b/xos/synchronizer/steps/sync_volt_service_instance.py
index 98a5b92..2598f60 100644
--- a/xos/synchronizer/steps/sync_volt_service_instance.py
+++ b/xos/synchronizer/steps/sync_volt_service_instance.py
@@ -20,7 +20,7 @@
 import requests
 from multistructlog import create_logger
 from requests.auth import HTTPBasicAuth
-from synchronizers.new_base.modelaccessor import VOLTService, VOLTServiceInstance, ServiceInstance, ONUDevice, model_accessor
+from synchronizers.new_base.modelaccessor import VOLTService, VOLTServiceInstance, ServiceInstance, model_accessor
 from synchronizers.new_base.syncstep import SyncStep, DeferredException
 from xosconfig import Config
 
@@ -41,14 +41,10 @@
 
         c_tag = si.get_westbound_service_instance_properties("c_tag")
 
-        # TODO understand if this can have a better modeling (VOLTHA should know this info for an ONU without manually inserting it in the subscriber)
-        uni_port_id = si.get_westbound_service_instance_properties("uni_port_id")
+        olt_device = o.onu_device.pon_port.olt_device
 
-        onu_device_name = si.get_westbound_service_instance_properties("onu_device")
-
-        onu_device = ONUDevice.objects.get(serial_number=onu_device_name)
-
-        olt_device = onu_device.pon_port.olt_device
+        # NOTE each ONU has only one UNI port!
+        uni_port_id = o.onu_device.uni_ports.first().port_no
 
         if not olt_device.dp_id:
             raise DeferredException("Waiting for OLTDevice %s to be synchronized" % olt_device.name)
diff --git a/xos/synchronizer/steps/test_sync_volt_service_instance.py b/xos/synchronizer/steps/test_sync_volt_service_instance.py
index da77395..6fc377a 100644
--- a/xos/synchronizer/steps/test_sync_volt_service_instance.py
+++ b/xos/synchronizer/steps/test_sync_volt_service_instance.py
@@ -76,12 +76,6 @@
 
         self.sync_step = SyncVOLTServiceInstance
 
-        # create a mock service instance
-        o = Mock()
-        o.id = 1
-        o.owner_id = "volt_service"
-        o.tologdict.return_value = {}
-
         volt_service = Mock()
         volt_service.onos_voltha_url = "onos_voltha_url"
         volt_service.onos_voltha_port = 4321
@@ -91,10 +85,21 @@
         si = Mock()
         si.get_westbound_service_instance_properties = mock_get_westbound_service_instance_properties
 
+        uni_port = Mock()
+        uni_port.port_no = "uni_port_id"
+
         onu_device = Mock()
         onu_device.name = "BRCM1234"
         onu_device.pon_port.olt_device.dp_id = None
         onu_device.pon_port.olt_device.name = "Test OLT Device"
+        onu_device.uni_ports.first.return_value = uni_port
+
+        # create a mock service instance
+        o = Mock()
+        o.id = 1
+        o.owner_id = "volt_service"
+        o.onu_device = onu_device
+        o.tologdict.return_value = {}
 
         self.o = o
         self.si = si
@@ -110,10 +115,8 @@
         self.onu_device.pon_port.olt_device.dp_id = None
 
         with patch.object(ServiceInstance.objects, "get") as service_instance_mock, \
-                patch.object(ONUDevice.objects, "get") as onu_device_mock, \
                 patch.object(VOLTService.objects, "get") as olt_service_mock:
             service_instance_mock.return_value = self.si
-            onu_device_mock.return_value = self.onu_device
             olt_service_mock.return_value = self.volt_service
 
             with self.assertRaises(DeferredException) as e:
@@ -129,10 +132,8 @@
         self.onu_device.pon_port.olt_device.dp_id = "of:dp_id"
 
         with patch.object(ServiceInstance.objects, "get") as service_instance_mock, \
-                patch.object(ONUDevice.objects, "get") as onu_device_mock, \
                 patch.object(VOLTService.objects, "get") as olt_service_mock:
             service_instance_mock.return_value = self.si
-            onu_device_mock.return_value = self.onu_device
             olt_service_mock.return_value = self.volt_service
 
             self.sync_step().sync_record(self.o)
@@ -145,10 +146,8 @@
         self.onu_device.pon_port.olt_device.dp_id = "of:dp_id"
 
         with patch.object(ServiceInstance.objects, "get") as service_instance_mock, \
-                patch.object(ONUDevice.objects, "get") as onu_device_mock, \
                 patch.object(VOLTService.objects, "get") as olt_service_mock:
             service_instance_mock.return_value = self.si
-            onu_device_mock.return_value = self.onu_device
             olt_service_mock.return_value = self.volt_service
 
             with self.assertRaises(Exception) as e: