diff mbox

[API-NEXT,5/5] test: adding test for driver load function

Message ID 1477940323-7278-6-git-send-email-christophe.milard@linaro.org
State Superseded
Headers show

Commit Message

Christophe Milard Oct. 31, 2016, 6:58 p.m. UTC
Trying to fix a proper structure for driver tests in the hard world
of autotools

Signed-off-by: Christophe Milard <christophe.milard@linaro.org>

---
 test/.gitignore                                    |  1 +
 test/Makefile.inc                                  |  3 +-
 test/common_plat/m4/configure.m4                   |  1 +
 test/common_plat/validation/Makefile.inc           |  1 -
 test/common_plat/validation/drv/Makefile.am        |  1 +
 test/common_plat/validation/drv/drvinit/.gitignore |  1 +
 .../common_plat/validation/drv/drvinit/Makefile.am | 25 ++++++++++
 test/common_plat/validation/drv/drvinit/drvinit.c  | 58 ++++++++++++++++++++++
 test/common_plat/validation/drv/drvinit/drvinit.h  | 24 +++++++++
 .../validation/drv/drvinit/drvinit_main.c          | 12 +++++
 .../validation/drv/drvinit/empty_driver.c          | 12 +++++
 test/linux-generic/Makefile.am                     |  1 +
 test/m4/configure.m4                               |  3 ++
 test/test_config.h.in                              | 13 +++++
 14 files changed, 154 insertions(+), 2 deletions(-)
 create mode 100644 test/.gitignore
 create mode 100644 test/common_plat/validation/drv/drvinit/.gitignore
 create mode 100644 test/common_plat/validation/drv/drvinit/Makefile.am
 create mode 100644 test/common_plat/validation/drv/drvinit/drvinit.c
 create mode 100644 test/common_plat/validation/drv/drvinit/drvinit.h
 create mode 100644 test/common_plat/validation/drv/drvinit/drvinit_main.c
 create mode 100644 test/common_plat/validation/drv/drvinit/empty_driver.c
 create mode 100644 test/test_config.h.in

-- 
2.7.4

Comments

Brian Brooks Oct. 25, 2016, 6:56 a.m. UTC | #1
On 10/31 19:58:43, Christophe Milard wrote:
> Trying to fix a proper structure for driver tests in the hard world

> of autotools

> 

> Signed-off-by: Christophe Milard <christophe.milard@linaro.org>

> ---

>  test/.gitignore                                    |  1 +

>  test/Makefile.inc                                  |  3 +-

>  test/common_plat/m4/configure.m4                   |  1 +

>  test/common_plat/validation/Makefile.inc           |  1 -

>  test/common_plat/validation/drv/Makefile.am        |  1 +

>  test/common_plat/validation/drv/drvinit/.gitignore |  1 +

>  .../common_plat/validation/drv/drvinit/Makefile.am | 25 ++++++++++

>  test/common_plat/validation/drv/drvinit/drvinit.c  | 58 ++++++++++++++++++++++

>  test/common_plat/validation/drv/drvinit/drvinit.h  | 24 +++++++++

>  .../validation/drv/drvinit/drvinit_main.c          | 12 +++++

>  .../validation/drv/drvinit/empty_driver.c          | 12 +++++

>  test/linux-generic/Makefile.am                     |  1 +

>  test/m4/configure.m4                               |  3 ++

>  test/test_config.h.in                              | 13 +++++

>  14 files changed, 154 insertions(+), 2 deletions(-)

>  create mode 100644 test/.gitignore

>  create mode 100644 test/common_plat/validation/drv/drvinit/.gitignore

>  create mode 100644 test/common_plat/validation/drv/drvinit/Makefile.am

>  create mode 100644 test/common_plat/validation/drv/drvinit/drvinit.c

>  create mode 100644 test/common_plat/validation/drv/drvinit/drvinit.h

>  create mode 100644 test/common_plat/validation/drv/drvinit/drvinit_main.c

>  create mode 100644 test/common_plat/validation/drv/drvinit/empty_driver.c

>  create mode 100644 test/test_config.h.in

> 

> diff --git a/test/.gitignore b/test/.gitignore

> new file mode 100644

> index 0000000..4be1df5

> --- /dev/null

> +++ b/test/.gitignore

> @@ -0,0 +1 @@

> +test_config.h

> diff --git a/test/Makefile.inc b/test/Makefile.inc

> index 1ebc047..923ca21 100644

> --- a/test/Makefile.inc

> +++ b/test/Makefile.inc

> @@ -12,7 +12,8 @@ INCFLAGS = \

>  	-I$(top_srcdir)/include \

>  	-I$(top_srcdir)/platform/@with_platform@/include \

>  	-I$(top_srcdir)/test \

> -	-I$(top_builddir)/include

> +	-I$(top_builddir)/include \

> +	-I$(top_builddir)/test

>  

>  AM_CFLAGS += $(INCFLAGS)

>  AM_CXXFLAGS = $(INCFLAGS)

> diff --git a/test/common_plat/m4/configure.m4 b/test/common_plat/m4/configure.m4

> index 1fc350d..32ac8c4 100644

> --- a/test/common_plat/m4/configure.m4

> +++ b/test/common_plat/m4/configure.m4

