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); + 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[]; -- 2.7.4