On 2022-10-06 10:17, Harry van Haaren wrote: > This commit extends the timeout for service_may_be_active() > from 100ms to 1000ms. Local testing on a idle and loaded system > (compiling DPDK with all cores) always completes after 1 ms. > > The same timeout waiting code was duplicated in two tests, and > is now refactored to a standalone function avoiding duplication. > > Reported-by: David Marchand <david.march...@redhat.com> > Suggested-by: Mattias Ronnblom <mattias.ronnb...@ericsson.com> > Signed-off-by: Harry van Haaren <harry.van.haa...@intel.com> > --- > app/test/test_service_cores.c | 43 ++++++++++++++++------------------- > 1 file changed, 20 insertions(+), 23 deletions(-) > > diff --git a/app/test/test_service_cores.c b/app/test/test_service_cores.c > index 359b6dcd8b..5260e078c4 100644 > --- a/app/test/test_service_cores.c > +++ b/app/test/test_service_cores.c > @@ -921,12 +921,26 @@ service_lcore_start_stop(void) > return unregister_all(); > } > > +static int > +service_ensure_stopped_with_timeout(uint32_t sid) > +{ > + /* give the service time to stop running */ > + int32_t timeout_ms = 1000; > + int i;
i and timeout_ms should have the same type. Or better, have timeout_ms as a #define (in ms). 1 s timeout seems reasonable to me. > + for (i = 0; i < timeout_ms; i++) { > + if (!rte_service_may_be_active(sid)) > + break; > + rte_delay_ms(SERVICE_DELAY); rte_delay_ms(1); > + } > + > + return rte_service_may_be_active(sid); > +} > + > /* stop a service and wait for it to become inactive */ > static int > service_may_be_active(void) > { > const uint32_t sid = 0; > - int i; > > /* expected failure cases */ > TEST_ASSERT_EQUAL(-EINVAL, rte_service_may_be_active(10000), > @@ -946,19 +960,11 @@ service_may_be_active(void) > TEST_ASSERT_EQUAL(1, service_lcore_running_check(), > "Service core expected to poll service but it didn't"); > > - /* stop the service */ > + /* stop the service, and wait for not-active with timeout */ > TEST_ASSERT_EQUAL(0, rte_service_runstate_set(sid, 0), > "Error: Service stop returned non-zero"); > - > - /* give the service 100ms to stop running */ > - for (i = 0; i < 100; i++) { > - if (!rte_service_may_be_active(sid)) > - break; > - rte_delay_ms(SERVICE_DELAY); > - } > - > - TEST_ASSERT_EQUAL(0, rte_service_may_be_active(sid), > - "Error: Service not stopped after 100ms"); > + TEST_ASSERT_EQUAL(0, service_ensure_stopped_with_timeout(sid), > + "Error: Service not stopped after timeout period."); > > return unregister_all(); > } > @@ -972,7 +978,6 @@ service_active_two_cores(void) > return TEST_SKIPPED; > > const uint32_t sid = 0; > - int i; > > uint32_t lcore = rte_get_next_lcore(/* start core */ -1, > /* skip main */ 1, > @@ -1002,16 +1007,8 @@ service_active_two_cores(void) > /* stop the service */ > TEST_ASSERT_EQUAL(0, rte_service_runstate_set(sid, 0), > "Error: Service stop returned non-zero"); > - > - /* give the service 100ms to stop running */ > - for (i = 0; i < 100; i++) { > - if (!rte_service_may_be_active(sid)) > - break; > - rte_delay_ms(SERVICE_DELAY); > - } > - > - TEST_ASSERT_EQUAL(0, rte_service_may_be_active(sid), > - "Error: Service not stopped after 100ms"); > + TEST_ASSERT_EQUAL(0, service_ensure_stopped_with_timeout(sid), > + "Error: Service not stopped after timeout period."); > > return unregister_all(); > }