summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorNeels Hofmeyr <neels@hofmeyr.de>2018-02-20 21:38:00 +0100
committerNeels Hofmeyr <neels@hofmeyr.de>2018-02-28 19:26:43 +0100
commit721aa6ded9c736e3cc5b20824dd58b1af4f4a907 (patch)
tree2af83106d1afbf097030502fb0ba828cffb1e6bc /tests
parent6c7b3e21d63b6f26de6dc53d7cb2bf92c42b9ce7 (diff)
gsm: add osmo_mnc_from_str(), osmo_mnc_cmp(), osmo_plmn_cmp() for 3-digit MNC
osmo_mnc_from_str() preserves leading zeros in the string and is useful for VTY config parsing (osmo-bsc, osmo-msc, osmo-sgsn, osmo-pcu). osmo_{plmn,mnc}_cmp() takes care of the slight intricacy of ignoring the 3-digit flag if the MNC is anyway >99. Will be used by osmo-sgsn.git and osmo-bsc.git. (All current users just care about identical MNC, but a proper cmp doesn't hurt.) Change-Id: Ib7176b1d65a03b76f41f94bc9d3293a8a07d24c6
Diffstat (limited to 'tests')
-rw-r--r--tests/gsm23003/gsm23003_test.c55
-rw-r--r--tests/gsm23003/gsm23003_test.ok17
2 files changed, 72 insertions, 0 deletions
diff --git a/tests/gsm23003/gsm23003_test.c b/tests/gsm23003/gsm23003_test.c
index 64d756dd..4411e298 100644
--- a/tests/gsm23003/gsm23003_test.c
+++ b/tests/gsm23003/gsm23003_test.c
@@ -22,6 +22,8 @@
*/
#include <stdio.h>
+#include <errno.h>
+#include <strings.h>
#include <osmocom/gsm/gsm23003.h>
#include <osmocom/core/utils.h>
@@ -114,12 +116,65 @@ bool test_valid_msisdn()
return pass;
}
+struct test_mnc_from_str_result {
+ int rc;
+ uint16_t mnc;
+ bool mnc_3_digits;
+};
+
+struct test_mnc_from_str {
+ const char *mnc_str;
+ struct test_mnc_from_str_result expect;
+};
+
+static struct test_mnc_from_str test_mnc_from_strs[] = {
+ { "0", { 0, 0, false } },
+ { "00", { 0, 0, false } },
+ { "000", { 0, 0, true } },
+ { "1", { 0, 1, false } },
+ { "01", { 0, 1, false } },
+ { "001", { 0, 1, true } },
+ { "", { -EINVAL, 0, false } },
+ { " ", { -EINVAL, 0, false } },
+ { "-1", { -EINVAL, 65535, false } },
+ { "1000", { -EINVAL, 1000, true } },
+ { "0x", { -EINVAL, 0, false } },
+ { " 23", { -EINVAL, 23, true } }, /* technically not a 3-digit MNC, but it's EINVAL anyway */
+ { "23 ", { -EINVAL, 23, true } },
+ { " 023", { -EINVAL, 23, true } },
+ { "023 ", { -EINVAL, 23, true } },
+ { "023 ", { -EINVAL, 23, true } },
+};
+
+static bool test_mnc_from_str()
+{
+ int i;
+ bool pass = true;
+ printf("----- %s\n", __func__);
+
+ for (i = 0; i < ARRAY_SIZE(test_mnc_from_strs); i++) {
+ struct test_mnc_from_str *t = &test_mnc_from_strs[i];
+ struct test_mnc_from_str_result result;
+ bool ok;
+
+ result.rc = osmo_mnc_from_str(t->mnc_str, &result.mnc,
+ &result.mnc_3_digits);
+ ok = !bcmp(&result, &t->expect, sizeof(result));
+ printf("%2d: \"%s\" rc=%d mnc=%u mnc_3_digits=%u %s\n",
+ i, osmo_escape_str(t->mnc_str, -1), result.rc, result.mnc, result.mnc_3_digits,
+ ok ? "pass" : "FAIL");
+ pass = pass && ok;
+ }
+ return pass;
+}
+
int main(int argc, char **argv)
{
bool pass = true;
pass = pass && test_valid_imsi();
pass = pass && test_valid_msisdn();
+ pass = pass && test_mnc_from_str();
OSMO_ASSERT(pass);
diff --git a/tests/gsm23003/gsm23003_test.ok b/tests/gsm23003/gsm23003_test.ok
index 7d7ffd1d..565c38cf 100644
--- a/tests/gsm23003/gsm23003_test.ok
+++ b/tests/gsm23003/gsm23003_test.ok
@@ -42,3 +42,20 @@
17: expect=false result=false msisdn='123456 123456'
18: expect=false result=false msisdn='123456 123456'
19: expect=false result=false msisdn='(null)'
+----- test_mnc_from_str
+ 0: "0" rc=0 mnc=0 mnc_3_digits=0 pass
+ 1: "00" rc=0 mnc=0 mnc_3_digits=0 pass
+ 2: "000" rc=0 mnc=0 mnc_3_digits=1 pass
+ 3: "1" rc=0 mnc=1 mnc_3_digits=0 pass
+ 4: "01" rc=0 mnc=1 mnc_3_digits=0 pass
+ 5: "001" rc=0 mnc=1 mnc_3_digits=1 pass
+ 6: "" rc=-22 mnc=0 mnc_3_digits=0 pass
+ 7: " " rc=-22 mnc=0 mnc_3_digits=0 pass
+ 8: "-1" rc=-22 mnc=65535 mnc_3_digits=0 pass
+ 9: "1000" rc=-22 mnc=1000 mnc_3_digits=1 pass
+10: "0x" rc=-22 mnc=0 mnc_3_digits=0 pass
+11: " 23" rc=-22 mnc=23 mnc_3_digits=1 pass
+12: "23 " rc=-22 mnc=23 mnc_3_digits=1 pass
+13: " 023" rc=-22 mnc=23 mnc_3_digits=1 pass
+14: "023 " rc=-22 mnc=23 mnc_3_digits=1 pass
+15: "023 " rc=-22 mnc=23 mnc_3_digits=1 pass