> @@ -33,4 +33,5 @@ AC_CONFIG_FILES([test/common_plat/Makefile

>  		 test/common_plat/validation/api/traffic_mngr/Makefile

>  		 test/common_plat/validation/drv/Makefile

>  		 test/common_plat/validation/drv/drvatomic/Makefile

> +		 test/common_plat/validation/drv/drvinit/Makefile

>  		 test/common_plat/validation/drv/drvshmem/Makefile])

> diff --git a/test/common_plat/validation/Makefile.inc b/test/common_plat/validation/Makefile.inc

> index ffba620..36c9899 100644

> --- a/test/common_plat/validation/Makefile.inc

> +++ b/test/common_plat/validation/Makefile.inc

> @@ -8,7 +8,6 @@ COMMON_DIR = $(top_builddir)/test/common_plat/common

>  AUTOMAKE_OPTIONS = nostdinc

>  

>  AM_CFLAGS += -I$(top_srcdir)/test/common_plat/common

> -AM_LDFLAGS += -static

>  

>  LIBCUNIT_COMMON = $(COMMON_DIR)/libcunit_common.la

>  LIBCPUMASK_COMMON = $(COMMON_DIR)/libcpumask_common.la

> diff --git a/test/common_plat/validation/drv/Makefile.am b/test/common_plat/validation/drv/Makefile.am

> index bcdb92e..1574f3d 100644

> --- a/test/common_plat/validation/drv/Makefile.am

> +++ b/test/common_plat/validation/drv/Makefile.am

> @@ -1,4 +1,5 @@

>  ODPDRV_MODULES = drvatomic \

> +		 drvinit \

>  		 drvshmem

>  

>  SUBDIRS = $(ODPDRV_MODULES)

> diff --git a/test/common_plat/validation/drv/drvinit/.gitignore b/test/common_plat/validation/drv/drvinit/.gitignore

> new file mode 100644

> index 0000000..d630ef5

> --- /dev/null

> +++ b/test/common_plat/validation/drv/drvinit/.gitignore

> @@ -0,0 +1 @@

> +drvinit_main

> diff --git a/test/common_plat/validation/drv/drvinit/Makefile.am b/test/common_plat/validation/drv/drvinit/Makefile.am

> new file mode 100644

> index 0000000..8ccf2aa

> --- /dev/null

> +++ b/test/common_plat/validation/drv/drvinit/Makefile.am

> @@ -0,0 +1,25 @@

> +include ../Makefile.inc

> +include $(top_srcdir)/platform/@with_platform@/Makefile.inc

> +

> +ABS_TEST_BUILDDIR = $(abs_top_builddir)/test/common_plat/validation/drv/drvinit

> +

> +noinst_LTLIBRARIES = libtestdrvinit.la

> +libtestdrvinit_la_SOURCES = drvinit.c

> +

> +# the minimalist driver:

> +lib_LTLIBRARIES = empty_driver.la

> +empty_driver_la_SOURCES = empty_driver.c

> +empty_driver_la_LDFLAGS = $(AM_LDFLAGS) -module -shared -export-dynamic \

> +			  -avoid-version

> +

> +# the program trying to load the driver:

> +# autotools ack: poking straight into .libs to find the ".so" file...

> +# and hardcoding rpath...

> +test_PROGRAMS = drvinit_main$(EXEEXT)

> +drvinit_main_SOURCES = drvinit_main.c

> +drvinit_main_LDADD = libtestdrvinit.la $(LIBCUNIT_COMMON) $(LIBODP)

> +drvinit_main_LDFLAGS = $(AM_LDFLAGS) \

> +		     -rpath $(ABS_TEST_BUILDDIR)/.libs \

> +		     -rpath $(libdir)

> +

> +EXTRA_DIST = drvinit.h

> diff --git a/test/common_plat/validation/drv/drvinit/drvinit.c b/test/common_plat/validation/drv/drvinit/drvinit.c

> new file mode 100644

> index 0000000..e79d68a

> --- /dev/null

> +++ b/test/common_plat/validation/drv/drvinit/drvinit.c

> @@ -0,0 +1,58 @@

> +/* Copyright (c) 2016, Linaro Limited

> + * All rights reserved.

> + *

> + * SPDX-License-Identifier:     BSD-3-Clause

> + */

> +

> +#include <test_config.h>

> +#include <odp_drv.h>

> +#include <odp_api.h>

> +#include <odp_cunit_common.h>

> +#include "drvinit.h"

> +#include <stdlib.h>

> +

> +#define TEST_SKIPPED 77

> +

> +/*

> + * basic tests

> + */

> +void drvinit_test_load(void)

> +{

> +#if HAVE_DLFCN_H

> +	CU_ASSERT(odp_load_driver("empty_driver.so") == 0);

> +#endif

> +}

> +

> +odp_testinfo_t drvinit_suite[] = {

> +	ODP_TEST_INFO(drvinit_test_load),

> +	ODP_TEST_INFO_NULL,

> +};

> +

> +odp_suiteinfo_t drvinit_suites[] = {

> +	{"Driver load", NULL, NULL, drvinit_suite},

> +	ODP_SUITE_INFO_NULL,

> +};

> +

> +int drvinit_main(int argc, char *argv[])

