From 9eb8c9f0d7b37d70b87ec6a1a5950d69a98f1bc1 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Mon, 16 Aug 2021 17:05:51 +0000 Subject: [PATCH] add VTY transcript testing This is not as trivial as with OsmoBSC or OsmoMSC, because normally the osmo-bts process exits right away when there is no BSC. Hence add --vty-test option to main. Use 'osmo-bts-virtual --vty-test' for testing. The other BTS models require dependencies / configure switches to be built. Essentially copied from osmo-bsc.git: configure.ac: add --enable-external-tests tests/Makefile.am: add 'vty-test' target Add osmo-bts.vty, some trivial VTY node testing. This prepares for adding VTY tests for T timer configuration added in a subsequent patch. Related: SYS#5559 Change-Id: I730daf548a3a9bb116aa8b6d5772ca9af0ada08f --- configure.ac | 18 ++++ src/common/main.c | 19 ++++ tests/Makefile.am | 28 +++++- tests/osmo-bts.vty | 239 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 303 insertions(+), 1 deletion(-) create mode 100644 tests/osmo-bts.vty diff --git a/configure.ac b/configure.ac index 2b5a31690..1b4c6e782 100644 --- a/configure.ac +++ b/configure.ac @@ -349,6 +349,24 @@ then AC_SUBST([OSMO_GSM_MANUALS_DIR]) fi +AC_ARG_ENABLE([external_tests], + AC_HELP_STRING([--enable-external-tests], + [Include the VTY/CTRL tests in make check [default=no]]), + [enable_ext_tests="$enableval"],[enable_ext_tests="no"]) +if test "x$enable_ext_tests" = "xyes" ; then + AC_CHECK_PROG(PYTHON3_AVAIL,python3,yes) + if test "x$PYTHON3_AVAIL" != "xyes" ; then + AC_MSG_ERROR([Please install python3 to run the VTY/CTRL tests.]) + fi + AC_CHECK_PROG(OSMOTESTEXT_CHECK,osmotestvty.py,yes) + if test "x$OSMOTESTEXT_CHECK" != "xyes" ; then + AC_MSG_ERROR([Please install git://osmocom.org/python/osmo-python-tests to run the VTY/CTRL tests.]) + fi +fi +AC_MSG_CHECKING([whether to enable VTY/CTRL tests]) +AC_MSG_RESULT([$enable_ext_tests]) +AM_CONDITIONAL(ENABLE_EXT_TESTS, test "x$enable_ext_tests" = "xyes") + # https://www.freedesktop.org/software/systemd/man/daemon.html AC_ARG_WITH([systemdsystemunitdir], [AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files])],, diff --git a/src/common/main.c b/src/common/main.c index bc5cf3bd5..b5ba21b8f 100644 --- a/src/common/main.c +++ b/src/common/main.c @@ -65,6 +65,7 @@ static int daemonize = 0; static int rt_prio = -1; static char *gsmtap_ip = 0; extern int g_vty_port_num; +static bool vty_test_mode = false; static void print_help() { @@ -80,6 +81,8 @@ static void print_help() "\nVTY reference generation:\n" " --vty-ref-mode MODE VTY reference generation mode (e.g. 'expert').\n" " --vty-ref-xml Generate the VTY reference XML output and exit.\n" + "\nRegression testing:\n" + " --vty-test VTY test mode. Do not connect to BSC, do not exit.\n" ); bts_model_print_help(); } @@ -103,6 +106,9 @@ static void handle_long_options(const char *prog_name, const int long_option) get_value_string(vty_ref_gen_mode_desc, vty_ref_mode)); vty_dump_xml_ref_mode(stdout, (enum vty_ref_gen_mode) vty_ref_mode); exit(0); + case 3: + vty_test_mode = true; + break; default: fprintf(stderr, "%s: error parsing cmdline options\n", prog_name); exit(2); @@ -140,6 +146,7 @@ static void handle_options(int argc, char **argv) { "realtime", 1, 0, 'r' }, { "vty-ref-mode", 1, &long_option, 1 }, { "vty-ref-xml", 0, &long_option, 2 }, + { "vty-test", 0, &long_option, 3 }, { 0, 0, 0, 0 } }; @@ -299,6 +306,8 @@ int bts_main(int argc, char **argv) handle_options(argc, argv); fprintf(stderr, "((*))\n |\n / \\ OsmoBTS\n"); + if (vty_test_mode) + fprintf(stderr, "--- VTY test mode: not connecting to BSC, not exiting ---\n"); g_bts = gsm_bts_alloc(tall_bts_ctx, 0); if (!g_bts) { @@ -396,6 +405,16 @@ int bts_main(int argc, char **argv) signal(SIGUSR2, &signal_handler); osmo_init_ignore_signals(); + if (vty_test_mode) { + /* Just select-loop without connecting to the BSC, don't exit. This allows running tests on the VTY + * telnet port. */ + while (!quit) { + log_reset_context(); + osmo_select_main(0); + } + return EXIT_SUCCESS; + } + if (abis_open(g_bts, "osmo-bts") != 0) exit(1); diff --git a/tests/Makefile.am b/tests/Makefile.am index 57687eefb..8d19e6ee0 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -22,12 +22,38 @@ $(srcdir)/package.m4: $(top_srcdir)/configure.ac echo ' [$(PACKAGE_URL)])'; \ } >'$(srcdir)/package.m4' -EXTRA_DIST = testsuite.at $(srcdir)/package.m4 $(TESTSUITE) +EXTRA_DIST = \ + testsuite.at \ + $(srcdir)/package.m4 \ + $(TESTSUITE) \ + osmo-bts.vty \ + $(NULL) TESTSUITE = $(srcdir)/testsuite DISTCLEANFILES = atconfig +if ENABLE_EXT_TESTS +python-tests: $(BUILT_SOURCES) + $(MAKE) vty-test +else +python-tests: $(BUILT_SOURCES) + echo "Not running python-based tests (determined at configure-time)" +endif + +# Run a specific test with: 'make vty-test VTY_TEST=foo.vty' +VTY_TEST ?= *.vty + +# To update the VTY script from current application behavior, +# pass -u to vty_script_runner.py by doing: +# make vty-test U=-u +vty-test: + osmo_verify_transcript_vty.py -v \ + -n OsmoBTS -p 4241 \ + -r "$(top_builddir)/src/osmo-bts-virtual/osmo-bts-virtual --vty-test -c $(top_srcdir)/doc/examples/virtual/osmo-bts-virtual.cfg" \ + $(U) $(srcdir)/$(VTY_TEST) + check-local: atconfig $(TESTSUITE) $(SHELL) '$(TESTSUITE)' $(TESTSUITEFLAGS) + $(MAKE) $(AM_MAKEFLAGS) python-tests installcheck-local: atconfig $(TESTSUITE) $(SHELL) '$(TESTSUITE)' AUTOTEST_PATH='$(bindir)' \ diff --git a/tests/osmo-bts.vty b/tests/osmo-bts.vty new file mode 100644 index 000000000..4983967ea --- /dev/null +++ b/tests/osmo-bts.vty @@ -0,0 +1,239 @@ +OsmoBTS> list +... + show bts [<0-255>] + show trx [<0-255>] [<0-255>] + show timeslot [<0-255>] [<0-255>] [<0-7>] + show lchan [<0-255>] [<0-255>] [<0-7>] [<0-7>] + show lchan summary [<0-255>] [<0-255>] [<0-7>] [<0-7>] + show bts <0-255> gprs +... + show e1_driver + show e1_line [<0-255>] [stats] + show e1_timeslot [<0-255>] [<0-31>] +... +OsmoBTS> ? +... + show Show running system information +... + +OsmoBTS> show ? +... + bts Display information about a BTS + trx Display information about a TRX + timeslot Display information about a TS + lchan Display information about a logical channel + e1_driver Display information about available E1 drivers + e1_line Display information about a E1 line + e1_timeslot Display information about a E1 timeslot +... +OsmoBTS> show bts ? + [<0-255>] BTS Number + <0-255> BTS Number +OsmoBTS> show bts 0 ? + gprs GPRS/EGPRS configuration + +OsmoBTS> show trx ? + [<0-255>] BTS Number +OsmoBTS> show trx 0 ? + [<0-255>] TRX Number +OsmoBTS> show timeslot ? + [<0-255>] BTS Number +OsmoBTS> show timeslot 0 ? + [<0-255>] TRX Number +OsmoBTS> show timeslot 0 0 ? + [<0-7>] Timeslot Number +OsmoBTS> show lchan ? + [<0-255>] BTS Number + summary Short summary +OsmoBTS> show lchan 0 ? + [<0-255>] TRX Number +OsmoBTS> show lchan 0 0 ? + [<0-7>] Timeslot Number +OsmoBTS> show lchan 0 0 0 ? + [<0-7>] Logical Channel Number +OsmoBTS> show lchan summary ? + [<0-255>] BTS Number +OsmoBTS> show lchan summary 0 ? + [<0-255>] TRX Number +OsmoBTS> show lchan summary 0 0 ? + [<0-7>] Timeslot Number +OsmoBTS> show lchan summary 0 0 0 ? + [<0-7>] Logical Channel Number +OsmoBTS> show e1_driver ? + +OsmoBTS> show e1_line ? + [<0-255>] E1 Line Number +OsmoBTS> show e1_line 0 ? + [stats] Include statistics +OsmoBTS> show e1_timeslot ? + [<0-255>] E1 Line Number +OsmoBTS> show e1_timeslot 0 ? + [<0-31>] E1 Timeslot Number + +OsmoBTS> enable +OsmoBTS# list +... + show bts [<0-255>] + show trx [<0-255>] [<0-255>] + show timeslot [<0-255>] [<0-255>] [<0-7>] + show lchan [<0-255>] [<0-255>] [<0-7>] [<0-7>] + show lchan summary [<0-255>] [<0-255>] [<0-7>] [<0-7>] + show bts <0-255> gprs +... + bts <0-0> trx <0-255> ts <0-7> (lchan|shadow-lchan) <0-7> rtp jitter-buffer <0-10000> + test send-failure-event-report <0-255> + bts <0-255> c0-power-red <0-6> + show e1_driver + show e1_line [<0-255>] [stats] + show e1_timeslot [<0-255>] [<0-31>] +... + +OsmoBTS# ? +... + show Show running system information +... + +OsmoBTS# show ? +... + bts Display information about a BTS + trx Display information about a TRX + timeslot Display information about a TS + lchan Display information about a logical channel + e1_driver Display information about available E1 drivers + e1_line Display information about a E1 line + e1_timeslot Display information about a E1 timeslot +... +OsmoBTS# show bts ? + [<0-255>] BTS Number + <0-255> BTS Number +OsmoBTS# show bts 0 ? + gprs GPRS/EGPRS configuration + +OsmoBTS# show trx ? + [<0-255>] BTS Number +OsmoBTS# show trx 0 ? + [<0-255>] TRX Number +OsmoBTS# show timeslot ? + [<0-255>] BTS Number +OsmoBTS# show timeslot 0 ? + [<0-255>] TRX Number +OsmoBTS# show timeslot 0 0 ? + [<0-7>] Timeslot Number +OsmoBTS# show lchan ? + [<0-255>] BTS Number + summary Short summary +OsmoBTS# show lchan 0 ? + [<0-255>] TRX Number +OsmoBTS# show lchan 0 0 ? + [<0-7>] Timeslot Number +OsmoBTS# show lchan 0 0 0 ? + [<0-7>] Logical Channel Number +OsmoBTS# show lchan summary ? + [<0-255>] BTS Number +OsmoBTS# show lchan summary 0 ? + [<0-255>] TRX Number +OsmoBTS# show lchan summary 0 0 ? + [<0-7>] Timeslot Number +OsmoBTS# show lchan summary 0 0 0 ? + [<0-7>] Logical Channel Number +OsmoBTS# show e1_driver ? + +OsmoBTS# show e1_line ? + [<0-255>] E1 Line Number +OsmoBTS# show e1_line 0 ? + [stats] Include statistics +OsmoBTS# show e1_timeslot ? + [<0-255>] E1 Line Number +OsmoBTS# show e1_timeslot 0 ? + [<0-31>] E1 Timeslot Number + +OsmoBTS# configure terminal +OsmoBTS(config)# list +... + bts BTS_NR +... + phy <0-255> + e1_input +... +OsmoBTS(config)# ? +... + bts Select a BTS to configure +... + phy Select a PHY to configure + e1_input Configure E1/T1/J1 TDM input +... +OsmoBTS(config)# bts ? + BTS_NR BTS Number +OsmoBTS(config)# phy ? + <0-255> PHY number + +OsmoBTS(config)# bts 0 +OsmoBTS(bts)# list +... + ipa unit-id <0-65534> <0-255> + oml remote-ip A.B.C.D + no oml remote-ip A.B.C.D + rtp jitter-buffer <0-10000> [adaptive] + rtp port-range <1-65534> <1-65534> + rtp ip-dscp <0-63> + rtp socket-priority <0-255> + band (450|GSM450|480|GSM480|750|GSM750|810|GSM810|850|GSM850|900|GSM900|1800|DCS1800|1900|PCS1900) + description .TEXT + no description + paging queue-size <1-1024> + paging lifetime <0-60> + agch-queue-mgmt default + agch-queue-mgmt threshold <0-100> low <0-100> high <0-100000> + min-qual-rach <-100-100> + min-qual-norm <-100-100> + max-ber10k-rach <0-10000> + pcu-socket PATH + supp-meas-info toa256 + no supp-meas-info toa256 + smscb queue-max-length <1-60> + smscb queue-target-length <1-30> + smscb queue-hysteresis <0-30> + gsmtap-remote-host [HOSTNAME] + no gsmtap-remote-host + gsmtap-sapi (enable-all|disable-all) + gsmtap-sapi (bcch|ccch|rach|agch|pch|sdcch|tch/f|tch/h|pacch|pdtch|ptcch|cbch|sacch) + no gsmtap-sapi (bcch|ccch|rach|agch|pch|sdcch|tch/f|tch/h|pacch|pdtch|ptcch|cbch|sacch) + trx <0-254> +... +OsmoBTS(bts)# ? +... + ipa ip.access RSL commands + oml OML Parameters + no Negate a command or set its defaults + rtp RTP parameters + band Set the frequency band of this BTS + description Save human-readable description of the object + paging Paging related parameters + agch-queue-mgmt AGCH queue mgmt + min-qual-rach Set the minimum link quality level of Access Bursts to be accepted + min-qual-norm Set the minimum link quality level of Normal Bursts to be accepted + max-ber10k-rach Set the maximum BER for valid RACH requests + pcu-socket Configure the PCU socket file/path name + supp-meas-info Configure the RSL Supplementary Measurement Info + smscb SMSCB (SMS Cell Broadcast) / CBCH configuration + gsmtap-remote-host Enable GSMTAP Um logging (see also 'gsmtap-sapi') + gsmtap-sapi Enable/disable sending of UL/DL messages over GSMTAP + trx Select a TRX to configure +... +OsmoBTS(bts)# trx 0 +OsmoBTS(trx)# list +... + user-gain <-100000-100000> (dB|mdB) + power-ramp max-initial <-10000-100000> (dBm|mdBm) + power-ramp step-size <1-100000> (dB|mdB) + power-ramp step-interval <1-100> + ms-power-control (dsp|osmo) + phy <0-255> instance <0-255> +... +OsmoBTS(trx)# ? +... + user-gain Inform BTS about additional, user-provided gain or attenuation at TRX output + power-ramp Power-Ramp settings + ms-power-control Mobile Station Power Level Control + phy Configure PHY Link+Instance for this TRX +...