RunCMakeTest.cmake 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. include(RunCMake)
  2. set(RunCMake_TEST_TIMEOUT 60)
  3. unset(ENV{CTEST_PARALLEL_LEVEL})
  4. unset(ENV{CTEST_OUTPUT_ON_FAILURE})
  5. run_cmake_command(repeat-until-fail-bad1
  6. ${CMAKE_CTEST_COMMAND} --repeat-until-fail
  7. )
  8. run_cmake_command(repeat-until-fail-bad2
  9. ${CMAKE_CTEST_COMMAND} --repeat-until-fail foo
  10. )
  11. run_cmake_command(repeat-until-fail-good
  12. ${CMAKE_CTEST_COMMAND} --repeat-until-fail 2
  13. )
  14. function(run_repeat_until_fail_tests)
  15. # Use a single build tree for a few tests without cleaning.
  16. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/repeat-until-fail-build)
  17. set(RunCMake_TEST_NO_CLEAN 1)
  18. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  19. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  20. run_cmake(repeat-until-fail-cmake)
  21. run_cmake_command(repeat-until-fail-ctest
  22. ${CMAKE_CTEST_COMMAND} -C Debug --repeat-until-fail 3
  23. )
  24. endfunction()
  25. run_repeat_until_fail_tests()
  26. function(run_BadCTestTestfile)
  27. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/BadCTestTestfile)
  28. set(RunCMake_TEST_NO_CLEAN 1)
  29. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  30. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  31. file(WRITE "${RunCMake_TEST_BINARY_DIR}/CTestTestfile.cmake" "
  32. subdirs()
  33. ")
  34. run_cmake_command(BadCTestTestfile ${CMAKE_CTEST_COMMAND})
  35. endfunction()
  36. run_BadCTestTestfile()
  37. function(run_MergeOutput)
  38. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/MergeOutput)
  39. set(RunCMake_TEST_NO_CLEAN 1)
  40. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  41. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  42. file(WRITE "${RunCMake_TEST_BINARY_DIR}/CTestTestfile.cmake" "
  43. add_test(MergeOutput \"${CMAKE_COMMAND}\" -P \"${RunCMake_SOURCE_DIR}/MergeOutput.cmake\")
  44. ")
  45. run_cmake_command(MergeOutput ${CMAKE_CTEST_COMMAND} -V)
  46. endfunction()
  47. run_MergeOutput()
  48. function(run_LabelCount)
  49. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/LabelCount)
  50. set(RunCMake_TEST_NO_CLEAN 1)
  51. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  52. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  53. file(WRITE "${RunCMake_TEST_BINARY_DIR}/CTestTestfile.cmake" "
  54. add_test(test1 \"${CMAKE_COMMAND}\" -E echo \"test1\")
  55. set_tests_properties(test1 PROPERTIES LABELS 'bar')
  56. add_test(test2 \"${CMAKE_COMMAND}\" -E echo \"test2\")
  57. set_tests_properties(test2 PROPERTIES LABELS 'bar')
  58. add_test(test3 \"${CMAKE_COMMAND}\" -E echo \"test3\")
  59. set_tests_properties(test3 PROPERTIES LABELS 'foo')
  60. add_test(test4 \"${CMAKE_COMMAND}\" -E echo \"test4\")
  61. set_tests_properties(test4 PROPERTIES LABELS 'bar')
  62. ")
  63. run_cmake_command(LabelCount ${CMAKE_CTEST_COMMAND} -V)
  64. endfunction()
  65. run_LabelCount()
  66. function(run_TestLoad name load)
  67. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/TestLoad)
  68. set(RunCMake_TEST_NO_CLEAN 1)
  69. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  70. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  71. file(WRITE "${RunCMake_TEST_BINARY_DIR}/CTestTestfile.cmake" "
  72. add_test(TestLoad1 \"${CMAKE_COMMAND}\" -E echo \"test of --test-load\")
  73. add_test(TestLoad2 \"${CMAKE_COMMAND}\" -E echo \"test of --test-load\")
  74. ")
  75. run_cmake_command(${name} ${CMAKE_CTEST_COMMAND} -j2 --test-load ${load} --test-timeout 5)
  76. endfunction()
  77. # Tests for the --test-load feature of ctest
  78. #
  79. # Spoof a load average value to make these tests more reliable.
  80. set(ENV{__CTEST_FAKE_LOAD_AVERAGE_FOR_TESTING} 5)
  81. # Verify that new tests are not started when the load average exceeds
  82. # our threshold.
  83. run_TestLoad(test-load-fail 2)
  84. # Verify that warning message is displayed but tests still start when
  85. # an invalid argument is given.
  86. run_TestLoad(test-load-invalid 'two')
  87. # Verify that new tests are started when the load average falls below
  88. # our threshold.
  89. run_TestLoad(test-load-pass 10)
  90. unset(ENV{__CTEST_FAKE_LOAD_AVERAGE_FOR_TESTING})