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")