[CORD-3167] If an OSS Service Instance is validate, activate the ONU

Change-Id: Icd0b7be85020713a3e370f22bdd3ed2e9409ca80
diff --git a/xos/synchronizer/model_policies/test_model_policy_hippieossserviceinstance.py b/xos/synchronizer/model_policies/test_model_policy_hippieossserviceinstance.py
index 07847b2..65a740f 100644
--- a/xos/synchronizer/model_policies/test_model_policy_hippieossserviceinstance.py
+++ b/xos/synchronizer/model_policies/test_model_policy_hippieossserviceinstance.py
@@ -26,16 +26,10 @@
     xos_dir=os.path.join(test_path, "../../../../../../orchestration/xos/xos")
     services_dir=os.path.join(xos_dir, "../../xos_services")
 
-# While transitioning from static to dynamic load, the path to find neighboring xproto files has changed. So check
-# both possible locations...
 def get_models_fn(service_name, xproto_name):
-    name = os.path.join(service_name, "xos", xproto_name)
+    name = os.path.join(service_name, "xos", "synchronizer", "models", xproto_name)
     if os.path.exists(os.path.join(services_dir, name)):
         return name
-    else:
-        name = os.path.join(service_name, "xos", "synchronizer", "models", xproto_name)
-        if os.path.exists(os.path.join(services_dir, name)):
-            return name
     raise Exception("Unable to find service=%s xproto=%s" % (service_name, xproto_name))
 
 class TestModelPolicyHippieOssServiceInstance(unittest.TestCase):
@@ -59,7 +53,7 @@
         ])
 
         import synchronizers.new_base.modelaccessor
-        from model_policy_hippieossserviceinstance import OSSServiceInstancePolicy, RCORDSubscriber, ONUDevice, model_accessor
+        from model_policy_hippieossserviceinstance import OSSServiceInstancePolicy, model_accessor
 
         from mock_modelaccessor import MockObjectList
 
@@ -97,8 +91,8 @@
         )
 
         with patch.object(ONUDevice.objects, "get_items") as onu_objects, \
-            patch.object(RCORDSubscriber, "save") as subscriber_save, \
-            patch.object(ONUDevice, "save") as onu_save:
+                patch.object(RCORDSubscriber, "save") as subscriber_save, \
+                patch.object(ONUDevice, "save") as onu_save:
 
             onu_objects.return_value = [onu]
 
@@ -107,38 +101,108 @@
             self.assertEqual(onu.admin_state, "DISABLED")
             onu_save.assert_called()
 
+    def test_enable_onu(self):
+        self.si.valid = "valid"
+        self.si.serial_number = "BRCM1234"
+        self.si.c_tag = None
+
+        onu = ONUDevice(
+            serial_number=self.si.serial_number,
+            admin_state="DISABLED"
+        )
+
+        subscriber = RCORDSubscriber(
+            onu_device=self.si.serial_number,
+        )
+
+        with patch.object(ONUDevice.objects, "get_items") as onu_objects, \
+                patch.object(RCORDSubscriber.objects, "get_items") as subscriber_objects, \
+                patch.object(RCORDSubscriber, "save") as subscriber_save, \
+                patch.object(ONUDevice, "save") as onu_save:
+
+            onu_objects.return_value = [onu]
+            subscriber_objects.return_value = [subscriber]
+
+            self.policy.handle_update(self.si)
+            subscriber_save.assert_not_called()
+            self.assertEqual(onu.admin_state, "ENABLED")
+            onu_save.assert_called()
+
     def test_create_subscriber(self):
         self.si.valid = "valid"
         self.si.serial_number = "BRCM1234"
-        self.si.uni_port_id = 16
 
-        with patch.object(RCORDSubscriber, "save", autospec=True) as subscriber_save, \
-            patch.object(ONUDevice, "save") as onu_save:
+        onu = ONUDevice(
+            serial_number=self.si.serial_number,
+            admin_state="ENABLED"
+        )
+
+        with patch.object(ONUDevice.objects, "get_items") as onu_objects, \
+                patch.object(RCORDSubscriber, "save", autospec=True) as subscriber_save, \
+                patch.object(ONUDevice, "save") as onu_save:
+
+            onu_objects.return_value = [onu]
 
             self.policy.handle_update(self.si)
             self.assertEqual(subscriber_save.call_count, 1)
 
             subscriber = subscriber_save.call_args[0][0]
             self.assertEqual(subscriber.onu_device, self.si.serial_number)
-            self.assertEqual(subscriber.uni_port_id, self.si.uni_port_id)
 
             onu_save.assert_not_called()
 
     def test_create_subscriber_with_ctag(self):
         self.si.valid = "valid"
         self.si.serial_number = "BRCM1234"
-        self.si.uni_port_id = 16
         self.si.c_tag = 111
 
-        with patch.object(RCORDSubscriber, "save", autospec=True) as subscriber_save, \
-            patch.object(ONUDevice, "save") as onu_save:
+        onu = ONUDevice(
+            serial_number=self.si.serial_number,
+            admin_state="ENABLED"
+        )
+
+        with patch.object(ONUDevice.objects, "get_items") as onu_objects, \
+                patch.object(RCORDSubscriber, "save", autospec=True) as subscriber_save, \
+                patch.object(ONUDevice, "save") as onu_save:
+
+            onu_objects.return_value = [onu]
 
             self.policy.handle_update(self.si)
             self.assertEqual(subscriber_save.call_count, 1)
 
             subscriber = subscriber_save.call_args[0][0]
             self.assertEqual(subscriber.onu_device, self.si.serial_number)
-            self.assertEqual(subscriber.uni_port_id, self.si.uni_port_id)
+            self.assertEqual(subscriber.c_tag, self.si.c_tag)
+
+            onu_save.assert_not_called()
+
+    def test_add_c_tag_to_pre_provisioned_subscriber(self):
+        self.si.valid = "valid"
+        self.si.serial_number = "BRCM1234"
+        self.si.c_tag = 111
+
+        onu = ONUDevice(
+            serial_number=self.si.serial_number,
+            admin_state="ENABLED"
+        )
+
+        subscriber = RCORDSubscriber(
+            onu_device=self.si.serial_number,
+        )
+
+        with patch.object(ONUDevice.objects, "get_items") as onu_objects, \
+                patch.object(RCORDSubscriber.objects, "get_items") as subscriber_objects, \
+                patch.object(RCORDSubscriber, "save", autospec=True) as subscriber_save, \
+                patch.object(ONUDevice, "save") as onu_save:
+
+            onu_objects.return_value = [onu]
+            subscriber_objects.return_value = [subscriber]
+
+            self.policy.handle_update(self.si)
+            self.assertEqual(subscriber_save.call_count, 1)
+
+            subscriber = subscriber_save.call_args[0][0]
+            self.assertEqual(subscriber.onu_device, self.si.serial_number)
             self.assertEqual(subscriber.c_tag, self.si.c_tag)
 
             onu_save.assert_not_called()