SEBA-746 do not overwrite OLTDevice serial number with empty string;
Ensure OLTs with an incorrect serial number don't work

Change-Id: Idd1665ce427351195a8a848d8404aeeb4a997b98
diff --git a/xos/synchronizer/steps/sync_olt_device.py b/xos/synchronizer/steps/sync_olt_device.py
index 469e879..6d4dae1 100644
--- a/xos/synchronizer/steps/sync_olt_device.py
+++ b/xos/synchronizer/steps/sync_olt_device.py
@@ -89,7 +89,16 @@
                 'VOLTHA Device Id is empty. This probably means that the OLT device is already provisioned in VOLTHA')
         else:
             model.device_id = res['id']
-            model.serial_number = res['serial_number']
+
+            # Only update the serial number if it is not already populated. See comments in similar code in the
+            # pull step. Let the pull step handle emitting any error message if the serial numbers differ.
+            if res['serial_number'] and (not model.serial_number):
+                log.info("Sync step learned olt serial number from voltha",
+                         model_serial_number=model.serial_number,
+                         voltha_serial_number=res['serial_number'],
+                         olt_id=model.id)
+                model.serial_number = res['serial_number']
+
             model.save_changed_fields()
 
     def activate_olt(self, model):
@@ -116,7 +125,15 @@
             attempted = attempted + 1
 
         model.oper_status = request['oper_status']
-        model.serial_number = request['serial_number']
+
+        # Only update the serial number if it is not already populated. See comments in similar code in the
+        # pull step. Let the pull step handle emitting any error message if the serial numbers differ.
+        if request['serial_number'] and (not model.serial_number):
+            log.info("Sync step learned olt serial number from voltha",
+                     model_serial_number=model.serial_number,
+                     voltha_serial_number=request['serial_number'],
+                     olt_id=model.id)
+            model.serial_number = request['serial_number']
 
         if model.oper_status != "ACTIVE":
             raise Exception("It was not possible to activate OLTDevice with id %s" % model.id)
diff --git a/xos/synchronizer/steps/test_sync_olt_device.py b/xos/synchronizer/steps/test_sync_olt_device.py
index 57330d2..40f13d8 100644
--- a/xos/synchronizer/steps/test_sync_olt_device.py
+++ b/xos/synchronizer/steps/test_sync_olt_device.py
@@ -88,6 +88,7 @@
         # feedback state
         o.device_id = None
         o.oper_status = None
+        o.serial_number= None
         o.of_id = None
         o.id = 1