aboutsummaryrefslogtreecommitdiff
path: root/test/validation/api/classification/odp_classification_tests.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/validation/api/classification/odp_classification_tests.c')
-rw-r--r--test/validation/api/classification/odp_classification_tests.c80
1 files changed, 79 insertions, 1 deletions
diff --git a/test/validation/api/classification/odp_classification_tests.c b/test/validation/api/classification/odp_classification_tests.c
index d9c44aea7..41b4ab02f 100644
--- a/test/validation/api/classification/odp_classification_tests.c
+++ b/test/validation/api/classification/odp_classification_tests.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2015-2018, Linaro Limited
- * Copyright (c) 2020, Nokia
+ * Copyright (c) 2020-2021, Nokia
* All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
@@ -453,6 +453,80 @@ void test_pktio_default_cos(odp_bool_t enable_pktv)
odp_packet_free(pkt);
}
+static int classification_check_queue_stats(void)
+{
+ odp_cls_capability_t capa;
+
+ if (odp_cls_capability(&capa))
+ return ODP_TEST_INACTIVE;
+
+ if (capa.stats.queue.all_counters)
+ return ODP_TEST_ACTIVE;
+
+ return ODP_TEST_INACTIVE;
+}
+
+static void classification_test_queue_stats(odp_bool_t enable_pktv)
+{
+ odp_cls_capability_t capa;
+ odp_cls_queue_stats_t stats_start;
+ odp_cls_queue_stats_t stats_stop;
+ odp_cos_t cos;
+ odp_queue_t queue;
+
+ /* Default CoS used for test packets */
+ if (!tc.default_cos || !TEST_DEFAULT) {
+ printf("Default CoS not supported, skipping test\n");
+ return;
+ }
+
+ cos = cos_list[CLS_DEFAULT];
+ CU_ASSERT_FATAL(cos != ODP_COS_INVALID);
+ queue = odp_cos_queue(cos);
+ CU_ASSERT_FATAL(queue != ODP_QUEUE_INVALID);
+
+ CU_ASSERT_FATAL(odp_cls_capability(&capa) == 0);
+
+ CU_ASSERT(odp_cls_queue_stats(cos, queue, &stats_start) == 0);
+
+ test_pktio_default_cos(enable_pktv);
+
+ CU_ASSERT(odp_cls_queue_stats(cos, queue, &stats_stop) == 0);
+
+ if (capa.stats.queue.counter.packets)
+ CU_ASSERT(stats_stop.packets > stats_start.packets);
+ if (capa.stats.queue.counter.octets)
+ CU_ASSERT(stats_stop.octets > stats_start.octets);
+ CU_ASSERT((stats_stop.discards - stats_start.discards) == 0);
+ CU_ASSERT((stats_stop.errors - stats_start.errors) == 0);
+
+ printf("\nQueue statistics\n----------------\n");
+ printf(" discards: %" PRIu64 "\n", stats_stop.discards);
+ printf(" errors: %" PRIu64 "\n", stats_stop.errors);
+ printf(" octets: %" PRIu64 "\n", stats_stop.octets);
+ printf(" packets: %" PRIu64 "\n", stats_stop.packets);
+
+ /* Check that all unsupported counters are still zero */
+ if (!capa.stats.queue.counter.discards)
+ CU_ASSERT(stats_stop.discards == 0);
+ if (!capa.stats.queue.counter.errors)
+ CU_ASSERT(stats_stop.errors == 0);
+ if (!capa.stats.queue.counter.octets)
+ CU_ASSERT(stats_stop.octets == 0);
+ if (!capa.stats.queue.counter.packets)
+ CU_ASSERT(stats_stop.packets == 0);
+}
+
+static void classification_test_queue_stats_pkt(void)
+{
+ classification_test_queue_stats(false);
+}
+
+static void classification_test_queue_stats_pktv(void)
+{
+ classification_test_queue_stats(true);
+}
+
void configure_pktio_error_cos(odp_bool_t enable_pktv)
{
int retval;
@@ -933,6 +1007,8 @@ odp_testinfo_t classification_suite[] = {
ODP_TEST_INFO(classification_test_pktio_set_headroom),
ODP_TEST_INFO(classification_test_pktio_configure),
ODP_TEST_INFO(classification_test_pktio_test),
+ ODP_TEST_INFO_CONDITIONAL(classification_test_queue_stats_pkt,
+ classification_check_queue_stats),
ODP_TEST_INFO_NULL,
};
@@ -941,5 +1017,7 @@ odp_testinfo_t classification_suite_pktv[] = {
classification_check_pktv),
ODP_TEST_INFO_CONDITIONAL(classification_test_pktio_test_pktv,
classification_check_pktv),
+ ODP_TEST_INFO_CONDITIONAL(classification_test_queue_stats_pktv,
+ classification_check_queue_stats),
ODP_TEST_INFO_NULL,
};