libosmocore/tests
Neels Hofmeyr 0fd615fd7b add osmo_tdef API, originally adopted from osmo-bsc T_def
Move T_def from osmo-bsc to libosmocore as osmo_tdef. Adjust naming to be more
consistent. Upgrade to first class API:
- add timer grouping
- add generic vty support
- add mising API doc
- add C test
- add VTY transcript tests, also as examples for using the API

From osmo_fsm_inst_state_chg() API doc, cross reference to osmo_tdef API.

The root reason for moving to libosmocore is that I want to use the
mgw_endpoint_fsm in osmo-msc for inter-MSC handover, and hence want to move the
FSM to libosmo-mgcp-client. This FSM uses the T_def from osmo-bsc. Though the
mgw_endpoint_fsm's use of T_def is minimal, I intend to use the osmo_tdef API
in osmo-msc (and probably elsewhere) as well. libosmocore is the most sensible
place for this.

osmo_tdef provides:

- a list of Tnnnn (GSM) timers with description, unit and default value.
- vty UI to allow users to configure non-default timeouts.
- API to tie T timers to osmo_fsm states and set them on state transitions.

- a few standard units (minute, second, millisecond) as well as a custom unit
  (which relies on the timer's human readable description to indicate the
  meaning of the value).
- conversion for standard units: for example, some GSM timers are defined in
  minutes, while our FSM definitions need timeouts in seconds. Conversion is
  for convenience only and can be easily avoided via the custom unit.

By keeping separate osmo_tdef arrays, several groups of timers can be kept
separately. The VTY tests in tests/tdef/ showcase different schemes:

- tests/vty/tdef_vty_test_config_root.c:
  Keep several timer definitions in separately named groups: showcase the
  osmo_tdef_vty_groups*() API. Each timer group exists exactly once.

- tests/vty/tdef_vty_test_config_subnode.c:
  Keep a single list of timers without separate grouping.
  Put this list on a specific subnode below the CONFIG_NODE.
  There could be several separate subnodes with timers like this, i.e.
  continuing from this example, sets timers could be separated by placing
  timers in specific config subnodes instead of using the global group name.

- tests/vty/tdef_vty_test_dynamic.c:
  Dynamically allocate timer definitions per each new created object.
  Thus there can be an arbitrary number of independent timer definitions, one
  per allocated object.

T_def was introduced during the recent osmo-bsc refactoring for inter-BSC
handover, and has proven useful:

- without osmo_tdef, each invocation of osmo_fsm_inst_state_chg() needs to be
  programmed with the right timeout value, for all code paths that invoke this
  state change. It is a likely source of errors to get one of them wrong.  By
  defining a T timer exactly for an FSM state, the caller can merely invoke the
  state change and trust on the original state definition to apply the correct
  timeout.

- it is helpful to have a standardized config file UI to provide user
  configurable timeouts, instead of inventing new VTY commands for each
  separate application of T timer numbers.

