aboutsummaryrefslogtreecommitdiff
path: root/test/validation/api/timer/timer.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/validation/api/timer/timer.c')
-rw-r--r--test/validation/api/timer/timer.c74
1 files changed, 74 insertions, 0 deletions
diff --git a/test/validation/api/timer/timer.c b/test/validation/api/timer/timer.c
index 09dcd8c95..20d36bff7 100644
--- a/test/validation/api/timer/timer.c
+++ b/test/validation/api/timer/timer.c
@@ -19,6 +19,8 @@
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
+#define MAX_TIMER_POOLS 1024
+
/* Timeout range in milliseconds (ms) */
#define RANGE_MS 2000
@@ -478,6 +480,77 @@ static void timer_pool_create_destroy(void)
CU_ASSERT(odp_queue_destroy(queue) == 0);
}
+static void timer_pool_create_max(void)
+{
+ odp_timer_capability_t capa;
+ odp_timer_pool_param_t tp_param;
+ odp_queue_param_t queue_param;
+ odp_queue_t queue;
+ uint32_t i;
+ int ret;
+ uint64_t tmo_ns = ODP_TIME_SEC_IN_NS;
+ uint64_t res_ns = ODP_TIME_SEC_IN_NS / 10;
+
+ memset(&capa, 0, sizeof(capa));
+ ret = odp_timer_capability(ODP_CLOCK_DEFAULT, &capa);
+ CU_ASSERT_FATAL(ret == 0);
+
+ uint32_t num = capa.max_pools;
+
+ if (num > MAX_TIMER_POOLS)
+ num = MAX_TIMER_POOLS;
+
+ odp_timer_pool_t tp[num];
+ odp_timer_t timer[num];
+
+ if (capa.max_tmo.max_tmo < tmo_ns) {
+ tmo_ns = capa.max_tmo.max_tmo;
+ res_ns = capa.max_tmo.res_ns;
+ }
+
+ odp_queue_param_init(&queue_param);
+
+ if (capa.queue_type_sched)
+ queue_param.type = ODP_QUEUE_TYPE_SCHED;
+
+ queue = odp_queue_create("timer_queue", &queue_param);
+ CU_ASSERT_FATAL(queue != ODP_QUEUE_INVALID);
+
+ odp_timer_pool_param_init(&tp_param);
+
+ tp_param.res_ns = res_ns;
+ tp_param.min_tmo = tmo_ns / 2;
+ tp_param.max_tmo = tmo_ns;
+ tp_param.num_timers = 1;
+
+ for (i = 0; i < num; i++) {
+ tp[i] = odp_timer_pool_create("test_max", &tp_param);
+ if (tp[i] == ODP_TIMER_POOL_INVALID)
+ ODPH_ERR("Timer pool create failed: %u / %u\n", i, num);
+
+ CU_ASSERT_FATAL(tp[i] != ODP_TIMER_POOL_INVALID);
+ }
+
+ odp_timer_pool_start();
+
+ for (i = 0; i < num; i++) {
+ timer[i] = odp_timer_alloc(tp[i], queue, USER_PTR);
+
+ if (timer[i] == ODP_TIMER_INVALID)
+ ODPH_ERR("Timer alloc failed: %u / %u\n", i, num);
+
+ CU_ASSERT_FATAL(timer[i] != ODP_TIMER_INVALID);
+ }
+
+ for (i = 0; i < num; i++)
+ CU_ASSERT(odp_timer_free(timer[i]) == ODP_EVENT_INVALID);
+
+ for (i = 0; i < num; i++)
+ odp_timer_pool_destroy(tp[i]);
+
+ CU_ASSERT(odp_queue_destroy(queue) == 0);
+}
+
static void timer_pool_max_res(void)
{
odp_timer_capability_t capa;
@@ -1836,6 +1909,7 @@ odp_testinfo_t timer_suite[] = {
ODP_TEST_INFO(timer_test_timeout_pool_alloc),
ODP_TEST_INFO(timer_test_timeout_pool_free),
ODP_TEST_INFO(timer_pool_create_destroy),
+ ODP_TEST_INFO(timer_pool_create_max),
ODP_TEST_INFO(timer_pool_max_res),
ODP_TEST_INFO(timer_pool_tick_info),
ODP_TEST_INFO_CONDITIONAL(timer_test_tmo_event_plain,