diff --git a/.gitignore b/.gitignore
index 07bffa2..7605bb2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,4 +12,7 @@
 # ide workspace
 .idea
 
+# Virtualenv
+venv-*
+
 *.pyc
diff --git a/Makefile b/Makefile
index da864d1..eece9ac 100644
--- a/Makefile
+++ b/Makefile
@@ -41,6 +41,14 @@
 	@ echo "Uploading sdist to test.pypi.org"
 	twine upload --repository-url https://test.pypi.org/legacy/ dist/*
 
+VENVDIR := venv-pyvoltha
+
+venv:
+	virtualenv ${VENVDIR};\
+        source ./${VENVDIR}/bin/activate ; set -u ;\
+        rm ${VENVDIR}/local/bin ${VENVDIR}/local/lib ${VENVDIR}/local/include ;\
+        pip install -r requirements.txt
+
 test:
 	@ echo "Executing unit tests w/tox"
 	tox
@@ -54,4 +62,7 @@
     dist \
     nose-results.xml \
     pyvoltha.egg-info \
-    test/unit/tmp
+    test/unit/tmp \
+    rm -rf ${VENVDIR}
+
+# end file
diff --git a/VERSION b/VERSION
index eca07e4..05580bc 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.1.2
+2.1.3-dev0
diff --git a/env.sh b/env.sh
index aeb4a1f..fafdc24 100644
--- a/env.sh
+++ b/env.sh
@@ -12,18 +12,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 # sourcing this file is needed to make local development and integration testing work
-export VOLTHA_BASE=${PWD}
 
-# load local python virtualenv if exists, otherwise create it
-VENVDIR="venv-$(uname -s | tr '[:upper:]' '[:lower:]')"
-if [ ! -e "${VENVDIR}/.built" ]; then
-    echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
-    echo "Initializing OS-appropriate virtual env."
-    echo "This will take a few minutes."
-    echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
-    make venv
+# load local python virtualenv if exists
+VENVDIR="venv-pyvoltha"
+if [ -e "$VENVDIR/bin/activate" ]; then
+    . $VENVDIR/bin/activate
+else
+   echo "Run 'make venv' to setup python development environment"
 fi
-. ${VENVDIR}/bin/activate
 
-# add top-level voltha dir to pythonpath
-export PYTHONPATH=${VOLTHA_BASE}/${VENVDIR}/lib/python2.7/site-packages:${VOLTHA_BASE}/pyvoltha:${VOLTHA_BASE}/pyvoltha/protos/third_party
diff --git a/pyvoltha/adapters/extensions/events/device_events/onu/onu_dying_gasp_event.py b/pyvoltha/adapters/extensions/events/device_events/onu/onu_dying_gasp_event.py
index e8efc0a..a149aa4 100644
--- a/pyvoltha/adapters/extensions/events/device_events/onu/onu_dying_gasp_event.py
+++ b/pyvoltha/adapters/extensions/events/device_events/onu/onu_dying_gasp_event.py
@@ -25,8 +25,6 @@
         self._serial_number = serial_number
 
     def get_context_data(self):
-        return {
-            'onu-id': self._onu_id,
-            'onu-intf-id': self._intf_id,
-            'onu-serial-number': self._serial_number
-        }
+        return {'onu-id': self._onu_id,
+                'onu-intf-id': self._intf_id,
+                'onu-serial-number': self._serial_number}
diff --git a/pyvoltha/adapters/extensions/events/device_events/onu/onu_equipment_event.py b/pyvoltha/adapters/extensions/events/device_events/onu/onu_equipment_event.py
index cdc2e21..63be391 100644
--- a/pyvoltha/adapters/extensions/events/device_events/onu/onu_equipment_event.py
+++ b/pyvoltha/adapters/extensions/events/device_events/onu/onu_equipment_event.py
@@ -31,14 +31,16 @@
           may report it with a different event number specifically for a
           self-test failure.
     """
-    def __init__(self, event_mgr, onu_id, intf_id, raised_ts):
+    def __init__(self, event_mgr, onu_id, intf_id, serial_number, raised_ts):
         super(OnuEquipmentEvent, self).__init__(event_mgr, raised_ts, object_type='onu equipment',
                                                 event='ONU_EQUIPMENT',
                                                 category=EventCategory.EQUIPMENT,
-                                                sub_category=EventSubCategory.ONU,
+                                                sub_category=EventSubCategory.ONU)
         self._onu_id = onu_id
         self._intf_id = intf_id
+        self._serial_number = serial_number
 
     def get_context_data(self):
         return {'onu-id': self._onu_id,
-                'onu-intf-id': self._intf_id}
+                'onu-intf-id': self._intf_id,
+                'onu-serial-number': self._serial_number}
diff --git a/pyvoltha/adapters/extensions/events/device_events/onu/onu_high_rx_optical_power_event.py b/pyvoltha/adapters/extensions/events/device_events/onu/onu_high_rx_optical_power_event.py
index da72b33..adc67c7 100644
--- a/pyvoltha/adapters/extensions/events/device_events/onu/onu_high_rx_optical_power_event.py
+++ b/pyvoltha/adapters/extensions/events/device_events/onu/onu_high_rx_optical_power_event.py
@@ -22,14 +22,16 @@
     For ANI-G equipment events, the intf_id reported is that of the PON/ANI
     physical port number
     """
-    def __init__(self, event_mgr, onu_id, intf_id, raised_ts):
+    def __init__(self, event_mgr, onu_id, intf_id, serial_number, raised_ts):
         super(OnuHighRxOpticalEvent, self).__init__(event_mgr, raised_ts, object_type='onu high rx optical power',
                                                     event='ONU_HIGH_RX_OPTICAL',
                                                     category=EventCategory.COMMUNICATION,
                                                     sub_category=EventSubCategory.ONU)
         self._onu_id = onu_id
         self._intf_id = intf_id
