From 56e14a25fed8fa7e0ae0dd8b39d7a9cb41651613 Mon Sep 17 00:00:00 2001 From: "A.J. Beamon" Date: Thu, 21 May 2020 13:35:54 -0700 Subject: [PATCH 1/4] Normal correctness package can be built when USE_VALGRIND is on. Correctness and valgrind now stage their files in separate directories. Add CMakeCache.txt to testing packages. --- cmake/AddFdbTest.cmake | 135 +++++++++++++++++++++++------------------ tests/CMakeLists.txt | 5 +- 2 files changed, 80 insertions(+), 60 deletions(-) diff --git a/cmake/AddFdbTest.cmake b/cmake/AddFdbTest.cmake index f0c5cf0283..4f5613ad42 100644 --- a/cmake/AddFdbTest.cmake +++ b/cmake/AddFdbTest.cmake @@ -151,10 +151,15 @@ if(NOT WIN32) set(TEST_PACKAGE_ADD_DIRECTORIES "" CACHE STRING "A ;-separated list of directories. All files within each directory will be added to the test package") endif() -function(create_test_package) - if(WIN32) - return() - endif() +# This sets up a directory with the correctness files common to all correctness packages. +# This function should be called with the following arguments: +# +# - OUT_DIR the directory where files will be staged +# - CONTEXT the type of correctness package being built (e.g. 'valgrind correctness') +function(stage_correctness_package) + set(oneValueArgs OUT_DIR CONTEXT) + cmake_parse_arguments(STAGE "${options}" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}") + file(MAKE_DIRECTORY ${STAGE_OUT_DIR}) string(LENGTH "${CMAKE_SOURCE_DIR}/tests/" base_length) foreach(test IN LISTS TEST_NAMES) if(("${TEST_TYPE_${test}}" STREQUAL "simulation") AND @@ -162,12 +167,14 @@ function(create_test_package) (NOT ${test} MATCHES ${TEST_PACKAGE_EXCLUDE})) foreach(file IN LISTS TEST_FILES_${test}) string(SUBSTRING ${file} ${base_length} -1 rel_out_file) - set(out_file ${CMAKE_BINARY_DIR}/packages/tests/${rel_out_file}) - list(APPEND out_files ${out_file}) + set(out_file ${STAGE_OUT_DIR}/tests/${rel_out_file}) + list(APPEND test_files ${out_file}) add_custom_command( OUTPUT ${out_file} DEPENDS ${file} - COMMAND ${CMAKE_COMMAND} -E copy ${file} ${out_file}) + COMMAND ${CMAKE_COMMAND} -E copy ${file} ${out_file} + COMMENT "Copying ${STAGE_CONTEXT} test file ${rel_out_file}" + ) endforeach() endif() endforeach() @@ -182,67 +189,76 @@ function(create_test_package) set(src_dir "${src_dir}/") string(SUBSTRING ${src_dir} ${dir_len} -1 dest_dir) string(SUBSTRING ${file} ${dir_len} -1 out_file) - list(APPEND external_files ${CMAKE_BINARY_DIR}/packages/${out_file}) - file(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/packages/${dest_dir}) + list(APPEND external_files ${STAGE_OUT_DIR}/${out_file}) + file(COPY ${file} DESTINATION ${STAGE_OUT_DIR}/${dest_dir}) endforeach() endforeach() - if(NOT USE_VALGRIND) - set(tar_file ${CMAKE_BINARY_DIR}/packages/correctness-${CMAKE_PROJECT_VERSION}.tar.gz) - add_custom_command( - OUTPUT ${tar_file} - DEPENDS ${out_files} - ${CMAKE_BINARY_DIR}/packages/bin/fdbserver - ${CMAKE_BINARY_DIR}/packages/bin/TestHarness.exe - ${CMAKE_BINARY_DIR}/packages/bin/TraceLogHelper.dll - ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/correctnessTest.sh - ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/correctnessTimeout.sh - ${external_files} - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/correctnessTest.sh - ${CMAKE_BINARY_DIR}/packages/joshua_test - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/correctnessTimeout.sh - ${CMAKE_BINARY_DIR}/packages/joshua_timeout - COMMAND ${CMAKE_COMMAND} -E tar cfz ${tar_file} ${CMAKE_BINARY_DIR}/packages/bin/fdbserver - ${CMAKE_BINARY_DIR}/packages/bin/TestHarness.exe - ${CMAKE_BINARY_DIR}/packages/bin/TraceLogHelper.dll - ${CMAKE_BINARY_DIR}/packages/joshua_test - ${CMAKE_BINARY_DIR}/packages/joshua_timeout - ${out_files} - ${external_files} - COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_BINARY_DIR}/packages/joshua_test ${CMAKE_BINARY_DIR}/packages/joshua_timeout - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/packages - COMMENT "Package correctness archive" - ) - add_custom_target(package_tests ALL DEPENDS ${tar_file}) - # seems make needs this dependency while this does nothing with ninja - add_dependencies(package_tests strip_only_fdbserver TestHarness) - endif() + list(APPEND package_files ${STAGE_OUT_DIR}/bin/fdbserver + ${STAGE_OUT_DIR}/bin/TestHarness.exe + ${STAGE_OUT_DIR}/bin/TraceLogHelper.dll + ${STAGE_OUT_DIR}/CMakeCache.txt + ) + add_custom_command( + OUTPUT ${package_files} + DEPENDS ${CMAKE_BINARY_DIR}/CMakeCache.txt + ${CMAKE_BINARY_DIR}/packages/bin/fdbserver + ${CMAKE_BINARY_DIR}/packages/bin/TestHarness.exe + ${CMAKE_BINARY_DIR}/packages/bin/TraceLogHelper.dll + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/CMakeCache.txt ${STAGE_OUT_DIR} + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/packages/bin/fdbserver + ${CMAKE_BINARY_DIR}/packages/bin/TestHarness.exe + ${CMAKE_BINARY_DIR}/packages/bin/TraceLogHelper.dll + ${STAGE_OUT_DIR}/bin + COMMENT "Copying files for ${STAGE_CONTEXT} package" + ) + list(APPEND package_files ${test_files} ${external_files}) + set(package_files ${package_files} PARENT_SCOPE) +endfunction() +function(create_correctness_package) + if(WIN32) + return() + endif() + set(out_dir "${CMAKE_BINARY_DIR}/correctness") + stage_correctness_package(OUT_DIR ${out_dir} CONTEXT "correctness") + set(tar_file ${CMAKE_BINARY_DIR}/packages/correctness-${CMAKE_PROJECT_VERSION}.tar.gz) + add_custom_command( + OUTPUT ${tar_file} + DEPENDS ${package_files} + ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/correctnessTest.sh + ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/correctnessTimeout.sh + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/correctnessTest.sh + ${out_dir}/joshua_test + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/correctnessTimeout.sh + ${out_dir}/joshua_timeout + COMMAND ${CMAKE_COMMAND} -E tar cfz ${tar_file} * + WORKING_DIRECTORY ${out_dir} + COMMENT "Package correctness archive" + ) + add_custom_target(package_tests ALL DEPENDS ${tar_file}) + add_dependencies(package_tests strip_only_fdbserver TestHarness) +endfunction() + +function(create_valgrind_correctness_package) + if(WIN32) + return() + endif() if(USE_VALGRIND) + set(out_dir "${CMAKE_BINARY_DIR}/valgrind_correctness") + stage_correctness_package(OUT_DIR ${out_dir} CONTEXT "valgrind correctness") set(tar_file ${CMAKE_BINARY_DIR}/packages/valgrind-${CMAKE_PROJECT_VERSION}.tar.gz) add_custom_command( OUTPUT ${tar_file} - DEPENDS ${out_files} - ${CMAKE_BINARY_DIR}/packages/bin/fdbserver - ${CMAKE_BINARY_DIR}/packages/bin/TestHarness.exe - ${CMAKE_BINARY_DIR}/packages/bin/TraceLogHelper.dll + DEPENDS ${package_files} ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/valgrindTest.sh ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/valgrindTimeout.sh - ${external_files} COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/valgrindTest.sh - ${CMAKE_BINARY_DIR}/packages/joshua_test + ${out_dir}/joshua_test COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/valgrindTimeout.sh - ${CMAKE_BINARY_DIR}/packages/joshua_timeout - COMMAND ${CMAKE_COMMAND} -E tar cfz ${tar_file} - ${CMAKE_BINARY_DIR}/packages/bin/fdbserver - ${CMAKE_BINARY_DIR}/packages/bin/TestHarness.exe - ${CMAKE_BINARY_DIR}/packages/bin/TraceLogHelper.dll - ${CMAKE_BINARY_DIR}/packages/joshua_test - ${CMAKE_BINARY_DIR}/packages/joshua_timeout - ${out_files} - ${external_files} - COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_BINARY_DIR}/packages/joshua_test ${CMAKE_BINARY_DIR}/packages/joshua_timeout - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/packages - COMMENT "Package correctness archive" + ${out_dir}/joshua_timeout + COMMAND ${CMAKE_COMMAND} -E tar cfz ${tar_file} * + WORKING_DIRECTORY ${out_dir} + COMMENT "Package valgrind correctness archive" ) add_custom_target(package_valgrind_tests ALL DEPENDS ${tar_file}) add_dependencies(package_valgrind_tests strip_only_fdbserver TestHarness) @@ -262,7 +278,8 @@ function(package_bindingtester) set(outfiles ${bdir}/fdbcli ${bdir}/fdbserver ${bdir}/${fdbcName} ${bdir}/joshua_test ${bdir}/joshua_timeout) add_custom_command( OUTPUT ${outfiles} - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/packages/bin/fdbcli + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/CMakeCache.txt + ${CMAKE_BINARY_DIR}/packages/bin/fdbcli ${CMAKE_BINARY_DIR}/packages/bin/fdbserver ${CMAKE_BINARY_DIR}/packages/lib/${fdbcName} ${bdir} @@ -270,7 +287,7 @@ function(package_bindingtester) COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/bindingTimeout.sh ${bdir}/joshua_timeout COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/localClusterStart.sh ${bdir}/localClusterStart.sh COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/bindingTestScript.sh ${bdir}/bindingTestScript.sh - COMMENT "Copy executes to bindingtester dir") + COMMENT "Copy executables and scripts to bindingtester dir") file(GLOB_RECURSE test_files ${CMAKE_SOURCE_DIR}/bindings/*) add_custom_command( OUTPUT "${CMAKE_BINARY_DIR}/bindingtester.touch" diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index f1397e0b60..f24e73b4c6 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -246,6 +246,9 @@ if(WITH_PYTHON) verify_testing() if (NOT OPEN_FOR_IDE AND NOT WIN32) - create_test_package() + create_correctness_package() + if (USE_VALGRIND) + create_valgrind_correctness_package() + endif() endif() endif() From 9656542cca28912341b90936552d2b4512520a7f Mon Sep 17 00:00:00 2001 From: "A.J. Beamon" Date: Fri, 22 May 2020 10:10:34 -0700 Subject: [PATCH 2/4] Create the bin directory in the correctness staging directories --- cmake/AddFdbTest.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/AddFdbTest.cmake b/cmake/AddFdbTest.cmake index 4f5613ad42..38397f7589 100644 --- a/cmake/AddFdbTest.cmake +++ b/cmake/AddFdbTest.cmake @@ -159,7 +159,7 @@ endif() function(stage_correctness_package) set(oneValueArgs OUT_DIR CONTEXT) cmake_parse_arguments(STAGE "${options}" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}") - file(MAKE_DIRECTORY ${STAGE_OUT_DIR}) + file(MAKE_DIRECTORY ${STAGE_OUT_DIR}/bin) string(LENGTH "${CMAKE_SOURCE_DIR}/tests/" base_length) foreach(test IN LISTS TEST_NAMES) if(("${TEST_TYPE_${test}}" STREQUAL "simulation") AND From cb119c76d7b9374041f4bb42b240172deae5190a Mon Sep 17 00:00:00 2001 From: "A.J. Beamon" Date: Wed, 27 May 2020 10:25:13 -0700 Subject: [PATCH 3/4] Don't use non-existent variables Co-authored-by: Markus Pilman --- cmake/AddFdbTest.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/AddFdbTest.cmake b/cmake/AddFdbTest.cmake index 38397f7589..daba2ecb52 100644 --- a/cmake/AddFdbTest.cmake +++ b/cmake/AddFdbTest.cmake @@ -158,7 +158,7 @@ endif() # - CONTEXT the type of correctness package being built (e.g. 'valgrind correctness') function(stage_correctness_package) set(oneValueArgs OUT_DIR CONTEXT) - cmake_parse_arguments(STAGE "${options}" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}") + cmake_parse_arguments(STAGE "" "${oneValueArgs}" "" "${ARGN}") file(MAKE_DIRECTORY ${STAGE_OUT_DIR}/bin) string(LENGTH "${CMAKE_SOURCE_DIR}/tests/" base_length) foreach(test IN LISTS TEST_NAMES) From f9d96225abec8d74d7a192cf8211e27f7e730eac Mon Sep 17 00:00:00 2001 From: "A.J. Beamon" Date: Wed, 27 May 2020 11:34:15 -0700 Subject: [PATCH 4/4] Use add_custom_command instead of file(COPY ...) when copying external files into correctness packages --- cmake/AddFdbTest.cmake | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/cmake/AddFdbTest.cmake b/cmake/AddFdbTest.cmake index daba2ecb52..ba0450e433 100644 --- a/cmake/AddFdbTest.cmake +++ b/cmake/AddFdbTest.cmake @@ -188,9 +188,15 @@ function(stage_correctness_package) # SUBSTRING will fail set(src_dir "${src_dir}/") string(SUBSTRING ${src_dir} ${dir_len} -1 dest_dir) - string(SUBSTRING ${file} ${dir_len} -1 out_file) - list(APPEND external_files ${STAGE_OUT_DIR}/${out_file}) - file(COPY ${file} DESTINATION ${STAGE_OUT_DIR}/${dest_dir}) + string(SUBSTRING ${file} ${dir_len} -1 rel_out_file) + set(out_file ${STAGE_OUT_DIR}/${rel_out_file}) + list(APPEND external_files ${out_file}) + add_custom_command( + OUTPUT ${out_file} + DEPENDS ${file} + COMMAND ${CMAKE_COMMAND} -E copy ${file} ${out_file} + COMMENT "Copying ${STAGE_CONTEXT} external file ${file}" + ) endforeach() endforeach() list(APPEND package_files ${STAGE_OUT_DIR}/bin/fdbserver