> +{

> +	int ret;

> +

> +	/*

> +	 * none of the following can be performed if we don't have

> +	 * some kind of dynamic loading (currentely: dlopen)

> +	 */

> +#if !HAVE_DLFCN_H

> +	return TEST_SKIPPED;

> +#endif

> +

> +	/* parse common options: */

> +	if (odp_cunit_parse_options(argc, argv))

> +		return -1;

> +

> +	ret = odp_cunit_register(drvinit_suites);

> +

> +	if (ret == 0)

> +		ret = odp_cunit_run();

> +

> +	return ret;

> +}

> diff --git a/test/common_plat/validation/drv/drvinit/drvinit.h b/test/common_plat/validation/drv/drvinit/drvinit.h

> new file mode 100644

> index 0000000..1c9f9a6

> --- /dev/null

> +++ b/test/common_plat/validation/drv/drvinit/drvinit.h

> @@ -0,0 +1,24 @@

> +/* Copyright (c) 2016, Linaro Limited

> + * All rights reserved.

> + *

> + * SPDX-License-Identifier:     BSD-3-Clause

> + */

> +

> +#ifndef _ODP_TEST_DRVINIT_H_

> +#define _ODP_TEST_DRVINIT_H_

> +

> +#include <odp_cunit_common.h>

> +

> +/* test functions: */

> +void drvinit_test_load(void);

> +

> +/* test arrays: */

> +extern odp_testinfo_t drvinit_suite[];

> +

> +/* test registry: */

> +extern odp_suiteinfo_t drvinit_suites[];

> +

> +/* main test program: */

> +int drvinit_main(int argc, char *argv[]);

> +

> +#endif

> diff --git a/test/common_plat/validation/drv/drvinit/drvinit_main.c b/test/common_plat/validation/drv/drvinit/drvinit_main.c

> new file mode 100644

> index 0000000..2abfd20

> --- /dev/null

> +++ b/test/common_plat/validation/drv/drvinit/drvinit_main.c

> @@ -0,0 +1,12 @@

> +/* Copyright (c) 2016, Linaro Limited

> + * All rights reserved.

> + *

> + * SPDX-License-Identifier:     BSD-3-Clause

> + */

> +

> +#include "drvinit.h"

> +

> +int main(int argc, char *argv[])

> +{

> +	return drvinit_main(argc, argv);

> +}

> diff --git a/test/common_plat/validation/drv/drvinit/empty_driver.c b/test/common_plat/validation/drv/drvinit/empty_driver.c

> new file mode 100644

> index 0000000..d2cd1bb

> --- /dev/null

> +++ b/test/common_plat/validation/drv/drvinit/empty_driver.c

> @@ -0,0 +1,12 @@

> +#include <odp_drv.h>

> +

> +static void __attribute__ ((constructor)) basic_driver_init(void)

> +{

> +	odpdrv_driver_param_t params;

> +

> +	params.name = "basic_driver";

> +	params.bus  = PCI;

> +	params.type = PCI_VIRTIO;

> +

> +	odpdrv_driver_register(&params);

> +}


Is this a mock driver since it isn't in /drivers/ (like /drivers/virtio/ in your
static compilation branch)?

Could this mock driver always be functionally correct (despite performance) so
that it facilitates the construction of driver tests which then could be run
against other drivers?

> diff --git a/test/linux-generic/Makefile.am b/test/linux-generic/Makefile.am

> index 2b7cbc3..93b14cb 100644

> --- a/test/linux-generic/Makefile.am

> +++ b/test/linux-generic/Makefile.am

> @@ -35,6 +35,7 @@ TESTS = validation/api/pktio/pktio_run.sh \

>  	$(ALL_API_VALIDATION_DIR)/shmem/shmem_main$(EXEEXT) \

>  	$(ALL_API_VALIDATION_DIR)/system/system_main$(EXEEXT) \

>  	$(ALL_DRV_VALIDATION_DIR)/drvatomic/drvatomic_main$(EXEEXT) \

> +	$(ALL_DRV_VALIDATION_DIR)/drvinit/drvinit_main$(EXEEXT) \

>  	$(ALL_DRV_VALIDATION_DIR)/drvshmem/drvshmem_main$(EXEEXT) \

>  	ring/ring_main$(EXEEXT)

>  

> diff --git a/test/m4/configure.m4 b/test/m4/configure.m4

> index 460e844..a7661d6 100644

> --- a/test/m4/configure.m4

> +++ b/test/m4/configure.m4

> @@ -1,3 +1,6 @@

>  m4_include([test/common_plat/m4/configure.m4])

>  

>  AC_CONFIG_FILES([test/Makefile])

> +

> +#expose the OS variations that tests needs to know in test/test_config.h

> +AC_CONFIG_FILES([test/test_config.h])

> diff --git a/test/test_config.h.in b/test/test_config.h.in

> new file mode 100644

> index 0000000..d5850b6

> --- /dev/null

> +++ b/test/test_config.h.in

> @@ -0,0 +1,13 @@

> +/* Copyright (c) 2016, Linaro Limited

> + * All rights reserved.

> + *

> + * SPDX-License-Identifier:     BSD-3-Clause

> + */

> +

> +/* config.h.in is parsed by automake which performs substitutions

> + * according to the AC_SUBST macro given in m4 files.

> + */

> +