+        self._serial_number = serial_number
 
     def get_context_data(self):
         return {'onu-id': self._onu_id,
-                'onu-intf-id': self._intf_id}
+                'onu-intf-id': self._intf_id,
+                'onu-serial-number': self._serial_number}
diff --git a/pyvoltha/adapters/extensions/events/device_events/onu/onu_high_tx_optical_power_event.py b/pyvoltha/adapters/extensions/events/device_events/onu/onu_high_tx_optical_power_event.py
index 05ede7b..66fa16f 100644
--- a/pyvoltha/adapters/extensions/events/device_events/onu/onu_high_tx_optical_power_event.py
+++ b/pyvoltha/adapters/extensions/events/device_events/onu/onu_high_tx_optical_power_event.py
@@ -22,14 +22,16 @@
     For ANI-G equipment events, the intf_id reported is that of the PON/ANI
     physical port number
     """
-    def __init__(self, event_mgr, onu_id, intf_id, raised_ts):
+    def __init__(self, event_mgr, onu_id, intf_id, serial_number, raised_ts):
         super(OnuHighTxOpticalEvent, self).__init__(event_mgr, raised_ts, object_type='onu high tx optical power',
                                                     event='ONU_HIGH_TX_OPTICAL',
                                                     category=EventCategory.COMMUNICATION,
                                                     sub_category=EventSubCategory.ONU)
         self._onu_id = onu_id
         self._intf_id = intf_id
+        self._serial_number = serial_number
 
     def get_context_data(self):
         return {'onu-id': self._onu_id,
-                'onu-intf-id': self._intf_id}
+                'onu-intf-id': self._intf_id,
+                'onu-serial-number': self._serial_number}
diff --git a/pyvoltha/adapters/extensions/events/device_events/onu/onu_laser_bias_current_event.py b/pyvoltha/adapters/extensions/events/device_events/onu/onu_laser_bias_current_event.py
index c7971d2..1d62a9c 100644
--- a/pyvoltha/adapters/extensions/events/device_events/onu/onu_laser_bias_current_event.py
+++ b/pyvoltha/adapters/extensions/events/device_events/onu/onu_laser_bias_current_event.py
@@ -23,14 +23,16 @@
     For ANI-G equipment events, the intf_id reported is that of the PON/ANI
     physical port number
     """
-    def __init__(self, event_mgr, onu_id, intf_id, raised_ts):
+    def __init__(self, event_mgr, onu_id, intf_id, serial_number, raised_ts):
         super(OnuLaserBiasEvent, self).__init__(event_mgr, raised_ts, object_type='onu laser bias current',
                                                 event='ONU_LASER_BIAS_CURRENT',
                                                 category=EventCategory.EQUIPMENT,
                                                 sub_category=EventSubCategory.ONU)
         self._onu_id = onu_id
         self._intf_id = intf_id
+        self._serial_number = serial_number
 
     def get_context_data(self):
         return {'onu-id': self._onu_id,
-                'onu-intf-id': self._intf_id}
+                'onu-intf-id': self._intf_id,
+                'onu-serial-number': self._serial_number}
diff --git a/pyvoltha/adapters/extensions/events/device_events/onu/onu_laser_eol_event.py b/pyvoltha/adapters/extensions/events/device_events/onu/onu_laser_eol_event.py
index 4cc17e2..d0e636a 100644
--- a/pyvoltha/adapters/extensions/events/device_events/onu/onu_laser_eol_event.py
+++ b/pyvoltha/adapters/extensions/events/device_events/onu/onu_laser_eol_event.py
@@ -22,14 +22,16 @@
 
     The intf_id reported is that of the UNI's logical port number
     """
-    def __init__(self, event_mgr, onu_id, intf_id, raised_ts):
+    def __init__(self, event_mgr, onu_id, intf_id, serial_number, raised_ts):
         super(OnuLaserEolEvent, self).__init__(event_mgr, raised_ts, object_type='onu laser EOL',
                                                event='ONU_LASER_EOL',
                                                category=EventCategory.EQUIPMENT,
                                                sub_category=EventSubCategory.ONU)
         self._onu_id = onu_id
         self._intf_id = intf_id
+        self._serial_number = serial_number
 
     def get_context_data(self):
         return {'onu-id': self._onu_id,
-                'onu-intf-id': self._intf_id}
+                'onu-intf-id': self._intf_id,
+                'onu-serial-number': self._serial_number}
diff --git a/pyvoltha/adapters/extensions/events/device_events/onu/onu_lob_event.py b/pyvoltha/adapters/extensions/events/device_events/onu/onu_lob_event.py
index da22c0f..8fcf1a2 100644
--- a/pyvoltha/adapters/extensions/events/device_events/onu/onu_lob_event.py
+++ b/pyvoltha/adapters/extensions/events/device_events/onu/onu_lob_event.py
@@ -28,5 +28,4 @@
     def get_context_data(self):
         return {'onu-id': self._onu_id,
                 'onu-intf-id': self._intf_id,
-                'onu-serial-number': self._serial_number
-        }
+                'onu-serial-number': self._serial_number}
diff --git a/pyvoltha/adapters/extensions/events/device_events/onu/onu_lopc_mic_error_event.py b/pyvoltha/adapters/extensions/events/device_events/onu/onu_lopc_mic_error_event.py
index 7605bef..1463ee4 100644
--- a/pyvoltha/adapters/extensions/events/device_events/onu/onu_lopc_mic_error_event.py
+++ b/pyvoltha/adapters/extensions/events/device_events/onu/onu_lopc_mic_error_event.py
@@ -16,7 +16,7 @@
 from pyvoltha.adapters.extensions.events.adapter_events import DeviceEventBase
 
 class OnuLopcMicErrorEvent(DeviceEventBase):
-    def __init__(self, evemt_mgr, onu_id, intf_id, serial_number, raised_ts):
+    def __init__(self, event_mgr, onu_id, intf_id, serial_number, raised_ts):
         super(OnuLopcMicErrorEvent, self).__init__(event_mgr, raised_ts, object_type='onu LOPC_MIC_ERROR',
                                                    event='ONU_LOPC_MIC_ERROR',
                                                    category=EventCategory.COMMUNICATION,
@@ -27,8 +27,6 @@
         self._serial_number = serial_number
 
     def get_context_data(self):
-        return {
-            'onu-id': self._onu_id,
-            'onu-intf-id': self._intf_id,
-            'onu-serial-number': self._serial_number
-        }
+        return {'onu-id': self._onu_id,
+                'onu-intf-id': self._intf_id,
+                'onu-serial-number': self._serial_number}
diff --git a/pyvoltha/adapters/extensions/events/device_events/onu/onu_lopc_miss_event.py b/pyvoltha/adapters/extensions/events/device_events/onu/onu_lopc_miss_event.py
index 58e949c..f387b14 100644
--- a/pyvoltha/adapters/extensions/events/device_events/onu/onu_lopc_miss_event.py
+++ b/pyvoltha/adapters/extensions/events/device_events/onu/onu_lopc_miss_event.py
@@ -26,8 +26,6 @@
         self._serial_number = serial_number
 
     def get_context_data(self):
-        return {
-            'onu-id': self._onu_id,
-            'onu-intf-id': self._intf_id,
-            'onu-serial-number': self._serial_number
-        }
+        return {'onu-id': self._onu_id,
+                'onu-intf-id': self._intf_id,
+                'onu-serial-number': self._serial_number}
diff --git a/pyvoltha/adapters/extensions/events/device_events/onu/onu_los_event.py b/pyvoltha/adapters/extensions/events/device_events/onu/onu_los_event.py
index f9bbccd..ba80836 100644
--- a/pyvoltha/adapters/extensions/events/device_events/onu/onu_los_event.py
+++ b/pyvoltha/adapters/extensions/events/device_events/onu/onu_los_event.py
@@ -28,5 +28,4 @@
     def get_context_data(self):
         return {'onu-id': self._onu_id,
                 'onu-intf-id': self._intf_id,
-                'onu-serial-number': self._serial_number
-        }
+                'onu-serial-number': self._serial_number}
diff --git a/pyvoltha/adapters/extensions/events/device_events/onu/onu_low_rx_optical_power_event.py b/pyvoltha/adapters/extensions/events/device_events/onu/onu_low_rx_optical_power_event.py
index 45603d5..c177c89 100644
--- a/pyvoltha/adapters/extensions/events/device_events/onu/onu_low_rx_optical_power_event.py
+++ b/pyvoltha/adapters/extensions/events/device_events/onu/onu_low_rx_optical_power_event.py
@@ -23,14 +23,16 @@
     For ANI-G equipment events, the intf_id reported is that of the PON/ANI
     physical port number
     """
