si/test: Merge si tests into gsm48 tests

Currently tests covering features of the GSM 04.08 specification are
spread over the si and gsm0408 subdirs in tests.

This commit merges all tests from 'si' into 'gsm0408' and removes the
'si' test sub-directory.

Sponsored-by: On-Waves ehf
This commit is contained in:
Jacob Erlbeck 2014-01-13 14:43:40 +01:00
parent 4b903b4afb
commit 9444d4f8e2
8 changed files with 167 additions and 196 deletions

View File

@ -166,7 +166,6 @@ AC_OUTPUT(
tests/mgcp/Makefile
tests/gprs/Makefile
tests/gbproxy/Makefile
tests/si/Makefile
tests/abis/Makefile
tests/smpp/Makefile
tests/trau/Makefile

View File

@ -1,4 +1,4 @@
SUBDIRS = gsm0408 db channel mgcp gprs si abis gbproxy trau
SUBDIRS = gsm0408 db channel mgcp gprs abis gbproxy trau
if BUILD_NAT
SUBDIRS += bsc-nat bsc-nat-trie

View File

@ -42,6 +42,16 @@
exit(-1); \
}
#define DBG(...)
#define VERIFY(res, cmp, wanted) \
if (!(res cmp wanted)) { \
printf("ASSERT failed: %s:%d Wanted: %d %s %d\n", \
__FILE__, __LINE__, res, # cmp, wanted); \
}
/*
* Test Location Area Identifier formatting. Table 10.5.3 of 04.08
*/
@ -306,6 +316,138 @@ static void test_range_encoding()
test_random_range_encoding(ARFCN_RANGE_1024, 16);
}
static int freqs1[] = {
12, 70, 121, 190, 250, 320, 401, 475, 520, 574, 634, 700, 764, 830, 905, 980
};
static int freqs2[] = {
402, 460, 1, 67, 131, 197, 272, 347,
};
static int freqs3[] = {
68, 128, 198, 279, 353, 398, 452,
};
static int w_out[] = {
122, 2, 69, 204, 75, 66, 60, 70, 83, 3, 24, 67, 54, 64, 70, 9,
};
static int range128[] = {
1, 1 + 127,
};
static int range256[] = {
1, 1 + 128,
};
static int range512[] = {
1, 1+ 511,
};
static void test_arfcn_filter()
{
int arfcns[50], i, res, f0_included;
for (i = 0; i < ARRAY_SIZE(arfcns); ++i)
arfcns[i] = (i + 1) * 2;
/* check that the arfcn is taken out. f0_included is only set for Range1024 */
f0_included = 24;
res = range_enc_filter_arfcns(ARFCN_RANGE_512, arfcns, ARRAY_SIZE(arfcns),
arfcns[0], &f0_included);
VERIFY(res, ==, ARRAY_SIZE(arfcns) - 1);
VERIFY(f0_included, ==, 0);
for (i = 0; i < res; ++i)
VERIFY(arfcns[i], ==, ((i+2) * 2) - (2+1));
/* check with range1024 */
for (i = 0; i < ARRAY_SIZE(arfcns); ++i)
arfcns[i] = (i + 1) * 2;
res = range_enc_filter_arfcns(ARFCN_RANGE_1024, arfcns, ARRAY_SIZE(arfcns),
arfcns[0], &f0_included);
VERIFY(res, ==, ARRAY_SIZE(arfcns) - 1);
VERIFY(f0_included, ==, 1);
for (i = 0; i < res; ++i)
VERIFY(arfcns[i], ==, ((i + 2) * 2) - 1);
/* check with range1024, not included */
for (i = 0; i < ARRAY_SIZE(arfcns); ++i)
arfcns[i] = (i + 1) * 2;
res = range_enc_filter_arfcns(ARFCN_RANGE_1024, arfcns, ARRAY_SIZE(arfcns),
11, &f0_included);
VERIFY(res, ==, ARRAY_SIZE(arfcns));
VERIFY(f0_included, ==, 0);
for (i = 0; i < res; ++i)
VERIFY(arfcns[i], ==, ((i + 1) * 2) - 1);
}
static void test_print_encoding()
{
int rc;
int w[17];
uint8_t chan_list[16];
memset(chan_list, 0x23, sizeof(chan_list));
for (rc = 0; rc < ARRAY_SIZE(w); ++rc)
switch (rc % 3) {
case 0:
w[rc] = 0xAAAA;
break;
case 1:
w[rc] = 0x5555;
break;
case 2:
w[rc] = 0x9696;
break;
}
rc = range_enc_range512(chan_list, (1 << 9) | 0x96, w);
VERIFY(rc, ==, 0);
printf("Range512: %s\n", osmo_hexdump(chan_list, ARRAY_SIZE(chan_list)));
}
static void test_si_range_helpers()
{
int ws[(sizeof(freqs1)/sizeof(freqs1[0]))];
int i, f0 = 0xFFFFFF;
memset(&ws[0], 0x23, sizeof(ws));
i = range_enc_find_index(1023, freqs1, ARRAY_SIZE(freqs1));
printf("Element is: %d => freqs[i] = %d\n", i, freqs1[i]);
VERIFY(i, ==, 2);
i = range_enc_find_index(511, freqs2, ARRAY_SIZE(freqs2));
printf("Element is: %d => freqs[i] = %d\n", i, freqs2[i]);
VERIFY(i, ==, 2);
i = range_enc_find_index(511, freqs3, ARRAY_SIZE(freqs3));
printf("Element is: %d => freqs[i] = %d\n", i, freqs3[i]);
VERIFY(i, ==, 0);
i = range_enc_arfcns(1023, freqs1, ARRAY_SIZE(freqs1), ws, 0);
VERIFY(i, ==, 0);
for (i = 0; i < sizeof(freqs1)/sizeof(freqs1[0]); ++i) {
printf("w[%d]=%d\n", i, ws[i]);
VERIFY(ws[i], ==, w_out[i]);
}
i = range_enc_determine_range(range128, ARRAY_SIZE(range128), &f0);
VERIFY(i, ==, ARFCN_RANGE_128);
VERIFY(f0, ==, 1);
i = range_enc_determine_range(range256, ARRAY_SIZE(range256), &f0);
VERIFY(i, ==, ARFCN_RANGE_256);
VERIFY(f0, ==, 1);
i = range_enc_determine_range(range512, ARRAY_SIZE(range512), &f0);
VERIFY(i, ==, ARFCN_RANGE_512);
VERIFY(f0, ==, 1);
}
int main(int argc, char **argv)
{
osmo_init_logging(&log_info);
@ -313,6 +455,10 @@ int main(int argc, char **argv)
test_location_area_identifier();
test_mi_functionality();
test_si_range_helpers();
test_arfcn_filter();
test_print_encoding();
test_range_encoding();
printf("Done.\n");

View File

@ -2,6 +2,26 @@ Testing test location area identifier
Testing parsing and generating TMSI/IMSI
hex: 17 08 99 78 56 34 12 90 78 36
hex: 17 09 91 78 56 34 12 90 78 56 f4
Element is: 2 => freqs[i] = 121
Element is: 2 => freqs[i] = 1
Element is: 0 => freqs[i] = 68
w[0]=122
w[1]=2
w[2]=69
w[3]=204
w[4]=75
w[5]=66
w[6]=60
w[7]=70
w[8]=83
w[9]=3
w[10]=24
w[11]=67
w[12]=54
w[13]=64
w[14]=70
w[15]=9
Range512: 89 4b 2a 95 65 95 55 2c a9 55 aa 55 6a 95 59 55
Range test 0: range 511, num ARFCNs 12
chan_list = 88 00 98 34 85 36 7c 50 22 dc 5e ec 00 00 00 00
Decoded freqs 12 (expected 12)

View File

@ -1,12 +0,0 @@
AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include
AM_CFLAGS=-Wall -ggdb3 $(LIBOSMOCORE_CFLAGS) $(LIBOSMOSCCP_CFLAGS) $(COVERAGE_CFLAGS)
EXTRA_DIST = si_test.ok
noinst_PROGRAMS = si_test
si_test_SOURCES = si_test.c
si_test_LDADD = $(top_builddir)/src/libbsc/libbsc.a \
$(top_builddir)/src/libcommon/libcommon.a \
$(LIBOSMOCORE_LIBS) -lrt $(LIBOSMOSCCP_LIBS) $(LIBOSMOVTY_LIBS)

View File

@ -1,156 +0,0 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openbsc/arfcn_range_encode.h>
#include <osmocom/core/utils.h>
#define DBG(...)
#define VERIFY(res, cmp, wanted) \
if (!(res cmp wanted)) { \
printf("ASSERT failed: %s:%d Wanted: %d %s %d\n", \
__FILE__, __LINE__, res, # cmp, wanted); \
}
static int freqs1[] = {
12, 70, 121, 190, 250, 320, 401, 475, 520, 574, 634, 700, 764, 830, 905, 980
};
static int freqs2[] = {
402, 460, 1, 67, 131, 197, 272, 347,
};
static int freqs3[] = {
68, 128, 198, 279, 353, 398, 452,
};
static int w_out[] = {
122, 2, 69, 204, 75, 66, 60, 70, 83, 3, 24, 67, 54, 64, 70, 9,
};
static int range128[] = {
1, 1 + 127,
};
static int range256[] = {
1, 1 + 128,
};
static int range512[] = {
1, 1+ 511,
};
static void test_arfcn_filter()
{
int arfcns[50], i, res, f0_included;
for (i = 0; i < ARRAY_SIZE(arfcns); ++i)
arfcns[i] = (i + 1) * 2;
/* check that the arfcn is taken out. f0_included is only set for Range1024 */
f0_included = 24;
res = range_enc_filter_arfcns(ARFCN_RANGE_512, arfcns, ARRAY_SIZE(arfcns),
arfcns[0], &f0_included);
VERIFY(res, ==, ARRAY_SIZE(arfcns) - 1);
VERIFY(f0_included, ==, 0);
for (i = 0; i < res; ++i)
VERIFY(arfcns[i], ==, ((i+2) * 2) - (2+1));
/* check with range1024 */
for (i = 0; i < ARRAY_SIZE(arfcns); ++i)
arfcns[i] = (i + 1) * 2;
res = range_enc_filter_arfcns(ARFCN_RANGE_1024, arfcns, ARRAY_SIZE(arfcns),
arfcns[0], &f0_included);
VERIFY(res, ==, ARRAY_SIZE(arfcns) - 1);
VERIFY(f0_included, ==, 1);
for (i = 0; i < res; ++i)
VERIFY(arfcns[i], ==, ((i + 2) * 2) - 1);
/* check with range1024, not included */
for (i = 0; i < ARRAY_SIZE(arfcns); ++i)
arfcns[i] = (i + 1) * 2;
res = range_enc_filter_arfcns(ARFCN_RANGE_1024, arfcns, ARRAY_SIZE(arfcns),
11, &f0_included);
VERIFY(res, ==, ARRAY_SIZE(arfcns));
VERIFY(f0_included, ==, 0);
for (i = 0; i < res; ++i)
VERIFY(arfcns[i], ==, ((i + 1) * 2) - 1);
}
static void test_print_encoding()
{
int rc;
int w[17];
uint8_t chan_list[16];
memset(chan_list, 0x23, sizeof(chan_list));
for (rc = 0; rc < ARRAY_SIZE(w); ++rc)
switch (rc % 3) {
case 0:
w[rc] = 0xAAAA;
break;
case 1:
w[rc] = 0x5555;
break;
case 2:
w[rc] = 0x9696;
break;
}
rc = range_enc_range512(chan_list, (1 << 9) | 0x96, w);
VERIFY(rc, ==, 0);
printf("Range512: %s\n", osmo_hexdump(chan_list, ARRAY_SIZE(chan_list)));
}
int main(int argc, char **argv)
{
int ws[(sizeof(freqs1)/sizeof(freqs1[0]))];
int i, f0 = 0xFFFFFF;
memset(&ws[0], 0x23, sizeof(ws));
i = range_enc_find_index(1023, freqs1, ARRAY_SIZE(freqs1));
printf("Element is: %d => freqs[i] = %d\n", i, freqs1[i]);
VERIFY(i, ==, 2);
i = range_enc_find_index(511, freqs2, ARRAY_SIZE(freqs2));
printf("Element is: %d => freqs[i] = %d\n", i, freqs2[i]);
VERIFY(i, ==, 2);
i = range_enc_find_index(511, freqs3, ARRAY_SIZE(freqs3));
printf("Element is: %d => freqs[i] = %d\n", i, freqs3[i]);
VERIFY(i, ==, 0);
i = range_enc_arfcns(1023, freqs1, ARRAY_SIZE(freqs1), ws, 0);
VERIFY(i, ==, 0);
for (i = 0; i < sizeof(freqs1)/sizeof(freqs1[0]); ++i) {
printf("w[%d]=%d\n", i, ws[i]);
VERIFY(ws[i], ==, w_out[i]);
}
i = range_enc_determine_range(range128, ARRAY_SIZE(range128), &f0);
VERIFY(i, ==, ARFCN_RANGE_128);
VERIFY(f0, ==, 1);
i = range_enc_determine_range(range256, ARRAY_SIZE(range256), &f0);
VERIFY(i, ==, ARFCN_RANGE_256);
VERIFY(f0, ==, 1);
i = range_enc_determine_range(range512, ARRAY_SIZE(range512), &f0);
VERIFY(i, ==, ARFCN_RANGE_512);
VERIFY(f0, ==, 1);
test_arfcn_filter();
test_print_encoding();
return 0;
}

View File

@ -1,20 +0,0 @@
Element is: 2 => freqs[i] = 121
Element is: 2 => freqs[i] = 1
Element is: 0 => freqs[i] = 68
w[0]=122
w[1]=2
w[2]=69
w[3]=204
w[4]=75
w[5]=66
w[6]=60
w[7]=70
w[8]=83
w[9]=3
w[10]=24
w[11]=67
w[12]=54
w[13]=64
w[14]=70
w[15]=9
Range512: 89 4b 2a 95 65 95 55 2c a9 55 aa 55 6a 95 59 55

View File

@ -57,12 +57,6 @@ cat $abs_srcdir/bsc-nat-trie/bsc_nat_trie_test.ok > expout
AT_CHECK([$abs_top_builddir/tests/bsc-nat-trie/bsc_nat_trie_test], [], [expout], [ignore])
AT_CLEANUP
AT_SETUP([si])
AT_KEYWORDS([si])
cat $abs_srcdir/si/si_test.ok > expout
AT_CHECK([$abs_top_builddir/tests/si/si_test], [], [expout], [ignore])
AT_CLEANUP
AT_SETUP([abis])
AT_KEYWORDS([abis])
cat $abs_srcdir/abis/abis_test.ok > expout