> +/* The driver test needs to know which file to load (.so for dlopen...)

> + * the test will return 77 (SKIP) if no file can be loaded              */

> +#define HAVE_DLFCN_H @HAVE_DLFCN_H@

> -- 

> 2.7.4

>
Christophe Milard Nov. 1, 2016, 8:15 a.m. UTC | #2
On 25 October 2016 at 08:56, Brian Brooks <brian.brooks@linaro.org> wrote:
> On 10/31 19:58:43, Christophe Milard wrote:

>> Trying to fix a proper structure for driver tests in the hard world

>> of autotools

>>

>> Signed-off-by: Christophe Milard <christophe.milard@linaro.org>

>> ---

>>  test/.gitignore                                    |  1 +

>>  test/Makefile.inc                                  |  3 +-

>>  test/common_plat/m4/configure.m4                   |  1 +

>>  test/common_plat/validation/Makefile.inc           |  1 -

>>  test/common_plat/validation/drv/Makefile.am        |  1 +

>>  test/common_plat/validation/drv/drvinit/.gitignore |  1 +

>>  .../common_plat/validation/drv/drvinit/Makefile.am | 25 ++++++++++

>>  test/common_plat/validation/drv/drvinit/drvinit.c  | 58 ++++++++++++++++++++++

>>  test/common_plat/validation/drv/drvinit/drvinit.h  | 24 +++++++++

>>  .../validation/drv/drvinit/drvinit_main.c          | 12 +++++

>>  .../validation/drv/drvinit/empty_driver.c          | 12 +++++

>>  test/linux-generic/Makefile.am                     |  1 +

>>  test/m4/configure.m4                               |  3 ++

>>  test/test_config.h.in                              | 13 +++++

>>  14 files changed, 154 insertions(+), 2 deletions(-)

>>  create mode 100644 test/.gitignore

>>  create mode 100644 test/common_plat/validation/drv/drvinit/.gitignore

>>  create mode 100644 test/common_plat/validation/drv/drvinit/Makefile.am

>>  create mode 100644 test/common_plat/validation/drv/drvinit/drvinit.c

>>  create mode 100644 test/common_plat/validation/drv/drvinit/drvinit.h

>>  create mode 100644 test/common_plat/validation/drv/drvinit/drvinit_main.c

>>  create mode 100644 test/common_plat/validation/drv/drvinit/empty_driver.c

>>  create mode 100644 test/test_config.h.in

>>

>> diff --git a/test/.gitignore b/test/.gitignore

>> new file mode 100644

>> index 0000000..4be1df5

>> --- /dev/null

>> +++ b/test/.gitignore

>> @@ -0,0 +1 @@

>> +test_config.h

>> diff --git a/test/Makefile.inc b/test/Makefile.inc

>> index 1ebc047..923ca21 100644

>> --- a/test/Makefile.inc

>> +++ b/test/Makefile.inc

>> @@ -12,7 +12,8 @@ INCFLAGS = \

>>       -I$(top_srcdir)/include \

>>       -I$(top_srcdir)/platform/@with_platform@/include \

>>       -I$(top_srcdir)/test \

>> -     -I$(top_builddir)/include

>> +     -I$(top_builddir)/include \

>> +     -I$(top_builddir)/test

>>

>>  AM_CFLAGS += $(INCFLAGS)

>>  AM_CXXFLAGS = $(INCFLAGS)

>> diff --git a/test/common_plat/m4/configure.m4 b/test/common_plat/m4/configure.m4

>> index 1fc350d..32ac8c4 100644

>> --- a/test/common_plat/m4/configure.m4

>> +++ b/test/common_plat/m4/configure.m4

>> @@ -33,4 +33,5 @@ AC_CONFIG_FILES([test/common_plat/Makefile

>>                test/common_plat/validation/api/traffic_mngr/Makefile

>>                test/common_plat/validation/drv/Makefile

>>                test/common_plat/validation/drv/drvatomic/Makefile

>> +              test/common_plat/validation/drv/drvinit/Makefile

>>                test/common_plat/validation/drv/drvshmem/Makefile])

>> diff --git a/test/common_plat/validation/Makefile.inc b/test/common_plat/validation/Makefile.inc

>> index ffba620..36c9899 100644

>> --- a/test/common_plat/validation/Makefile.inc

>> +++ b/test/common_plat/validation/Makefile.inc

>> @@ -8,7 +8,6 @@ COMMON_DIR = $(top_builddir)/test/common_plat/common

>>  AUTOMAKE_OPTIONS = nostdinc

>>

>>  AM_CFLAGS += -I$(top_srcdir)/test/common_plat/common

>> -AM_LDFLAGS += -static

>>

>>  LIBCUNIT_COMMON = $(COMMON_DIR)/libcunit_common.la

>>  LIBCPUMASK_COMMON = $(COMMON_DIR)/libcpumask_common.la

>> diff --git a/test/common_plat/validation/drv/Makefile.am b/test/common_plat/validation/drv/Makefile.am

>> index bcdb92e..1574f3d 100644

>> --- a/test/common_plat/validation/drv/Makefile.am

>> +++ b/test/common_plat/validation/drv/Makefile.am

>> @@ -1,4 +1,5 @@

>>  ODPDRV_MODULES = drvatomic \