-    def __init__(self, event_mgr, onu_id, intf_id, raised_ts):
+    def __init__(self, event_mgr, onu_id, intf_id, serial_number, raised_ts):
         super(OnuLowRxOpticalEvent, self).__init__(event_mgr, raised_ts, object_type='onu low rx optical power',
                                                    event='ONU_LOW_RX_OPTICAL',
                                                    category=EventCategory.COMMUNICATION,
                                                    sub_category=EventSubCategory.ONU)
         self._onu_id = onu_id
         self._intf_id = intf_id
+        self._serial_number = serial_number
 
     def get_context_data(self):
         return {'onu-id': self._onu_id,
-                'onu-intf-id': self._intf_id}
+                'onu-intf-id': self._intf_id,
+                'onu-serial-number': self._serial_number}
diff --git a/pyvoltha/adapters/extensions/events/device_events/onu/onu_low_tx_optical_power_event.py b/pyvoltha/adapters/extensions/events/device_events/onu/onu_low_tx_optical_power_event.py
index 8a073c2..63c0582 100644
--- a/pyvoltha/adapters/extensions/events/device_events/onu/onu_low_tx_optical_power_event.py
+++ b/pyvoltha/adapters/extensions/events/device_events/onu/onu_low_tx_optical_power_event.py
@@ -24,14 +24,16 @@
     For ANI-G equipment events, the intf_id reported is that of the PON/ANI
     physical port number
     """
-    def __init__(self, event_mgr, onu_id, intf_id, raised_ts):
+    def __init__(self, event_mgr, onu_id, intf_id, serial_number, raised_ts):
         super(OnuLowTxOpticalEvent, self).__init__(event_mgr, raised_ts, object_type='onu low tx optical power',
                                                    event='ONU_LOW_TX_OPTICAL',
                                                    category=EventCategory.COMMUNICATION,
-                                                   sub_category=EventCategory.ONU)
+                                                   sub_category=EventSubCategory.ONU)
         self._onu_id = onu_id
         self._intf_id = intf_id
+        self._serial_number = serial_number
 
     def get_context_data(self):
         return {'onu-id': self._onu_id,
-                'onu-intf-id': self._intf_id}
+                'onu-intf-id': self._intf_id,
+                'onu-serial-number': self._serial_number}
diff --git a/pyvoltha/adapters/extensions/events/device_events/onu/onu_selftest_failure_event.py b/pyvoltha/adapters/extensions/events/device_events/onu/onu_selftest_failure_event.py
index 72ff144..00a5fd3 100644
--- a/pyvoltha/adapters/extensions/events/device_events/onu/onu_selftest_failure_event.py
+++ b/pyvoltha/adapters/extensions/events/device_events/onu/onu_selftest_failure_event.py
@@ -29,14 +29,16 @@
           may report it with the ONU Equipment Event which can also cover a
           self-test failure.
     """
-    def __init__(self, event_mgr, onu_id, intf_id, raised_ts):
+    def __init__(self, event_mgr, onu_id, intf_id, serial_number, raised_ts):
         super(OnuSelfTestFailureEvent, self).__init__(event_mgr, raised_ts, object_type='onu self-test failure',
                                                       event='ONU_SELF_TEST_FAIL',
                                                       category=EventCategory.EQUIPMENT,
                                                       sub_category=EventSubCategory.ONU)
         self._onu_id = onu_id
         self._intf_id = intf_id
