From 7c32430742a01f263bf8a989f79d8b0faac0ccbd Mon Sep 17 00:00:00 2001 From: Haocheng Liu <haocheng.liu@kitware.com> Date: Mon, 11 Sep 2017 15:34:29 -0400 Subject: [PATCH] TESTING: Make binding tests able to run in parallel Redesign the logic for C binding test with google framework. In the future we should also add validation for binding tests. --- cmake/ADIOSFunctions.cmake | 16 +++- testing/adios2/bindings/C/CMakeLists.txt | 13 +-- ...estBPWriteTypes.c => TestBPWriteTypes.cpp} | 45 +++++++-- .../bindings/C/TestBPWriteTypes_nompi.c | 92 ------------------- testing/adios2/bindings/CMakeLists.txt | 2 +- .../adios2/bindings/fortran/CMakeLists.txt | 8 +- testing/adios2/bindings/python/CMakeLists.txt | 9 +- 7 files changed, 68 insertions(+), 117 deletions(-) rename testing/adios2/bindings/C/{TestBPWriteTypes.c => TestBPWriteTypes.cpp} (83%) delete mode 100644 testing/adios2/bindings/C/TestBPWriteTypes_nompi.c diff --git a/cmake/ADIOSFunctions.cmake b/cmake/ADIOSFunctions.cmake index 9fcc856cb..c6ad25a2a 100644 --- a/cmake/ADIOSFunctions.cmake +++ b/cmake/ADIOSFunctions.cmake @@ -22,11 +22,19 @@ function(message_pad msg out_len out_msg) endif() endfunction() -function(python_add_test name script) - add_test(NAME ${name} - COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${script} ${ARGN} +function(python_add_test) + set(options) + set(oneValueArgs + NAME ) - set_property(TEST ${name} PROPERTY + # EXEC_WRAPPER: Any extra arguments to pass on the command line before test case + # SCRIPT: Script name and corresponding comand line inputs + set(multiValueArgs EXEC_WRAPPER SCRIPT) + cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}") + add_test(NAME ${ARGS_NAME} + COMMAND ${ARGS_EXEC_WRAPPER} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${ARGS_SCRIPT} + ) + set_property(TEST ${ARGS_NAME} PROPERTY ENVIRONMENT "PYTHONPATH=${ADIOS2_BINARY_DIR}/${CMAKE_INSTALL_PYTHONDIR}:$ENV{PYTHONPATH}" ) endfunction() diff --git a/testing/adios2/bindings/C/CMakeLists.txt b/testing/adios2/bindings/C/CMakeLists.txt index 9897e1b03..57f251f96 100644 --- a/testing/adios2/bindings/C/CMakeLists.txt +++ b/testing/adios2/bindings/C/CMakeLists.txt @@ -3,14 +3,15 @@ # accompanying file Copyright.txt for details. #------------------------------------------------------------------------------# +add_executable(TestBPWriteTypes_c TestBPWriteTypes.cpp) +target_link_libraries(TestBPWriteTypes_c adios2 gtest) + if(ADIOS2_HAVE_MPI) - add_executable(TestBPWriteTypes_c TestBPWriteTypes.c) target_include_directories(TestBPWriteTypes_c PRIVATE ${MPI_C_INCLUDE_PATH}) target_link_libraries(TestBPWriteTypes_c ${MPI_C_LIBRARIES}) -else() - add_executable(TestBPWriteTypes_c TestBPWriteTypes_nompi.c) + set(extra_test_args + EXEC_WRAPPER + ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS}) endif() -target_link_libraries(TestBPWriteTypes_c adios2) - -add_test(NAME BPWrite_c COMMAND TestBPWriteTypes_c) +gtest_add_tests(TARGET TestBPWriteTypes_c ${extra_test_args}) diff --git a/testing/adios2/bindings/C/TestBPWriteTypes.c b/testing/adios2/bindings/C/TestBPWriteTypes.cpp similarity index 83% rename from testing/adios2/bindings/C/TestBPWriteTypes.c rename to testing/adios2/bindings/C/TestBPWriteTypes.cpp index 55917aad8..c05c63001 100644 --- a/testing/adios2/bindings/C/TestBPWriteTypes.c +++ b/testing/adios2/bindings/C/TestBPWriteTypes.cpp @@ -5,23 +5,35 @@ * TestBPWriteTypes.c * * Created on: Aug 9, 2017 - * Author: wgodoy + * Author: Haocheng */ +#include <adios2_c.h> + +#ifdef ADIOS2_HAVE_MPI #include <mpi.h> +#endif -#include <adios2_c.h> +#include <gtest/gtest.h> #include "SmallTestData_c.h" -int main(int argc, char *argv[]) +class BPWriteTypes : public ::testing::Test { - MPI_Init(&argc, &argv); - int rank, size; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); +public: + BPWriteTypes() = default; +}; +TEST_F(BPWriteTypes, ADIOS2BPWriteTypes) +{ + int rank(0), size(0); +#ifdef ADIOS2_HAVE_MPI adios2_ADIOS *adiosH = adios2_init(MPI_COMM_WORLD, adios2_debug_mode_on); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#else + adios2_ADIOS *adiosH = adios2_init_nompi(adios2_debug_mode_on); +#endif // IO adios2_IO *ioH = adios2_declare_io(adiosH, "CArrayTypes"); @@ -96,7 +108,24 @@ int main(int argc, char *argv[]) // deallocate adiosH adios2_finalize(adiosH); +} +//****************************************************************************** +// main +//****************************************************************************** + +int main(int argc, char **argv) +{ +#ifdef ADIOS2_HAVE_MPI + MPI_Init(nullptr, nullptr); +#endif + + ::testing::InitGoogleTest(&argc, argv); + int result = RUN_ALL_TESTS(); + +#ifdef ADIOS2_HAVE_MPI MPI_Finalize(); - return 0; +#endif + + return result; } diff --git a/testing/adios2/bindings/C/TestBPWriteTypes_nompi.c b/testing/adios2/bindings/C/TestBPWriteTypes_nompi.c deleted file mode 100644 index 247e5b4bd..000000000 --- a/testing/adios2/bindings/C/TestBPWriteTypes_nompi.c +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Distributed under the OSI-approved Apache License, Version 2.0. See - * accompanying file Copyright.txt for details. - * - * TestBPWriteTypes.c - * - * Created on: Aug 9, 2017 - * Author: wgodoy - */ - -#include <adios2_c.h> - -#include "SmallTestData_c.h" - -int main(int argc, char *argv[]) -{ - adios2_ADIOS *adiosH = adios2_init_nompi(adios2_debug_mode_on); - - // IO - adios2_IO *ioH = adios2_declare_io(adiosH, "CArrayTypes"); - // Set engine parameters - adios2_set_engine(ioH, "BPFileWriter"); - adios2_set_param(ioH, "ProfileUnits", "Microseconds"); - adios2_set_param(ioH, "Threads", "1"); - - // Set transport and parameters - const unsigned int transportID = adios2_add_transport(ioH, "File"); - adios2_set_transport_param(ioH, transportID, "library", "fstream"); - - // count dims are allocated in stack - size_t count[1]; - count[0] = data_Nx; - - // Define variables in ioH - { - adios2_define_variable(ioH, "varI8", adios2_type_char, 1, NULL, NULL, - count, adios2_constant_dims_true); - adios2_define_variable(ioH, "varI16", adios2_type_short, 1, NULL, NULL, - count, adios2_constant_dims_true); - adios2_define_variable(ioH, "varI32", adios2_type_int, 1, NULL, NULL, - count, adios2_constant_dims_true); - adios2_define_variable(ioH, "varI64", adios2_type_long_int, 1, NULL, - NULL, count, adios2_constant_dims_true); - - adios2_define_variable(ioH, "varU8", adios2_type_unsigned_char, 1, NULL, - NULL, count, adios2_constant_dims_true); - adios2_define_variable(ioH, "varU16", adios2_type_unsigned_short, 1, - NULL, NULL, count, adios2_constant_dims_true); - adios2_define_variable(ioH, "varU32", adios2_type_unsigned_int, 1, NULL, - NULL, count, adios2_constant_dims_true); - adios2_define_variable(ioH, "varU64", adios2_type_unsigned_long_int, 1, - NULL, NULL, count, adios2_constant_dims_true); - adios2_define_variable(ioH, "varR32", adios2_type_float, 1, NULL, NULL, - count, adios2_constant_dims_true); - adios2_define_variable(ioH, "varR64", adios2_type_double, 1, NULL, NULL, - count, adios2_constant_dims_true); - } - // get variables - adios2_Variable *varI8 = adios2_get_variable(ioH, "varI8"); - adios2_Variable *varI16 = adios2_get_variable(ioH, "varI16"); - adios2_Variable *varI32 = adios2_get_variable(ioH, "varI32"); - adios2_Variable *varI64 = adios2_get_variable(ioH, "varI64"); - adios2_Variable *varU8 = adios2_get_variable(ioH, "varU8"); - adios2_Variable *varU16 = adios2_get_variable(ioH, "varU16"); - adios2_Variable *varU32 = adios2_get_variable(ioH, "varU32"); - adios2_Variable *varU64 = adios2_get_variable(ioH, "varU64"); - adios2_Variable *varR32 = adios2_get_variable(ioH, "varR32"); - adios2_Variable *varR64 = adios2_get_variable(ioH, "varR64"); - - // Open Engine handler, Write and Close - adios2_Engine *engineH = - adios2_open(ioH, "ctypes.bp", adios2_open_mode_write); - - adios2_write(engineH, varI8, data_I8); - adios2_write(engineH, varI16, data_I16); - adios2_write(engineH, varI32, data_I32); - adios2_write(engineH, varI64, data_I64); - - adios2_write(engineH, varU8, data_U8); - adios2_write(engineH, varU16, data_U16); - adios2_write(engineH, varU32, data_U32); - adios2_write(engineH, varU64, data_U64); - - adios2_write(engineH, varR32, data_R32); - adios2_write(engineH, varR64, data_R64); - - adios2_close(engineH); - - // deallocate adiosH - adios2_finalize(adiosH); - return 0; -} diff --git a/testing/adios2/bindings/CMakeLists.txt b/testing/adios2/bindings/CMakeLists.txt index e82e71049..c775e4e0c 100644 --- a/testing/adios2/bindings/CMakeLists.txt +++ b/testing/adios2/bindings/CMakeLists.txt @@ -11,4 +11,4 @@ if(ADIOS2_HAVE_Fortran) add_subdirectory(fortran) endif() -add_subdirectory(C) \ No newline at end of file +add_subdirectory(C) diff --git a/testing/adios2/bindings/fortran/CMakeLists.txt b/testing/adios2/bindings/fortran/CMakeLists.txt index 913dab1a7..02aec3e50 100644 --- a/testing/adios2/bindings/fortran/CMakeLists.txt +++ b/testing/adios2/bindings/fortran/CMakeLists.txt @@ -7,15 +7,17 @@ add_executable(TestBPWriteTypes_f SmallTestData_mod.f90) if(ADIOS2_HAVE_MPI) target_sources(TestBPWriteTypes_f PRIVATE TestBPWriteTypes.f90) - target_include_directories(TestBPWriteTypes_f + target_include_directories(TestBPWriteTypes_f PRIVATE ${MPI_Fortran_INCLUDE_PATH} ${MPI_C_INCLUDE_PATH}) target_link_libraries(TestBPWriteTypes_f PRIVATE ${MPI_Fortran_LIBRARIES} - ${MPI_C_LIBRARIES}) + ${MPI_C_LIBRARIES}) + set(test_parameters + ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS}) else() target_sources(TestBPWriteTypes_f PRIVATE TestBPWriteTypes_nompi.f90) endif() target_link_libraries(TestBPWriteTypes_f PRIVATE adios2_f) -add_test(NAME BPWrite_f COMMAND TestBPWriteTypes_f) +add_test(NAME BPWrite_f COMMAND ${test_parameters} $<TARGET_FILE:TestBPWriteTypes_f>) diff --git a/testing/adios2/bindings/python/CMakeLists.txt b/testing/adios2/bindings/python/CMakeLists.txt index 96e47759a..6286000b8 100644 --- a/testing/adios2/bindings/python/CMakeLists.txt +++ b/testing/adios2/bindings/python/CMakeLists.txt @@ -4,9 +4,12 @@ #------------------------------------------------------------------------------# if(NOT ADIOS2_HAVE_MPI) - python_add_test(PythonBPWrite TestBPWriteTypes_nompi.py) + python_add_test(NAME PythonBPWrite SCRIPT TestBPWriteTypes_nompi.py) endif() if(ADIOS2_HAVE_MPI) - python_add_test(PythonBPWrite TestBPWriteTypes.py) -endif() \ No newline at end of file + set(test_parameters + EXEC_WRAPPER + ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS}) + python_add_test(NAME PythonBPWrite ${test_parameters} SCRIPT TestBPWriteTypes.py) +endif() -- GitLab