Change in osmo-gsm-tester[master]: ms: Simplify starting of the test and combine loop and wait

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Holger Freyther gerrit-no-reply at lists.osmocom.org
Sat Jun 23 20:55:56 UTC 2018


Holger Freyther has uploaded this change for review. ( https://gerrit.osmocom.org/9717


Change subject: ms: Simplify starting of the test and combine loop and wait
......................................................................

ms: Simplify starting of the test and combine loop and wait

This will make it easier to strt different kind of tests. The cost
of calling step_once is hopefully neglectable as it simplifies the
test.

Change-Id: I3708ac382c0a34e17cf147d18f03603946437a53
---
M src/osmo_ms_driver/__main__.py
M src/osmo_ms_driver/location_update_test.py
2 files changed, 45 insertions(+), 42 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-gsm-tester refs/changes/17/9717/1

diff --git a/src/osmo_ms_driver/__main__.py b/src/osmo_ms_driver/__main__.py
index abc5e54..ef06393 100644
--- a/src/osmo_ms_driver/__main__.py
+++ b/src/osmo_ms_driver/__main__.py
@@ -82,10 +82,7 @@
     atexit.register(test.stop_all)
 
     # Run until everything has been launched
-    test.launch(loop)
-
-    # Wait for it to complete
-    test.wait_for_result(loop)
+    test.run_test(loop)
 
     # Print stats
     test.print_stats()
diff --git a/src/osmo_ms_driver/location_update_test.py b/src/osmo_ms_driver/location_update_test.py
index 9bab8ad..a5823a5 100644
--- a/src/osmo_ms_driver/location_update_test.py
+++ b/src/osmo_ms_driver/location_update_test.py
@@ -97,7 +97,7 @@
         for phy in self._phys:
             phy.verify_ready()
 
-    def launch(self, loop):
+    def prepare(self, loop):
         self.log("Starting testcase")
 
         self.pre_launch(loop)
@@ -107,40 +107,57 @@
                             self._cdf.duration().total_seconds() + \
                             timedelta(seconds=120).total_seconds()
 
-        current_time = self._start_time
-        step_size = self._cdf.step_size().total_seconds()
         self._started = []
-        too_slow = 0
+        self._too_slow = 0
+
+    def step_once(self, loop, current_time):
+        if len(self._unstarted) <= 0:
+            return current_time, None
+
+        step_size = self._cdf.step_size().total_seconds()
 
         # Start
         self._cdf.step_once()
 
-        while len(self._unstarted) > 0:
-            # Check for timeout
-            # start pending MS
-            while len(self._started) < self._cdf.current_scaled_value() and len(self._unstarted) > 0:
-                ms = self._unstarted.pop(0)
-                ms.start(loop)
-                launch_time = time.clock_gettime(time.CLOCK_MONOTONIC)
-                self._results[ms.name_number()].set_launch_time(launch_time)
-                self._started.append(ms)
+        # Check for timeout
+        # start pending MS
+        while len(self._started) < self._cdf.current_scaled_value() and len(self._unstarted) > 0:
+            ms = self._unstarted.pop(0)
+            ms.start(loop)
+            launch_time = time.clock_gettime(time.CLOCK_MONOTONIC)
+            self._results[ms.name_number()].set_launch_time(launch_time)
+            self._started.append(ms)
 
-            # Progress and sleep
-            self._cdf.step_once()
+        now_time = time.clock_gettime(time.CLOCK_MONOTONIC)
+        sleep_time = (current_time + step_size) - now_time
+        if sleep_time <= 0:
+            self.log("Starting too slowly. Moving on",
+		    target=(current_time + step_size), now=now_time, sleep=sleep_time)
+            self._too_slow += 1
+            sleep_time = 0
 
+        if len(self._unstarted) == 0:
+            end_time = time.clock_gettime(time.CLOCK_MONOTONIC)
+            self.log("All started...", too_slow=self._too_slow, duration=end_time - self._start_time)
+            return current_time, None
+
+        return current_time + step_size, sleep_time
+
+    def run_test(self, loop):
+        self.prepare(loop)
+
+        to_complete_time = self._start_time + self.TEST_TIME.total_seconds()
+        tick_time = self._start_time
+
+        while not self.all_completed():
+            tick_time, sleep_time = self.step_once(loop, tick_time)
             now_time = time.clock_gettime(time.CLOCK_MONOTONIC)
-            sleep_time = (current_time + step_size) - now_time
-            if sleep_time <= 0:
-                self.log("Starting too slowly. Moving on",
-			target=(current_time + step_size), now=now_time, sleep=sleep_time)
-                too_slow += 1
-            else:
-                loop.schedule_timeout(sleep_time)
-                loop.select()
-            current_time += step_size
-
-        end_time = time.clock_gettime(time.CLOCK_MONOTONIC)
-        self.log("All started...", too_slow=too_slow, duration=end_time - self._start_time)
+            if sleep_time is None:
+                sleep_time = to_complete_time - now_time
+            if sleep_time < 0:
+                break
+            loop.schedule_timeout(sleep_time)
+            loop.select()
 
     def stop_all(self):
         for launcher in self._started:
@@ -165,17 +182,6 @@
             raise Exception("Unknown event type..:" + _data.decode())
 
 
-    def wait_for_result(self, loop):
-        to_complete_time = self._start_time + self.TEST_TIME.total_seconds()
-
-        while not self.all_completed():
-            now_time = time.clock_gettime(time.CLOCK_MONOTONIC)
-            sleep_time = to_complete_time - now_time
-            if sleep_time < 0:
-                break
-            loop.schedule_timeout(sleep_time)
-            loop.select()
-
     def all_completed(self):
         from functools import reduce
         return reduce(lambda b, ms: b and ms.has_lu_time(), self._results.values(), True)

-- 
To view, visit https://gerrit.osmocom.org/9717
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-gsm-tester
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I3708ac382c0a34e17cf147d18f03603946437a53
Gerrit-Change-Number: 9717
Gerrit-PatchSet: 1
Gerrit-Owner: Holger Freyther <holger at freyther.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20180623/9172f2ac/attachment.htm>


More information about the gerrit-log mailing list