+        self._serial_number = serial_number
 
     def get_context_data(self):
         return {'onu-id': self._onu_id,
-                'onu-intf-id': self._intf_id}
+                'onu-intf-id': self._intf_id,
+                'onu-serial-number': self._serial_number}
diff --git a/pyvoltha/adapters/extensions/events/device_events/onu/onu_signal_degrade_event.py b/pyvoltha/adapters/extensions/events/device_events/onu/onu_signal_degrade_event.py
index 840a72b..13a812f 100644
--- a/pyvoltha/adapters/extensions/events/device_events/onu/onu_signal_degrade_event.py
+++ b/pyvoltha/adapters/extensions/events/device_events/onu/onu_signal_degrade_event.py
@@ -20,7 +20,7 @@
                  inverse_bit_error_rate, serial_number, raised_ts):
         super(OnuSignalDegradeEvent, self).__init__(event_mgr, raised_ts, object_type='onu SIGNAL DEGRADE',
                                           event='ONU_SIGNAL_DEGRADE',
-                                          category=EventCategory.COMMUNICATION
+                                          category=EventCategory.COMMUNICATION,
                                           sub_category=EventSubCategory.ONU)
         self._onu_id = onu_id
         self._intf_id = intf_id
diff --git a/pyvoltha/adapters/extensions/events/device_events/onu/onu_signal_fail_event.py b/pyvoltha/adapters/extensions/events/device_events/onu/onu_signal_fail_event.py
index 17f4bc5..d49b27a 100644
--- a/pyvoltha/adapters/extensions/events/device_events/onu/onu_signal_fail_event.py
+++ b/pyvoltha/adapters/extensions/events/device_events/onu/onu_signal_fail_event.py
@@ -26,7 +26,7 @@
 class OnuSignalFailEvent(DeviceEventBase):
     def __init__(self, event_mgr, onu_id, intf_id, inverse_bit_error_rate, serial_number, raised_ts):
         super(OnuSignalFailEvent, self).__init__(event_mgr, raised_ts, object_type='onu SIGNAL FAIL',
-                                          alarm='ONU_SIGNAL_FAIL',
+                                          event='ONU_SIGNAL_FAIL',
                                           category=EventCategory.COMMUNICATION,
                                           sub_category=EventSubCategory.ONU)
         self._onu_id = onu_id
diff --git a/pyvoltha/adapters/extensions/events/device_events/onu/onu_startup_event.py b/pyvoltha/adapters/extensions/events/device_events/onu/onu_startup_event.py
index a621a20..f041c91 100644
--- a/pyvoltha/adapters/extensions/events/device_events/onu/onu_startup_event.py
+++ b/pyvoltha/adapters/extensions/events/device_events/onu/onu_startup_event.py
@@ -39,5 +39,4 @@
     def get_context_data(self):
         return {'onu-id': self._onu_id,
                 'onu-intf-id': self._intf_id,
-                'onu-serial-number': self._serial_number
-        }
+                'onu-serial-number': self._serial_number}
diff --git a/pyvoltha/adapters/extensions/events/device_events/onu/onu_temp_red_event.py b/pyvoltha/adapters/extensions/events/device_events/onu/onu_temp_red_event.py
index 8b01796..51d1a3b 100644
--- a/pyvoltha/adapters/extensions/events/device_events/onu/onu_temp_red_event.py
+++ b/pyvoltha/adapters/extensions/events/device_events/onu/onu_temp_red_event.py
@@ -27,14 +27,16 @@
     For ONT-G equipment events, the intf_id reported is that of the PON/ANI
     physical port number
     """
-    def __init__(self, event_mgr, onu_id, intf_id, raised_ts):
+    def __init__(self, event_mgr, onu_id, intf_id, serial_number, raised_ts):
         super(OnuTempRedEvent, self).__init__(event_mgr, raised_ts, object_type='onu temperature red',
                                               event='ONU_TEMP_RED',
                                               category=EventCategory.ENVIRONMENT,
                                               sub_category=EventSubCategory.ONU)
         self._onu_id = onu_id
         self._intf_id = intf_id
+        self._serial_number = serial_number
 
     def get_context_data(self):
         return {'onu-id': self._onu_id,
-                'onu-intf-id': self._intf_id}
+                'onu-intf-id': self._intf_id,
+                'onu-serial-number': self._serial_number}
diff --git a/pyvoltha/adapters/extensions/events/device_events/onu/onu_temp_yellow_event.py b/pyvoltha/adapters/extensions/events/device_events/onu/onu_temp_yellow_event.py
index 5531b2a..9285eb4 100644
--- a/pyvoltha/adapters/extensions/events/device_events/onu/onu_temp_yellow_event.py
+++ b/pyvoltha/adapters/extensions/events/device_events/onu/onu_temp_yellow_event.py
@@ -26,14 +26,16 @@
     For ONT-G equipment events, the intf_id reported is that of the PON/ANI
     physical port number
     """
-    def __init__(self, event_mgr, onu_id, intf_id, raised_ts):
+    def __init__(self, event_mgr, onu_id, intf_id, serial_number, raised_ts):
         super(OnuTempYellowEvent, self).__init__(event_mgr, raised_ts, object_type='onu temperature yellow',
                                                  event='ONU_TEMP_YELLOW',
                                                  category=EventCategory.ENVIRONMENT,
                                                  sub_category=EventSubCategory.ONU)
         self._onu_id = onu_id
         self._intf_id = intf_id
