I our case, you are right (I have actually modified this test to hunt
our problem), but in general itsn't it better with a mix?
Alternatively, I could do a test for each entropy. That would increase
the chances to see thread problems for one entropy but decrease the
chances to see inter-entropy problems.

your pick.

On 13 January 2017 at 13:51, Bill Fischofer <bill.fischo...@linaro.org> wrote:
> On Fri, Jan 13, 2017 at 5:47 AM, Christophe Milard
> <christophe.mil...@linaro.org> 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)
>
> This may be a problem. If you're looking to stress the locking code
> these should be the same quality level (max_kind) since I believe each
> different kind may have its own locks. So spreading things out like
> that will only result in less lock contention.
>
>> +        */
>> +       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
>>

Reply via email to