ctest: Restore enforcement of RESOURCE_LOCK test property
Refactoring in commit 5ff0b4ed57
(cmCTestMultiProcessHandler:
Consolidate test readiness checks, 2023-10-20, v3.29.0-rc1~378^2~4)
accidentally broke `RESOURCE_LOCK`. Fix it and replace the previous
test with one that would have caught this.
Fixes: #25843
This commit is contained in:
parent
951f75f3b2
commit
85745cce7a
@ -442,6 +442,15 @@ void cmCTestMultiProcessHandler::SetStopTimePassed()
|
||||
}
|
||||
}
|
||||
|
||||
bool cmCTestMultiProcessHandler::ResourceLocksAvailable(int test)
|
||||
{
|
||||
return std::all_of(this->Properties[test]->ProjectResources.begin(),
|
||||
this->Properties[test]->ProjectResources.end(),
|
||||
[this](std::string const& r) -> bool {
|
||||
return !cm::contains(this->ProjectResourcesLocked, r);
|
||||
});
|
||||
}
|
||||
|
||||
void cmCTestMultiProcessHandler::LockResources(int index)
|
||||
{
|
||||
this->RunningCount += this->GetProcessorsUsed(index);
|
||||
@ -643,11 +652,9 @@ void cmCTestMultiProcessHandler::StartNextTests()
|
||||
}
|
||||
|
||||
// Exclude tests that depend on currently-locked project resources.
|
||||
for (std::string const& i : this->Properties[test]->ProjectResources) {
|
||||
if (cm::contains(this->ProjectResourcesLocked, i)) {
|
||||
if (!this->ResourceLocksAvailable(test)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// Allocate system resources needed by this test.
|
||||
if (!this->AllocateResources(test)) {
|
||||
|
@ -143,6 +143,7 @@ protected:
|
||||
void InitializeLoop();
|
||||
void FinalizeLoop();
|
||||
|
||||
bool ResourceLocksAvailable(int test);
|
||||
void LockResources(int index);
|
||||
void UnlockResources(int index);
|
||||
|
||||
|
@ -3103,15 +3103,6 @@ if(BUILD_TESTING)
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/Tests/CTestTestLabelRegExp
|
||||
)
|
||||
|
||||
configure_file(
|
||||
"${CMake_SOURCE_DIR}/Tests/CTestTestResourceLock/test.cmake.in"
|
||||
"${CMake_BINARY_DIR}/Tests/CTestTestResourceLock/test.cmake"
|
||||
@ONLY ESCAPE_QUOTES)
|
||||
add_test(CTestTestResourceLock ${CMAKE_CTEST_COMMAND}
|
||||
-S "${CMake_BINARY_DIR}/Tests/CTestTestResourceLock/test.cmake" -V
|
||||
--output-log "${CMake_BINARY_DIR}/Tests/CTestTestResourceLock/output.log"
|
||||
)
|
||||
|
||||
configure_file(
|
||||
"${CMake_SOURCE_DIR}/Tests/CTestTestScheduler/test.cmake.in"
|
||||
"${CMake_BINARY_DIR}/Tests/CTestTestScheduler/test.cmake"
|
||||
|
@ -1,13 +0,0 @@
|
||||
cmake_minimum_required (VERSION 3.5)
|
||||
project(CTestTestResourceLock)
|
||||
include(CTest)
|
||||
|
||||
add_executable (LockFile lockFile.c)
|
||||
|
||||
add_test (TestLockedFile1.1 LockFile locked1.txt)
|
||||
add_test (TestLockedFile1.2 LockFile locked1.txt)
|
||||
set_tests_properties(TestLockedFile1.1 TestLockedFile1.2 PROPERTIES RESOURCE_LOCK "locked1.txt")
|
||||
|
||||
add_test (TestLockedFile2.1 LockFile locked2.txt)
|
||||
add_test (TestLockedFile2.2 LockFile locked2.txt)
|
||||
set_tests_properties(TestLockedFile2.1 TestLockedFile2.2 PROPERTIES RESOURCE_LOCK "locked2.txt")
|
@ -1,4 +0,0 @@
|
||||
set(CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
|
||||
set(CTEST_DROP_METHOD "http")
|
||||
set(CTEST_DROP_SITE "open.cdash.org")
|
||||
set(CTEST_DROP_LOCATION "/submit.php?project=PublicDashboard")
|
@ -1,27 +0,0 @@
|
||||
#include <stdio.h>
|
||||
|
||||
/* Disable deprecation warning for fopen */
|
||||
#pragma warning(disable : 4996)
|
||||
|
||||
/*if run serially, works fine.
|
||||
If run in parallel, someone will attempt to delete
|
||||
a locked file, which will fail */
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
FILE* file;
|
||||
int i;
|
||||
const char* fname;
|
||||
if (argc >= 2) {
|
||||
fname = argv[1];
|
||||
} else {
|
||||
fname = "lockedFile.txt";
|
||||
}
|
||||
file = fopen(fname, "w");
|
||||
|
||||
for (i = 0; i < 10000; i++) {
|
||||
fprintf(file, "%s", "x");
|
||||
fflush(file);
|
||||
}
|
||||
fclose(file);
|
||||
return remove(fname);
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
cmake_minimum_required(VERSION 3.5)
|
||||
|
||||
# Settings:
|
||||
set(CTEST_DASHBOARD_ROOT "@CMake_BINARY_DIR@/Tests/CTestTest")
|
||||
set(CTEST_SITE "@SITE@")
|
||||
set(CTEST_BUILD_NAME "CTestTest-@BUILDNAME@-ResourceLock")
|
||||
|
||||
set(CTEST_SOURCE_DIRECTORY "@CMake_SOURCE_DIR@/Tests/CTestTestResourceLock")
|
||||
set(CTEST_BINARY_DIRECTORY "@CMake_BINARY_DIR@/Tests/CTestTestResourceLock")
|
||||
set(CTEST_CVS_COMMAND "@CVSCOMMAND@")
|
||||
set(CTEST_CMAKE_GENERATOR "@CMAKE_GENERATOR@")
|
||||
set(CTEST_CMAKE_GENERATOR_PLATFORM "@CMAKE_GENERATOR_PLATFORM@")
|
||||
set(CTEST_CMAKE_GENERATOR_TOOLSET "@CMAKE_GENERATOR_TOOLSET@")
|
||||
set(CTEST_BUILD_CONFIGURATION "$ENV{CMAKE_CONFIG_TYPE}")
|
||||
set(CTEST_COVERAGE_COMMAND "@COVERAGE_COMMAND@")
|
||||
set(CTEST_NOTES_FILES "${CTEST_SCRIPT_DIRECTORY}/${CTEST_SCRIPT_NAME}")
|
||||
|
||||
CTEST_START(Experimental)
|
||||
CTEST_CONFIGURE(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res)
|
||||
CTEST_BUILD(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res)
|
||||
CTEST_TEST(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res PARALLEL_LEVEL 4)
|
12
Tests/RunCMake/ctest_test/ResourceLock-stdout.txt
Normal file
12
Tests/RunCMake/ctest_test/ResourceLock-stdout.txt
Normal file
@ -0,0 +1,12 @@
|
||||
Test project [^
|
||||
]*/Tests/RunCMake/ctest_test/ResourceLock-build
|
||||
Start 2: test1
|
||||
1/4 Test #2: test1 ............................ Passed +[0-9.]+ sec
|
||||
Start 3: test2
|
||||
2/4 Test #3: test2 ............................ Passed +[0-9.]+ sec
|
||||
Start 4: test3
|
||||
3/4 Test #4: test3 ............................ Passed +[0-9.]+ sec
|
||||
Start 5: test4
|
||||
4/4 Test #5: test4 ............................ Passed +[0-9.]+ sec
|
||||
+
|
||||
100% tests passed, 0 tests failed out of 4
|
@ -13,6 +13,15 @@ endfunction()
|
||||
|
||||
run_ctest_test(TestQuiet QUIET)
|
||||
|
||||
set(CASE_CMAKELISTS_SUFFIX_CODE [[
|
||||
foreach(i RANGE 1 4)
|
||||
add_test(NAME test${i} COMMAND ${CMAKE_COMMAND} -E true)
|
||||
set_property(TEST test${i} PROPERTY RESOURCE_LOCK resource)
|
||||
endforeach()
|
||||
]])
|
||||
run_ctest_test(ResourceLock INCLUDE test PARALLEL_LEVEL 4)
|
||||
unset(CASE_CMAKELISTS_SUFFIX_CODE)
|
||||
|
||||
set(ENV{__CTEST_FAKE_PROCESSOR_COUNT_FOR_TESTING} 4)
|
||||
set(CASE_CMAKELISTS_SUFFIX_CODE [[
|
||||
foreach(i RANGE 1 6)
|
||||
|
Loading…
Reference in New Issue
Block a user