From e85fba96127b13c48d077eadff8fe5b3fa555d44 Mon Sep 17 00:00:00 2001
From: Nikolay Stanchev <ns17@it-innovation.soton.ac.uk>
Date: Tue, 29 May 2018 10:08:54 +0100
Subject: [PATCH] Slight update to aggregator regarding thread-safety

---
 clmctest/monitoring/E2EAggregator.py   | 12 ++++++++++++
 clmctest/monitoring/test_e2eresults.py |  7 +++++--
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/clmctest/monitoring/E2EAggregator.py b/clmctest/monitoring/E2EAggregator.py
index 58ec908..0d681b7 100644
--- a/clmctest/monitoring/E2EAggregator.py
+++ b/clmctest/monitoring/E2EAggregator.py
@@ -70,11 +70,23 @@ class Aggregator(Thread):
 
         self._stop_flag.set()
 
+    def set_event_lock(self, event):
+        """
+        Auxiliary method to set a thread-safe event lock object to the aggregator (used for testing).
+
+        :param event: the event lock object
+        """
+
+        setattr(self, 'event', event)
+
     def run(self):
         """
         Performs the functionality of the aggregator - query data from both measurements merge that data and post it back in influx every 5 seconds.
         """
 
+        if hasattr(self, 'event'):
+            self.event.set()
+
         current_time = int(time())
         while True:
             if self._stop_flag.is_set():
diff --git a/clmctest/monitoring/test_e2eresults.py b/clmctest/monitoring/test_e2eresults.py
index 8e48b6e..fea3a77 100644
--- a/clmctest/monitoring/test_e2eresults.py
+++ b/clmctest/monitoring/test_e2eresults.py
@@ -25,6 +25,7 @@
 import pytest
 import random
 import time
+import threading
 
 
 class TestE2ESimulation(object):
@@ -44,9 +45,11 @@ class TestE2ESimulation(object):
         random.seed(0)  # Seed random function so we can reliably test for average queries
 
         print("Starting aggregator...")
+        event = threading.Event()
+        e2e_aggregator.set_event_lock(event)
         e2e_aggregator.start()
 
-        time.sleep(1)
+        event.wait()  # wait until the aggregator thread has set the event lock (it has reached its run method and is ready to start)
 
         print("Running simulation, please wait...")
         e2e_simulator.run()
@@ -68,7 +71,7 @@ class TestE2ESimulation(object):
           "count_avg_request_size": 38, "count_avg_response_size": 38, "count_avg_bandwidth": 38}),
 
         ('SELECT mean(*) FROM "E2EMetrics"."autogen"."e2e_delays"',
-         {"time": "1970-01-01T00:00:00Z", "mean_delay_forward": 8.048245614035087, "mean_delay_reverse": 13.043859649122808, "mean_delay_service": 23.42105263157895,
+         {"time": "1970-01-01T00:00:00Z", "mean_delay_forward": 8.010964912280702, "mean_delay_reverse": 12.881578947368423, "mean_delay_service": 23.42105263157895,
           'mean_avg_request_size': 10485760, 'mean_avg_response_size': 1024, 'mean_avg_bandwidth': 104857600}),
         ])
     def test_simulation(self, influx_db, query, expected_result):
-- 
GitLab