From ecdbd69eaf589edeb31ab4475c2bce4207d57cfd Mon Sep 17 00:00:00 2001 From: OpenAI Date: Fri, 5 Jun 2026 16:57:58 +0000 Subject: [PATCH] Add CTest smoke tests for FLAIM tools and database --- CMakeLists.txt | 32 +++++++++++++++++++++++++ cmake/NWFlaimDbSmokeTest.cmake.in | 40 +++++++++++++++++++++++++++++++ cmake/NWFlaimUsageTest.cmake | 21 ++++++++++++++++ 3 files changed, 93 insertions(+) create mode 100644 cmake/NWFlaimDbSmokeTest.cmake.in create mode 100644 cmake/NWFlaimUsageTest.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 60ee7a3..6f004c9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 3.16) project(nwflaim VERSION 1.0 LANGUAGES CXX) include(GNUInstallDirs) +include(CTest) option(NWFLAIM_BUILD_SHARED "Build shared nwflaim libraries" ON) option(NWFLAIM_BUILD_STATIC "Build static nwflaim libraries" OFF) @@ -572,6 +573,37 @@ if(NWFLAIM_BUILD_TOOLS) endif() endif() +if(BUILD_TESTING AND NWFLAIM_BUILD_TOOLS) + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/NWFlaimDbSmokeTest.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/NWFlaimDbSmokeTest.cmake + @ONLY) + + add_test(NAME nwflaim.flmcheckdb.usage + COMMAND ${CMAKE_COMMAND} + -DNWFLAIM_TEST_COMMAND=$ + -DNWFLAIM_TEST_EXPECT=Usage: + -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/NWFlaimUsageTest.cmake) + set_tests_properties(nwflaim.flmcheckdb.usage PROPERTIES LABELS nwflaim) + + add_test(NAME nwflaim.database.create-and-check + COMMAND ${CMAKE_COMMAND} + -DNWFLAIM_GIGATEST=$ + -DNWFLAIM_CHECKDB=$ + -DNWFLAIM_TEST_WORKDIR=${CMAKE_CURRENT_BINARY_DIR}/ctest/nwflaim-db + -P ${CMAKE_CURRENT_BINARY_DIR}/NWFlaimDbSmokeTest.cmake) + set_tests_properties(nwflaim.database.create-and-check PROPERTIES LABELS nwflaim) + + if(NWFLAIM_BUILD_XFLAIM) + add_test(NAME nwflaim.xflmcheckdb.usage + COMMAND ${CMAKE_COMMAND} + -DNWFLAIM_TEST_COMMAND=$ + -DNWFLAIM_TEST_EXPECT=Usage: + -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/NWFlaimUsageTest.cmake) + set_tests_properties(nwflaim.xflmcheckdb.usage PROPERTIES LABELS nwflaim) + endif() +endif() + # Install public headers below nw-prefixed include directories so they do not # conflict with any system or distro FLAIM headers. set(NWFLAIM_INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}/nwflaim") diff --git a/cmake/NWFlaimDbSmokeTest.cmake.in b/cmake/NWFlaimDbSmokeTest.cmake.in new file mode 100644 index 0000000..6a221e7 --- /dev/null +++ b/cmake/NWFlaimDbSmokeTest.cmake.in @@ -0,0 +1,40 @@ +if(NOT DEFINED NWFLAIM_GIGATEST) + message(FATAL_ERROR "NWFLAIM_GIGATEST is required") +endif() +if(NOT DEFINED NWFLAIM_CHECKDB) + message(FATAL_ERROR "NWFLAIM_CHECKDB is required") +endif() +if(NOT DEFINED NWFLAIM_TEST_WORKDIR) + message(FATAL_ERROR "NWFLAIM_TEST_WORKDIR is required") +endif() + +set(ENV{TERM} xterm) +file(REMOVE_RECURSE "${NWFLAIM_TEST_WORKDIR}") +file(MAKE_DIRECTORY "${NWFLAIM_TEST_WORKDIR}" "${NWFLAIM_TEST_WORKDIR}/data" "${NWFLAIM_TEST_WORKDIR}/rfl" "${NWFLAIM_TEST_WORKDIR}/tmp") +set(_db "${NWFLAIM_TEST_WORKDIR}/gigatest.db") + +execute_process( + COMMAND "${NWFLAIM_GIGATEST}" -b -n${_db} -dd${NWFLAIM_TEST_WORKDIR}/data -dr${NWFLAIM_TEST_WORKDIR}/rfl -t4 32 + WORKING_DIRECTORY "${NWFLAIM_TEST_WORKDIR}" + RESULT_VARIABLE _giga_result + OUTPUT_VARIABLE _giga_stdout + ERROR_VARIABLE _giga_stderr + TIMEOUT 60) +if(NOT _giga_result EQUAL 0) + message(STATUS "nwflmgigatest stdout:\n${_giga_stdout}") + message(STATUS "nwflmgigatest stderr:\n${_giga_stderr}") + message(FATAL_ERROR "nwflmgigatest failed with exit code ${_giga_result}") +endif() + +execute_process( + COMMAND "${NWFLAIM_CHECKDB}" "${_db}" -b -i -dd${NWFLAIM_TEST_WORKDIR}/data -dr${NWFLAIM_TEST_WORKDIR}/rfl -t${NWFLAIM_TEST_WORKDIR}/tmp + WORKING_DIRECTORY "${NWFLAIM_TEST_WORKDIR}" + RESULT_VARIABLE _check_result + OUTPUT_VARIABLE _check_stdout + ERROR_VARIABLE _check_stderr + TIMEOUT 60) +if(NOT _check_result EQUAL 0) + message(STATUS "nwflmcheckdb stdout:\n${_check_stdout}") + message(STATUS "nwflmcheckdb stderr:\n${_check_stderr}") + message(FATAL_ERROR "nwflmcheckdb failed with exit code ${_check_result}") +endif() diff --git a/cmake/NWFlaimUsageTest.cmake b/cmake/NWFlaimUsageTest.cmake new file mode 100644 index 0000000..44b8666 --- /dev/null +++ b/cmake/NWFlaimUsageTest.cmake @@ -0,0 +1,21 @@ +if(NOT DEFINED NWFLAIM_TEST_COMMAND) + message(FATAL_ERROR "NWFLAIM_TEST_COMMAND is required") +endif() +if(NOT DEFINED NWFLAIM_TEST_EXPECT) + set(NWFLAIM_TEST_EXPECT "Usage:") +endif() + +set(ENV{TERM} xterm) +execute_process( + COMMAND "${NWFLAIM_TEST_COMMAND}" -? + RESULT_VARIABLE _result + OUTPUT_VARIABLE _stdout + ERROR_VARIABLE _stderr + TIMEOUT 20) + +set(_combined "${_stdout}\n${_stderr}") +if(NOT _combined MATCHES "${NWFLAIM_TEST_EXPECT}") + message(STATUS "stdout:\n${_stdout}") + message(STATUS "stderr:\n${_stderr}") + message(FATAL_ERROR "${NWFLAIM_TEST_COMMAND} did not print expected usage text") +endif()