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
Review at https://gerrit.osmocom.org/6233
WIP.. use gerrit as backup
Change-Id: Ifff16c72e301236636f80de44a8564f772966ab7
---
A src/osmo_ms_driver/README
A src/osmo_ms_driver/__main__.py
M src/osmo_ms_driver/cdf.py
A src/osmo_ms_driver/event_server.py
A src/osmo_ms_driver/server.py
A src/osmo_ms_driver/starter.py
A src/osmo_ms_driver/ul_test.py
7 files changed, 230 insertions(+), 2 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-gsm-tester refs/changes/33/6233/1
diff --git a/src/osmo_ms_driver/README b/src/osmo_ms_driver/README
new file mode 100644
index 0000000..0b3a010
--- /dev/null
+++ b/src/osmo_ms_driver/README
@@ -0,0 +1,6 @@
+
+* Test. E.g. LU test
+ * Test lua script repeated n-times
+ * Success criteria definition
+ * Event handling
+
diff --git a/src/osmo_ms_driver/__main__.py b/src/osmo_ms_driver/__main__.py
new file mode 100644
index 0000000..e6bc45f
--- /dev/null
+++ b/src/osmo_ms_driver/__main__.py
@@ -0,0 +1,60 @@
+# osmo_ms_driver: Main test runner
+#
+# Copyright (C) 2018 by Holger Hans Peter Freyther
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Local modules
+from .event_server import EventServer
+from .ul_test import MassUpdateLocationTest
+from .cdf import ease_in_out_duration
+
+# System modules
+import datetime
+import asyncio
+
+
+# TODO: Parse parameters and test composition. Right now we test
+# with a single set of values.
+
+num_ms = 10
+
+# How long should starting all apps take
+time_start=datetime.timedelta(seconds=60)
+# In which steps to start processes
+time_step=datetime.timedelta(milliseconds=100)
+# Event server path
+event_server_path="osmo_ms_driver.unix"
+
+
+# The function that decides when to start something
+cdf = ease_in_out_duration(time_start, time_step)
+
+ev_loop = asyncio.get_event_loop()
+
+# Event server to handle MS->test events
+ev_server = EventServer("ev_server", event_server_path)
+ev_server.listen(ev_loop)
+
+# Just a single test for now.
+test = MassUpdateLocationTest("lu_test", num_ms, cdf, ev_server)
+
+# Run until everything has been launched
+ev_loop.run_until_complete(test.run(ev_loop))
+
+# Wait for it to complete
+ev_loop.run_until_complete(test.complete())
+test.stop_all()
+
+# TODO: do the analysis
diff --git a/src/osmo_ms_driver/cdf.py b/src/osmo_ms_driver/cdf.py
index e84d9c7..8aa06e9 100644
--- a/src/osmo_ms_driver/cdf.py
+++ b/src/osmo_ms_driver/cdf.py
@@ -19,8 +19,6 @@
from datetime import timedelta
-import math
-
class DistributionFunctionHandler(object):
"""
The goal is to start n "mobile" processes. We like to see some
@@ -39,6 +37,9 @@
self._y = self._fun(self._x)
self._target = 1.0
+ def step_size(self):
+ return self._step
+
def set_target(self, scale):
"""
Scale the percentage to the target value..
diff --git a/src/osmo_ms_driver/event_server.py b/src/osmo_ms_driver/event_server.py
new file mode 100644
index 0000000..41aa94d
--- /dev/null
+++ b/src/osmo_ms_driver/event_server.py
@@ -0,0 +1,31 @@
+
+import socket
+import os
+
+from osmo_gsm_tester import log
+
+import asyncio
+
+class MSConnection(asyncio.Protocol, log.Origin):
+ def __init__(self):
+ super().__init__(log.C_RUN, "MSConnection")
+
+ def connection_made(self, transport):
+ # TODO: Update the name once we know the MS.
+ pass
+
+ def data_received(self, read):
+ # TODO: Update the name once we know the MS.
+ pass
+
+class EventServer(log.Origin):
+ def __init__(self, name, path):
+ super().__init__(log.C_RUN, name)
+ self._path = path
+ self._handlers = []
+
+ def register(self, cb):
+ self._handlers.append(cb)
+
+ def listen(self, loop):
+ self._server = loop.create_unix_server(lambda: MSConnection(self), self._path)
diff --git a/src/osmo_ms_driver/server.py b/src/osmo_ms_driver/server.py
new file mode 100644
index 0000000..7486d20
--- /dev/null
+++ b/src/osmo_ms_driver/server.py
@@ -0,0 +1,3 @@
+# WIP...
+
+import asyncio
diff --git a/src/osmo_ms_driver/starter.py b/src/osmo_ms_driver/starter.py
new file mode 100644
index 0000000..28b2cc8
--- /dev/null
+++ b/src/osmo_ms_driver/starter.py
@@ -0,0 +1,48 @@
+# osmo_ms_driver: Starter for processes
+# Help to start processes over time.
+#
+# Copyright (C) 2018 by Holger Hans Peter Freyther
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+from osmo_gsm_tester import log, template, process
+
+import asyncio
+
+class Launcher(log.Origin):
+ """
+ I launch an OsmocomBB mobile and the virtphy. In the future we
+ might want to test with real phones and then don't launch the
+ virtphy. This needs to be handled once we move to bare iron.
+
+ >>> Launcher("osmo-ms/0000", "mobile", "mobile.tmpl", {})
+ osmo-ms/0000
+ """
+ def __init__(self, name, lua_tmpl, cfg_tmpl, options):
+ super().__init__(log.C_RUN, name)
+ self._lua_template = lua_tmpl
+ self._cfg_template = cfg_tmpl
+ self._options = options
+
+ def start(self, loop):
+ self.log("Starting mobile and virtphy")
+ #process = asyncio.create_subprocess_exec([binary])
+ pass
+
+ def kill(self):
+ """Clean up things."""
+ if self._vphy_proc:
+ self._vphy_proc.kill()
+ if self._omob_proc:
+ self._omob_proc.kill()
diff --git a/src/osmo_ms_driver/ul_test.py b/src/osmo_ms_driver/ul_test.py
new file mode 100644
index 0000000..ebbcb87
--- /dev/null
+++ b/src/osmo_ms_driver/ul_test.py
@@ -0,0 +1,79 @@
+# osmo_ms_driver: Starter for processes
+# Help to start processes over time.
+#
+# Copyright (C) 2018 by Holger Hans Peter Freyther
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+from osmo_gsm_tester import log
+from .starter import Launcher
+
+import asyncio
+
+class MassUpdateLocationTest(log.Origin):
+ """
+ A test to launch a configurable amount of MS and make them
+ execute a Location Updating Procedure.
+
+ Configure the number of MS to be tested and a function that
+ decides how quickly to start them and a timeout.
+ """
+
+ TEMPLATE_LUA = "ms_lu_test.lua.tmpl"
+ TEMPLATE_CFG = "ms_lu_test.cfg.tmpl"
+
+ def __init__(self, name, number_of_ms, cdf_function, event_server):
+ super().__init__(log.C_RUN, name)
+ self._number_of_ms = number_of_ms
+ self._cdf = cdf_function
+ self._cdf.set_target(number_of_ms)
+ self._unstarted = []
+ options = {}
+ for i in range(0, number_of_ms):
+ ms_name = "osmo-ms-lu-test/%.5d" % i
+ launcher = Launcher(ms_name, self.TEMPLATE_LUA,
+ self.TEMPLATE_CFG, options)
+ self._unstarted.append(launcher)
+ self._event_server = event_server
+ self._event_server.register(self)
+
+ async def run(self, loop):
+ self._started = []
+
+ while len(self._unstarted) > 0:
+ # Check for timeout
+ # start pending MS
+ while len(self._started) < self._cdf.current_scaled_value():
+ ms = self._unstarted.pop(0)
+ ms.start(loop)
+ self._started.append(ms)
+
+ # Progress and sleep
+ self._cdf.step_once()
+ await asyncio.sleep(self._cdf.step_size().total_seconds())
+
+ print("All started...")
+
+ def stop_all(self):
+ for launcher in self._started:
+ launcher.kill()
+
+ def on_event(self, launcher, status):
+ # We got a message from the MS
+ pass
+
+ def on_process_end(self, launcher):
+ pass
+
--
To view, visit https://gerrit.osmocom.org/6233
To unsubscribe, visit https://gerrit.osmocom.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifff16c72e301236636f80de44a8564f772966ab7
Gerrit-PatchSet: 1
Gerrit-Project: osmo-gsm-tester
Gerrit-Branch: master
Gerrit-Owner: Holger Freyther <holger at freyther.de>