| include(RunCMake) |
| include(RunCTest) |
| |
| ############################################################################### |
| # Test ctresalloc itself - we want to make sure it's not just rubber-stamping |
| # the test results |
| ############################################################################### |
| |
| function(ctresalloc_verify_log expected_contents) |
| if(NOT EXISTS "${RunCMake_TEST_BINARY_DIR}/ctresalloc.log") |
| string(APPEND RunCMake_TEST_FAILED "Log file was not written\n") |
| set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE) |
| return() |
| endif() |
| file(READ "${RunCMake_TEST_BINARY_DIR}/ctresalloc.log" actual_contents) |
| if(NOT actual_contents STREQUAL expected_contents) |
| string(APPEND RunCMake_TEST_FAILED "Actual log did not match expected log\n") |
| set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE) |
| endif() |
| endfunction() |
| |
| function(run_ctresalloc_write_proc name proc) |
| file(REMOVE "${RunCMake_BINARY_DIR}/${name}-build/ctresalloc.log") |
| run_ctresalloc_write_proc_nodel("${name}" "${proc}" "${ARGN}") |
| endfunction() |
| |
| function(run_ctresalloc_write_proc_nodel name proc) |
| string(REPLACE ";" "\\;" proc "${proc}") |
| run_cmake_command(${name} "${CMAKE_COMMAND}" -E env "${ARGN}" "${CTRESALLOC_COMMAND}" write "${RunCMake_BINARY_DIR}/${name}-build/ctresalloc.log" "${name}" 0 "${proc}") |
| endfunction() |
| |
| function(run_ctresalloc_write_noproc name) |
| run_cmake_command(${name} "${CMAKE_COMMAND}" -E env "${ARGN}" "${CTRESALLOC_COMMAND}" write "${RunCMake_BINARY_DIR}/${name}-build/ctresalloc.log" "${name}" 0) |
| endfunction() |
| |
| function(run_ctresalloc_verify name tests) |
| string(REPLACE ";" "\\;" tests "${tests}") |
| run_cmake_command(${name} "${CTRESALLOC_COMMAND}" verify "${RunCMake_SOURCE_DIR}/${name}.log" "${CMAKE_CURRENT_LIST_DIR}/resspec.json" "${tests}") |
| endfunction() |
| |
| unset(ENV{CTEST_RESOURCE_GROUP_COUNT}) |
| set(RunCMake_TEST_NO_CLEAN 1) |
| file(REMOVE_RECURSE "${RunCMake_BINARY_DIR}/ctresalloc-write-proc-good1-build") |
| file(MAKE_DIRECTORY "${RunCMake_BINARY_DIR}/ctresalloc-write-proc-good1-build") |
| file(WRITE "${RunCMake_BINARY_DIR}/ctresalloc-write-proc-good1-build/ctresalloc.log" |
| [[begin test1 |
| alloc widgets 0 1 |
| dealloc widgets 0 1 |
| end test1 |
| ]]) |
| run_ctresalloc_write_proc_nodel(ctresalloc-write-proc-good1 "1,widgets:2,transmogrifiers:1;2,widgets:1,widgets:2" |
| CTEST_RESOURCE_GROUP_COUNT=3 |
| CTEST_RESOURCE_GROUP_0=widgets,transmogrifiers |
| CTEST_RESOURCE_GROUP_0_WIDGETS=id:0,slots:2 |
| CTEST_RESOURCE_GROUP_0_TRANSMOGRIFIERS=id:calvin,slots:1 |
| CTEST_RESOURCE_GROUP_1=widgets |
| "CTEST_RESOURCE_GROUP_1_WIDGETS=id:0,slots:1\\;id:2,slots:2" |
| CTEST_RESOURCE_GROUP_2=widgets |
| "CTEST_RESOURCE_GROUP_2_WIDGETS=id:0,slots:1\\;id:2,slots:2" |
| ) |
| set(RunCMake_TEST_NO_CLEAN 0) |
| run_ctresalloc_write_proc(ctresalloc-write-proc-good2 "widgets:8" |
| CTEST_RESOURCE_GROUP_COUNT=1 |
| CTEST_RESOURCE_GROUP_0=widgets |
| CTEST_RESOURCE_GROUP_0_WIDGETS=id:3,slots:8 |
| ) |
| run_ctresalloc_write_proc(ctresalloc-write-proc-nocount "widgets:8") |
| run_ctresalloc_write_proc(ctresalloc-write-proc-badcount "widgets:8" |
| CTEST_RESOURCE_GROUP_COUNT=2 |
| ) |
| run_ctresalloc_write_proc(ctresalloc-write-proc-nores "widgets:8" |
| CTEST_RESOURCE_GROUP_COUNT=1 |
| ) |
| run_ctresalloc_write_proc(ctresalloc-write-proc-badres "widgets:8" |
| CTEST_RESOURCE_GROUP_COUNT=1 |
| CTEST_RESOURCE_GROUP_0=widgets,transmogrifiers |
| ) |
| run_ctresalloc_write_proc(ctresalloc-write-proc-nowidgets "widgets:8" |
| CTEST_RESOURCE_GROUP_COUNT=1 |
| CTEST_RESOURCE_GROUP_0=widgets |
| ) |
| run_ctresalloc_write_proc(ctresalloc-write-proc-badwidgets1 "widgets:8" |
| CTEST_RESOURCE_GROUP_COUNT=1 |
| CTEST_RESOURCE_GROUP_0=widgets |
| CTEST_RESOURCE_GROUP_0_WIDGETS= |
| ) |
| run_ctresalloc_write_proc(ctresalloc-write-proc-badwidgets2 "widgets:8" |
| CTEST_RESOURCE_GROUP_COUNT=1 |
| CTEST_RESOURCE_GROUP_0=widgets |
| "CTEST_RESOURCE_GROUP_0_WIDGETS=id:3,slots:8\\;id:0,slots:1" |
| ) |
| run_ctresalloc_write_proc(ctresalloc-write-proc-badwidgets3 "widgets:8" |
| CTEST_RESOURCE_GROUP_COUNT=1 |
| CTEST_RESOURCE_GROUP_0=widgets |
| CTEST_RESOURCE_GROUP_0_WIDGETS=id:3,slots:7 |
| ) |
| run_ctresalloc_write_proc(ctresalloc-write-proc-badwidgets4 "widgets:8" |
| CTEST_RESOURCE_GROUP_COUNT=1 |
| CTEST_RESOURCE_GROUP_0=widgets |
| CTEST_RESOURCE_GROUP_0_WIDGETS=invalid |
| ) |
| run_ctresalloc_write_proc(ctresalloc-write-proc-badwidgets5 "widgets:2,widgets:2" |
| CTEST_RESOURCE_GROUP_COUNT=1 |
| CTEST_RESOURCE_GROUP_0=widgets |
| "CTEST_RESOURCE_GROUP_0_WIDGETS=id:0,slots:2\\;id:0,slots:1" |
| ) |
| run_ctresalloc_write_proc(ctresalloc-write-proc-badwidgets6 "widgets:2" |
| CTEST_RESOURCE_GROUP_COUNT=1 |
| CTEST_RESOURCE_GROUP_0=widgets |
| "CTEST_RESOURCE_GROUP_0_WIDGETS=id:0,slots:2\\;id:0,slots:1" |
| ) |
| run_ctresalloc_write_proc(ctresalloc-write-proc-badwidgets7 "widgets:2,widgets:2" |
| CTEST_RESOURCE_GROUP_COUNT=1 |
| CTEST_RESOURCE_GROUP_0=widgets |
| CTEST_RESOURCE_GROUP_0_WIDGETS=id:0,slots:2 |
| ) |
| |
| run_ctresalloc_write_noproc(ctresalloc-write-noproc-good1) |
| run_ctresalloc_write_noproc(ctresalloc-write-noproc-count |
| CTEST_RESOURCE_GROUP_COUNT=1 |
| ) |
| |
| run_ctresalloc_verify(ctresalloc-verify-good1 "test1;test2") |
| run_ctresalloc_verify(ctresalloc-verify-good2 "") |
| run_ctresalloc_verify(ctresalloc-verify-nolog "") |
| run_ctresalloc_verify(ctresalloc-verify-nores "") |
| run_ctresalloc_verify(ctresalloc-verify-noid "") |
| run_ctresalloc_verify(ctresalloc-verify-notenough "") |
| run_ctresalloc_verify(ctresalloc-verify-baddealloc "") |
| run_ctresalloc_verify(ctresalloc-verify-leak "") |
| run_ctresalloc_verify(ctresalloc-verify-badtest1 "") |
| run_ctresalloc_verify(ctresalloc-verify-badtest2 "test1") |
| run_ctresalloc_verify(ctresalloc-verify-badtest3 "test1") |
| run_ctresalloc_verify(ctresalloc-verify-badtest4 "test1") |
| run_ctresalloc_verify(ctresalloc-verify-badtest5 "test1") |
| run_ctresalloc_verify(ctresalloc-verify-nobegin "test1") |
| run_ctresalloc_verify(ctresalloc-verify-noend "test1") |
| |
| ############################################################################### |
| # Now test the resource allocation feature of CTest |
| ############################################################################### |
| |
| function(run_ctest_resource name parallel random) |
| run_ctest("${name}-ctest-s-res" "-DCTEST_RESOURCE_ALLOC_ENABLED=1" "-DCTRESALLOC_COMMAND=${CTRESALLOC_COMMAND}" "-DCTEST_PARALLEL=${parallel}" "-DCTEST_RANDOM=${random}") |
| run_ctest("${name}-ctest-s-nores" "-DCTEST_RESOURCE_ALLOC_ENABLED=0" "-DCTRESALLOC_COMMAND=${CTRESALLOC_COMMAND}" "-DCTEST_PARALLEL=${parallel}" "-DCTEST_RANDOM=${random}") |
| endfunction() |
| |
| function(verify_ctest_resources) |
| file(READ "${RunCMake_TEST_BINARY_DIR}/restests.txt" restests) |
| execute_process(COMMAND "${CTRESALLOC_COMMAND}" verify "${RunCMake_TEST_BINARY_DIR}/ctresalloc.log" "${CMAKE_CURRENT_LIST_DIR}/resspec.json" "${restests}" |
| OUTPUT_VARIABLE output ERROR_QUIET RESULT_VARIABLE result) |
| if(result) |
| string(APPEND RunCMake_TEST_FAILED "${output}") |
| set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE) |
| endif() |
| endfunction() |
| |
| run_ctest_resource(lotsoftests 10 1) |
| run_ctest_resource(checkfree1 2 0) |
| run_ctest_resource(checkfree2 1 0) |
| run_ctest_resource(notenough1 1 0) |
| run_ctest_resource(notenough2 1 0) |
| run_ctest_resource(notenough3 1 0) |
| run_ctest_resource(combine 1 0) |
| run_ctest_resource(ensure_parallel 2 0) |
| |
| set(ENV{CTEST_RESOURCE_GROUP_COUNT} 2) |
| run_ctest_resource(process_count 1 0) |
| unset(ENV{CTEST_RESOURCE_GROUP_COUNT}) |