>> +              drvinit \

>>                drvshmem

>>

>>  SUBDIRS = $(ODPDRV_MODULES)

>> diff --git a/test/common_plat/validation/drv/drvinit/.gitignore b/test/common_plat/validation/drv/drvinit/.gitignore

>> new file mode 100644

>> index 0000000..d630ef5

>> --- /dev/null

>> +++ b/test/common_plat/validation/drv/drvinit/.gitignore

>> @@ -0,0 +1 @@

>> +drvinit_main

>> diff --git a/test/common_plat/validation/drv/drvinit/Makefile.am b/test/common_plat/validation/drv/drvinit/Makefile.am

>> new file mode 100644

>> index 0000000..8ccf2aa

>> --- /dev/null

>> +++ b/test/common_plat/validation/drv/drvinit/Makefile.am

>> @@ -0,0 +1,25 @@

>> +include ../Makefile.inc

>> +include $(top_srcdir)/platform/@with_platform@/Makefile.inc

>> +

>> +ABS_TEST_BUILDDIR = $(abs_top_builddir)/test/common_plat/validation/drv/drvinit

>> +

>> +noinst_LTLIBRARIES = libtestdrvinit.la

>> +libtestdrvinit_la_SOURCES = drvinit.c

>> +

>> +# the minimalist driver:

>> +lib_LTLIBRARIES = empty_driver.la

>> +empty_driver_la_SOURCES = empty_driver.c

>> +empty_driver_la_LDFLAGS = $(AM_LDFLAGS) -module -shared -export-dynamic \

>> +                       -avoid-version

>> +

>> +# the program trying to load the driver:

>> +# autotools ack: poking straight into .libs to find the ".so" file...

>> +# and hardcoding rpath...

>> +test_PROGRAMS = drvinit_main$(EXEEXT)

>> +drvinit_main_SOURCES = drvinit_main.c

>> +drvinit_main_LDADD = libtestdrvinit.la $(LIBCUNIT_COMMON) $(LIBODP)

>> +drvinit_main_LDFLAGS = $(AM_LDFLAGS) \

>> +                  -rpath $(ABS_TEST_BUILDDIR)/.libs \

>> +                  -rpath $(libdir)

>> +

>> +EXTRA_DIST = drvinit.h

>> diff --git a/test/common_plat/validation/drv/drvinit/drvinit.c b/test/common_plat/validation/drv/drvinit/drvinit.c

>> new file mode 100644

>> index 0000000..e79d68a

>> --- /dev/null

>> +++ b/test/common_plat/validation/drv/drvinit/drvinit.c

>> @@ -0,0 +1,58 @@

>> +/* Copyright (c) 2016, Linaro Limited

>> + * All rights reserved.

>> + *

>> + * SPDX-License-Identifier:     BSD-3-Clause

>> + */

>> +

>> +#include <test_config.h>

>> +#include <odp_drv.h>

>> +#include <odp_api.h>

>> +#include <odp_cunit_common.h>

>> +#include "drvinit.h"

>> +#include <stdlib.h>

>> +

>> +#define TEST_SKIPPED 77

>> +

>> +/*

>> + * basic tests

>> + */

>> +void drvinit_test_load(void)

>> +{

>> +#if HAVE_DLFCN_H

>> +     CU_ASSERT(odp_load_driver("empty_driver.so") == 0);

>> +#endif

>> +}

>> +

>> +odp_testinfo_t drvinit_suite[] = {

>> +     ODP_TEST_INFO(drvinit_test_load),

>> +     ODP_TEST_INFO_NULL,

>> +};

>> +

>> +odp_suiteinfo_t drvinit_suites[] = {

>> +     {"Driver load", NULL, NULL, drvinit_suite},

>> +     ODP_SUITE_INFO_NULL,

>> +};

>> +

>> +int drvinit_main(int argc, char *argv[])

>> +{

>> +     int ret;

>> +

>> +     /*

>> +      * none of the following can be performed if we don't have

>> +      * some kind of dynamic loading (currentely: dlopen)

>> +      */

>> +#if !HAVE_DLFCN_H

>> +     return TEST_SKIPPED;

>> +#endif

>> +

>> +     /* parse common options: */

>> +     if (odp_cunit_parse_options(argc, argv))

>> +             return -1;

>> +

>> +     ret = odp_cunit_register(drvinit_suites);

>> +

>> +     if (ret == 0)

>> +             ret = odp_cunit_run();

>> +

>> +     return ret;

>> +}

>> diff --git a/test/common_plat/validation/drv/drvinit/drvinit.h b/test/common_plat/validation/drv/drvinit/drvinit.h

>> new file mode 100644

>> index 0000000..1c9f9a6

>> --- /dev/null

>> +++ b/test/common_plat/validation/drv/drvinit/drvinit.h

>> @@ -0,0 +1,24 @@

>> +/* Copyright (c) 2016, Linaro Limited

>> + * All rights reserved.

>> + *

>> + * SPDX-License-Identifier:     BSD-3-Clause

>> + */

>> +

>> +#ifndef _ODP_TEST_DRVINIT_H_

>> +#define _ODP_TEST_DRVINIT_H_

>> +

>> +#include <odp_cunit_common.h>

>> +

>> +/* test functions: */

