HPCW 3.0
Loading...
Searching...
No Matches
icon-test-setup.cmake
Go to the documentation of this file.
1# Copyright (c) 2019 - 2024 Niclas Schroeter
2# Copyright (c) 2019 - 2024 David Guibert
3# All rights reserved.
4#
5# SPDX-License-Identifier: Apache-2.0
6
7include(ExternalData)
8
9function(link_icon_tests icon_test directory_creation validation_test)
10 set_tests_properties(${directory_creation} PROPERTIES FIXTURES_SETUP _setup-${icon_test})
11 set_tests_properties(${icon_test} PROPERTIES FIXTURES_SETUP _run-${icon_test})
12
13 set_tests_properties(${validation_test} PROPERTIES FIXTURES_REQUIRED _run-${icon_test})
14 set_tests_properties(${icon_test} PROPERTIES FIXTURES_REQUIRED _setup-${icon_test})
15endfunction()
16
17function(add_icon_test testname input_data_pkg testcase_numbers_list)
18 #check input list for number of dirs to create
19 set(number_of_testcases 1)
20 list(FIND testcase_numbers_list "${testname}" idx)
21 if(NOT idx EQUAL -1)
22 math(EXPR idx "${idx}+1")
23 list(GET testcase_numbers_list ${idx} number_of_testcases)
24 endif()
25
26 set(copy_flags "-rTn $<$<BOOL:${COPY_ICON_INPUTS}>:-L>")
27
28 foreach(i RANGE 1 ${number_of_testcases})
29 set(testname_with_suffix "${testname}")
30 set(copy_dest "$CACHE{INSTALL_DIR}/inputs/${input_data_pkg}")
31 if(NOT ${number_of_testcases} EQUAL 1)
32 set(suffix "_${i}")
33 string(APPEND testname_with_suffix "${suffix}")
34 string(APPEND copy_dest "${suffix}")
35 endif()
36
37 ExternalData_Add_Test(offline_${testname_with_suffix}
38 NAME ${testname_with_suffix}-directory-creation
39 COMMAND bash -c "mkdir -p ${copy_dest} && cp ${copy_flags} ${input_data_pkg} ${copy_dest}"
40 WORKING_DIRECTORY DATA{inputs/icon/experiments/${input_data_pkg}/,RECURSE:,REGEX:.*}/..
41 )
42 ExternalData_Add_Target(offline_${testname_with_suffix})
43 add_dependencies(offline offline_${testname_with_suffix})
44
45 add_test(
46 NAME ${testname_with_suffix}
47 COMMAND
48 env PATH=$ENV{PATH} CPATH=$ENV{CPATH}
49 C_INCLUDE_PATH=$ENV{C_INCLUDE_PATH}
50 LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH} LIBRARY_PATH=$ENV{LIBRARY_PATH}
51 MPI_C_LIBRARY_VERSION_STRING=${MPI_C_LIBRARY_VERSION_STRING}
52 ECCODES_DEFINITION_PATH=${GRIB_DEFINITIONS_DIR}
53 $<TARGET_FILE:job_launcher> --name=${testname_with_suffix}
54 --log-dir=${LOG_DIR}
55 --
56 ${ICON_EXE}
57 WORKING_DIRECTORY ${copy_dest}
58 )
59
60 add_test(
61 NAME ${testname_with_suffix}-validation
62 COMMAND
63 env PATH=$ENV{PATH} CPATH=$ENV{CPATH}
64 C_INCLUDE_PATH=$ENV{C_INCLUDE_PATH}
65 LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH} LIBRARY_PATH=$ENV{LIBRARY_PATH}
66 MPI_C_LIBRARY_VERSION_STRING=${MPI_C_LIBRARY_VERSION_STRING}
67 ECCODES_DEFINITION_PATH=${GRIB_DEFINITIONS_DIR}
68 $<TARGET_FILE:job_launcher> --name=${testname_with_suffix}-validation
69 --log-dir=${LOG_DIR}
70 --
71 bash validate.sh
72 WORKING_DIRECTORY ${copy_dest}
73 )
74
75 link_icon_tests("${testname_with_suffix}" "${testname_with_suffix}-directory-creation" "${testname_with_suffix}-validation")
76 endforeach()
77endfunction()
78
79function(parse_json_for_test_numbers input_json output_list)
80 file(READ ${input_json} content)
81 set(index 0)
82
83 while(1)
84 string(JSON object ERROR_VARIABLE json_error GET ${content} ${index})
85 if(NOT json_error STREQUAL NOTFOUND)
86 break()
87 endif()
88
89 string(REGEX MATCH "\"(.+)\"" key_match ${object})
90 set(key ${CMAKE_MATCH_1})
91
92 string(REGEX MATCHALL "[0-9]+" number_matches ${object})
93 list(GET number_matches -1 value)
94
95 message(DEBUG "key,value is ${key},${value}")
96 list(APPEND ${output_list} ${key} ${value})
97 math(EXPR index "${index}+1")
98 endwhile()
99
100 set(${output_list} "${${output_list}}" PARENT_SCOPE)
101endfunction()