<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/17067">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">contrib: Add scripts to build srsLTE software<br><br>Change-Id: Id9d63920a44a80af187e649c9be5fd7498fa5f44<br>---<br>M contrib/jenkins-build-common.sh<br>A contrib/jenkins-build-srslte.sh<br>A src/osmo_gsm_tester/templates/srsue.cfg.tmpl<br>D src/osmo_gsm_tester/test.py<br>A suites/4g/mo_mt_sms.py<br>A suites/4g/suite.conf<br>D update_version.sh<br>7 files changed, 403 insertions(+), 136 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-gsm-tester refs/changes/67/17067/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/contrib/jenkins-build-common.sh b/contrib/jenkins-build-common.sh</span><br><span>index a9eaf7a..f263784 100644</span><br><span>--- a/contrib/jenkins-build-common.sh</span><br><span>+++ b/contrib/jenkins-build-common.sh</span><br><span>@@ -142,10 +142,18 @@</span><br><span> </span><br><span>   cd "$dep/${dir}"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  set +x; echo; echo; set -x</span><br><span style="color: hsl(0, 100%, 40%);">-  autoreconf -fi</span><br><span style="color: hsl(0, 100%, 40%);">-  set +x; echo; echo; set -x</span><br><span style="color: hsl(0, 100%, 40%);">-  ./configure --prefix="$prefix" --with-systemdsystemunitdir=no $CONFIGURE_FLAGS $configure_opts</span><br><span style="color: hsl(120, 100%, 40%);">+  if [ -f configure.ac ]; then</span><br><span style="color: hsl(120, 100%, 40%);">+    set +x; echo; echo; set -x</span><br><span style="color: hsl(120, 100%, 40%);">+    autoreconf -fi</span><br><span style="color: hsl(120, 100%, 40%);">+    set +x; echo; echo; set -x</span><br><span style="color: hsl(120, 100%, 40%);">+    ./configure --prefix="$prefix" --with-systemdsystemunitdir=no $CONFIGURE_FLAGS $configure_opts</span><br><span style="color: hsl(120, 100%, 40%);">+  elif [ -f CMakeLists.txt ]; then</span><br><span style="color: hsl(120, 100%, 40%);">+    rm -rf build && mkdir build && cd build || exit 1</span><br><span style="color: hsl(120, 100%, 40%);">+    set +x; echo; echo; set -x</span><br><span style="color: hsl(120, 100%, 40%);">+    cmake ../ -DCMAKE_INSTALL_PREFIX=$prefix $CONFIGURE_FLAGS $configure_opts</span><br><span style="color: hsl(120, 100%, 40%);">+  else</span><br><span style="color: hsl(120, 100%, 40%);">+    echo "Unknwown build system" && exit 1</span><br><span style="color: hsl(120, 100%, 40%);">+  fi</span><br><span>   set +x; echo; echo; set -x</span><br><span>   make -j8 || make  # libsmpp34 can't build in parallel</span><br><span>   set +x; echo; echo; set -x</span><br><span>@@ -213,6 +221,9 @@</span><br><span> </span><br><span>   prune_files bin "$wanted_binaries_bin"</span><br><span>   prune_files sbin "$wanted_binaries_sbin"</span><br><span style="color: hsl(120, 100%, 40%);">+  # Drop all static libraries if exist:</span><br><span style="color: hsl(120, 100%, 40%);">+  rm -f $prefix_real/lib/*.a</span><br><span style="color: hsl(120, 100%, 40%);">+  rm -f $prefix_real/lib/*.la</span><br><span> </span><br><span>   cd "$prefix_real"</span><br><span>   add_rpath</span><br><span>diff --git a/contrib/jenkins-build-srslte.sh b/contrib/jenkins-build-srslte.sh</span><br><span>new file mode 100755</span><br><span>index 0000000..705e4ab</span><br><span>--- /dev/null</span><br><span>+++ b/contrib/jenkins-build-srslte.sh</span><br><span>@@ -0,0 +1,13 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#!/bin/sh</span><br><span style="color: hsl(120, 100%, 40%);">+set -e -x</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+base="$PWD"</span><br><span style="color: hsl(120, 100%, 40%);">+name="srslte"</span><br><span style="color: hsl(120, 100%, 40%);">+SANITIZE_FLAGS=""</span><br><span style="color: hsl(120, 100%, 40%);">+git_url="https://github.com/srsLTE/"</span><br><span style="color: hsl(120, 100%, 40%);">+. "$(dirname "$0")/jenkins-build-common.sh"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#TODO: make sure libconfig, zeroMQ is installed</span><br><span style="color: hsl(120, 100%, 40%);">+build_repo srsLTE ${SANITIZE_FLAGS}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+create_bin_tgz "srsue srsenb srsepc"</span><br><span>diff --git a/src/osmo_gsm_tester/templates/srsue.cfg.tmpl b/src/osmo_gsm_tester/templates/srsue.cfg.tmpl</span><br><span>new file mode 100644</span><br><span>index 0000000..0afa78b</span><br><span>--- /dev/null</span><br><span>+++ b/src/osmo_gsm_tester/templates/srsue.cfg.tmpl</span><br><span>@@ -0,0 +1,347 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#####################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+#                   srsUE configuration file</span><br><span style="color: hsl(120, 100%, 40%);">+#####################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#####################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+# RF configuration</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# dl_earfcn: Downlink EARFCN code.</span><br><span style="color: hsl(120, 100%, 40%);">+# freq_offset: Uplink and Downlink optional frequency offset (in Hz)</span><br><span style="color: hsl(120, 100%, 40%);">+# tx_gain: Transmit gain (dB). </span><br><span style="color: hsl(120, 100%, 40%);">+# rx_gain: Optional receive gain (dB). If disabled, AGC if enabled</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# Optional parameters: </span><br><span style="color: hsl(120, 100%, 40%);">+# dl_freq:            Override DL frequency corresponding to dl_earfcn</span><br><span style="color: hsl(120, 100%, 40%);">+# ul_freq:            Override UL frequency corresponding to dl_earfcn</span><br><span style="color: hsl(120, 100%, 40%);">+# nof_radios:         Number of available RF devices</span><br><span style="color: hsl(120, 100%, 40%);">+# nof_rf_channels:    Number of RF channels per radio</span><br><span style="color: hsl(120, 100%, 40%);">+# nof_rx_ant:         Number of RX antennas per channel</span><br><span style="color: hsl(120, 100%, 40%);">+# device_name:        Device driver family. Supported options: "auto" (uses first found), "UHD" or "bladeRF" </span><br><span style="color: hsl(120, 100%, 40%);">+# device_args:        Arguments for the device driver. Options are "auto" or any string. </span><br><span style="color: hsl(120, 100%, 40%);">+#                     Default for UHD: "recv_frame_size=9232,send_frame_size=9232"</span><br><span style="color: hsl(120, 100%, 40%);">+#                     Default for bladeRF: ""</span><br><span style="color: hsl(120, 100%, 40%);">+# device_args_2:      Arguments for the RF device driver 2.</span><br><span style="color: hsl(120, 100%, 40%);">+# device_args_3:      Arguments for the RF device driver 3.</span><br><span style="color: hsl(120, 100%, 40%);">+# time_adv_nsamples:  Transmission time advance (in number of samples) to compensate for RF delay</span><br><span style="color: hsl(120, 100%, 40%);">+#                     from antenna to timestamp insertion. </span><br><span style="color: hsl(120, 100%, 40%);">+#                     Default "auto". B210 USRP: 100 samples, bladeRF: 27.</span><br><span style="color: hsl(120, 100%, 40%);">+# burst_preamble_us:  Preamble length to transmit before start of burst. </span><br><span style="color: hsl(120, 100%, 40%);">+#                     Default "auto". B210 USRP: 400 us, bladeRF: 0 us.</span><br><span style="color: hsl(120, 100%, 40%);">+# continuous_tx:      Transmit samples continuously to the radio or on bursts (auto/yes/no).</span><br><span style="color: hsl(120, 100%, 40%);">+#                     Default is auto (yes for UHD, no for rest)</span><br><span style="color: hsl(120, 100%, 40%);">+#####################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+[rf]</span><br><span style="color: hsl(120, 100%, 40%);">+dl_earfcn = 3400</span><br><span style="color: hsl(120, 100%, 40%);">+freq_offset = 0</span><br><span style="color: hsl(120, 100%, 40%);">+tx_gain = 80</span><br><span style="color: hsl(120, 100%, 40%);">+#rx_gain = 40</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#nof_radios = 1</span><br><span style="color: hsl(120, 100%, 40%);">+#nof_rx_ant = 1</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# For best performance in 2x2 MIMO and >= 15 MHz use the following device_args settings:</span><br><span style="color: hsl(120, 100%, 40%);">+#     USRP B210: num_recv_frames=64,num_send_frames=64</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# For best performance when BW<5 MHz (25 PRB), use the following device_args settings:</span><br><span style="color: hsl(120, 100%, 40%);">+#     USRP B210: send_frame_size=512,recv_frame_size=512</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#device_args = auto</span><br><span style="color: hsl(120, 100%, 40%);">+#time_adv_nsamples = auto</span><br><span style="color: hsl(120, 100%, 40%);">+#burst_preamble_us = auto</span><br><span style="color: hsl(120, 100%, 40%);">+#continuous_tx     = auto</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#####################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+# Packet capture configuration</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# Packet capture is supported at both MAC and NAS layers.</span><br><span style="color: hsl(120, 100%, 40%);">+# MAC-layer packets are captured to file in the compact format</span><br><span style="color: hsl(120, 100%, 40%);">+# decoded by the Wireshark mac-lte-framed dissector.</span><br><span style="color: hsl(120, 100%, 40%);">+# To use this dissector, edit the preferences for DLT_USER to</span><br><span style="color: hsl(120, 100%, 40%);">+# add an entry with DLT=147, Payload Protocol=mac-lte-framed.</span><br><span style="color: hsl(120, 100%, 40%);">+# For more information see: https://wiki.wireshark.org/MAC-LTE</span><br><span style="color: hsl(120, 100%, 40%);">+# NAS-layer packets are dissected with DLT=148, and</span><br><span style="color: hsl(120, 100%, 40%);">+# Payload Protocol = nas-eps.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# enable:       Enable MAC layer packet captures (true/false)</span><br><span style="color: hsl(120, 100%, 40%);">+# filename:     File path to use for MAC packet captures</span><br><span style="color: hsl(120, 100%, 40%);">+# nas_enable:   Enable NAS layer packet captures (true/false)</span><br><span style="color: hsl(120, 100%, 40%);">+# nas_filename: File path to use for NAS packet captures</span><br><span style="color: hsl(120, 100%, 40%);">+#####################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+[pcap]</span><br><span style="color: hsl(120, 100%, 40%);">+enable = false</span><br><span style="color: hsl(120, 100%, 40%);">+filename = /tmp/ue.pcap</span><br><span style="color: hsl(120, 100%, 40%);">+nas_enable = false</span><br><span style="color: hsl(120, 100%, 40%);">+nas_filename = /tmp/nas.pcap</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#####################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+# Log configuration</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# Log levels can be set for individual layers. "all_level" sets log</span><br><span style="color: hsl(120, 100%, 40%);">+# level for all layers unless otherwise configured.</span><br><span style="color: hsl(120, 100%, 40%);">+# Format: e.g. phy_level = info</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# In the same way, packet hex dumps can be limited for each level.</span><br><span style="color: hsl(120, 100%, 40%);">+# "all_hex_limit" sets the hex limit for all layers unless otherwise</span><br><span style="color: hsl(120, 100%, 40%);">+# configured.</span><br><span style="color: hsl(120, 100%, 40%);">+# Format: e.g. phy_hex_limit = 32</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# Logging layers: rf, phy, mac, rlc, pdcp, rrc, nas, gw, usim, all</span><br><span style="color: hsl(120, 100%, 40%);">+# Logging levels: debug, info, warning, error, none</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# filename: File path to use for log output. Can be set to stdout</span><br><span style="color: hsl(120, 100%, 40%);">+#           to print logs to standard output</span><br><span style="color: hsl(120, 100%, 40%);">+# file_max_size: Maximum file size (in kilobytes). When passed, multiple files are created.</span><br><span style="color: hsl(120, 100%, 40%);">+#                If set to negative, a single log file will be created.</span><br><span style="color: hsl(120, 100%, 40%);">+#####################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+[log]</span><br><span style="color: hsl(120, 100%, 40%);">+all_level = warning</span><br><span style="color: hsl(120, 100%, 40%);">+phy_lib_level = none</span><br><span style="color: hsl(120, 100%, 40%);">+all_hex_limit = 32</span><br><span style="color: hsl(120, 100%, 40%);">+filename = /tmp/ue.log</span><br><span style="color: hsl(120, 100%, 40%);">+file_max_size = -1</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#####################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+# USIM configuration</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# mode:   USIM mode (soft/pcsc)</span><br><span style="color: hsl(120, 100%, 40%);">+# algo:   Authentication algorithm (xor/milenage)</span><br><span style="color: hsl(120, 100%, 40%);">+# op/opc: 128-bit Operator Variant Algorithm Configuration Field (hex)</span><br><span style="color: hsl(120, 100%, 40%);">+#         - Specify either op or opc (only used in milenage)</span><br><span style="color: hsl(120, 100%, 40%);">+# k:      128-bit subscriber key (hex)</span><br><span style="color: hsl(120, 100%, 40%);">+# imsi:   15 digit International Mobile Subscriber Identity</span><br><span style="color: hsl(120, 100%, 40%);">+# imei:   15 digit International Mobile Station Equipment Identity</span><br><span style="color: hsl(120, 100%, 40%);">+# pin:    PIN in case real SIM card is used</span><br><span style="color: hsl(120, 100%, 40%);">+# reader: Specify card reader by it's name as listed by 'pcsc_scan'. If empty, try all available readers.</span><br><span style="color: hsl(120, 100%, 40%);">+#####################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+[usim]</span><br><span style="color: hsl(120, 100%, 40%);">+mode = soft</span><br><span style="color: hsl(120, 100%, 40%);">+algo = xor</span><br><span style="color: hsl(120, 100%, 40%);">+#opc  = 63BFA50EE6523365FF14C1F45F88737D</span><br><span style="color: hsl(120, 100%, 40%);">+k    = 00112233445566778899aabbccddeeff</span><br><span style="color: hsl(120, 100%, 40%);">+imsi = 001010123456789</span><br><span style="color: hsl(120, 100%, 40%);">+imei = 353490069873319</span><br><span style="color: hsl(120, 100%, 40%);">+#reader = </span><br><span style="color: hsl(120, 100%, 40%);">+#pin  = 1234</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#####################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+# RRC configuration</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# ue_category:       Sets UE category (range 1-5). Default: 4</span><br><span style="color: hsl(120, 100%, 40%);">+# release:           UE Release (8 to 10)</span><br><span style="color: hsl(120, 100%, 40%);">+# feature_group:     Hex value of the featureGroupIndicators field in the</span><br><span style="color: hsl(120, 100%, 40%);">+#                    UECapabilityInformation message. Default 0xe6041000</span><br><span style="color: hsl(120, 100%, 40%);">+# mbms_service_id:   MBMS service id for autostarting MBMS reception</span><br><span style="color: hsl(120, 100%, 40%);">+#                    (default -1 means disabled)</span><br><span style="color: hsl(120, 100%, 40%);">+# mbms_service_port: Port of the MBMS service</span><br><span style="color: hsl(120, 100%, 40%);">+#####################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+[rrc]</span><br><span style="color: hsl(120, 100%, 40%);">+#ue_category       = 4</span><br><span style="color: hsl(120, 100%, 40%);">+#release           = 8</span><br><span style="color: hsl(120, 100%, 40%);">+#feature_group     = 0xe6041000</span><br><span style="color: hsl(120, 100%, 40%);">+#mbms_service_id   = -1</span><br><span style="color: hsl(120, 100%, 40%);">+#mbms_service_port = 4321</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#####################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+# NAS configuration</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# apn:               Set Access Point Name (APN)</span><br><span style="color: hsl(120, 100%, 40%);">+# apn_protocol:      Set APN protocol (IPv4, IPv6 or IPv4v6.)</span><br><span style="color: hsl(120, 100%, 40%);">+# user:              Username for CHAP authentication</span><br><span style="color: hsl(120, 100%, 40%);">+# pass:              Password for CHAP authentication</span><br><span style="color: hsl(120, 100%, 40%);">+# force_imsi_attach: Whether to always perform an IMSI attach</span><br><span style="color: hsl(120, 100%, 40%);">+# eia:               List of integrity algorithms included in UE capabilities</span><br><span style="color: hsl(120, 100%, 40%);">+#                      Supported: 1 - Snow3G, 2 - AES</span><br><span style="color: hsl(120, 100%, 40%);">+# eea:               List of ciphering algorithms included in UE capabilities</span><br><span style="color: hsl(120, 100%, 40%);">+#                      Supported: 0 - NULL, 1 - Snow3G, 2 - AES</span><br><span style="color: hsl(120, 100%, 40%);">+#####################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+[nas]</span><br><span style="color: hsl(120, 100%, 40%);">+#apn = internetinternet</span><br><span style="color: hsl(120, 100%, 40%);">+#apn_protocol = ipv4</span><br><span style="color: hsl(120, 100%, 40%);">+#user = srsuser</span><br><span style="color: hsl(120, 100%, 40%);">+#pass = srspass</span><br><span style="color: hsl(120, 100%, 40%);">+#force_imsi_attach = false</span><br><span style="color: hsl(120, 100%, 40%);">+#eia = 1,2</span><br><span style="color: hsl(120, 100%, 40%);">+#eea = 0,1,2</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#####################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+# GW configuration</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# netns:                Network namespace to create TUN device. Default: empty</span><br><span style="color: hsl(120, 100%, 40%);">+# ip_devname:           Name of the tun_srsue device. Default: tun_srsue</span><br><span style="color: hsl(120, 100%, 40%);">+# ip_netmask:           Netmask of the tun_srsue device. Default: 255.255.255.0</span><br><span style="color: hsl(120, 100%, 40%);">+#####################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+[gw]</span><br><span style="color: hsl(120, 100%, 40%);">+#netns =</span><br><span style="color: hsl(120, 100%, 40%);">+#ip_devname = tun_srsue</span><br><span style="color: hsl(120, 100%, 40%);">+#ip_netmask = 255.255.255.0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#####################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+# GUI configuration</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# Simple GUI displaying PDSCH constellation and channel freq response.</span><br><span style="color: hsl(120, 100%, 40%);">+# (Requires building with srsGUI)</span><br><span style="color: hsl(120, 100%, 40%);">+# enable:               Enable the graphical interface (true/false)</span><br><span style="color: hsl(120, 100%, 40%);">+#####################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+[gui]</span><br><span style="color: hsl(120, 100%, 40%);">+enable = false</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#####################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+# Channel emulator options:</span><br><span style="color: hsl(120, 100%, 40%);">+# enable:            Enable/Disable internal Downlink/Uplink channel emulator</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# -- Fading emulator</span><br><span style="color: hsl(120, 100%, 40%);">+# fading.enable:     Enable/disable fading simulator</span><br><span style="color: hsl(120, 100%, 40%);">+# fading.model:      Fading model + maximum doppler (E.g. none, epa5, eva70, etu300, etc)</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# -- Delay Emulator     delay(t) = delay_min + (delay_max - delay_min) * (1 + sin(2pi*t/period)) / 2</span><br><span style="color: hsl(120, 100%, 40%);">+#                       Maximum speed [m/s]: (delay_max - delay_min) * pi * 300 / period</span><br><span style="color: hsl(120, 100%, 40%);">+# delay.enable:      Enable/disable delay simulator</span><br><span style="color: hsl(120, 100%, 40%);">+# delay.period_s:    Delay period in seconds.</span><br><span style="color: hsl(120, 100%, 40%);">+# delay.init_time_s: Delay initial time in seconds.</span><br><span style="color: hsl(120, 100%, 40%);">+# delay.maximum_us:  Maximum delay in microseconds</span><br><span style="color: hsl(120, 100%, 40%);">+# delay.minumum_us:  Minimum delay in microseconds</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# -- Radio-Link Failure (RLF) Emulator</span><br><span style="color: hsl(120, 100%, 40%);">+# rlf.enable:        Enable/disable RLF simulator</span><br><span style="color: hsl(120, 100%, 40%);">+# rlf.t_on_ms:       Time for On state of the channel (ms)</span><br><span style="color: hsl(120, 100%, 40%);">+# rlf.t_off_ms:      Time for Off state of the channel (ms)</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# -- High Speed Train Doppler model simulator</span><br><span style="color: hsl(120, 100%, 40%);">+# hst.enable:        Enable/Disable HST simulator</span><br><span style="color: hsl(120, 100%, 40%);">+# hst.period_s:      HST simulation period in seconds</span><br><span style="color: hsl(120, 100%, 40%);">+# hst.fd_hz:         Doppler frequency in Hz</span><br><span style="color: hsl(120, 100%, 40%);">+# hst.init_time_s:   Initial time in seconds</span><br><span style="color: hsl(120, 100%, 40%);">+#####################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+[channel.dl]</span><br><span style="color: hsl(120, 100%, 40%);">+#enable        = false</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[channel.dl.fading]</span><br><span style="color: hsl(120, 100%, 40%);">+#enable        = false</span><br><span style="color: hsl(120, 100%, 40%);">+#model         = none</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[channel.dl.delay]</span><br><span style="color: hsl(120, 100%, 40%);">+#enable        = false</span><br><span style="color: hsl(120, 100%, 40%);">+#period_s      = 3600</span><br><span style="color: hsl(120, 100%, 40%);">+#init_time_s   = 0</span><br><span style="color: hsl(120, 100%, 40%);">+#maximum_us    = 100</span><br><span style="color: hsl(120, 100%, 40%);">+#minimum_us    = 10</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[channel.dl.rlf]</span><br><span style="color: hsl(120, 100%, 40%);">+#enable        = false</span><br><span style="color: hsl(120, 100%, 40%);">+#t_on_ms       = 10000</span><br><span style="color: hsl(120, 100%, 40%);">+#t_off_ms      = 2000</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[channel.dl.hst]</span><br><span style="color: hsl(120, 100%, 40%);">+#enable        = false</span><br><span style="color: hsl(120, 100%, 40%);">+#period_s      = 7.2</span><br><span style="color: hsl(120, 100%, 40%);">+#fd_hz         = 750.0</span><br><span style="color: hsl(120, 100%, 40%);">+#init_time_s   = 0.0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[channel.ul]</span><br><span style="color: hsl(120, 100%, 40%);">+#enable        = false</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[channel.ul.fading]</span><br><span style="color: hsl(120, 100%, 40%);">+#enable        = false</span><br><span style="color: hsl(120, 100%, 40%);">+#model         = none</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[channel.ul.delay]</span><br><span style="color: hsl(120, 100%, 40%);">+#enable        = false</span><br><span style="color: hsl(120, 100%, 40%);">+#period_s      = 3600</span><br><span style="color: hsl(120, 100%, 40%);">+#init_time_s   = 0</span><br><span style="color: hsl(120, 100%, 40%);">+#maximum_us    = 100</span><br><span style="color: hsl(120, 100%, 40%);">+#minimum_us    = 10</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[channel.ul.rlf]</span><br><span style="color: hsl(120, 100%, 40%);">+#enable        = false</span><br><span style="color: hsl(120, 100%, 40%);">+#t_on_ms       = 10000</span><br><span style="color: hsl(120, 100%, 40%);">+#t_off_ms      = 2000</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[channel.ul.hst]</span><br><span style="color: hsl(120, 100%, 40%);">+#enable        = false</span><br><span style="color: hsl(120, 100%, 40%);">+#period_s      = 7.2</span><br><span style="color: hsl(120, 100%, 40%);">+#fd_hz         = -750.0</span><br><span style="color: hsl(120, 100%, 40%);">+#init_time_s   = 0.0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#####################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+# PHY configuration options</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# rx_gain_offset:       RX Gain offset to add to rx_gain to calibrate RSRP readings</span><br><span style="color: hsl(120, 100%, 40%);">+# prach_gain:           PRACH gain (dB). If defined, forces a gain for the tranmsission of PRACH only.,</span><br><span style="color: hsl(120, 100%, 40%);">+#                       Default is to use tx_gain in [rf] section. </span><br><span style="color: hsl(120, 100%, 40%);">+# cqi_max:              Upper bound on the maximum CQI to be reported. Default 15. </span><br><span style="color: hsl(120, 100%, 40%);">+# cqi_fixed:            Fixes the reported CQI to a constant value. Default disabled.</span><br><span style="color: hsl(120, 100%, 40%);">+# snr_ema_coeff:        Sets the SNR exponential moving average coefficient (Default 0.1)</span><br><span style="color: hsl(120, 100%, 40%);">+# snr_estim_alg:        Sets the noise estimation algorithm. (Default refs)</span><br><span style="color: hsl(120, 100%, 40%);">+#                          Options: pss:   use difference between received and known pss signal, </span><br><span style="color: hsl(120, 100%, 40%);">+#                                   refs:  use difference between noise references and noiseless (after filtering)</span><br><span style="color: hsl(120, 100%, 40%);">+#                                   empty: use empty subcarriers in the boarder of pss/sss signal</span><br><span style="color: hsl(120, 100%, 40%);">+# pdsch_max_its:        Maximum number of turbo decoder iterations (Default 4)</span><br><span style="color: hsl(120, 100%, 40%);">+# nof_phy_threads:      Selects the number of PHY threads (maximum 4, minimum 1, default 2)</span><br><span style="color: hsl(120, 100%, 40%);">+# equalizer_mode:       Selects equalizer mode. Valid modes are: "mmse", "zf" or any </span><br><span style="color: hsl(120, 100%, 40%);">+#                       non-negative real number to indicate a regularized zf coefficient.</span><br><span style="color: hsl(120, 100%, 40%);">+#                       Default is MMSE.</span><br><span style="color: hsl(120, 100%, 40%);">+# sfo_ema:              EMA coefficient to average sample offsets used to compute SFO</span><br><span style="color: hsl(120, 100%, 40%);">+# sfo_correct_period:   Period in ms to correct sample time to adjust for SFO</span><br><span style="color: hsl(120, 100%, 40%);">+# sss_algorithm:        Selects the SSS estimation algorithm. Can choose between</span><br><span style="color: hsl(120, 100%, 40%);">+#                       {full, partial, diff}. </span><br><span style="color: hsl(120, 100%, 40%);">+# estimator_fil_auto:   The channel estimator smooths the channel estimate with an adaptative filter.</span><br><span style="color: hsl(120, 100%, 40%);">+# estimator_fil_stddev: Sets the channel estimator smooth gaussian filter standard deviation.</span><br><span style="color: hsl(120, 100%, 40%);">+# estimator_fil_order:  Sets the channel estimator smooth gaussian filter order (even values perform better).</span><br><span style="color: hsl(120, 100%, 40%);">+#                       The taps are [w, 1-2w, w]</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# snr_to_cqi_offset:    Sets an offset in the SNR to CQI table. This is used to adjust the reported CQI.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# pregenerate_signals:  Pregenerate uplink signals after attach. Improves CPU performance.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# interpolate_subframe_enabled: Interpolates in the time domain the channel estimates within 1 subframe. Default is to average.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# sic_pss_enabled:      Applies Successive Interference Cancellation to PSS signals when searching for neighbour cells.</span><br><span style="color: hsl(120, 100%, 40%);">+#                       Must be disabled if cells have identical channel and timing, for instance if generated from</span><br><span style="color: hsl(120, 100%, 40%);">+#                       the same source.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# pdsch_csi_enabled:     Stores the Channel State Information and uses it for weightening the softbits. It is only</span><br><span style="color: hsl(120, 100%, 40%);">+#                        used in TM1. It is True by default.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# pdsch_8bit_decoder:    Use 8-bit for LLR representation and turbo decoder trellis computation (Experimental)</span><br><span style="color: hsl(120, 100%, 40%);">+# force_ul_amplitude:    Forces the peak amplitude in the PUCCH, PUSCH and SRS (set 0.0 to 1.0, set to 0 or negative for disabling)</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+#####################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+[phy]</span><br><span style="color: hsl(120, 100%, 40%);">+#rx_gain_offset      = 62</span><br><span style="color: hsl(120, 100%, 40%);">+#prach_gain          = 30</span><br><span style="color: hsl(120, 100%, 40%);">+#cqi_max             = 15</span><br><span style="color: hsl(120, 100%, 40%);">+#cqi_fixed           = 10</span><br><span style="color: hsl(120, 100%, 40%);">+#snr_ema_coeff       = 0.1</span><br><span style="color: hsl(120, 100%, 40%);">+#snr_estim_alg       = refs</span><br><span style="color: hsl(120, 100%, 40%);">+#pdsch_max_its       = 8    # These are half iterations</span><br><span style="color: hsl(120, 100%, 40%);">+#nof_phy_threads     = 3</span><br><span style="color: hsl(120, 100%, 40%);">+#equalizer_mode      = mmse</span><br><span style="color: hsl(120, 100%, 40%);">+#sfo_ema             = 0.1</span><br><span style="color: hsl(120, 100%, 40%);">+#sfo_correct_period  = 10</span><br><span style="color: hsl(120, 100%, 40%);">+#sss_algorithm       = full</span><br><span style="color: hsl(120, 100%, 40%);">+#estimator_fil_auto  = false</span><br><span style="color: hsl(120, 100%, 40%);">+#estimator_fil_stddev  = 1.0</span><br><span style="color: hsl(120, 100%, 40%);">+#estimator_fil_order  = 4</span><br><span style="color: hsl(120, 100%, 40%);">+#snr_to_cqi_offset   = 0.0</span><br><span style="color: hsl(120, 100%, 40%);">+#interpolate_subframe_enabled = false</span><br><span style="color: hsl(120, 100%, 40%);">+#sic_pss_enabled     = true</span><br><span style="color: hsl(120, 100%, 40%);">+#pregenerate_signals = false</span><br><span style="color: hsl(120, 100%, 40%);">+#pdsch_csi_enabled  = true</span><br><span style="color: hsl(120, 100%, 40%);">+#pdsch_8bit_decoder = false</span><br><span style="color: hsl(120, 100%, 40%);">+#force_ul_amplitude = 0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#####################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+# General configuration options</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# metrics_csv_enable:   Write UE metrics to CSV file.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# metrics_period_secs:  Sets the period at which metrics are requested from the UE.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# metrics_csv_filename: File path to use for CSV metrics.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+#####################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+[general]</span><br><span style="color: hsl(120, 100%, 40%);">+#metrics_csv_enable  = false</span><br><span style="color: hsl(120, 100%, 40%);">+#metrics_period_secs = 1</span><br><span style="color: hsl(120, 100%, 40%);">+#metrics_csv_filename = /tmp/ue_metrics.csv</span><br><span>diff --git a/src/osmo_gsm_tester/test.py b/src/osmo_gsm_tester/test.py</span><br><span>deleted file mode 100644</span><br><span>index 4d4353a..0000000</span><br><span>--- a/src/osmo_gsm_tester/test.py</span><br><span>+++ /dev/null</span><br><span>@@ -1,122 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-# osmo_gsm_tester: test class</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# Copyright (C) 2017 by sysmocom - s.f.m.c. GmbH</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# Author: Pau Espin Pedrol <pespin@sysmocom.de></span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# This program is free software: you can redistribute it and/or modify</span><br><span style="color: hsl(0, 100%, 40%);">-# it under the terms of the GNU General Public License as</span><br><span style="color: hsl(0, 100%, 40%);">-# published by the Free Software Foundation, either version 3 of the</span><br><span style="color: hsl(0, 100%, 40%);">-# License, or (at your option) any later version.</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(0, 100%, 40%);">-# but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(0, 100%, 40%);">-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(0, 100%, 40%);">-# GNU General Public License for more details.</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# You should have received a copy of the GNU General Public License</span><br><span style="color: hsl(0, 100%, 40%);">-# along with this program.  If not, see <http://www.gnu.org/licenses/>.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-import os</span><br><span style="color: hsl(0, 100%, 40%);">-import sys</span><br><span style="color: hsl(0, 100%, 40%);">-import time</span><br><span style="color: hsl(0, 100%, 40%);">-import traceback</span><br><span style="color: hsl(0, 100%, 40%);">-from . import testenv</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-from . import log, util, resource</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-class Test(log.Origin):</span><br><span style="color: hsl(0, 100%, 40%);">-    UNKNOWN = 'UNKNOWN'</span><br><span style="color: hsl(0, 100%, 40%);">-    SKIP = 'skip'</span><br><span style="color: hsl(0, 100%, 40%);">-    PASS = 'pass'</span><br><span style="color: hsl(0, 100%, 40%);">-    FAIL = 'FAIL'</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    def __init__(self, suite_run, test_basename):</span><br><span style="color: hsl(0, 100%, 40%);">-        self.basename = test_basename</span><br><span style="color: hsl(0, 100%, 40%);">-        super().__init__(log.C_TST, self.basename)</span><br><span style="color: hsl(0, 100%, 40%);">-        self._run_dir = None</span><br><span style="color: hsl(0, 100%, 40%);">-        self.suite_run = suite_run</span><br><span style="color: hsl(0, 100%, 40%);">-        self.path = os.path.join(self.suite_run.definition.suite_dir, self.basename)</span><br><span style="color: hsl(0, 100%, 40%);">-        self.status = Test.UNKNOWN</span><br><span style="color: hsl(0, 100%, 40%);">-        self.start_timestamp = 0</span><br><span style="color: hsl(0, 100%, 40%);">-        self.duration = 0</span><br><span style="color: hsl(0, 100%, 40%);">-        self.fail_type = None</span><br><span style="color: hsl(0, 100%, 40%);">-        self.fail_message = None</span><br><span style="color: hsl(0, 100%, 40%);">-        self.log_target = None</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    def get_run_dir(self):</span><br><span style="color: hsl(0, 100%, 40%);">-        if self._run_dir is None:</span><br><span style="color: hsl(0, 100%, 40%);">-            self._run_dir = util.Dir(self.suite_run.get_run_dir().new_dir(self._name))</span><br><span style="color: hsl(0, 100%, 40%);">-        return self._run_dir</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    def run(self):</span><br><span style="color: hsl(0, 100%, 40%);">-        try:</span><br><span style="color: hsl(0, 100%, 40%);">-            self.log_target = log.FileLogTarget(self.get_run_dir().new_child('log')).set_all_levels(log.L_DBG).style_change(trace=True)</span><br><span style="color: hsl(0, 100%, 40%);">-            log.large_separator(self.suite_run.trial.name(), self.suite_run.name(), self.name(), sublevel=3)</span><br><span style="color: hsl(0, 100%, 40%);">-            self.status = Test.UNKNOWN</span><br><span style="color: hsl(0, 100%, 40%);">-            self.start_timestamp = time.time()</span><br><span style="color: hsl(0, 100%, 40%);">-            from . import suite, sms, process</span><br><span style="color: hsl(0, 100%, 40%);">-            from .event_loop import MainLoop</span><br><span style="color: hsl(0, 100%, 40%);">-            testenv.setup(self.suite_run, self, suite, MainLoop, sms, process)</span><br><span style="color: hsl(0, 100%, 40%);">-            with self.redirect_stdout():</span><br><span style="color: hsl(0, 100%, 40%);">-                util.run_python_file('%s.%s' % (self.suite_run.definition.name(), self.basename),</span><br><span style="color: hsl(0, 100%, 40%);">-                                     self.path)</span><br><span style="color: hsl(0, 100%, 40%);">-            if self.status == Test.UNKNOWN:</span><br><span style="color: hsl(0, 100%, 40%);">-                 self.set_pass()</span><br><span style="color: hsl(0, 100%, 40%);">-        except Exception as e:</span><br><span style="color: hsl(0, 100%, 40%);">-            if hasattr(e, 'msg'):</span><br><span style="color: hsl(0, 100%, 40%);">-                msg = e.msg</span><br><span style="color: hsl(0, 100%, 40%);">-            else:</span><br><span style="color: hsl(0, 100%, 40%);">-                msg = str(e)</span><br><span style="color: hsl(0, 100%, 40%);">-            if isinstance(e, AssertionError):</span><br><span style="color: hsl(0, 100%, 40%);">-                # AssertionError lacks further information on what was</span><br><span style="color: hsl(0, 100%, 40%);">-                # asserted. Find the line where the code asserted:</span><br><span style="color: hsl(0, 100%, 40%);">-                msg += log.get_src_from_exc_info(sys.exc_info())</span><br><span style="color: hsl(0, 100%, 40%);">-            # add source file information to failure report</span><br><span style="color: hsl(0, 100%, 40%);">-            if hasattr(e, 'origins'):</span><br><span style="color: hsl(0, 100%, 40%);">-                msg += ' [%s]' % e.origins</span><br><span style="color: hsl(0, 100%, 40%);">-            tb_str = traceback.format_exc()</span><br><span style="color: hsl(0, 100%, 40%);">-            if isinstance(e, resource.NoResourceExn):</span><br><span style="color: hsl(0, 100%, 40%);">-                tb_str += self.suite_run.resource_status_str()</span><br><span style="color: hsl(0, 100%, 40%);">-            self.set_fail(type(e).__name__, msg, tb_str, log.get_src_from_exc_info())</span><br><span style="color: hsl(0, 100%, 40%);">-        except BaseException as e:</span><br><span style="color: hsl(0, 100%, 40%);">-            # when the program is aborted by a signal (like Ctrl-C), escalate to abort all.</span><br><span style="color: hsl(0, 100%, 40%);">-            self.err('TEST RUN ABORTED: %s' % type(e).__name__)</span><br><span style="color: hsl(0, 100%, 40%);">-            raise</span><br><span style="color: hsl(0, 100%, 40%);">-        finally:</span><br><span style="color: hsl(0, 100%, 40%);">-            if self.log_target:</span><br><span style="color: hsl(0, 100%, 40%);">-                self.log_target.remove()</span><br><span style="color: hsl(0, 100%, 40%);">-                self.log_target = None</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    def name(self):</span><br><span style="color: hsl(0, 100%, 40%);">-        l = log.get_line_for_src(self.path)</span><br><span style="color: hsl(0, 100%, 40%);">-        if l is not None:</span><br><span style="color: hsl(0, 100%, 40%);">-            return '%s:%s' % (self._name, l)</span><br><span style="color: hsl(0, 100%, 40%);">-        return super().name()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    def set_fail(self, fail_type, fail_message, tb_str=None, src=4):</span><br><span style="color: hsl(0, 100%, 40%);">-        self.status = Test.FAIL</span><br><span style="color: hsl(0, 100%, 40%);">-        self.duration = time.time() - self.start_timestamp</span><br><span style="color: hsl(0, 100%, 40%);">-        self.fail_type = fail_type</span><br><span style="color: hsl(0, 100%, 40%);">-        self.fail_message = fail_message</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        if tb_str is None:</span><br><span style="color: hsl(0, 100%, 40%);">-            # populate an exception-less call to set_fail() with traceback info</span><br><span style="color: hsl(0, 100%, 40%);">-            tb_str = ''.join(traceback.format_stack()[:-1])</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        self.fail_tb = tb_str</span><br><span style="color: hsl(0, 100%, 40%);">-        self.err('%s: %s' % (self.fail_type, self.fail_message), _src=src)</span><br><span style="color: hsl(0, 100%, 40%);">-        if self.fail_tb:</span><br><span style="color: hsl(0, 100%, 40%);">-            self.log(self.fail_tb, _level=log.L_TRACEBACK)</span><br><span style="color: hsl(0, 100%, 40%);">-        self.log('Test FAILED (%.1f sec)' % self.duration)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    def set_pass(self):</span><br><span style="color: hsl(0, 100%, 40%);">-        self.status = Test.PASS</span><br><span style="color: hsl(0, 100%, 40%);">-        self.duration = time.time() - self.start_timestamp</span><br><span style="color: hsl(0, 100%, 40%);">-        self.log('Test passed (%.1f sec)' % self.duration)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    def set_skip(self):</span><br><span style="color: hsl(0, 100%, 40%);">-        self.status = Test.SKIP</span><br><span style="color: hsl(0, 100%, 40%);">-        self.duration = 0</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-# vim: expandtab tabstop=4 shiftwidth=4</span><br><span>diff --git a/suites/4g/mo_mt_sms.py b/suites/4g/mo_mt_sms.py</span><br><span>new file mode 100755</span><br><span>index 0000000..8aa4357</span><br><span>--- /dev/null</span><br><span>+++ b/suites/4g/mo_mt_sms.py</span><br><span>@@ -0,0 +1,22 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#!/usr/bin/env python3</span><br><span style="color: hsl(120, 100%, 40%);">+from osmo_gsm_tester.testenv import *</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#epc = suite.epc()</span><br><span style="color: hsl(120, 100%, 40%);">+#enb = suite.enb()</span><br><span style="color: hsl(120, 100%, 40%);">+ue = suite.modem()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#enb.start()</span><br><span style="color: hsl(120, 100%, 40%);">+#epc.enb_add(enb)</span><br><span style="color: hsl(120, 100%, 40%);">+#epc.start()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#wait(epc.enb_is_connected, enb)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#hss/epc.subscriber_add(ue)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#ue.connect(epc.mcc_mnc())</span><br><span style="color: hsl(120, 100%, 40%);">+ue.connect()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+print('waiting for modem to attach...')</span><br><span style="color: hsl(120, 100%, 40%);">+#wait(ue.is_connected, msc.mcc_mnc())</span><br><span style="color: hsl(120, 100%, 40%);">+sleep(10)</span><br><span>diff --git a/suites/4g/suite.conf b/suites/4g/suite.conf</span><br><span>new file mode 100644</span><br><span>index 0000000..c55b610</span><br><span>--- /dev/null</span><br><span>+++ b/suites/4g/suite.conf</span><br><span>@@ -0,0 +1,6 @@</span><br><span style="color: hsl(120, 100%, 40%);">+resources:</span><br><span style="color: hsl(120, 100%, 40%);">+  ip_address:</span><br><span style="color: hsl(120, 100%, 40%);">+  - times: 1</span><br><span style="color: hsl(120, 100%, 40%);">+  modem:</span><br><span style="color: hsl(120, 100%, 40%);">+  - times: 1</span><br><span style="color: hsl(120, 100%, 40%);">+    type: srsue</span><br><span>diff --git a/update_version.sh b/update_version.sh</span><br><span>deleted file mode 100755</span><br><span>index 3d5fe42..0000000</span><br><span>--- a/update_version.sh</span><br><span>+++ /dev/null</span><br><span>@@ -1,10 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-#!/bin/sh</span><br><span style="color: hsl(0, 100%, 40%);">-set -e</span><br><span style="color: hsl(0, 100%, 40%);">-git describe --abbrev=8 --dirty | sed 's/v\([^-]*\)-\([^-]*\)-\(.*\)/\1.dev\2.\3/' > version</span><br><span style="color: hsl(0, 100%, 40%);">-cat version</span><br><span style="color: hsl(0, 100%, 40%);">-echo "# osmo-gsm-tester version.</span><br><span style="color: hsl(0, 100%, 40%);">-# Automatically generated by update_version.sh.</span><br><span style="color: hsl(0, 100%, 40%);">-# Gets imported by __init__.py.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-_version = '$(cat version)'" \</span><br><span style="color: hsl(0, 100%, 40%);">-  > src/osmo_gsm_tester/_version.py</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/17067">change 17067</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/17067"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-gsm-tester </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Id9d63920a44a80af187e649c9be5fd7498fa5f44 </div>
<div style="display:none"> Gerrit-Change-Number: 17067 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>