>> +void drvinit_test_load(void);

>> +

>> +/* test arrays: */

>> +extern odp_testinfo_t drvinit_suite[];

>> +

>> +/* test registry: */

>> +extern odp_suiteinfo_t drvinit_suites[];

>> +

>> +/* main test program: */

>> +int drvinit_main(int argc, char *argv[]);

>> +

>> +#endif

>> diff --git a/test/common_plat/validation/drv/drvinit/drvinit_main.c b/test/common_plat/validation/drv/drvinit/drvinit_main.c

>> new file mode 100644

>> index 0000000..2abfd20

>> --- /dev/null

>> +++ b/test/common_plat/validation/drv/drvinit/drvinit_main.c

>> @@ -0,0 +1,12 @@

>> +/* Copyright (c) 2016, Linaro Limited

>> + * All rights reserved.

>> + *

>> + * SPDX-License-Identifier:     BSD-3-Clause

>> + */

>> +

>> +#include "drvinit.h"

>> +

>> +int main(int argc, char *argv[])

>> +{

>> +     return drvinit_main(argc, argv);

>> +}

>> diff --git a/test/common_plat/validation/drv/drvinit/empty_driver.c b/test/common_plat/validation/drv/drvinit/empty_driver.c

>> new file mode 100644

>> index 0000000..d2cd1bb

>> --- /dev/null

>> +++ b/test/common_plat/validation/drv/drvinit/empty_driver.c

>> @@ -0,0 +1,12 @@

>> +#include <odp_drv.h>

>> +

>> +static void __attribute__ ((constructor)) basic_driver_init(void)

>> +{

>> +     odpdrv_driver_param_t params;

>> +

>> +     params.name = "basic_driver";

>> +     params.bus  = PCI;

>> +     params.type = PCI_VIRTIO;

>> +

>> +     odpdrv_driver_register(&params);

>> +}

>

> Is this a mock driver since it isn't in /drivers/ (like /drivers/virtio/ in your

> static compilation branch)?


This driver is just a part of a test: testing that the init phase of
the drivers, i.e. making sure that the odp_load_driver(), actually
loads the pointed driver and that the odpdrv_driver_register()
function gets called
The /driver directory that you saw is meant for real drivers.

>

> Could this mock driver always be functionally correct (despite performance) so

> that it facilitates the construction of driver tests which then could be run

> against other drivers?


I intend to construct a virtio driver (real one) in /driver
But I see 2 group of tests:
1) those testing the odpdrv interface (i.e. testing the interfaces of
ODP), which the above test is an example of: these tests will
sometimes include fake drivers bit, aimed to test ODP south (and
sometimes north) interfaces. These tests belong to the ODP test
directory.

2) those testing the real drivers. I assumes these will be located in
driver/test or something like that. they are not ODP tests, but driver
tests.

Christophe.
>

>> diff --git a/test/linux-generic/Makefile.am b/test/linux-generic/Makefile.am

>> index 2b7cbc3..93b14cb 100644

>> --- a/test/linux-generic/Makefile.am

>> +++ b/test/linux-generic/Makefile.am

>> @@ -35,6 +35,7 @@ TESTS = validation/api/pktio/pktio_run.sh \

>>       $(ALL_API_VALIDATION_DIR)/shmem/shmem_main$(EXEEXT) \

>>       $(ALL_API_VALIDATION_DIR)/system/system_main$(EXEEXT) \

>>       $(ALL_DRV_VALIDATION_DIR)/drvatomic/drvatomic_main$(EXEEXT) \

>> +     $(ALL_DRV_VALIDATION_DIR)/drvinit/drvinit_main$(EXEEXT) \

>>       $(ALL_DRV_VALIDATION_DIR)/drvshmem/drvshmem_main$(EXEEXT) \

>>       ring/ring_main$(EXEEXT)

>>

>> diff --git a/test/m4/configure.m4 b/test/m4/configure.m4

>> index 460e844..a7661d6 100644

>> --- a/test/m4/configure.m4

>> +++ b/test/m4/configure.m4

>> @@ -1,3 +1,6 @@

>>  m4_include([test/common_plat/m4/configure.m4])

>>

>>  AC_CONFIG_FILES([test/Makefile])

>> +

>> +#expose the OS variations that tests needs to know in test/test_config.h

>> +AC_CONFIG_FILES([test/test_config.h])

>> diff --git a/test/test_config.h.in b/test/test_config.h.in

>> new file mode 100644

>> index 0000000..d5850b6

>> --- /dev/null

>> +++ b/test/test_config.h.in

>> @@ -0,0 +1,13 @@

>> +/* Copyright (c) 2016, Linaro Limited

>> + * All rights reserved.

>> + *

>> + * SPDX-License-Identifier:     BSD-3-Clause

>> + */

>> +

>> +/* config.h.in is parsed by automake which performs substitutions

>> + * according to the AC_SUBST macro given in m4 files.

>> + */

>> +

>> +/* The driver test needs to know which file to load (.so for dlopen...)

>> + * the test will return 77 (SKIP) if no file can be loaded              */

>> +#define HAVE_DLFCN_H @HAVE_DLFCN_H@

>> --

>> 2.7.4

>>
diff mbox

Patch

