The API for the rte_timer callbacks has been modified to allow us to return
the number of times a periodic callback would have been called. Test this
capability by adding a new unit test.

Signed-off-by: Bruce Richardson <bruce.richard...@intel.com>
---
 test/test/test_timer.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 53 insertions(+), 1 deletion(-)

diff --git a/test/test/test_timer.c b/test/test/test_timer.c
index 0b86d3c..299171c 100644
--- a/test/test/test_timer.c
+++ b/test/test/test_timer.c
@@ -1,7 +1,7 @@
 /*-
  *   BSD LICENSE
  *
- *   Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
+ *   Copyright(c) 2010-2017 Intel Corporation. All rights reserved.
  *   All rights reserved.
  *
  *   Redistribution and use in source and binary forms, with or without
@@ -565,6 +565,54 @@ timer_sanity_check(void)
 }
 
 static int
+test_multiple_timeouts(void)
+{
+       struct rte_timer pt; /* a periodic timer */
+       uint64_t hz = rte_get_timer_hz();
+
+       RTE_LOG(INFO, TESTTIMER, "Running multiple-expiry tests\n");
+
+       rte_timer_init(&pt);
+       /* set timer for 1/100th of a second */
+       rte_timer_reset(&pt, hz/100, PERIODICAL, rte_lcore_id(),
+                       timer_stress2_cb, NULL);
+       cb_count = 0;
+
+       /* delay for 1/10th second */
+       rte_delay_us(100000);
+       rte_timer_manage();
+       if (cb_count != 10) {
+               RTE_LOG(ERR, TESTTIMER,
+                               "Unexpected callback count. Expected 10, got 
%d\n",
+                               cb_count);
+               return -1;
+       }
+
+       /* should be no further expiries just yet */
+       rte_timer_manage();
+       if (cb_count > 10) {
+               RTE_LOG(ERR, TESTTIMER,
+                               "Premature callbacks got. Expected only 10, got 
%d\n",
+                               cb_count);
+               return -1;
+       }
+
+       /* delay 2/100ths of a second and check for two more expiries */
+       rte_delay_us(20000);
+       rte_timer_manage();
+       if (cb_count != 12) {
+               RTE_LOG(ERR, TESTTIMER,
+                               "Unexpected callback count. Expected 12, got 
%d\n",
+                               cb_count);
+               return -1;
+       }
+
+       RTE_LOG(INFO, TESTTIMER, "Multiple-expiry tests passed\n");
+
+       return 0;
+}
+
+static int
 test_timer(void)
 {
        unsigned i;
@@ -625,6 +673,10 @@ test_timer(void)
                rte_timer_stop_sync(&mytiminfo[i].tim);
        }
 
+       /* sanity test for multiple timeouts between timer_manage calls */
+       if (test_multiple_timeouts() < 0)
+               return -1;
+
        rte_timer_dump_stats(stdout);
 
        return TEST_SUCCESS;
-- 
2.9.4

Reply via email to