ms_driver: Allow to specify env and binary name/path
For the proper trial/suite integration we can't assume that the virtphy/mobile are in the PATH and that they can be executed directly (e.g. need a LD_LIBRARY_PATH to be applied). Introduce BinaryOptions to pass the name/path of the two executables and the env to use. Default this to virtphy/mobile and an empty environment. Change-Id: I79a57e53bc20613ac061453c24fd29a6d05e1721
This commit is contained in:
parent
9cf1c8afde
commit
f658b83b07
|
@ -21,6 +21,7 @@ from osmo_ms_driver.cdf import cdfs
|
|||
from osmo_ms_driver.event_server import EventServer
|
||||
from osmo_ms_driver.simple_loop import SimpleLoop
|
||||
from osmo_ms_driver.location_update_test import MassUpdateLocationTest
|
||||
from osmo_ms_driver.starter import BinaryOptions
|
||||
|
||||
import os.path
|
||||
import shutil
|
||||
|
@ -83,7 +84,9 @@ class MsDriver(log.Origin):
|
|||
|
||||
self._ev_server = EventServer("ev_server", event_server_path)
|
||||
self._ev_server.listen(self._loop)
|
||||
self._test_case = MassUpdateLocationTest("mass", self._num_ms, self._cdf, self._ev_server, self.event_server_sk_tmp_dir)
|
||||
options = BinaryOptions("virtphy", "mobile", None)
|
||||
self._test_case = MassUpdateLocationTest("mass", options, self._num_ms, self._cdf,
|
||||
self._ev_server, self.event_server_sk_tmp_dir)
|
||||
|
||||
# TODO: We should pass subscribers down to the test and not get it from
|
||||
# there.
|
||||
|
|
|
@ -20,6 +20,7 @@ from .event_server import EventServer
|
|||
from .simple_loop import SimpleLoop
|
||||
from .location_update_test import MassUpdateLocationTest
|
||||
from .cdf import cdfs
|
||||
from .starter import BinaryOptions
|
||||
from osmo_gsm_tester import log
|
||||
|
||||
# System modules
|
||||
|
@ -82,7 +83,8 @@ def main():
|
|||
ev_server.listen(loop)
|
||||
|
||||
# Just a single test for now.
|
||||
test = MassUpdateLocationTest("lu_test", args.num_ms, cdf, ev_server, tmp_dir)
|
||||
options = BinaryOptions("virtphy", "mobile", None)
|
||||
test = MassUpdateLocationTest("lu_test", options, args.num_ms, cdf, ev_server, tmp_dir)
|
||||
atexit.register(test.stop_all)
|
||||
|
||||
# Run until everything has been launched
|
||||
|
|
|
@ -56,8 +56,9 @@ class MassUpdateLocationTest(log.Origin):
|
|||
TEMPLATE_LUA = "osmo-mobile-lu.lua"
|
||||
TEMPLATE_CFG = "osmo-mobile.cfg"
|
||||
|
||||
def __init__(self, name, number_of_ms, cdf_function, event_server, tmp_dir):
|
||||
def __init__(self, name, options, number_of_ms, cdf_function, event_server, tmp_dir):
|
||||
super().__init__(log.C_RUN, name)
|
||||
self._binary_options = options
|
||||
self._number_of_ms = number_of_ms
|
||||
self._cdf = cdf_function
|
||||
self._cdf.set_target(number_of_ms)
|
||||
|
@ -71,10 +72,12 @@ class MassUpdateLocationTest(log.Origin):
|
|||
for i in range(0, number_of_ms):
|
||||
ms_name = "%.5d" % i
|
||||
|
||||
phy = OsmoVirtPhy(ms_name, tmp_dir)
|
||||
phy = OsmoVirtPhy(options.virtphy, options.env,
|
||||
ms_name, tmp_dir)
|
||||
self._phys.append(phy)
|
||||
|
||||
launcher = OsmoMobile(ms_name, tmp_dir, self.TEMPLATE_LUA,
|
||||
launcher = OsmoMobile(options.mobile, options.env,
|
||||
ms_name, tmp_dir, self.TEMPLATE_LUA,
|
||||
self.TEMPLATE_CFG, imsi_gen,
|
||||
phy.phy_filename(),
|
||||
event_server.server_path())
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
|
||||
from osmo_gsm_tester import log, template
|
||||
|
||||
import collections
|
||||
import os
|
||||
import os.path
|
||||
import subprocess
|
||||
|
@ -26,9 +27,13 @@ import time
|
|||
_devnull = open(os.devnull, 'w')
|
||||
#_devnull = open('/dev/stdout', 'w')
|
||||
|
||||
BinaryOptions = collections.namedtuple("BinaryOptions", ["virtphy", "mobile", "env"])
|
||||
|
||||
class Launcher(log.Origin):
|
||||
def __init__(self, base_name, name_number, tmp_dir):
|
||||
def __init__(self, binary, env, base_name, name_number, tmp_dir):
|
||||
super().__init__(log.C_RUN, "{}/{}".format(base_name, name_number))
|
||||
self._binary = binary
|
||||
self._env = env
|
||||
self._name_number = name_number
|
||||
self._tmp_dir = tmp_dir
|
||||
|
||||
|
@ -36,8 +41,8 @@ class Launcher(log.Origin):
|
|||
return self._name_number
|
||||
|
||||
class OsmoVirtPhy(Launcher):
|
||||
def __init__(self, name_number, tmp_dir):
|
||||
super().__init__("osmo-ms-virt-phy", name_number, tmp_dir)
|
||||
def __init__(self, binary, env, name_number, tmp_dir):
|
||||
super().__init__(binary, env, "osmo-ms-virt-phy", name_number, tmp_dir)
|
||||
self._phy_filename = os.path.join(self._tmp_dir, "osmocom_l2_" + self._name_number)
|
||||
self._vphy_proc = None
|
||||
|
||||
|
@ -49,9 +54,9 @@ class OsmoVirtPhy(Launcher):
|
|||
raise log.Error('Path for unix socket is longer than max allowed len for unix socket path (107):', self._phy_filename)
|
||||
|
||||
self.log("Starting virtphy process")
|
||||
args = ["virtphy", "--l1ctl-sock=" + self._phy_filename]
|
||||
args = [self._binary, "--l1ctl-sock=" + self._phy_filename]
|
||||
self.log(' '.join(args))
|
||||
self._vphy_proc = subprocess.Popen(args, stderr=_devnull, stdout=_devnull)
|
||||
self._vphy_proc = subprocess.Popen(args, stderr=_devnull, stdout=_devnull, env=self._env)
|
||||
|
||||
def verify_ready(self):
|
||||
while True:
|
||||
|
@ -65,8 +70,8 @@ class OsmoVirtPhy(Launcher):
|
|||
self._vphy_proc.terminate()
|
||||
|
||||
class OsmoMobile(Launcher):
|
||||
def __init__(self, name_number, tmp_dir, lua_tmpl, cfg_tmpl, imsi_ki_generator, phy_filename, ev_server_path):
|
||||
super().__init__("osmo-ms-mob", name_number, tmp_dir)
|
||||
def __init__(self, binary, env, name_number, tmp_dir, lua_tmpl, cfg_tmpl, imsi_ki_generator, phy_filename, ev_server_path):
|
||||
super().__init__(binary, env, "osmo-ms-mob", name_number, tmp_dir)
|
||||
self._lua_template = lua_tmpl
|
||||
self._cfg_template = cfg_tmpl
|
||||
self._imsi_ki_generator = imsi_ki_generator
|
||||
|
@ -117,9 +122,9 @@ class OsmoMobile(Launcher):
|
|||
|
||||
self.log("Starting process")
|
||||
# Let the kernel pick an unused port for the VTY.
|
||||
args = ["mobile", "-c", mob_filename, "--vty-port=0"]
|
||||
args = [self._binary, "-c", mob_filename, "--vty-port=0"]
|
||||
self.log(' '.join(args))
|
||||
self._omob_proc = subprocess.Popen(args, stderr=_devnull, stdout=_devnull)
|
||||
self._omob_proc = subprocess.Popen(args, stderr=_devnull, stdout=_devnull, env=self._env)
|
||||
|
||||
def kill(self):
|
||||
"""Clean up things."""
|
||||
|
|
Loading…
Reference in New Issue