On 01/13/17 14:47, Christophe Milard wrote: > checking the thread safety of odp_random. > > Signed-off-by: Christophe Milard <christophe.mil...@linaro.org> > --- > test/common_plat/validation/api/random/random.c | 46 > +++++++++++++++++++++++++ > test/common_plat/validation/api/random/random.h | 1 + > 2 files changed, 47 insertions(+) > > diff --git a/test/common_plat/validation/api/random/random.c > b/test/common_plat/validation/api/random/random.c > index a0e2ef7..17234db 100644 > --- a/test/common_plat/validation/api/random/random.c > +++ b/test/common_plat/validation/api/random/random.c > @@ -8,6 +8,8 @@ > #include <odp_cunit_common.h> > #include "random.h" > > +#define STRESS_TEST_SZ 100000 > + > void random_test_get_size(void) > { > int32_t ret; > @@ -61,10 +63,54 @@ void random_test_repeat(void) > CU_ASSERT(memcmp(buf1, buf2, sizeof(buf1)) == 0); > } > > +/* > + * thread part for the random_test_stress > + */ > +static int run_test_stress(void *arg ODP_UNUSED) > +{ > + int32_t i; > + int32_t rc; > + uint8_t buf[4096]; > + > + odp_random_kind_t max_kind = odp_random_max_kind(); > + > + /* generate plenty of random data of different length and different > + * quality (using the 2 first bytes of the previous iteration buffer as > + * length and quality) > + */ > + for (i = 0; i < STRESS_TEST_SZ; i++) { > + rc = odp_random_data(buf, buf[0] + 2, buf[1] % (max_kind + 1)); > + CU_ASSERT(rc > 0); > + } > + > + fflush(stdout);
is fflush() for ASSERT? isn't it stderr? > + return CU_get_number_of_failures(); > +} > + > +/* > + * stress tests > + */ > +void random_test_stress(void) > +{ > + pthrd_arg thrdarg; > + odp_cpumask_t unused; > + > + thrdarg.numthrds = odp_cpumask_default_worker(&unused, 0); > + if (thrdarg.numthrds > MAX_WORKERS) > + thrdarg.numthrds = MAX_WORKERS; > + > + /* create threads */ > + odp_cunit_thread_create(run_test_stress, &thrdarg); > + > + /* wait for all thread endings: */ > + CU_ASSERT(odp_cunit_thread_exit(&thrdarg) >= 0); > +} > + > odp_testinfo_t random_suite[] = { > ODP_TEST_INFO(random_test_get_size), > ODP_TEST_INFO(random_test_kind), > ODP_TEST_INFO(random_test_repeat), > + ODP_TEST_INFO(random_test_stress), > ODP_TEST_INFO_NULL, > }; > > diff --git a/test/common_plat/validation/api/random/random.h > b/test/common_plat/validation/api/random/random.h > index c4bca78..f9538aa 100644 > --- a/test/common_plat/validation/api/random/random.h > +++ b/test/common_plat/validation/api/random/random.h > @@ -13,6 +13,7 @@ > void random_test_get_size(void); > void random_test_kind(void); > void random_test_repeat(void); > +void random_test_stress(void); > > /* test arrays: */ > extern odp_testinfo_t random_suite[]; >