SEBA-107 New modeling of whitelist

Change-Id: Ic1912685fb72b8d29e031735a963e9e4a21c97e5
diff --git a/xos/synchronizer/steps/sync_hippie_oss_service_instance.py b/xos/synchronizer/steps/sync_hippie_oss_service_instance.py
index 9ca7678..fef1722 100644
--- a/xos/synchronizer/steps/sync_hippie_oss_service_instance.py
+++ b/xos/synchronizer/steps/sync_hippie_oss_service_instance.py
@@ -14,7 +14,7 @@
 
 import json
 from synchronizers.new_base.syncstep import SyncStep, model_accessor
-from synchronizers.new_base.modelaccessor import HippieOSSServiceInstance
+from synchronizers.new_base.modelaccessor import HippieOSSServiceInstance, HippieOSSWhiteListEntry
 
 from xosconfig import Config
 from multistructlog import create_logger
@@ -27,14 +27,14 @@
 
     def validate_in_external_oss(self, si):
         # This is where you may want to call your OSS Database to verify if this ONU can be activated
-
-        # for demonstration the HippieOSSService has a whitelist and if the serial_number
-        # you provided is not in that blacklist, it won't be validated
         oss_service = si.owner.leaf_model
 
-        if si.serial_number not in [x.strip() for x in oss_service.whitelist.split(',')]:
-            return False
-        return True
+        # See if there is a matching entry in the whitelist.
+
+        matching_entries = HippieOSSWhiteListEntry.objects.filter(owner_id=oss_service.id,
+                                                                  serial_number=si.serial_number)
+
+        return len(matching_entries)>0
 
     def get_suscriber_c_tag(self, serial_number):
         # If it's up to your OSS to generate c_tags, fetch them here
diff --git a/xos/synchronizer/steps/test_sync_hippie_oss_service_instance.py b/xos/synchronizer/steps/test_sync_hippie_oss_service_instance.py
index 51bc04e..dca961f 100644
--- a/xos/synchronizer/steps/test_sync_hippie_oss_service_instance.py
+++ b/xos/synchronizer/steps/test_sync_hippie_oss_service_instance.py
@@ -78,7 +78,7 @@
 
         self.oss = Mock()
         self.oss.name = "oss"
-        self.oss.whitelist = "BRCM5678, BRCM1234"
+        self.oss.id = 5367
 
         # create a mock HippieOssServiceInstance instance
         self.o = Mock()
@@ -92,16 +92,18 @@
         sys.path = self.sys_path_save
 
     def test_sync_valid(self):
+        with patch.object(HippieOSSWhiteListEntry.objects, "get_items") as whitelist_items:
+            # Create a whitelist entry for self.o's serial number
+            whitelist_entry = HippieOSSWhiteListEntry(owner_id=self.oss.id, serial_number=self.o.serial_number)
+            whitelist_items.return_value = [whitelist_entry]
 
-        self.sync_step().sync_record(self.o)
+            self.sync_step().sync_record(self.o)
 
-        self.assertEqual(self.o.valid, "valid")
-        self.assertTrue(self.o.no_sync)
-        self.o.save.assert_called()
+            self.assertEqual(self.o.valid, "valid")
+            self.assertTrue(self.o.no_sync)
+            self.o.save.assert_called()
 
     def test_sync_rejected(self):
-        self.oss.whitelist = ""
-
         self.sync_step().sync_record(self.o)
 
         self.assertEqual(self.o.valid, "invalid")