ms_{srs,amarisoft}: Reuse run_node to hold run info

Change-Id: Ifdea48fed0bfc152131c53b87c34b4514c632917
This commit is contained in:
Pau Espin 2020-05-26 13:48:10 +02:00 committed by pespin
parent 1abff4e260
commit 5f826be20a
4 changed files with 54 additions and 49 deletions

View File

@ -31,20 +31,26 @@ modem:
- label: srsUE-zmq
type: srsue
rf_dev_type: zmq
remote_user: jenkins
addr: 172.18.50.100
imsi: '001010123456789'
ki: '00112233445566778899aabbccddeeff'
auth_algo: 'xor'
features: ['4g']
run_node:
run_type: ssh
run_addr: 172.18.50.100
ssh_user: jenkins
ssh_addr: 172.18.50.100
- label: srsUE-B200
type: srsue
rf_dev_type: uhd
rf_dev_args: 'type=b200,serial=3128FF1'
remote_user: jenkins
addr: 10.12.1.195
imsi: '001010123456789'
ki: '00112233445566778899aabbccddeeff'
auth_algo: 'xor'
features: ['4g']
run_node:
run_type: ssh
run_addr: 10.12.1.195
ssh_user: jenkins
ssh_addr: 10.12.1.195

View File

@ -27,6 +27,10 @@ from .run_node import RunNode
from .ms import MS
def on_register_schemas():
resource_schema = {}
for key, val in RunNode.schema().items():
resource_schema['run_node.%s' % key] = val
schema.register_resource_schema('modem', resource_schema)
config_schema = {
'license_server_addr': schema.IPV4,
}
@ -79,10 +83,8 @@ class AmarisoftUE(MS):
IFUPFILE = 'ue-ifup'
def __init__(self, testenv, conf):
self._addr = conf.get('addr', None)
if self._addr is None:
raise log.Error('addr not set')
super().__init__('amarisoftue_%s' % self._addr, conf)
self._run_node = RunNode.from_conf(conf.get('run_node', {}))
super().__init__('amarisoftue_%s' % self.addr(), conf)
self.enb = None
self.run_dir = None
self.inst = None
@ -99,7 +101,6 @@ class AmarisoftUE(MS):
self.remote_log_file = None
self.remote_ifup_file = None
self.testenv = testenv
self.remote_user = conf.get('remote_user', None)
if not rf_type_valid(conf.get('rf_dev_type', None)):
raise log.Error('Invalid rf_dev_type=%s' % conf.get('rf_dev_type', None))
@ -113,7 +114,7 @@ class AmarisoftUE(MS):
def cleanup(self):
if self.process is None:
return
if self.setup_runs_locally():
if self._run_node.is_local():
return
# copy back files (may not exist, for instance if there was an early error of process):
try:
@ -121,9 +122,6 @@ class AmarisoftUE(MS):
except Exception as e:
self.log(repr(e))
def setup_runs_locally(self):
return self.remote_user is None
def netns(self):
return "amarisoftue1"
@ -135,7 +133,7 @@ class AmarisoftUE(MS):
self.enb = enb
self.run_dir = util.Dir(self.testenv.test().get_run_dir().new_dir(self.name()))
self.configure()
if self.setup_runs_locally():
if self._run_node.is_local():
self.start_locally()
else:
self.start_remotely()
@ -219,8 +217,8 @@ class AmarisoftUE(MS):
''' % (self.netns(), self.netns())
f.write(r)
if not self.setup_runs_locally():
self.rem_host = remote.RemoteHost(self.run_dir, self.remote_user, self._addr)
if not self._run_node.is_local():
self.rem_host = remote.RemoteHost(self.run_dir, self._run_node.ssh_user(), self._run_node.ssh_addr())
remote_prefix_dir = util.Dir(AmarisoftUE.REMOTE_DIR)
self.remote_inst = util.Dir(remote_prefix_dir.child(os.path.basename(str(self.inst))))
remote_run_dir = util.Dir(remote_prefix_dir.child(AmarisoftUE.BINFILE))
@ -235,10 +233,11 @@ class AmarisoftUE(MS):
config.overlay(values, dict(ue=self.testenv.suite().config().get('amarisoft', {})))
config.overlay(values, dict(ue=self.testenv.suite().config().get('modem', {})))
config.overlay(values, dict(ue=self._conf))
config.overlay(values, dict(ue=dict(num_antennas = self.enb.num_ports())))
config.overlay(values, dict(ue=dict(addr = self.addr(),
num_antennas = self.enb.num_ports())))
logfile = self.log_file if self.setup_runs_locally() else self.remote_log_file
ifupfile = self.ifup_file if self.setup_runs_locally() else self.remote_ifup_file
logfile = self.log_file if self._run_node.is_local() else self.remote_log_file
ifupfile = self.ifup_file if self._run_node.is_local() else self.remote_ifup_file
config.overlay(values, dict(ue=dict(log_filename=logfile,
ifup_filename=ifupfile)))
@ -289,7 +288,7 @@ class AmarisoftUE(MS):
self.gen_conf_file(self.config_file, AmarisoftUE.CFGFILE, values)
self.gen_conf_file(self.config_rf_file, AmarisoftUE.CFGFILE_RF, values)
if not self.setup_runs_locally():
if not self._run_node.is_local():
self.rem_host.recreate_remote_dir(self.remote_inst)
self.rem_host.scp('scp-inst-to-remote', str(self.inst), remote_prefix_dir)
self.rem_host.recreate_remote_dir(remote_run_dir)
@ -309,13 +308,13 @@ class AmarisoftUE(MS):
return not self.process.terminated()
def addr(self):
return self._addr
return self._run_node.run_addr()
def run_node(self):
return RunNode(RunNode.T_REM_SSH, self._addr, self.remote_user, self._addr)
return self._run_node
def run_netns_wait(self, name, popen_args):
if self.setup_runs_locally():
if self._run_node.is_local():
proc = process.NetNSProcess(name, self.run_dir.new_dir(name), self.netns(), popen_args, env={})
else:
proc = self.rem_host.RemoteNetNSProcess(name, self.netns(), popen_args, env={})

View File

@ -31,8 +31,6 @@ def rf_type_valid(rf_type_str):
def on_register_schemas():
resource_schema = {
'remote_user': schema.STR,
'addr': schema.IPV4,
'rf_dev_type': schema.STR,
'rf_dev_args': schema.STR,
'num_carriers': schema.UINT,
@ -42,6 +40,8 @@ def on_register_schemas():
'tx_gain': schema.UINT,
'rx_gain': schema.UINT,
}
for key, val in RunNode.schema().items():
resource_schema['run_node.%s' % key] = val
schema.register_resource_schema('modem', resource_schema)
config_schema = {
@ -78,10 +78,8 @@ class srsUE(MS):
METRICSFILE = 'srsue_metrics.csv'
def __init__(self, testenv, conf):
self._addr = conf.get('addr', None)
if self._addr is None:
raise log.Error('addr not set')
super().__init__('srsue_%s' % self._addr, conf)
self._run_node = RunNode.from_conf(conf.get('run_node', {}))
super().__init__('srsue_%s' % self.addr(), conf)
self.enb = None
self.run_dir = None
self.config_file = None
@ -100,7 +98,6 @@ class srsUE(MS):
self.enable_pcap = False
self.num_carriers = 1
self.testenv = testenv
self.remote_user = conf.get('remote_user', None)
self._additional_args = []
if not rf_type_valid(conf.get('rf_dev_type', None)):
raise log.Error('Invalid rf_dev_type=%s' % conf.get('rf_dev_type', None))
@ -108,7 +105,7 @@ class srsUE(MS):
def cleanup(self):
if self.process is None:
return
if self.setup_runs_locally():
if self._run_node.is_local():
return
# Make sure we give the UE time to tear down
@ -125,9 +122,6 @@ class srsUE(MS):
except Exception as e:
self.log(repr(e))
def setup_runs_locally(self):
return self.remote_user is None
def netns(self):
return "srsue1"
@ -146,7 +140,7 @@ class srsUE(MS):
self.enb = enb
self.run_dir = util.Dir(self.testenv.test().get_run_dir().new_dir(self.name()))
self.configure()
if self.setup_runs_locally():
if self._run_node.is_local():
self.start_locally()
else:
self.start_remotely()
@ -215,8 +209,8 @@ class srsUE(MS):
self.pcap_file = self.run_dir.child(srsUE.PCAPFILE)
self.metrics_file = self.run_dir.child(srsUE.METRICSFILE)
if not self.setup_runs_locally():
self.rem_host = remote.RemoteHost(self.run_dir, self.remote_user, self._addr)
if not self._run_node.is_local():
self.rem_host = remote.RemoteHost(self.run_dir, self._run_node.ssh_user(), self._run_node.ssh_addr())
remote_prefix_dir = util.Dir(srsUE.REMOTE_DIR)
self.remote_inst = util.Dir(remote_prefix_dir.child(os.path.basename(str(self.inst))))
self.remote_run_dir = util.Dir(remote_prefix_dir.child(srsUE.BINFILE))
@ -230,9 +224,9 @@ class srsUE(MS):
config.overlay(values, dict(ue=self._conf))
config.overlay(values, dict(ue=dict(num_antennas = self.enb.num_ports())))
metricsfile = self.metrics_file if self.setup_runs_locally() else self.remote_metrics_file
logfile = self.log_file if self.setup_runs_locally() else self.remote_log_file
pcapfile = self.pcap_file if self.setup_runs_locally() else self.remote_pcap_file
metricsfile = self.metrics_file if self._run_node.is_local() else self.remote_metrics_file
logfile = self.log_file if self._run_node.is_local() else self.remote_log_file
pcapfile = self.pcap_file if self._run_node.is_local() else self.remote_pcap_file
config.overlay(values, dict(ue=dict(metrics_filename=metricsfile,
log_filename=logfile,
pcap_filename=pcapfile)))
@ -300,7 +294,7 @@ class srsUE(MS):
self.dbg(r)
f.write(r)
if not self.setup_runs_locally():
if not self._run_node.is_local():
self.rem_host.recreate_remote_dir(self.remote_inst)
self.rem_host.scp('scp-inst-to-remote', str(self.inst), remote_prefix_dir)
self.rem_host.recreate_remote_dir(self.remote_run_dir)
@ -316,13 +310,13 @@ class srsUE(MS):
return not self.process.terminated()
def addr(self):
return self._addr
return self._run_node.run_addr()
def run_node(self):
return RunNode(RunNode.T_REM_SSH, self._addr, self.remote_user, self._addr)
return self._run_node
def run_netns_wait(self, name, popen_args):
if self.setup_runs_locally():
if self._run_node.is_local():
proc = process.NetNSProcess(name, self.run_dir.new_dir(name), self.netns(), popen_args, env={})
else:
proc = self.rem_host.RemoteNetNSProcess(name, self.netns(), popen_args, env={})
@ -348,7 +342,7 @@ class srsUE(MS):
if self.running():
self.stop()
if not self.setup_runs_locally():
if not self._run_node.is_local():
try:
self.rem_host.scpfrom('scp-back-metrics', self.remote_metrics_file, self.metrics_file)
except Exception as e:

View File

@ -258,23 +258,29 @@ modem:
type: srsue
rf_dev_type: zmq
rf_dev_args: auto
remote_user: jenkins
addr: 10.42.42.116
imsi: '001010123456789'
ki: '00112233445566778899aabbccddeeff'
auth_algo: 'xor'
features: ['4g']
run_node:
run_type: ssh
run_addr: 10.42.42.116
ssh_user: jenkins
ssh_addr: 10.42.42.116
- label: srsUE-soapy-lms_1
type: srsue
rf_dev_type: soapy
rf_dev_args: driver=lime,serial=00090706024F0A22,rxant=LNAW,txant=BAND1
remote_user: jenkins
addr: 10.42.42.116
imsi: '001010123456789'
ki: '00112233445566778899aabbccddeeff'
auth_algo: 'xor'
features: ['4g']
run_node:
run_type: ssh
run_addr: 10.42.42.116
ssh_user: jenkins
ssh_addr: 10.42.42.116
osmocon_phone:
- serial_device: '/dev/serial/by-id/usb-Silicon_Labs_CP2104_USB_to_UART_Bridge_Controller_00897B41-if00-port0'