+        self._serial_number = serial_number
 
     def get_context_data(self):
         return {'onu-id': self._onu_id,
-                'onu-intf-id': self._intf_id}
+                'onu-intf-id': self._intf_id,
+                'onu-serial-number': self._serial_number}
diff --git a/pyvoltha/adapters/extensions/events/device_events/onu/onu_voltage_red_event.py b/pyvoltha/adapters/extensions/events/device_events/onu/onu_voltage_red_event.py
index 438e79f..7cde4ce 100644
--- a/pyvoltha/adapters/extensions/events/device_events/onu/onu_voltage_red_event.py
+++ b/pyvoltha/adapters/extensions/events/device_events/onu/onu_voltage_red_event.py
@@ -24,7 +24,7 @@
     For ONT-G equipment events, the intf_id reported is that of the PON/ANI
     physical port number
     """
-    def __init__(self, event_mgr, onu_id, intf_id, raised_ts):
+    def __init__(self, event_mgr, onu_id, intf_id, serial_number, raised_ts):
         super(OnuVoltageRedEvent, self).__init__(event_mgr, raised_ts, object_type='onu voltage red',
                                                  event='ONU_VOLTAGE_RED',
                                                  category=EventCategory.ENVIRONMENT,
@@ -32,7 +32,9 @@
 
         self._onu_id = onu_id
         self._intf_id = intf_id
+        self._serial_number = serial_number
 
     def get_context_data(self):
         return {'onu-id': self._onu_id,
-                'onu-intf-id': self._intf_id}
+                'onu-intf-id': self._intf_id,
+                'onu-serial-number': self._serial_number}
diff --git a/pyvoltha/adapters/extensions/events/device_events/onu/onu_voltage_yellow_event.py b/pyvoltha/adapters/extensions/events/device_events/onu/onu_voltage_yellow_event.py
index 2758949..d39647b 100644
--- a/pyvoltha/adapters/extensions/events/device_events/onu/onu_voltage_yellow_event.py
+++ b/pyvoltha/adapters/extensions/events/device_events/onu/onu_voltage_yellow_event.py
@@ -24,14 +24,16 @@
     For ONT-G equipment events, the intf_id reported is that of the PON/ANI
     physical port number
     """
-    def __init__(self, event_mgr, onu_id, intf_id, raised_ts):
+    def __init__(self, event_mgr, onu_id, intf_id, serial_number, raised_ts):
         super(OnuVoltageYellowEvent, self).__init__(event_mgr, raised_ts, object_type='onu voltage yellow',
                                                     event='ONU_VOLTAGE_YELLOW',
                                                     category=EventCategory.EQUIPMENT,
                                                     sub_category=EventSubCategory.ONU)
         self._onu_id = onu_id
         self._intf_id = intf_id
+        self._serial_number = serial_number
 
     def get_context_data(self):
         return {'onu-id': self._onu_id,
-                'onu-intf-id': self._intf_id}
+                'onu-intf-id': self._intf_id,
+                'onu-serial-number': self._serial_number}
diff --git a/pyvoltha/adapters/extensions/omci/state_machines/alarm_sync.py b/pyvoltha/adapters/extensions/omci/state_machines/alarm_sync.py
index 976d1d0..b63c062 100644
--- a/pyvoltha/adapters/extensions/omci/state_machines/alarm_sync.py
+++ b/pyvoltha/adapters/extensions/omci/state_machines/alarm_sync.py
@@ -14,6 +14,7 @@
 # limitations under the License.
 #
 import structlog
+import arrow
 from datetime import datetime
 from transitions import Machine
 from twisted.internet import reactor
@@ -528,7 +529,7 @@
         if self._alarm_manager is not None:
             alarm = self.omci_alarm_to_onu_alarm(class_id, entity_id, alarm_number)
             if alarm is not None:
-                alarm.raise_alarm()
+                alarm.send(True)
 
     def clear_alarm(self, class_id, entity_id, alarm_number):
         """
@@ -546,7 +547,7 @@
         if self._alarm_manager is not None:
             alarm = self.omci_alarm_to_onu_alarm(class_id, entity_id, alarm_number)
             if alarm is not None:
-                alarm.clear_alarm()
+                alarm.send(False)
 
     def query_mib(self, class_id=None, instance_id=None):
         """
@@ -630,7 +631,7 @@
         }
         alarm_cls = alarm_map.get((class_id, alarm_number))
 
-        return alarm_cls(mgr, self._onu_id, intf_id, self._serial_number) if alarm_cls is not None else None
+        return alarm_cls(mgr, self._onu_id, intf_id, self._serial_number, arrow.utcnow().timestamp) if alarm_cls is not None else None
 
     def select_uni_port(self, class_id, entity_id):
         """
diff --git a/test/unit/extensions/events/__init__.py b/test/unit/extensions/events/__init__.py
new file mode 100644
index 0000000..b0fb0b2
--- /dev/null
+++ b/test/unit/extensions/events/__init__.py
@@ -0,0 +1,13 @@
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/test/unit/extensions/events/device_events/__init__.py b/test/unit/extensions/events/device_events/__init__.py
new file mode 100644
index 0000000..b0fb0b2
--- /dev/null
+++ b/test/unit/extensions/events/device_events/__init__.py
@@ -0,0 +1,13 @@
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/test/unit/extensions/events/device_events/onu/__init__.py b/test/unit/extensions/events/device_events/onu/__init__.py
new file mode 100644
index 0000000..b0fb0b2
--- /dev/null
+++ b/test/unit/extensions/events/device_events/onu/__init__.py
@@ -0,0 +1,13 @@
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/test/unit/extensions/events/device_events/onu/test_onu_events.py b/test/unit/extensions/events/device_events/onu/test_onu_events.py
new file mode 100644
index 0000000..b86aacc
--- /dev/null
+++ b/test/unit/extensions/events/device_events/onu/test_onu_events.py
@@ -0,0 +1,385 @@
+#
+# Copyright 2017 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+import arrow
+from unittest import TestCase, main
+from pyvoltha.adapters.kafka.core_proxy import CoreProxy
+from pyvoltha.adapters.extensions.events.adapter_events import AdapterEvents
+from pyvoltha.adapters.extensions.events.device_events.onu.onu_activation_fail_event import OnuActivationFailEvent
+from pyvoltha.adapters.extensions.events.device_events.onu.onu_active_event import OnuActiveEvent
+from pyvoltha.adapters.extensions.events.device_events.onu.onu_discovery_event import OnuDiscoveryEvent
+from pyvoltha.adapters.extensions.events.device_events.onu.onu_dying_gasp_event import OnuDyingGaspEvent
+from pyvoltha.adapters.extensions.events.device_events.onu.onu_equipment_event import OnuEquipmentEvent
+from pyvoltha.adapters.extensions.events.device_events.onu.onu_high_rx_optical_power_event import OnuHighRxOpticalEvent
+from pyvoltha.adapters.extensions.events.device_events.onu.onu_high_tx_optical_power_event import OnuHighTxOpticalEvent
+from pyvoltha.adapters.extensions.events.device_events.onu.onu_laser_bias_current_event import OnuLaserBiasEvent
+from pyvoltha.adapters.extensions.events.device_events.onu.onu_laser_eol_event import OnuLaserEolEvent
+from pyvoltha.adapters.extensions.events.device_events.onu.onu_lob_event import OnuLobEvent
+from pyvoltha.adapters.extensions.events.device_events.onu.onu_lopc_mic_error_event import OnuLopcMicErrorEvent
+from pyvoltha.adapters.extensions.events.device_events.onu.onu_lopc_miss_event import OnuLopcMissEvent
+from pyvoltha.adapters.extensions.events.device_events.onu.onu_los_event import OnuLosEvent
+from pyvoltha.adapters.extensions.events.device_events.onu.onu_low_rx_optical_power_event import OnuLowRxOpticalEvent
+from pyvoltha.adapters.extensions.events.device_events.onu.onu_low_tx_optical_power_event import OnuLowTxOpticalEvent
+from pyvoltha.adapters.extensions.events.device_events.onu.onu_selftest_failure_event import OnuSelfTestFailureEvent
+from pyvoltha.adapters.extensions.events.device_events.onu.onu_signal_degrade_event import OnuSignalDegradeEvent
+from pyvoltha.adapters.extensions.events.device_events.onu.onu_signal_fail_event import OnuSignalFailEvent
+from pyvoltha.adapters.extensions.events.device_events.onu.onu_startup_event import OnuStartupEvent
+from pyvoltha.adapters.extensions.events.device_events.onu.onu_temp_red_event import OnuTempRedEvent
+from pyvoltha.adapters.extensions.events.device_events.onu.onu_temp_yellow_event import OnuTempYellowEvent
+from pyvoltha.adapters.extensions.events.device_events.onu.onu_voltage_red_event import OnuVoltageRedEvent
+from pyvoltha.adapters.extensions.events.device_events.onu.onu_voltage_yellow_event import OnuVoltageYellowEvent
+from pyvoltha.adapters.extensions.events.device_events.onu.onu_window_drift_event import OnuWindowDriftEvent
+
+DEFAULT_ONU_DEVICE_ID = 'default_onu_mock'
+DEFAULT_PON_ID = 0
+DEFAULT_ONU_ID = 0
+DEFAULT_ONU_SN = 'TEST00000001'
+DEFAULT_OLT_SN = 'ABCDXXXXYYYY'
+DEFAULT_ONU_REG = 'ABCD1234'
+
+core_proxy = CoreProxy(
+               kafka_proxy=None,
+               default_core_topic='rwcore',
+               default_event_topic='voltha.events',
+               my_listening_topic='openonu')
+
+event_mgr = AdapterEvents(core_proxy, DEFAULT_ONU_DEVICE_ID, DEFAULT_ONU_DEVICE_ID, DEFAULT_ONU_SN)
+
+
+class TestOnuActivationFailEvent(TestCase):
+
+    def setUp(self):
+        self.event = OnuActivationFailEvent(event_mgr, DEFAULT_ONU_ID, DEFAULT_PON_ID, DEFAULT_ONU_SN,
+                                            arrow.utcnow().timestamp)
+
+    def test_get_context_data(self):
+        expected_dict = {'onu-id': DEFAULT_ONU_ID,
+                         'onu-intf-id': DEFAULT_PON_ID,
+                         'onu-serial-number': DEFAULT_ONU_SN}
+
+        self.assertEqual(self.event.get_context_data(), expected_dict)
+
+class TestOnuActiveEvent(TestCase):
+
+    def setUp(self):
+        self.event = OnuActiveEvent(event_mgr, DEFAULT_ONU_DEVICE_ID, DEFAULT_PON_ID, DEFAULT_ONU_SN,
+                                    DEFAULT_ONU_REG, DEFAULT_OLT_SN, arrow.utcnow().timestamp, onu_id=DEFAULT_ONU_ID )
+
+    def test_get_context_data(self):
+
+        expected_dict = {
+            'pon-id': DEFAULT_PON_ID,
+            'onu-id': DEFAULT_ONU_ID,
+            'serial-number': DEFAULT_ONU_SN,
+            'olt_serial_number': DEFAULT_OLT_SN,
+            'device_id': DEFAULT_ONU_DEVICE_ID,
+            'registration_id': DEFAULT_ONU_REG
+        }
+
+        self.assertEqual(self.event.get_context_data(), expected_dict)
+
+class TestOnuDiscoveryEvent(TestCase):
+
+        def setUp(self):
+            self.event = OnuDiscoveryEvent(event_mgr, DEFAULT_PON_ID, DEFAULT_ONU_SN,
+                                               arrow.utcnow().timestamp)
+        def test_get_context_data(self):
+            expected_dict = {'pon-id': DEFAULT_PON_ID,
+                             'serial-number': DEFAULT_ONU_SN,
+                             'device-type': 'onu'}
+
+            self.assertEqual(self.event.get_context_data(), expected_dict)
+
+class TestOnuDyingGaspEvent(TestCase):
+
+    def setUp(self):
+        self.event = OnuDyingGaspEvent(event_mgr, DEFAULT_ONU_ID, DEFAULT_PON_ID, DEFAULT_ONU_SN,
+                                           arrow.utcnow().timestamp)
+
+    def test_get_context_data(self):
+        expected_dict = {'onu-id': DEFAULT_ONU_ID,
+                         'onu-intf-id': DEFAULT_PON_ID,
+                         'onu-serial-number': DEFAULT_ONU_SN}
+
+        self.assertEqual(self.event.get_context_data(), expected_dict)
+
+class TestOnuEquipmentEvent(TestCase):
+
+    def setUp(self):
+        self.event = OnuEquipmentEvent(event_mgr, DEFAULT_ONU_ID, DEFAULT_PON_ID, DEFAULT_ONU_SN,
+                                           arrow.utcnow().timestamp)
+
+    def test_get_context_data(self):
+        expected_dict = {'onu-id': DEFAULT_ONU_ID,
+                         'onu-intf-id': DEFAULT_PON_ID,
+                         'onu-serial-number': DEFAULT_ONU_SN}
+
+        self.assertEqual(self.event.get_context_data(), expected_dict)
+
+class TestOnuHighRxOpticalEvent(TestCase):
+
+    def setUp(self):
+        self.event = OnuHighRxOpticalEvent(event_mgr, DEFAULT_ONU_ID, DEFAULT_PON_ID, DEFAULT_ONU_SN,
+                                           arrow.utcnow().timestamp)
+
+    def test_get_context_data(self):
+        expected_dict = {'onu-id': DEFAULT_ONU_ID,
+                         'onu-intf-id': DEFAULT_PON_ID,
+                         'onu-serial-number': DEFAULT_ONU_SN}
+
+        self.assertEqual(self.event.get_context_data(), expected_dict)
+
+class TestOnuHighTxOpticalEvent(TestCase):
+
+    def setUp(self):
+        self.event = OnuHighTxOpticalEvent(event_mgr, DEFAULT_ONU_ID, DEFAULT_PON_ID, DEFAULT_ONU_SN,
+                                           arrow.utcnow().timestamp)
+
+    def test_get_context_data(self):
+        expected_dict = {'onu-id': DEFAULT_ONU_ID,
+                         'onu-intf-id': DEFAULT_PON_ID,
+                         'onu-serial-number': DEFAULT_ONU_SN}
+
+        self.assertEqual(self.event.get_context_data(), expected_dict)
+
+class TestOnuLaserBiasEvent(TestCase):
+
+    def setUp(self):
+        self.event = OnuLaserBiasEvent(event_mgr, DEFAULT_ONU_ID, DEFAULT_PON_ID, DEFAULT_ONU_SN,
+                                           arrow.utcnow().timestamp)
+
+    def test_get_context_data(self):
+        expected_dict = {'onu-id': DEFAULT_ONU_ID,
+                         'onu-intf-id': DEFAULT_PON_ID,
+                         'onu-serial-number': DEFAULT_ONU_SN}
+
+        self.assertEqual(self.event.get_context_data(), expected_dict)
+
+class TestOnuLaserEolEvent(TestCase):
+
+    def setUp(self):
+        self.event = OnuLaserEolEvent(event_mgr, DEFAULT_ONU_ID, DEFAULT_PON_ID, DEFAULT_ONU_SN,
+                                       arrow.utcnow().timestamp)
+
+    def test_get_context_data(self):
+        expected_dict = {'onu-id': DEFAULT_ONU_ID,
+                         'onu-intf-id': DEFAULT_PON_ID,
+                         'onu-serial-number': DEFAULT_ONU_SN}
+
+        self.assertEqual(self.event.get_context_data(), expected_dict)
+
+class TestOnuLobEvent(TestCase):
+
+    def setUp(self):
+        self.event = OnuLobEvent(event_mgr, DEFAULT_ONU_ID, DEFAULT_PON_ID, DEFAULT_ONU_SN,
+                                       arrow.utcnow().timestamp)
+
+    def test_get_context_data(self):
+        expected_dict = {'onu-id': DEFAULT_ONU_ID,
+                         'onu-intf-id': DEFAULT_PON_ID,
+                         'onu-serial-number': DEFAULT_ONU_SN}
+
+        self.assertEqual(self.event.get_context_data(), expected_dict)
+
+class TestOnuLopcMicErrorEvent(TestCase):
+
+    def setUp(self):
+        self.event = OnuLopcMicErrorEvent(event_mgr, DEFAULT_ONU_ID, DEFAULT_PON_ID, DEFAULT_ONU_SN,
+                                       arrow.utcnow().timestamp)
+
+    def test_get_context_data(self):
+        expected_dict = {'onu-id': DEFAULT_ONU_ID,
+                         'onu-intf-id': DEFAULT_PON_ID,
+                         'onu-serial-number': DEFAULT_ONU_SN}
+
+        self.assertEqual(self.event.get_context_data(), expected_dict)
+
+class TestOnuLopcMissEvent(TestCase):
+
+    def setUp(self):
+        self.event = OnuLopcMissEvent(event_mgr, DEFAULT_ONU_ID, DEFAULT_PON_ID, DEFAULT_ONU_SN,
+                                       arrow.utcnow().timestamp)
+
+    def test_get_context_data(self):
+        expected_dict = {'onu-id': DEFAULT_ONU_ID,
+                         'onu-intf-id': DEFAULT_PON_ID,
+                         'onu-serial-number': DEFAULT_ONU_SN}
+
+        self.assertEqual(self.event.get_context_data(), expected_dict)
+
+class TestOnuLosEvent(TestCase):
+
+    def setUp(self):
+        self.event = OnuLosEvent(event_mgr, DEFAULT_ONU_ID, DEFAULT_PON_ID, DEFAULT_ONU_SN,
+                                       arrow.utcnow().timestamp)
+
+    def test_get_context_data(self):
+        expected_dict = {'onu-id': DEFAULT_ONU_ID,
+                         'onu-intf-id': DEFAULT_PON_ID,
+                         'onu-serial-number': DEFAULT_ONU_SN}
+
+        self.assertEqual(self.event.get_context_data(), expected_dict)
+
+class TestOnuLowRxOpticalEvent(TestCase):
+
+    def setUp(self):
+        self.event = OnuLowRxOpticalEvent(event_mgr, DEFAULT_ONU_ID, DEFAULT_PON_ID, DEFAULT_ONU_SN,
+                                       arrow.utcnow().timestamp)
+
+    def test_get_context_data(self):
+        expected_dict = {'onu-id': DEFAULT_ONU_ID,
+                         'onu-intf-id': DEFAULT_PON_ID,
+                         'onu-serial-number': DEFAULT_ONU_SN}
+
+        self.assertEqual(self.event.get_context_data(), expected_dict)
+
+class TestOnuLowTxOpticalEvent(TestCase):
+
+    def setUp(self):
+        self.event = OnuLowTxOpticalEvent(event_mgr, DEFAULT_ONU_ID, DEFAULT_PON_ID, DEFAULT_ONU_SN,
+                                       arrow.utcnow().timestamp)
+
+    def test_get_context_data(self):
+        expected_dict = {'onu-id': DEFAULT_ONU_ID,
+                         'onu-intf-id': DEFAULT_PON_ID,
+                         'onu-serial-number': DEFAULT_ONU_SN}
+
+        self.assertEqual(self.event.get_context_data(), expected_dict)
+
+class TestOnuSelfTestFailureEvent(TestCase):
+
+    def setUp(self):
+        self.event = OnuSelfTestFailureEvent(event_mgr, DEFAULT_ONU_ID, DEFAULT_PON_ID, DEFAULT_ONU_SN,
+                                       arrow.utcnow().timestamp)
+
+    def test_get_context_data(self):
+        expected_dict = {'onu-id': DEFAULT_ONU_ID,
+                         'onu-intf-id': DEFAULT_PON_ID,
+                         'onu-serial-number': DEFAULT_ONU_SN}
+
+        self.assertEqual(self.event.get_context_data(), expected_dict)
+
+class TestOnuSignalDegradeEvent(TestCase):
+
+    def setUp(self):
+        self.event = OnuSignalDegradeEvent(event_mgr, DEFAULT_ONU_ID, DEFAULT_PON_ID, 20, DEFAULT_ONU_SN,
+                                       arrow.utcnow().timestamp)
+
+    def test_get_context_data(self):
+        expected_dict = {'onu-id': DEFAULT_ONU_ID,
+                         'onu-intf-id': DEFAULT_PON_ID,
+                         'onu-serial-number': DEFAULT_ONU_SN,
+                         'inverse-bit-error-rate': 20}
+
+        self.assertEqual(self.event.get_context_data(), expected_dict)
+
+class TestOnuSignalFailEvent(TestCase):
+
+    def setUp(self):
+        self.event = OnuSignalFailEvent(event_mgr, DEFAULT_ONU_ID, DEFAULT_PON_ID, 20, DEFAULT_ONU_SN,
+                                       arrow.utcnow().timestamp)
+
+    def test_get_context_data(self):
+        expected_dict = {'onu-id': DEFAULT_ONU_ID,
+                         'onu-intf-id': DEFAULT_PON_ID,
+                         'onu-serial-number': DEFAULT_ONU_SN,
+                         'inverse-bit-error-rate': 20}
+
+        self.assertEqual(self.event.get_context_data(), expected_dict)
+
+class TestOnuStartupEvent(TestCase):
+
+    def setUp(self):
+        self.event = OnuStartupEvent(event_mgr, DEFAULT_ONU_ID, DEFAULT_PON_ID, DEFAULT_ONU_SN,
+                                       arrow.utcnow().timestamp)
+
+    def test_get_context_data(self):
+        expected_dict = {'onu-id': DEFAULT_ONU_ID,
+                         'onu-intf-id': DEFAULT_PON_ID,
+                         'onu-serial-number': DEFAULT_ONU_SN}
+
+        self.assertEqual(self.event.get_context_data(), expected_dict)
+
+class TestOnuTempRedEvent(TestCase):
+
+    def setUp(self):
+        self.event = OnuTempRedEvent(event_mgr, DEFAULT_ONU_ID, DEFAULT_PON_ID, DEFAULT_ONU_SN,
+                                       arrow.utcnow().timestamp)
+
+    def test_get_context_data(self):
+        expected_dict = {'onu-id': DEFAULT_ONU_ID,
+                         'onu-intf-id': DEFAULT_PON_ID,
+                         'onu-serial-number': DEFAULT_ONU_SN}
+
+        self.assertEqual(self.event.get_context_data(), expected_dict)
+
+class TestOnuTempYellowEvent(TestCase):
+
+    def setUp(self):
+        self.event = OnuTempYellowEvent(event_mgr, DEFAULT_ONU_ID, DEFAULT_PON_ID, DEFAULT_ONU_SN,
+                                       arrow.utcnow().timestamp)
+
+    def test_get_context_data(self):
+        expected_dict = {'onu-id': DEFAULT_ONU_ID,
+                         'onu-intf-id': DEFAULT_PON_ID,
+                         'onu-serial-number': DEFAULT_ONU_SN}
+
+        self.assertEqual(self.event.get_context_data(), expected_dict)
+
+class TestOnuVoltageRedEvent(TestCase):
+
+    def setUp(self):
+        self.event = OnuVoltageRedEvent(event_mgr, DEFAULT_ONU_ID, DEFAULT_PON_ID, DEFAULT_ONU_SN,
+                                       arrow.utcnow().timestamp)
+
+    def test_get_context_data(self):
+        expected_dict = {'onu-id': DEFAULT_ONU_ID,
+                         'onu-intf-id': DEFAULT_PON_ID,
+                         'onu-serial-number': DEFAULT_ONU_SN}
+
+        self.assertEqual(self.event.get_context_data(), expected_dict)
+
+class TestOnuVoltageYellowEvent(TestCase):
+
+    def setUp(self):
+        self.event = OnuVoltageYellowEvent(event_mgr, DEFAULT_ONU_ID, DEFAULT_PON_ID, DEFAULT_ONU_SN,
+                                           arrow.utcnow().timestamp)
+
+    def test_get_context_data(self):
+        expected_dict = {'onu-id': DEFAULT_ONU_ID,
+                         'onu-intf-id': DEFAULT_PON_ID,
+                         'onu-serial-number': DEFAULT_ONU_SN}
+
+        self.assertEqual(self.event.get_context_data(), expected_dict)
+
+class TestOnuWindowDriftEvent(TestCase):
+
+    def setUp(self):
+        self.event = OnuWindowDriftEvent(event_mgr, DEFAULT_ONU_ID, DEFAULT_PON_ID, 10, 20, DEFAULT_ONU_SN,
+                                           arrow.utcnow().timestamp)
+
+    def test_get_context_data(self):
+        expected_dict = {'onu-id': DEFAULT_ONU_ID,
+                         'onu-intf-id': DEFAULT_PON_ID,
+                         'onu-serial-number': DEFAULT_ONU_SN,
+                         'drift': 10,
+                         'new-eqd': 20}
+
+        self.assertEqual(self.event.get_context_data(), expected_dict)
+
+
+if __name__ == '__main__':
+    main()