Change-Id: Ibd6b1ed7f1bd6e1f2e0fde53352055a4468f23e5
2019-02-04 18:52:16 +01:00
..
a5 tests: a5_test: Print wrong buffer correctly on error 2018-05-16 21:13:58 +02:00
abis use osmo_init_logging2() with proper talloc ctx 2018-04-06 04:37:50 +02:00
auth Use define for key buffers 2018-12-20 09:51:02 +00:00
bits tests: bitrev_test: Fix dynamic-stack-buffer-overflow 2018-05-16 17:10:33 +02:00
bitvec Add function to get uninterrupted bit run 2017-01-06 10:37:42 +00:00
codec tests: codec: ecu_fr: Add buffer with unequal XMAXC values 2018-07-21 07:40:20 +00:00
coding coding: Add BER-reporting RACH decode functions 2018-02-26 12:26:38 +01:00
comp128 tests: test actual support status for auth. algo 2016-06-29 16:33:40 +00:00
conv Add functions for extended RACH coding 2017-12-11 10:36:47 +00:00
ctrl tests: ctrl: Test received ERROR messages are handled correctly 2018-07-16 17:56:25 +00:00
endian add/clean big-endian packed structs (struct_endianess.py) 2018-12-19 18:40:03 +00:00
fr license: Fix the license to GPL 2017-12-09 13:03:29 +00:00
fsm osmo_fsm_inst_state_chg(): set T also for zero timeout 2019-01-29 10:25:26 +00:00
gb send NS_POUT_UNBLOCK_ACK before signalling S_NS_UNBLOCK 2018-11-19 17:30:37 +01:00
gea tests: gea_test: Use correct max size for key in buffer 2018-05-16 20:09:39 +02:00
gprs use osmo_init_logging2() with proper talloc ctx 2018-04-06 04:37:50 +02:00
gsm0408 gsm0408_test: Fix IMEI-SV related tests to use no more than 16 digits 2019-01-22 14:53:46 +00:00
gsm0808 gsm0808: add BSSMAP Cell Identifier matching API 2019-01-28 23:58:53 +00:00
gsm23003 gsm23003: add osmo_imei_str_valid() 2019-01-14 14:39:57 +00:00
gsm29205 LCLS, TS 29.205: add GCR routines 2018-12-14 13:15:39 +00:00
gsup tests/gsup_test.c: drop session IEs from MO-ForwardSM Error 2019-01-05 10:15:47 +00:00
kasumi gsm: kasumi: Fix dynamic-stack-buffer-overflow on out buffers not multiple of 64 bits 2018-05-17 12:13:04 +02:00
lapd RSL/LAPDm: Not all RLL message are "transparent" 2018-04-19 15:09:32 +00:00
logging vty logging: fix crash when missing 'logging enable' 2018-10-01 15:58:20 +02:00
loggingrb license: Fix the license to GPL 2017-12-09 13:03:29 +00:00
msgb use osmo_init_logging2() with proper talloc ctx 2018-04-06 04:37:50 +02:00
msgfile build: resolve compiler warning about implicit delcaration 2014-10-04 11:49:23 +02:00
oap import oap_client_test from osmo-sgsn 2018-07-30 18:24:49 +02:00
osmo-auc-gen umts aka: add sqn_ms out-param, print SQN.MS in osmo-auc-gen 2017-08-29 12:46:46 +00:00
prbs Add pseudo-random bit sequence generator to libosmcoore 2017-07-10 23:42:02 +02:00
sercomm Embedded: add sercomm stubs 2018-01-21 19:08:05 +00:00
sim sim: Fix compiler warning and by this fixing the test result 2016-03-21 11:29:16 +01:00
sms use osmo_init_logging2() with proper talloc ctx 2018-04-06 04:37:50 +02:00
smscb test: Fix compiler warnings on 64bit systems 2015-11-09 16:46:03 +00:00
socket use osmo_init_logging2() with proper talloc ctx 2018-04-06 04:37:50 +02:00
stats rate_ctr: fix osmo-sgsn DoS: don't return NULL on already used index 2017-12-20 01:29:59 +01:00
strrb Fix/Update copyright notices; Add SPDX annotation 2017-11-13 01:35:12 +09:00
tdef add osmo_tdef API, originally adopted from osmo-bsc T_def 2019-02-04 18:52:16 +01:00
timer timer: Introduce osmo_clock_gettime to override clock_gettime 2018-03-01 12:33:02 +00:00
tlv add tlv_parse2(), capable of multiple instances of the same IE 2018-04-13 05:28:09 +02:00
ussd gsm/gsm0480: refactor and expose gsm0480_parse_facility_ie() 2018-06-11 23:50:00 +07:00
utils add osmo_hexdump_buf() and test 2019-01-28 23:58:53 +00:00
vty vty: enable optional-multi-choice syntax: [(one|two)] 2019-02-04 16:43:57 +00:00
write_queue wqueue: Reject messges if queue is considered full 2016-12-09 11:37:37 +01:00
Makefile.am add osmo_tdef API, originally adopted from osmo-bsc T_def 2019-02-04 18:52:16 +01:00
atlocal.in build: make check: disable sim_test when built with --disable-pcsc 2016-11-16 16:40:44 +00:00
libsercomstub.c Embedded: add sercomm stubs 2018-01-21 19:08:05 +00:00
testsuite.at add osmo_tdef API, originally adopted from osmo-bsc T_def 2019-02-04 18:52:16 +01:00