summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.am15
-rw-r--r--tests/stats/stats_test.c213
-rw-r--r--tests/stats/stats_test.ok0
-rw-r--r--tests/testsuite.at6
-rw-r--r--tests/vty/vty_test.ok6
5 files changed, 231 insertions, 9 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index cf0977de..6065c0d0 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -9,7 +9,7 @@ check_PROGRAMS = timer/timer_test sms/sms_test ussd/ussd_test \
kasumi/kasumi_test logging/logging_test fr/fr_test \
loggingrb/loggingrb_test strrb/strrb_test \
vty/vty_test comp128/comp128_test utils/utils_test \
- smscb/gsm0341_test
+ smscb/gsm0341_test stats/stats_test
if ENABLE_MSGFILE
check_PROGRAMS += msgfile/msgfile_test
@@ -18,6 +18,9 @@ endif
utils_utils_test_SOURCES = utils/utils_test.c
utils_utils_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gsm/libosmogsm.la
+stats_stats_test_SOURCES = stats/stats_test.c
+stats_stats_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gsm/libosmogsm.la
+
a5_a5_test_SOURCES = a5/a5_test.c
a5_a5_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gsm/libgsmint.la
@@ -64,19 +67,19 @@ ussd_ussd_test_SOURCES = ussd/ussd_test.c
ussd_ussd_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gsm/libosmogsm.la
gb_bssgp_fc_test_SOURCES = gb/bssgp_fc_test.c
-gb_bssgp_fc_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gb/libosmogb.la
+gb_bssgp_fc_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gb/libosmogb.la $(top_builddir)/src/vty/libosmovty.la
gb_gprs_bssgp_test_SOURCES = gb/gprs_bssgp_test.c
-gb_gprs_bssgp_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gb/libosmogb.la $(LIBRARY_DL)
+gb_gprs_bssgp_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gb/libosmogb.la $(top_builddir)/src/vty/libosmovty.la $(LIBRARY_DL)
gb_gprs_ns_test_SOURCES = gb/gprs_ns_test.c
-gb_gprs_ns_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gb/libosmogb.la $(LIBRARY_DL)
+gb_gprs_ns_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gb/libosmogb.la $(top_builddir)/src/vty/libosmovty.la $(LIBRARY_DL)
logging_logging_test_SOURCES = logging/logging_test.c
logging_logging_test_LDADD = $(top_builddir)/src/libosmocore.la
fr_fr_test_SOURCES = fr/fr_test.c
-fr_fr_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gb/libosmogb.la $(LIBRARY_DL)
+fr_fr_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gb/libosmogb.la $(top_builddir)/src/vty/libosmovty.la $(LIBRARY_DL)
loggingrb_loggingrb_test_SOURCES = loggingrb/loggingrb_test.c
loggingrb_loggingrb_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/vty/libosmovty.la
@@ -120,7 +123,7 @@ EXTRA_DIST = testsuite.at $(srcdir)/package.m4 $(TESTSUITE) \
fr/fr_test.ok loggingrb/logging_test.ok \
loggingrb/logging_test.err strrb/strrb_test.ok \
vty/vty_test.ok comp128/comp128_test.ok \
- utils/utils_test.ok
+ utils/utils_test.ok stats/stats_test.ok
DISTCLEANFILES = atconfig
diff --git a/tests/stats/stats_test.c b/tests/stats/stats_test.c
new file mode 100644
index 00000000..f8c7dc00
--- /dev/null
+++ b/tests/stats/stats_test.c
@@ -0,0 +1,213 @@
+/* tests for statistics */
+/*
+ * (C) 2015 Sysmocom s.m.f.c. GmbH
+ *
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <osmocom/core/logging.h>
+#include <osmocom/core/utils.h>
+#include <osmocom/core/stat_item.h>
+
+#include <stdio.h>
+
+static void stat_test(void)
+{
+ enum test_items {
+ TEST_A_ITEM,
+ TEST_B_ITEM,
+ };
+
+ static const struct osmo_stat_item_desc item_description[] = {
+ { "item.a", "The A value", "ma", 4, -1 },
+ { "item.b", "The B value", "kb", 7, -1 },
+ };
+
+ static const struct osmo_stat_item_group_desc statg_desc = {
+ .group_name_prefix = "test.one",
+ .group_description = "Test number 1",
+ .num_items = ARRAY_SIZE(item_description),
+ .item_desc = item_description,
+ };
+
+ struct osmo_stat_item_group *statg =
+ osmo_stat_item_group_alloc(NULL, &statg_desc, 0);
+
+ struct osmo_stat_item_group *sgrp2;
+ const struct osmo_stat_item *sitem1, *sitem2;
+ int rc;
+ int32_t value;
+ int32_t rd_a = 0;
+ int32_t rd_b = 0;
+ int i;
+
+ OSMO_ASSERT(statg != NULL);
+
+ sgrp2 = osmo_stat_item_get_group_by_name_idx("test.one", 0);
+ OSMO_ASSERT(sgrp2 == statg);
+
+ sgrp2 = osmo_stat_item_get_group_by_name_idx("test.one", 1);
+ OSMO_ASSERT(sgrp2 == NULL);
+
+ sgrp2 = osmo_stat_item_get_group_by_name_idx("test.two", 0);
+ OSMO_ASSERT(sgrp2 == NULL);
+
+ sitem1 = osmo_stat_item_get_by_name(statg, "item.c");
+ OSMO_ASSERT(sitem1 == NULL);
+
+ sitem1 = osmo_stat_item_get_by_name(statg, "item.a");
+ OSMO_ASSERT(sitem1 != NULL);
+ OSMO_ASSERT(sitem1 == statg->items[TEST_A_ITEM]);
+
+ sitem2 = osmo_stat_item_get_by_name(statg, "item.b");
+ OSMO_ASSERT(sitem2 != NULL);
+ OSMO_ASSERT(sitem2 != sitem1);
+ OSMO_ASSERT(sitem2 == statg->items[TEST_B_ITEM]);
+
+ value = osmo_stat_item_get_last(statg->items[TEST_A_ITEM]);
+ OSMO_ASSERT(value == -1);
+
+ rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
+ OSMO_ASSERT(rc == 0);
+
+ osmo_stat_item_set(statg->items[TEST_A_ITEM], 1);
+
+ value = osmo_stat_item_get_last(statg->items[TEST_A_ITEM]);
+ OSMO_ASSERT(value == 1);
+
+ rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
+ OSMO_ASSERT(rc > 0);
+ OSMO_ASSERT(value == 1);
+
+ rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
+ OSMO_ASSERT(rc == 0);
+
+ for (i = 2; i <= 32; i++) {
+ osmo_stat_item_set(statg->items[TEST_A_ITEM], i);
+ osmo_stat_item_set(statg->items[TEST_B_ITEM], 1000 + i);
+
+ rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
+ OSMO_ASSERT(rc > 0);
+ OSMO_ASSERT(value == i);
+
+ rc = osmo_stat_item_get_next(statg->items[TEST_B_ITEM], &rd_b, &value);
+ OSMO_ASSERT(rc > 0);
+ OSMO_ASSERT(value == 1000 + i);
+ }
+
+ /* Keep 2 in FIFO */
+ osmo_stat_item_set(statg->items[TEST_A_ITEM], 33);
+ osmo_stat_item_set(statg->items[TEST_B_ITEM], 1000 + 33);
+
+ for (i = 34; i <= 64; i++) {
+ osmo_stat_item_set(statg->items[TEST_A_ITEM], i);
+ osmo_stat_item_set(statg->items[TEST_B_ITEM], 1000 + i);
+
+ rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
+ OSMO_ASSERT(rc > 0);
+ OSMO_ASSERT(value == i-1);
+
+ rc = osmo_stat_item_get_next(statg->items[TEST_B_ITEM], &rd_b, &value);
+ OSMO_ASSERT(rc > 0);
+ OSMO_ASSERT(value == 1000 + i-1);
+ }
+
+ rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
+ OSMO_ASSERT(rc > 0);
+ OSMO_ASSERT(value == 64);
+
+ rc = osmo_stat_item_get_next(statg->items[TEST_B_ITEM], &rd_b, &value);
+ OSMO_ASSERT(rc > 0);
+ OSMO_ASSERT(value == 1000 + 64);
+
+ /* Overrun FIFOs */
+ for (i = 65; i <= 96; i++) {
+ osmo_stat_item_set(statg->items[TEST_A_ITEM], i);
+ osmo_stat_item_set(statg->items[TEST_B_ITEM], 1000 + i);
+ }
+
+ rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
+ OSMO_ASSERT(rc > 0);
+ OSMO_ASSERT(value == 93);
+
+ for (i = 94; i <= 96; i++) {
+ rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
+ OSMO_ASSERT(rc > 0);
+ OSMO_ASSERT(value == i);
+ }
+
+ rc = osmo_stat_item_get_next(statg->items[TEST_B_ITEM], &rd_b, &value);
+ OSMO_ASSERT(rc > 0);
+ OSMO_ASSERT(value == 1000 + 90);
+
+ for (i = 91; i <= 96; i++) {
+ rc = osmo_stat_item_get_next(statg->items[TEST_B_ITEM], &rd_b, &value);
+ OSMO_ASSERT(rc > 0);
+ OSMO_ASSERT(value == 1000 + i);
+ }
+
+ /* Test Discard (single item) */
+ osmo_stat_item_set(statg->items[TEST_A_ITEM], 97);
+ rc = osmo_stat_item_discard(statg->items[TEST_A_ITEM], &rd_a);
+ OSMO_ASSERT(rc > 0);
+
+ rc = osmo_stat_item_discard(statg->items[TEST_A_ITEM], &rd_a);
+ OSMO_ASSERT(rc == 0);
+
+ rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
+ OSMO_ASSERT(rc == 0);
+
+ osmo_stat_item_set(statg->items[TEST_A_ITEM], 98);
+ rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
+ OSMO_ASSERT(rc > 0);
+ OSMO_ASSERT(value == 98);
+
+ rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
+ OSMO_ASSERT(rc == 0);
+
+ /* Test Discard (all items) */
+ osmo_stat_item_set(statg->items[TEST_A_ITEM], 99);
+ osmo_stat_item_set(statg->items[TEST_A_ITEM], 100);
+ osmo_stat_item_set(statg->items[TEST_A_ITEM], 101);
+ osmo_stat_item_set(statg->items[TEST_B_ITEM], 99);
+ osmo_stat_item_set(statg->items[TEST_B_ITEM], 100);
+
+ rc = osmo_stat_item_discard_all(&rd_a);
+ rc = osmo_stat_item_discard_all(&rd_b);
+
+ rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
+ OSMO_ASSERT(rc == 0);
+ rc = osmo_stat_item_get_next(statg->items[TEST_B_ITEM], &rd_b, &value);
+ OSMO_ASSERT(rc == 0);
+
+ osmo_stat_item_group_free(statg);
+
+ sgrp2 = osmo_stat_item_get_group_by_name_idx("test.one", 0);
+ OSMO_ASSERT(sgrp2 == NULL);
+}
+
+int main(int argc, char **argv)
+{
+ static const struct log_info log_info = {};
+ log_init(&log_info, NULL);
+
+ osmo_stat_item_init(NULL);
+
+ stat_test();
+ return 0;
+}
diff --git a/tests/stats/stats_test.ok b/tests/stats/stats_test.ok
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/tests/stats/stats_test.ok
diff --git a/tests/testsuite.at b/tests/testsuite.at
index fe30363c..a5427986 100644
--- a/tests/testsuite.at
+++ b/tests/testsuite.at
@@ -136,6 +136,12 @@ cat $abs_srcdir/utils/utils_test.ok > expout
AT_CHECK([$abs_top_builddir/tests/utils/utils_test], [0], [expout], [ignore])
AT_CLEANUP
+AT_SETUP([stats])
+AT_KEYWORDS([stats])
+cat $abs_srcdir/stats/stats_test.ok > expout
+AT_CHECK([$abs_top_builddir/tests/stats/stats_test], [0], [expout], [ignore])
+AT_CLEANUP
+
AT_SETUP([bssgp-fc])
AT_KEYWORDS([bssgp-fc])
cat $abs_srcdir/gb/bssgp_fc_tests.ok > expout
diff --git a/tests/vty/vty_test.ok b/tests/vty/vty_test.ok
index 0ea2dabf..c6365907 100644
--- a/tests/vty/vty_test.ok
+++ b/tests/vty/vty_test.ok
@@ -24,11 +24,11 @@ Returned: 0, Current node: 3 '%s# '
Going to execute 'configure terminal'
Returned: 0, Current node: 4 '%s(config)# '
Going to execute 'line vty'
-Returned: 0, Current node: 8 '%s(config-line)# '
+Returned: 0, Current node: 9 '%s(config-line)# '
Going to execute 'exit'
Returned: 0, Current node: 4 '%s(config)# '
Going to execute 'line vty'
-Returned: 0, Current node: 8 '%s(config-line)# '
+Returned: 0, Current node: 9 '%s(config-line)# '
Going to execute 'end'
Returned: 0, Current node: 3 '%s# '
Going to execute 'configure terminal'
@@ -36,7 +36,7 @@ Returned: 0, Current node: 4 '%s(config)# '
Going to execute 'log stderr'
Returned: 0, Current node: 7 '%s(config-log)# '
Going to execute 'line vty'
-Returned: 0, Current node: 8 '%s(config-line)# '
+Returned: 0, Current node: 9 '%s(config-line)# '
Going to execute 'log stderr'
Returned: 0, Current node: 7 '%s(config-log)# '
Going to execute 'end'