diff --git a/test/.gitignore b/test/.gitignore
new file mode 100644
index 0000000..4be1df5
--- /dev/null
+++ b/test/.gitignore
@@ -0,0 +1 @@ 
+test_config.h
diff --git a/test/Makefile.inc b/test/Makefile.inc
index 1ebc047..923ca21 100644
--- a/test/Makefile.inc
+++ b/test/Makefile.inc
@@ -12,7 +12,8 @@  INCFLAGS = \
 	-I$(top_srcdir)/include \
 	-I$(top_srcdir)/platform/@with_platform@/include \
 	-I$(top_srcdir)/test \
-	-I$(top_builddir)/include
+	-I$(top_builddir)/include \
+	-I$(top_builddir)/test
 
 AM_CFLAGS += $(INCFLAGS)
 AM_CXXFLAGS = $(INCFLAGS)
diff --git a/test/common_plat/m4/configure.m4 b/test/common_plat/m4/configure.m4
index 1fc350d..32ac8c4 100644
--- a/test/common_plat/m4/configure.m4
+++ b/test/common_plat/m4/configure.m4
@@ -33,4 +33,5 @@  AC_CONFIG_FILES([test/common_plat/Makefile
 		 test/common_plat/validation/api/traffic_mngr/Makefile
 		 test/common_plat/validation/drv/Makefile
 		 test/common_plat/validation/drv/drvatomic/Makefile
+		 test/common_plat/validation/drv/drvinit/Makefile
 		 test/common_plat/validation/drv/drvshmem/Makefile])
diff --git a/test/common_plat/validation/Makefile.inc b/test/common_plat/validation/Makefile.inc
index ffba620..36c9899 100644
--- a/test/common_plat/validation/Makefile.inc
+++ b/test/common_plat/validation/Makefile.inc
@@ -8,7 +8,6 @@  COMMON_DIR = $(top_builddir)/test/common_plat/common
 AUTOMAKE_OPTIONS = nostdinc
 
 AM_CFLAGS += -I$(top_srcdir)/test/common_plat/common
-AM_LDFLAGS += -static
 
 LIBCUNIT_COMMON = $(COMMON_DIR)/libcunit_common.la
 LIBCPUMASK_COMMON = $(COMMON_DIR)/libcpumask_common.la
diff --git a/test/common_plat/validation/drv/Makefile.am b/test/common_plat/validation/drv/Makefile.am
index bcdb92e..1574f3d 100644
--- a/test/common_plat/validation/drv/Makefile.am
+++ b/test/common_plat/validation/drv/Makefile.am
@@ -1,4 +1,5 @@ 
 ODPDRV_MODULES = drvatomic \
+		 drvinit \
 		 drvshmem
 
 SUBDIRS = $(ODPDRV_MODULES)
