On 10 March 2015 at 10:10, Savolainen, Petri (Nokia - FI/Espoo)
<petri.savolai...@nokia.com> wrote:
>
>
>> -----Original Message-----
>> From: ext Ola Liljedahl [mailto:ola.liljed...@linaro.org]
>> Sent: Monday, March 09, 2015 4:44 PM
>> To: Savolainen, Petri (Nokia - FI/Espoo)
>> Cc: LNG ODP Mailman List
>> Subject: Re: [lng-odp] [PATCH 2/2] validation: timer: added cancel test
>>
>> On 6 March 2015 at 15:30, Petri Savolainen <petri.savolai...@nokia.com>
>> wrote:
>> > Added timeout cancel test that simply creates everything
>> > needed for requensting
>> Spelling error.
>
> Maybe Maxim can correct this during merge.
>
>>
>> > one timeout and then cancels that
>> > before it expires.
>> >
>> > The timeout user_ptr bug can be reproduced with this by
>> > uncommenting the user_ptr check.
>> >
>> > Signed-off-by: Petri Savolainen <petri.savolai...@nokia.com>
>> > ---
>> >  test/validation/odp_timer.c | 83
>> +++++++++++++++++++++++++++++++++++++++++++++
>> >  1 file changed, 83 insertions(+)
>> >
>> > diff --git a/test/validation/odp_timer.c b/test/validation/odp_timer.c
>> > index 2ef3b39..1def85b 100644
>> > --- a/test/validation/odp_timer.c
>> > +++ b/test/validation/odp_timer.c
>> > @@ -124,6 +124,88 @@ static void test_timeout_pool_free(void)
>> >         CU_ASSERT(odp_pool_destroy(pool) == 0);
>> >  }
>> >
>> > +static void test_odp_timer_cancel(void)
>> > +{
>> > +       odp_pool_t pool;
>> > +       odp_pool_param_t params;
>> > +       odp_timer_pool_param_t tparam;
>> > +       odp_timer_pool_t tp;
>> > +       odp_queue_t queue;
>> > +       odp_timer_t tim;
>> > +       odp_event_t ev;
>> > +       odp_timeout_t tmo;
>> > +       odp_timer_set_t rc;
>> > +       uint64_t tick;
>> > +
>> > +       params.tmo.num = 1;
>> > +       params.type    = ODP_POOL_TIMEOUT;
>> > +       pool = odp_pool_create("tmo_pool_for_cancel", ODP_SHM_NULL,
>> &params);
>> > +
>> > +       if (pool == ODP_POOL_INVALID)
>> > +               CU_FAIL_FATAL("Timeout pool create failed");
>> > +
>> > +       tparam.res_ns     = 100 * ODP_TIME_MSEC;
>> > +       tparam.min_tmo    = 1   * ODP_TIME_SEC;
>> > +       tparam.max_tmo    = 10  * ODP_TIME_SEC;
>> > +       tparam.num_timers = 1;
>> > +       tparam.priv       = 0;
>> > +       tparam.clk_src    = ODP_CLOCK_CPU;
>> > +       tp = odp_timer_pool_create("timer_pool0", &tparam);
>> > +       if (tp == ODP_TIMER_POOL_INVALID)
>> > +               CU_FAIL_FATAL("Timer pool create failed");
>> > +
>> > +       /* Start all created timer pools */
>> > +       odp_timer_pool_start();
>> > +
>> > +       queue = odp_queue_create("timer_queue", ODP_QUEUE_TYPE_POLL,
>> NULL);
>> > +       if (queue == ODP_QUEUE_INVALID)
>> > +               CU_FAIL_FATAL("Queue create failed");
>> > +
>> > +       #define USER_PTR ((void *)0xdead)
>> > +       tim = odp_timer_alloc(tp, queue, USER_PTR);
>> > +       if (tim == ODP_TIMER_INVALID)
>> > +               CU_FAIL_FATAL("Failed to allocate timer");
>> > +
>> > +       ev = odp_timeout_to_event(odp_timeout_alloc(pool));
>> > +       if (ev == ODP_EVENT_INVALID)
>> > +               CU_FAIL_FATAL("Failed to allocate timeout");
>> > +
>> > +       tick = odp_timer_ns_to_tick(tp, 2 * ODP_TIME_SEC);
>> > +
>> > +       rc = odp_timer_set_rel(tim, tick, &ev);
>> > +       if (rc != ODP_TIMER_SUCCESS)
>> > +               CU_FAIL_FATAL("Failed to set timer (relative time)");
>> > +
>> > +       ev = ODP_EVENT_INVALID;
>> > +       if (odp_timer_cancel(tim, &ev) != 0)
>> > +               CU_FAIL_FATAL("Failed to cancel timer (relative time)");
>> > +
>> > +       if (ev == ODP_EVENT_INVALID)
>> > +               CU_FAIL_FATAL("Cancel did not return event");
>> > +
>> > +       tmo = odp_timeout_from_event(ev);
>> > +       if (tmo == ODP_TIMEOUT_INVALID)
>> > +               CU_FAIL_FATAL("Cancel returned invalid tmo");
>> No need for fatal error? CU_FAIL should be enough.
>
> It's fatal for this test if something else than tmo is coming out from the 
> cancel.
True.

>
>
>>
>> > +
>> > +/* Uncomment after user_ptr bug have been corrected
>> > +       if (odp_timeout_user_ptr(tmo) != USER_PTR)
>> > +               CU_FAIL_FATAL("Cancel corrupted user_ptr");
>> CU_FAIL again.
>
> True. Test can continue to next timeout metadata tests, but it in comment now 
> and need to updated (uncommented) any way after implementation fix.
>
>>
>> Tests for odp_timeout_timer() and odp_timeout_tick()?
>
> Yes. Those tests should be added after implementation is fixed.
Actually I think it is a bad idea to check that the timeout expiration
tick is always the latest set tick. That would require the
implementation to update this field *every* time a  timer is reset,
forcing an access to a data structure that otherwise would not be
accessed. The expiration tick is set when the timer expires and the
timeout is enqueued.

The timeout timer and user_ptr fields should be updated, this only has
to be done once, when a timeout event is specified in one of the
odp_timer_set_xxx calls.

The expiration should not be of the same importance as e.g. the user pointer.

>
> I suggest to merge this patch as is now, fix the implementation and then 
> fix/add these tests.
>
> -Petri
>
>>
>> > +*/
>> > +       odp_timeout_free(tmo);
>> > +
>> > +       ev = odp_timer_free(tim);
>> > +       if (ev != ODP_EVENT_INVALID)
>> > +               CU_FAIL_FATAL("Free returned event");
>> > +
>> > +       odp_timer_pool_destroy(tp);
>> > +
>> > +       if (odp_queue_destroy(queue) != 0)
>> > +               CU_FAIL_FATAL("Failed to destroy queue");
>> > +
>> > +       if (odp_pool_destroy(pool) != 0)
>> > +               CU_FAIL_FATAL("Failed to destroy pool");
>> > +}
>> > +
>> >  /* @private Handle a received (timeout) event */
>> >  static void handle_tmo(odp_event_t ev, bool stale, uint64_t prev_tick)
>> >  {
>> > @@ -432,6 +514,7 @@ static void test_odp_timer_all(void)
>> >  CU_TestInfo test_odp_timer[] = {
>> >         {"test_timeout_pool_alloc",  test_timeout_pool_alloc},
>> >         {"test_timeout_pool_free",  test_timeout_pool_free},
>> > +       {"test_odp_timer_cancel",  test_odp_timer_cancel},
>> >         {"test_odp_timer_all",  test_odp_timer_all},
>> >         CU_TEST_INFO_NULL,
>> >  };
>> > --
>> > 2.3.1
>> >
>> >
>> > _______________________________________________
>> > lng-odp mailing list
>> > lng-odp@lists.linaro.org
>> > http://lists.linaro.org/mailman/listinfo/lng-odp

_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to