From 6a8a30f7cc62b502303dd4cee6e7c78b3653a373 Mon Sep 17 00:00:00 2001 From: vsr Date: Tue, 7 Apr 2020 15:32:26 +0300 Subject: [PATCH] bos #18951 [CEA 18933] MEDReader tests --- src/Plugins/MEDReader/plugin/CMakeLists.txt | 7 +- .../MEDReader/plugin/Test/CMakeLists.txt | 90 ++++++++++++++----- .../plugin/Test/CTestTestfileInstall.cmake | 31 +++++++ .../plugin/Test/medreadertestlauncher.py | 32 +++++++ src/Plugins/MEDReader/plugin/Test/tests.set | 32 +++++++ 5 files changed, 169 insertions(+), 23 deletions(-) create mode 100644 src/Plugins/MEDReader/plugin/Test/CTestTestfileInstall.cmake create mode 100644 src/Plugins/MEDReader/plugin/Test/medreadertestlauncher.py create mode 100644 src/Plugins/MEDReader/plugin/Test/tests.set diff --git a/src/Plugins/MEDReader/plugin/CMakeLists.txt b/src/Plugins/MEDReader/plugin/CMakeLists.txt index a69b7aa6..ce1dbef3 100644 --- a/src/Plugins/MEDReader/plugin/CMakeLists.txt +++ b/src/Plugins/MEDReader/plugin/CMakeLists.txt @@ -53,7 +53,10 @@ SALOME_ACCUMULATE_ENVIRONMENT(PV_PLUGIN_PATH NOCHECK ${CMAKE_INSTALL_PREFIX}/lib add_subdirectory(MEDLoaderForPV) add_subdirectory(ParaViewPlugin) -option(BUILD_TESTING "Build Plugin Testing" OFF) -if (BUILD_TESTING) +if (CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) + # option to build tests in a standalone mode + option(BUILD_TESTING "Build Plugin Testing" OFF) +endif() +if (SALOME_BUILD_TESTS OR BUILD_TESTING) add_subdirectory(Test) endif() diff --git a/src/Plugins/MEDReader/plugin/Test/CMakeLists.txt b/src/Plugins/MEDReader/plugin/Test/CMakeLists.txt index 87f3f112..a41280ec 100644 --- a/src/Plugins/MEDReader/plugin/Test/CMakeLists.txt +++ b/src/Plugins/MEDReader/plugin/Test/CMakeLists.txt @@ -17,28 +17,76 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -if (PARAVIEW_ENABLE_PYTHON) - file(GLOB pythonTests *.py) - list(FILTER pythonTests EXCLUDE REGEX ".*MEDReaderHelper.py$") - foreach(testFullPath ${pythonTests}) - get_filename_component(testFile ${testFullPath} NAME) - paraview_add_test_python(NO_RT DIRECT_DATA ${testFile}) - get_filename_component(testName ${testFile} NAME_WE) - set_tests_properties(Python-${testName} PROPERTIES ENVIRONMENT "PARAVIEW_DATA_ROOT=${CMAKE_CURRENT_SOURCE_DIR}/Data;LD_LIBRARY_PATH=${QT5_ROOT_DIR}/lib/:${MEDCOUPLING_ROOT_DIR}/lib/:${MEDFILE_ROOT_DIR}/lib/:${HDF5_ROOT_DIR}/lib:${PYTHON_ROOT_DIR}/lib;PYTHONPATH=${MEDCOUPLING_ROOT_DIR}/lib/python3.6/site-packages/;PV_PLUGIN_PATH=${CMAKE_BINARY_DIR}/lib/paraview-5.7/plugins/MEDReader;PARAVIEW_BIN_DIR=${ParaView_DIR}/bin/") +if (CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) + + ########################### + # Tests for standalone mode + ########################### + + if (PARAVIEW_ENABLE_PYTHON) + file(GLOB pythonTests *.py) + list(FILTER pythonTests EXCLUDE REGEX ".*MEDReaderHelper.py$") + list(FILTER pythonTests EXCLUDE REGEX ".*medreadertestlauncher.py$") + foreach(testFullPath ${pythonTests}) + get_filename_component(testFile ${testFullPath} NAME) + paraview_add_test_python(NO_RT DIRECT_DATA ${testFile}) + get_filename_component(testName ${testFile} NAME_WE) + set_tests_properties(Python-${testName} PROPERTIES ENVIRONMENT "PARAVIEW_DATA_ROOT=${CMAKE_CURRENT_SOURCE_DIR}/Data;LD_LIBRARY_PATH=${QT5_ROOT_DIR}/lib/:${MEDCOUPLING_ROOT_DIR}/lib/:${MEDFILE_ROOT_DIR}/lib/:${HDF5_ROOT_DIR}/lib:${PYTHON_ROOT_DIR}/lib;PYTHONPATH=${MEDCOUPLING_ROOT_DIR}/lib/python3.6/site-packages/;PV_PLUGIN_PATH=${CMAKE_BINARY_DIR}/lib/paraview-5.7/plugins/MEDReader;PARAVIEW_BIN_DIR=${ParaView_DIR}/bin/") + endforeach() + endif() + + if(PARAVIEW_USE_QT) + file(GLOB xmlTests *.xml) + foreach(testFullPath ${xmlTests}) + get_filename_component(testFile ${testFullPath} NAME) + get_filename_component(testName ${testFile} NAME_WE) + set (${testName}_USES_DIRECT_DATA ON) + paraview_add_client_tests( + LOAD_PLUGIN MEDReader + PLUGIN_PATH $ + BASELINE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Data/Baseline + TEST_SCRIPTS ${testFile}) + set_tests_properties(pv.${testName} PROPERTIES ENVIRONMENT "PARAVIEW_DATA_ROOT=${CMAKE_CURRENT_SOURCE_DIR}/Data;LD_LIBRARY_PATH=${QT5_ROOT_DIR}/lib/:${MEDCOUPLING_ROOT_DIR}/lib/:${MEDFILE_ROOT_DIR}/lib/:${HDF5_ROOT_DIR}/lib:${PYTHON_ROOT_DIR}/lib") + endforeach() + endif() + +else() + + ######################## + # Tests for PARAVIS mode + ######################## + + include(tests.set) + + salome_generate_tests_environment(tests_env) + list(APPEND tests_env "PARAVIEW_DATA_ROOT=${CMAKE_CURRENT_SOURCE_DIR}/Data") + + set(_helper_script ${CMAKE_CURRENT_SOURCE_DIR}/medreadertestlauncher.py) + set(_baseline_dir ${CMAKE_CURRENT_SOURCE_DIR}/Data/Baseline) + IF(SALOME_PARAVIS_NO_VISU_TESTS) + SET(_other_options "-D") + ENDIF() + + foreach(tfile ${TEST_NUMBERS}) + add_test(Python-testMEDReader${tfile} + ${PYTHON_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/testMEDReader${tfile}.py + -B ${_baseline_dir} ${_other_options}) + set_tests_properties(Python-testMEDReader${tfile} PROPERTIES ENVIRONMENT "${tests_env}") endforeach() -endif() -if (PARAVIEW_USE_QT) - file(GLOB xmlTests *.xml) - foreach(testFullPath ${xmlTests}) - get_filename_component(testFile ${testFullPath} NAME) - get_filename_component(testName ${testFile} NAME_WE) - set (${testName}_USES_DIRECT_DATA ON) - paraview_add_client_tests( - LOAD_PLUGIN MEDReader - PLUGIN_PATH $ - BASELINE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Data/Baseline - TEST_SCRIPTS ${testFile}) - set_tests_properties(pv.${testName} PROPERTIES ENVIRONMENT "PARAVIEW_DATA_ROOT=${CMAKE_CURRENT_SOURCE_DIR}/Data;LD_LIBRARY_PATH=${QT5_ROOT_DIR}/lib/:${MEDCOUPLING_ROOT_DIR}/lib/:${MEDFILE_ROOT_DIR}/lib/:${HDF5_ROOT_DIR}/lib:${PYTHON_ROOT_DIR}/lib") + # Application tests + set(TEST_INSTALL_DIRECTORY ${SALOME_INSTALL_SCRIPT_SCRIPTS}/test/MEDReader) + foreach(tfile ${TEST_NUMBERS}) + install(FILES testMEDReader${tfile}.py + DESTINATION ${TEST_INSTALL_DIRECTORY}) endforeach() + + install(FILES MEDReaderHelper.py tests.set + DESTINATION ${TEST_INSTALL_DIRECTORY}) + install(FILES CTestTestfileInstall.cmake + DESTINATION ${TEST_INSTALL_DIRECTORY} + RENAME CTestTestfile.cmake) + install(DIRECTORY Data/Baseline DESTINATION ${TEST_INSTALL_DIRECTORY}) + endif() diff --git a/src/Plugins/MEDReader/plugin/Test/CTestTestfileInstall.cmake b/src/Plugins/MEDReader/plugin/Test/CTestTestfileInstall.cmake new file mode 100644 index 00000000..95226ee8 --- /dev/null +++ b/src/Plugins/MEDReader/plugin/Test/CTestTestfileInstall.cmake @@ -0,0 +1,31 @@ +# Copyright (C) 2015-2019 CEA/DEN, EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE(tests.set) + +SET(COMPONENT_NAME MEDREADER) +SET(TIMEOUT 60) + +set(BASELINE_DIR "Baseline") + +FOREACH(tfile ${TEST_NUMBERS}) + SET(TEST_NAME MEDREADER_${tfile}) + ADD_TEST(${TEST_NAME} python testMEDReader${tfile}.py -B ${BASELINE_DIR}) + SET_TESTS_PROPERTIES(${TEST_NAME} PROPERTIES LABELS "${COMPONENT_NAME};REQUIRE_X_SERVER" TIMEOUT ${TIMEOUT}) +ENDFOREACH() diff --git a/src/Plugins/MEDReader/plugin/Test/medreadertestlauncher.py b/src/Plugins/MEDReader/plugin/Test/medreadertestlauncher.py new file mode 100644 index 00000000..eeb88b9e --- /dev/null +++ b/src/Plugins/MEDReader/plugin/Test/medreadertestlauncher.py @@ -0,0 +1,32 @@ +import subprocess as sp +import re,sys + +def LaunchMEDReaderTest(fn,baseLineDir): + """ + Tuleap 18933 : wrapper over MEDReader tests. Waiting for better solution. + """ + p = sp.Popen(["python3",fn,"-B",baseLineDir],stdout=sp.PIPE,stderr=sp.PIPE) + a,b = p.communicate() + if p.returncode == 0: + return + + stringToAnalyze = a.decode("utf-8") + linesOfStringToAnalyze = stringToAnalyze.split('\n') + pat = re.compile("[\s+]([\S]+)[\s]*") + zeLine = [elt for elt in linesOfStringToAnalyze if pat.match(elt)] + if len(zeLine) != 1: + raise RuntimeError("Error for test {}".format(fn)) + delta = float(pat.match(zeLine[0]).group(1)) + if delta > 1: + raise RuntimeError("Image comparison failed : {} > 1".format(delta)) + +def LaunchAllTests(baseLineDir): + from glob import glob + fis = glob("testMEDReader*.py") + for fi in fis: + print(fi) + LaunchMEDReaderTest(fi,baseLineDir) + +if __name__ == "__main__": + LaunchMEDReaderTest(sys.argv[1],sys.argv[2]) + diff --git a/src/Plugins/MEDReader/plugin/Test/tests.set b/src/Plugins/MEDReader/plugin/Test/tests.set new file mode 100644 index 00000000..c27dc44f --- /dev/null +++ b/src/Plugins/MEDReader/plugin/Test/tests.set @@ -0,0 +1,32 @@ +# Copyright (C) 2017-2020 CEA/DEN, EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +# This file declares a shared set of MEDREADER tests, used by two test +# approaches: "make test" and "salome test". The former is used just after +# MEDREADER build step, the latter is used from an installed SALOME application. +# +# We here initialize a cmake variable that is used, by file inclusion, in +# CMakeLists.txt (for make test) and CTestTestfileInstall.cmake (for salome +# test). +# This variables is: TEST_NUMBERS. +# Additional variables might be defined if necessary. + +# 11 and 12 have been willingly removed due to problem in image comparisons + +SET(TEST_NUMBERS 0 1 2 3 4 5 6 7 8 9 10 13 14 15 16 17 18 19 20 21 22) -- 2.39.2