From d6deb2824fad8f274d652549b97f9c80b54561b6 Mon Sep 17 00:00:00 2001 From: Pau Espin Pedrol Date: Fri, 16 Oct 2020 18:49:39 +0200 Subject: [PATCH] Copy gnuradio zmq broker at runtime The remotely run script is moved into a new subdir called "external", where external utils to be used by osmo-gsm-tester (exernal to its own process) are placed. It needs to be in another directory because python files in obj/ are loaded at startup of osmo-gsm-tester to dynamically load schemas. Change-Id: I633a85294694f2c6efd58535729e9b8af166b3ff --- src/osmo_gsm_tester/core/util.py | 5 ++++ .../external/gnuradio_zmq_broker_remote.py | 3 +++ .../obj/gnuradio_zmq_broker.py | 23 +++++++++++++++---- 3 files changed, 27 insertions(+), 4 deletions(-) rename utils/bin/osmo-gsm-tester_zmq_broker.py => src/osmo_gsm_tester/external/gnuradio_zmq_broker_remote.py (98%) diff --git a/src/osmo_gsm_tester/core/util.py b/src/osmo_gsm_tester/core/util.py index 4c7b1dd4..e035a729 100644 --- a/src/osmo_gsm_tester/core/util.py +++ b/src/osmo_gsm_tester/core/util.py @@ -441,4 +441,9 @@ def encryption2osmovty(val): assert val[:3] == 'a5_' return 'a5 ' + val[3:] +# Return abs path to external dir, where utils to run out of the process are placed +def external_dir(): + # ../external/ + return os.path.abspath(os.path.join(os.path.dirname(os.path.dirname(__file__)), 'external')) + # vim: expandtab tabstop=4 shiftwidth=4 diff --git a/utils/bin/osmo-gsm-tester_zmq_broker.py b/src/osmo_gsm_tester/external/gnuradio_zmq_broker_remote.py similarity index 98% rename from utils/bin/osmo-gsm-tester_zmq_broker.py rename to src/osmo_gsm_tester/external/gnuradio_zmq_broker_remote.py index 3681e7e0..fa69efd2 100755 --- a/utils/bin/osmo-gsm-tester_zmq_broker.py +++ b/src/osmo_gsm_tester/external/gnuradio_zmq_broker_remote.py @@ -1,5 +1,8 @@ #!/usr/bin/env python2 +# This is script is aimed at being copied to some remote target host where it +# will be run by osmo-gsm-tester through ssh + from distutils.version import StrictVersion from gnuradio.fft import window diff --git a/src/osmo_gsm_tester/obj/gnuradio_zmq_broker.py b/src/osmo_gsm_tester/obj/gnuradio_zmq_broker.py index ba43794a..76fb1e55 100644 --- a/src/osmo_gsm_tester/obj/gnuradio_zmq_broker.py +++ b/src/osmo_gsm_tester/obj/gnuradio_zmq_broker.py @@ -19,6 +19,7 @@ import json import socket +import os from ..core import log from ..core import util @@ -32,12 +33,18 @@ class GrBroker(log.Origin): refcount = 0 instance = None + REMOTE_DIR = '/osmo-gsm-tester-grbroker' + TGT_SCRIPT_NAME = 'gnuradio_zmq_broker_remote.py' # File located in same directory as thine one + TGT_SCRIPT_LOCAL_PATH = os.path.join(util.external_dir(), TGT_SCRIPT_NAME) + def __init__(self): super().__init__(log.C_RUN, 'gr_zmq_broker') self.process = None self.ctrl_port = 5005 self.run_dir = None self.rem_host = None + self.remote_run_dir = None + self.remote_tgt_script = None self.enb_li = [] self.addr = None self.ctrl_sk = None @@ -116,19 +123,27 @@ class GrBroker(log.Origin): self.run_dir = util.Dir(self.testenv.test().get_run_dir().new_dir(self.name())) if not self.enb_li[0]._run_node.is_local(): self.rem_host = remote.RemoteHost(self.run_dir, self.enb_li[0]._run_node.ssh_user(), self.enb_li[0]._run_node.ssh_addr()) + remote_prefix_dir = util.Dir(GrBroker.REMOTE_DIR) + self.remote_run_dir = util.Dir(remote_prefix_dir.child(self.name())) + self.remote_tgt_script = os.path.join(str(self.remote_run_dir), GrBroker.TGT_SCRIPT_NAME) + self.rem_host.recreate_remote_dir(self.remote_run_dir) + self.rem_host.scp('scp-grboker-to-remote', GrBroker.TGT_SCRIPT_LOCAL_PATH, self.remote_tgt_script) def start(self): self.num_enb_started += 1 self.dbg('start(%d/%d)' % (self.num_enb_started, len(self.enb_li))) if self.num_enb_started == 1: self.configure() - args = ('osmo-gsm-tester_zmq_broker.py', - '-c', str(self.ctrl_port), - '-b', self.addr) if self.enb_li[0]._run_node.is_local(): + args = (GrBroker.TGT_SCRIPT_LOCAL_PATH, + '-c', str(self.ctrl_port), + '-b', self.addr) self.process = process.Process(self.name(), self.run_dir, args) else: - self.process = self.rem_host.RemoteProcessSafeExit('zmq_gr_broker', util.Dir('/tmp/ogt_%s' % self.name()), args, wait_time_sec=7) + args = (self.remote_tgt_script, + '-c', str(self.ctrl_port), + '-b', self.addr) + self.process = self.rem_host.RemoteProcessSafeExit(self.name(), self.remote_run_dir, args, wait_time_sec=7) self.testenv.remember_to_stop(self.process) self.process.launch() # Wait until all ENBs are configured/started: