laforge has submitted this change. ( https://gerrit.osmocom.org/c/libosmocore/+/28506 )
Change subject: gsm0408_test: add a testcase for gsm48_decode_bearer_cap() ......................................................................
gsm0408_test: add a testcase for gsm48_decode_bearer_cap()
The new testcase contains a Bearer capability IE from Siemens S11E, which does not use octet 3a (no extension bit set in octet 3). gsm48_decode_bearer_cap() currently fails to parse it.
Change-Id: Ia19f3f6d80bc09ca3f8d39d35b148a0c0245141f --- M tests/Makefile.am M tests/gsm0408/gsm0408_test.c A tests/gsm0408/gsm0408_test.err M tests/gsm0408/gsm0408_test.ok M tests/testsuite.at 5 files changed, 23 insertions(+), 3 deletions(-)
Approvals: Jenkins Builder: Verified laforge: Looks good to me, approved
diff --git a/tests/Makefile.am b/tests/Makefile.am index f54ce18..7d62615 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -354,7 +354,8 @@ timer/timer_test.ok sms/sms_test.ok ussd/ussd_test.ok \ smscb/smscb_test.ok bits/bitrev_test.ok a5/a5_test.ok \ conv/conv_test.ok auth/milenage_test.ok ctrl/ctrl_test.ok \ - lapd/lapd_test.ok gsm0408/gsm0408_test.ok \ + lapd/lapd_test.ok \ + gsm0408/gsm0408_test.ok gsm0408/gsm0408_test.err \ gsm0808/gsm0808_test.ok gb/bssgp_fc_tests.err \ gb/bssgp_fc_tests.ok gb/bssgp_fc_tests.sh \ gb/gprs_bssgp_test.ok gb/gprs_ns_test.ok gea/gea_test.ok \ @@ -496,7 +497,8 @@ gsm29205/gsm29205_test \ >$(srcdir)/gsm29205/gsm29205_test.ok gsm0408/gsm0408_test \ - >$(srcdir)/gsm0408/gsm0408_test.ok + 2>$(srcdir)/gsm0408/gsm0408_test.err \ + 1>$(srcdir)/gsm0408/gsm0408_test.ok gsm48/rest_octets_test \ >$(srcdir)/gsm48/rest_octets_test.ok gprs/gprs_test \ diff --git a/tests/gsm0408/gsm0408_test.c b/tests/gsm0408/gsm0408_test.c index 16bc8e8..7d2df47 100644 --- a/tests/gsm0408/gsm0408_test.c +++ b/tests/gsm0408/gsm0408_test.c @@ -65,6 +65,18 @@ }, };
+static const uint8_t speech_no3a_lv[] = { 0x01, 0xa0 }; + +static const struct gsm_mncc_bearer_cap bcap_speech_no3a = { + .transfer = GSM48_BCAP_ITCAP_SPEECH, + .mode = GSM48_BCAP_TMOD_CIRCUIT, + .coding = GSM48_BCAP_CODING_GSM_STD, + .radio = GSM48_BCAP_RRQ_FR_ONLY, + .speech_ver = { + 0, -1, + }, +}; +
struct bcap_test { const uint8_t *lv; @@ -75,6 +87,7 @@ static const struct bcap_test bcap_tests[] = { { csd_9600_v110_lv, &bcap_csd_9600_v110, "CSD 9600/V.110/transparent" }, { speech_all_lv, &bcap_speech_all, "Speech, all codecs" }, + { speech_no3a_lv, &bcap_speech_no3a, "Speech, without octet 3a" }, };
static int test_bearer_cap() diff --git a/tests/gsm0408/gsm0408_test.err b/tests/gsm0408/gsm0408_test.err new file mode 100644 index 0000000..1f0236c --- /dev/null +++ b/tests/gsm0408/gsm0408_test.err @@ -0,0 +1,3 @@ +Incorrect decoded result of Speech, without octet 3a: + should: 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + is: 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 diff --git a/tests/gsm0408/gsm0408_test.ok b/tests/gsm0408/gsm0408_test.ok index 97bf083..17a7a0b 100644 --- a/tests/gsm0408/gsm0408_test.ok +++ b/tests/gsm0408/gsm0408_test.ok @@ -1,5 +1,6 @@ Test `CSD 9600/V.110/transparent' passed Test `Speech, all codecs' passed +Test `Speech, without octet 3a' failed Simple TMSI encoding test....passed Simple IMSI encoding test....passed: [10] 17 08 99 10 07 00 00 00 64 02
diff --git a/tests/testsuite.at b/tests/testsuite.at index ca133bb..44ae539 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -153,7 +153,8 @@ AT_SETUP([gsm0408]) AT_KEYWORDS([gsm0408]) cat $abs_srcdir/gsm0408/gsm0408_test.ok > expout -AT_CHECK([$abs_top_builddir/tests/gsm0408/gsm0408_test], [0], [expout], [ignore]) +cat $abs_srcdir/gsm0408/gsm0408_test.err > experr +AT_CHECK([$abs_top_builddir/tests/gsm0408/gsm0408_test], [0], [expout], [experr]) AT_CLEANUP
AT_SETUP([gsm48_rest_octets])