diff --git a/test/common_plat/validation/drv/drvinit/.gitignore b/test/common_plat/validation/drv/drvinit/.gitignore
new file mode 100644
index 0000000..d630ef5
--- /dev/null
+++ b/test/common_plat/validation/drv/drvinit/.gitignore
@@ -0,0 +1 @@ 
+drvinit_main
diff --git a/test/common_plat/validation/drv/drvinit/Makefile.am b/test/common_plat/validation/drv/drvinit/Makefile.am
new file mode 100644
index 0000000..8ccf2aa
--- /dev/null
+++ b/test/common_plat/validation/drv/drvinit/Makefile.am
@@ -0,0 +1,25 @@ 
+include ../Makefile.inc
+include $(top_srcdir)/platform/@with_platform@/Makefile.inc
+
+ABS_TEST_BUILDDIR = $(abs_top_builddir)/test/common_plat/validation/drv/drvinit
+
+noinst_LTLIBRARIES = libtestdrvinit.la
+libtestdrvinit_la_SOURCES = drvinit.c
+
+# the minimalist driver:
+lib_LTLIBRARIES = empty_driver.la
+empty_driver_la_SOURCES = empty_driver.c
+empty_driver_la_LDFLAGS = $(AM_LDFLAGS) -module -shared -export-dynamic \
+			  -avoid-version
+
+# the program trying to load the driver:
+# autotools ack: poking straight into .libs to find the ".so" file...
+# and hardcoding rpath...
+test_PROGRAMS = drvinit_main$(EXEEXT)
+drvinit_main_SOURCES = drvinit_main.c
+drvinit_main_LDADD = libtestdrvinit.la $(LIBCUNIT_COMMON) $(LIBODP)
+drvinit_main_LDFLAGS = $(AM_LDFLAGS) \
+		     -rpath $(ABS_TEST_BUILDDIR)/.libs \
+		     -rpath $(libdir)
+
+EXTRA_DIST = drvinit.h
diff --git a/test/common_plat/validation/drv/drvinit/drvinit.c b/test/common_plat/validation/drv/drvinit/drvinit.c
new file mode 100644
index 0000000..e79d68a
--- /dev/null
+++ b/test/common_plat/validation/drv/drvinit/drvinit.c
@@ -0,0 +1,58 @@ 
+/* Copyright (c) 2016, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+#include <test_config.h>
+#include <odp_drv.h>
+#include <odp_api.h>
+#include <odp_cunit_common.h>
+#include "drvinit.h"
+#include <stdlib.h>
+
+#define TEST_SKIPPED 77
+
+/*
+ * basic tests
+ */
+void drvinit_test_load(void)
+{
+#if HAVE_DLFCN_H
+	CU_ASSERT(odp_load_driver("empty_driver.so") == 0);
+#endif
+}
+
+odp_testinfo_t drvinit_suite[] = {
+	ODP_TEST_INFO(drvinit_test_load),
+	ODP_TEST_INFO_NULL,
+};
+
+odp_suiteinfo_t drvinit_suites[] = {
+	{"Driver load", NULL, NULL, drvinit_suite},
+	ODP_SUITE_INFO_NULL,
+};
+
+int drvinit_main(int argc, char *argv[])
+{
+	int ret;
+
+	/*
+	 * none of the following can be performed if we don't have
+	 * some kind of dynamic loading (currentely: dlopen)
+	 */
+#if !HAVE_DLFCN_H
+	return TEST_SKIPPED;
+#endif
+
+	/* parse common options: */
+	if (odp_cunit_parse_options(argc, argv))
+		return -1;
+
+	ret = odp_cunit_register(drvinit_suites);
+
+	if (ret == 0)
+		ret = odp_cunit_run();
+
+	return ret;
+}
diff --git a/test/common_plat/validation/drv/drvinit/drvinit.h b/test/common_plat/validation/drv/drvinit/drvinit.h
new file mode 100644
index 0000000..1c9f9a6
--- /dev/null
+++ b/test/common_plat/validation/drv/drvinit/drvinit.h
@@ -0,0 +1,24 @@ 
+/* Copyright (c) 2016, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+#ifndef _ODP_TEST_DRVINIT_H_
+#define _ODP_TEST_DRVINIT_H_
+
+#include <odp_cunit_common.h>
+
+/* test functions: */
+void drvinit_test_load(void);
+
+/* test arrays: */
+extern odp_testinfo_t drvinit_suite[];
+
+/* test registry: */
+extern odp_suiteinfo_t drvinit_suites[];
+
+/* main test program: */
+int drvinit_main(int argc, char *argv[]);
+
+#endif
diff --git a/test/common_plat/validation/drv/drvinit/drvinit_main.c b/test/common_plat/validation/drv/drvinit/drvinit_main.c
new file mode 100644
index 0000000..2abfd20
--- /dev/null
+++ b/test/common_plat/validation/drv/drvinit/drvinit_main.c
@@ -0,0 +1,12 @@ 
+/* Copyright (c) 2016, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+#include "drvinit.h"
+
+int main(int argc, char *argv[])
+{
+	return drvinit_main(argc, argv);
+}
diff --git a/test/common_plat/validation/drv/drvinit/empty_driver.c b/test/common_plat/validation/drv/drvinit/empty_driver.c
new file mode 100644
index 0000000..d2cd1bb
--- /dev/null
+++ b/test/common_plat/validation/drv/drvinit/empty_driver.c
@@ -0,0 +1,12 @@ 
+#include <odp_drv.h>
+
+static void __attribute__ ((constructor)) basic_driver_init(void)
+{
+	odpdrv_driver_param_t params;
+
+	params.name = "basic_driver";
+	params.bus  = PCI;
+	params.type = PCI_VIRTIO;
+
+	odpdrv_driver_register(&params);
+}
diff --git a/test/linux-generic/Makefile.am b/test/linux-generic/Makefile.am
index 2b7cbc3..93b14cb 100644
--- a/test/linux-generic/Makefile.am
+++ b/test/linux-generic/Makefile.am
@@ -35,6 +35,7 @@  TESTS = validation/api/pktio/pktio_run.sh \
 	$(ALL_API_VALIDATION_DIR)/shmem/shmem_main$(EXEEXT) \
 	$(ALL_API_VALIDATION_DIR)/system/system_main$(EXEEXT) \
 	$(ALL_DRV_VALIDATION_DIR)/drvatomic/drvatomic_main$(EXEEXT) \
+	$(ALL_DRV_VALIDATION_DIR)/drvinit/drvinit_main$(EXEEXT) \
 	$(ALL_DRV_VALIDATION_DIR)/drvshmem/drvshmem_main$(EXEEXT) \
 	ring/ring_main$(EXEEXT)
 
diff --git a/test/m4/configure.m4 b/test/m4/configure.m4
index 460e844..a7661d6 100644
--- a/test/m4/configure.m4
+++ b/test/m4/configure.m4
@@ -1,3 +1,6 @@ 
 m4_include([test/common_plat/m4/configure.m4])
 
 AC_CONFIG_FILES([test/Makefile])
+
+#expose the OS variations that tests needs to know in test/test_config.h
+AC_CONFIG_FILES([test/test_config.h])
diff --git a/test/test_config.h.in b/test/test_config.h.in
new file mode 100644
index 0000000..d5850b6
--- /dev/null
+++ b/test/test_config.h.in
@@ -0,0 +1,13 @@ 
+/* Copyright (c) 2016, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+/* config.h.in is parsed by automake which performs substitutions
+ * according to the AC_SUBST macro given in m4 files.
+ */
+
+/* The driver test needs to know which file to load (.so for dlopen...)
+ * the test will return 77 (SKIP) if no file can be loaded              */
+#define HAVE_DLFCN_H @HAVE_DLFCN_H@