We discussed this along with Petris additional ideas on modifying
termination.

This patch is ok in concept, but I did not do an actual code review myself
yet.

The rationale is that we have a broad range of SDKs that respond
differently to the concept of restarting in the same process, so for 1.0 we
have to consider a process as the application, we cannot reuse a process to
start a new application and so we cannot use the suites as applications.
To support clean up the thread termination will now return an odp_bool_t
which is true if it is the last ODP execution object, at that point the
thread can check that return code and call global terminate.

On 2 December 2014 at 07:10, Maxim Uvarov <[email protected]> wrote:

> On 12/01/2014 09:52 PM, Mike Holmes wrote:
>
>>
>>
>> On 1 December 2014 at 12:05, Taras Kondratiuk <
>> [email protected] <mailto:[email protected]>> wrote:
>>
>>     Most of test application will have the same main function.
>>     Move main() from odp_shm to a common place where it can be reused by
>>     other test applications.
>>     Unifying main() will also simplify transition to a combined single
>>     test
>>     application in future.
>>
>>     Signed-off-by: Taras Kondratiuk <[email protected]
>>     <mailto:[email protected]>>
>>
>>     ---
>>      test/validation/Makefile.am               |    4 +--
>>      test/validation/common/odp_cunit_common.c |   33
>>     +++++++++++++++++++++++
>>      test/validation/common/odp_cunit_common.h |    9 +++++++
>>      test/validation/odp_shm.c                 |   42
>>     ++---------------------------
>>      4 files changed, 46 insertions(+), 42 deletions(-)
>>
>>     diff --git a/test/validation/Makefile.am b/test/validation/Makefile.am
>>     index 4bee2ab..8b55bad 100644
>>     --- a/test/validation/Makefile.am
>>     +++ b/test/validation/Makefile.am
>>     @@ -1,6 +1,6 @@
>>      include $(top_srcdir)/test/Makefile.inc
>>
>>     -AM_CFLAGS += -I$(CUNIT_PATH)/include
>>     +AM_CFLAGS += -I$(CUNIT_PATH)/include -I$(srcdir)/common
>>      AM_LDFLAGS += -L$(CUNIT_PATH)/lib -static -lcunit
>>
>>      if ODP_CUNIT_ENABLED
>>     @@ -11,7 +11,7 @@ odp_init_LDFLAGS = $(AM_LDFLAGS)
>>      odp_queue_LDFLAGS = $(AM_LDFLAGS)
>>      odp_crypto_CFLAGS = $(AM_CFLAGS) -I$(srcdir)/crypto
>>      odp_crypto_LDFLAGS = $(AM_LDFLAGS)
>>     -odp_shm_CFLAGS = $(AM_CFLAGS) -I$(srcdir)/common
>>     +odp_shm_CFLAGS = $(AM_CFLAGS)
>>      odp_shm_LDFLAGS = $(AM_LDFLAGS)
>>      endif
>>
>>     diff --git a/test/validation/common/odp_cunit_common.c
>>     b/test/validation/common/odp_cunit_common.c
>>     index 885b981..c87e103 100644
>>     --- a/test/validation/common/odp_cunit_common.c
>>     +++ b/test/validation/common/odp_cunit_common.c
>>     @@ -35,3 +35,36 @@ int odp_cunit_thread_exit(pthrd_arg *arg)
>>
>>             return 0;
>>      }
>>     +
>>     +int main(void)
>>     +{
>>     +       int ret;
>>     +
>>     +       printf("\tODP API version: %s\n", odp_version_api_str());
>>     +       printf("\tODP implementation version: %s\n",
>>     odp_version_impl_str());
>>
>>
>> I don't think this will work long term.
>>
>> I think that we need to view a test_suite as an odp application, and any
>> number of suites could be run in any order.
>> We dont want to focus on the batch mode main() because when we migrate to
>> a library there will not be a main when calling tests interactively if so
>> desired. I expect we will have a wrapper batch mode main() that will call
>> all the suites however so that "make check" still has something to call.
>>
>> I think a suite_init should perform the global init and suite_finalize
>> should do a odp_finalize. To that end with a suite being generally smallest
>> unit of testing that can be run,  it should also print up what it is being
>> run on - the prints above. I don't see a lot of use for test_init because I
>> don't think we want to be doing odp_global_init per test although you could
>> argue every test should be as independent as possible.
>>
>> I know there is an argument that HW vs SW implementations change how
>> completely calling odp global finalize really creates a clean environment
>> for the next test, but to my mind if suites = odp_apps they should work,
>> OPNFV will require clean teardown without reboot.
>>
>> With a good argument to keep odp calls in main I could be swayed but
>> right now I think it needs to be in the init and finalize function for a
>> suite.
>>
>> Mike
>>
>
> For version 1.0 it might be reasonable to stay with common init. Not sure
> if everybody can implement odp_term_global() functions at nearest time. And
> if we start calling odp_init_global()/odp_term_global() for each suite or
> test it will slowdown other implementers, due to this might be not so easy
> to implement on other SoCs. Even if it's requirement for OPNFV it should
> not be requirement for odp 1.0. And we can switch to that some time later.
>
> Maxim.
>
>
>      +
>>     +       if (0 != odp_init_global(NULL, NULL)) {
>>     +               printf("odp_init_global fail.\n");
>>     +               return -1;
>>
>> See above
>>
>>     +      }
>>     +       if (0 != odp_init_local()) {
>>     +               printf("odp_init_local fail.\n");
>>     +               return -1;
>>     +       }
>>     +
>>
>>
>> See above
>>
>>     +      CU_set_error_action(CUEA_ABORT);
>>     +
>>     +       CU_initialize_registry();
>>     +       CU_register_suites(odp_testsuites);
>>     +       CU_basic_set_mode(CU_BRM_VERBOSE);
>>     +       CU_basic_run_tests();
>>     +
>>     +       ret = CU_get_number_of_failure_records();
>>     +
>>     +       CU_cleanup_registry();
>>     +
>>     +       odp_term_local();
>>
>>
>> See above
>>
>>     +      odp_term_global();
>>
>>
>> See above
>>
>>     +
>>     +       return ret;
>>     +}
>>     diff --git a/test/validation/common/odp_cunit_common.h
>>     b/test/validation/common/odp_cunit_common.h
>>     index 71a3350..1f30788 100644
>>     --- a/test/validation/common/odp_cunit_common.h
>>     +++ b/test/validation/common/odp_cunit_common.h
>>     @@ -13,8 +13,17 @@
>>      #ifndef ODP_CUNICT_COMMON_H
>>      #define ODP_CUNICT_COMMON_H
>>
>>     +#include "CUnit/Basic.h"
>>     +
>>      #define MAX_WORKERS 32 /**< Maximum number of work threads */
>>
>>     +/**
>>     + * Array of testsuites provided by a test application. Array must
>>     be terminated
>>     + * by CU_SUITE_INFO_NULL and must be suitable to be used by
>>     + * CU_register_suites().
>>     + */
>>     +extern CU_SuiteInfo odp_testsuites[];
>>     +
>>      typedef struct {
>>             uint32_t foo;
>>             uint32_t bar;
>>     diff --git a/test/validation/odp_shm.c b/test/validation/odp_shm.c
>>     index bcd46c7..8a991b1 100644
>>     --- a/test/validation/odp_shm.c
>>     +++ b/test/validation/odp_shm.c
>>     @@ -5,7 +5,6 @@
>>       */
>>
>>      #include "odp.h"
>>     -#include "CUnit/Basic.h"
>>      #include "odp_cunit_common.h"
>>
>>      #define ALIGE_SIZE  (128)
>>     @@ -71,50 +70,13 @@ static void test_odp_shm_sunnyday(void)
>>             odp_cunit_thread_exit(&thrdarg);
>>      }
>>
>>     -static int init(void)
>>     -{
>>     -       printf("\tODP API version: %s\n", odp_version_api_str());
>>     -       printf("\tODP implementation version: %s\n",
>>     odp_version_impl_str());
>>     -       return 0;
>>     -}
>>     -
>>      CU_TestInfo test_odp_shm[] = {
>>             {"test_odp_shm_creat",  test_odp_shm_sunnyday},
>>             CU_TEST_INFO_NULL,
>>      };
>>
>>     -CU_SuiteInfo suites[] = {
>>     -       {"odp_system", init, NULL, NULL, NULL, test_odp_shm},
>>     +CU_SuiteInfo odp_testsuites[] = {
>>     +       {"Shared Memory", NULL, NULL, NULL, NULL, test_odp_shm},
>>             CU_SUITE_INFO_NULL,
>>      };
>>
>>     -
>>     -int main(void)
>>     -{
>>     -       int ret;
>>     -
>>     -       if (0 != odp_init_global(NULL, NULL)) {
>>     -               printf("odp_init_global fail.\n");
>>     -               return -1;
>>     -       }
>>     -       if (0 != odp_init_local()) {
>>     -               printf("odp_init_local fail.\n");
>>     -               return -1;
>>     -       }
>>     -
>>     -       CU_set_error_action(CUEA_ABORT);
>>     -
>>     -       CU_initialize_registry();
>>     -       CU_register_suites(suites);
>>     -       CU_basic_set_mode(CU_BRM_VERBOSE);
>>     -       CU_basic_run_tests();
>>     -
>>     -       ret = CU_get_number_of_failure_records();
>>     -
>>     -       CU_cleanup_registry();
>>     -
>>     -       odp_term_local();
>>     -       odp_term_global();
>>     -
>>     -       return ret;
>>     -}
>>     --
>>     1.7.9.5
>>
>>
>>
>>
>> --
>> *Mike Holmes*
>> Linaro  Sr Technical Manager
>> LNG - ODP
>>
>>
>> _______________________________________________
>> lng-odp mailing list
>> [email protected]
>> http://lists.linaro.org/mailman/listinfo/lng-odp
>>
>
>
> _______________________________________________
> lng-odp mailing list
> [email protected]
> http://lists.linaro.org/mailman/listinfo/lng-odp
>



-- 
*Mike Holmes*
Linaro  Sr Technical Manager
LNG - ODP
_______________________________________________
lng-odp mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to