diff options
| author | Neels Hofmeyr <neels@hofmeyr.de> | 2018-02-20 21:38:00 +0100 | 
|---|---|---|
| committer | Neels Hofmeyr <neels@hofmeyr.de> | 2018-02-28 19:26:43 +0100 | 
| commit | 721aa6ded9c736e3cc5b20824dd58b1af4f4a907 (patch) | |
| tree | 2af83106d1afbf097030502fb0ba828cffb1e6bc /tests | |
| parent | 6c7b3e21d63b6f26de6dc53d7cb2bf92c42b9ce7 (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.c | 55 | ||||
| -rw-r--r-- | tests/gsm23003/gsm23003_test.ok | 17 | 
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  | 
