Skip to content

Commit

Permalink
WIP: Make dest dir creation failure be handled gracefully (#228)
Browse files Browse the repository at this point in the history
I have a very strong test that ensures that a dest dir creation failure is
handled gracefully.
  • Loading branch information
bartlettroscoe committed Sep 26, 2017
1 parent 0bda3bd commit 7a6f9aa
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 9 deletions.
40 changes: 38 additions & 2 deletions test/core/CTestScriptsUnitTests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -691,8 +691,44 @@ TRIBITS_ADD_ADVANCED_TEST(
"TEST_2: Result = PASSED"
"OVERALL FINAL RESULT: TEST FAILED [(]TAATDriver_TAAT_COPY_FILES_TO_TEST_DIR_bad_file_name[)]"
)
# NOTE: Above is a very strong test. It actually asserts what is printed by
# TAAT() tests. A more targeted test should really be added to do this.
# NOTE: The above test runs a ctest added with TAAT() and it ensures that
# bad file names are handled gracefully. In this case, it ensures that the
# later TEST_<IDX> blocks are still run and can even pass (but the overall
# TAAT test fails). This is a very strong test. It actually asserts what
# is printed by TAAT() tests. A more targeted test should really be added
# to do this.

TRIBITS_ADD_ADVANCED_TEST(
CTestScripts_TAAT_COPY_FILES_TO_TEST_DIR_bad_dest_dir_DRIVER
OVERALL_WORKING_DIRECTORY TEST_NAME
TEST_0 CMND ${CMAKE_COMMAND}
ARGS -DTRIBITS_DIR=${${PROJECT_NAME}_TRIBITS_DIR}
-DCOPY_FILE_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}/test_data
${CMAKE_CURRENT_SOURCE_DIR}/TAATDriver/bad_dest_dir
ALWAYS_FAIL_ON_NONZERO_RETURN
PASS_REGULAR_EXPRESSION_ALL
"TAATDriver_TAAT_COPY_FILES_TO_TEST_DIR_bad_dest_dir: Added test [(]BASIC, PROCESSORS=1[)]"
"Generating done"
TEST_1 CMND make
TEST_2 CMND ${CMAKE_CTEST_COMMAND} ARGS -VV
PASS_REGULAR_EXPRESSION_ALL
"Running: .mkdir. .read_only_dir."
"TEST_0: Result = PASSED"
"Running: .chmod. .a-w. .read_only_dir."
"TEST_1: Result = PASSED"
"Creating dest directory .*/TriBITS_CTestScripts_TAAT_COPY_FILES_TO_TEST_DIR_bad_dest_dir_DRIVER/TAATDriver_TAAT_COPY_FILES_TO_TEST_DIR_bad_dest_dir/read_only_dir/subdir/"
"Error creating directory .*/TriBITS_CTestScripts_TAAT_COPY_FILES_TO_TEST_DIR_bad_dest_dir_DRIVER/TAATDriver_TAAT_COPY_FILES_TO_TEST_DIR_bad_dest_dir/read_only_dir/subdir.[.]"
"Error copying file .*/CTestScriptsUnitTests/test_data/test_file_b.txt. to .*/TriBITS_CTestScripts_TAAT_COPY_FILES_TO_TEST_DIR_bad_dest_dir_DRIVER/TAATDriver_TAAT_COPY_FILES_TO_TEST_DIR_bad_dest_dir/read_only_dir/subdir/."
"TEST_2: Result = FAILED"
"TEST_3: Result = PASSED"
"This is Test File A"
"TEST_4: Return code = 0"
"TEST_4: Pass criteria = Match REGEX .This is Test File A. .PASSED."
"TEST_4: Result = PASSED"
"OVERALL FINAL RESULT: TEST FAILED [(]TAATDriver_TAAT_COPY_FILES_TO_TEST_DIR_bad_dest_dir[)]"
)
# NOTE: The above test ensures that a bad dest dir creation attempt is
# handled gracefully.

# ToDo: Test passing more than one arg for SOURCE_DIR and DEST_DIR and catching this at configure time ...

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.11)
SET(PROJECT_NAME TAATDriver)
PROJECT(${PROJECT_NAME} NONE)

INCLUDE(${CMAKE_CURRENT_LIST_DIR}/../CommonTAATDriverBoilerPlate.cmake)

TRIBITS_ADD_ADVANCED_TEST(
TAAT_COPY_FILES_TO_TEST_DIR_bad_dest_dir
OVERALL_WORKING_DIRECTORY TEST_NAME
TEST_0 CMND mkdir ARGS read_only_dir
TEST_1 CMND chmod ARGS a-w read_only_dir
TEST_2 COPY_FILES_TO_TEST_DIR test_file_b.txt # Good file
SOURCE_DIR ${COPY_FILE_SOURCE_DIR} # Good source dir
DEST_DIR read_only_dir/subdir # Can't create directory in read-only dir
TEST_3 COPY_FILES_TO_TEST_DIR test_file_a.txt
SOURCE_DIR ${COPY_FILE_SOURCE_DIR}
DEST_DIR good_dest_dir
TEST_4 CMND cat ARGS good_dest_dir/test_file_a.txt
PASS_REGULAR_EXPRESSION "This is Test File A"
)
# NOTE: The above failing test is used to test that a bad dest dir is handled
# gracefully and allows later commands to run and pass (but the overall test
# will fail).
24 changes: 17 additions & 7 deletions tribits/core/utils/DriveAdvancedTest.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -107,25 +107,35 @@ MACRO(SETUP_AND_RUN_TEST_IDX_COPY_FILES_BLOCK)
"${TEST_${CMND_IDX}_SOURCE_DIR}/${FILENAME}")
ENDFOREACH()

SET(TEST_CASE_PASSED TRUE)

MESSAGE("${OUTPUT_SEP}\n")

FILE(MAKE_DIRECTORY "${TEST_${CMND_IDX}_DEST_DIR}")
# Make the dest directory if not exists (cmake -E copy will not create it)
IF (NOT EXISTS "${TEST_${CMND_IDX}_DEST_DIR}")
MESSAGE("Creating dest directory ${TEST_${CMND_IDX}_DEST_DIR}/ ...")
EXECUTE_PROCESS(
COMMAND ${CMAKE_COMMAND} -E make_directory "${TEST_${CMND_IDX}_DEST_DIR}"
RESULT_VARIABLE MKDIR_COMMAND_RTN
)
IF (NOT MKDIR_COMMAND_RTN EQUAL 0)
SET(TEST_CASE_PASSED FALSE)
ENDIF()
ENDIF()

# Copy the full list of files to the dest dir
EXECUTE_PROCESS(
COMMAND ${CMAKE_COMMAND} -E copy
${FILES_TO_COPY_ABS_PATH_LIST}
"${TEST_${CMND_IDX}_DEST_DIR}/"
RESULT_VARIABLE COPY_COMMAND_RTN
)

MESSAGE("${OUTPUT_SEP}\n")

IF (COPY_COMMAND_RTN EQUAL 0)
SET(TEST_CASE_PASSED TRUE)
ELSE()
IF (NOT COPY_COMMAND_RTN EQUAL 0)
SET(TEST_CASE_PASSED FALSE)
ENDIF()

MESSAGE("${OUTPUT_SEP}\n")

MESSAGE("") # Need a vertical space for readability of the output

ENDMACRO()
Expand Down

0 comments on commit 7a6f9aa

Please sign in to comment.