ctest: Fall back to CMake options for TLS version

Use `CMAKE_TLS_VERSION` or `ENV{CMAKE_TLS_VERSION}` if
`CTEST_TLS_VERSION` is not set.

Issue: #25701
This commit is contained in:
Brad King
2024-03-05 19:48:45 -05:00
parent 56e319ce4a
commit aeb8bcc055
19 changed files with 67 additions and 2 deletions

View File

@@ -11,3 +11,6 @@ TLS version allowed when submitting to a dashboard via ``https://`` URLs.
The value may be one of:
.. include:: CMAKE_TLS_VERSION-VALUES.txt
If ``CTEST_TLS_VERSION`` is not set, the :variable:`CMAKE_TLS_VERSION` variable
or :envvar:`CMAKE_TLS_VERSION` environment variable is used instead.

View File

@@ -21,6 +21,13 @@ mark_as_advanced(CMAKE_CTEST_COMMAND)
# configure files
block()
if(NOT DEFINED CTEST_TLS_VERSION)
if(DEFINED CMAKE_TLS_VERSION)
set(CTEST_TLS_VERSION "${CMAKE_TLS_VERSION}")
elseif(DEFINED ENV{CMAKE_TLS_VERSION})
set(CTEST_TLS_VERSION "$ENV{CMAKE_TLS_VERSION}")
endif()
endif()
if(NOT DEFINED CTEST_TLS_VERIFY AND DEFINED CMAKE_TLS_VERIFY)
set(CTEST_TLS_VERIFY "${CMAKE_TLS_VERIFY}")
endif()

View File

@@ -55,8 +55,28 @@ cmCTestGenericHandler* cmCTestSubmitCommand::InitializeHandler()
this->Makefile, "DropLocation", "CTEST_DROP_LOCATION", this->Quiet);
}
this->CTest->SetCTestConfigurationFromCMakeVariable(
this->Makefile, "TLSVersion", "CTEST_TLS_VERSION", this->Quiet);
if (!this->CTest->SetCTestConfigurationFromCMakeVariable(
this->Makefile, "TLSVersion", "CTEST_TLS_VERSION", this->Quiet)) {
if (cmValue tlsVersionVar =
this->Makefile->GetDefinition("CMAKE_TLS_VERSION")) {
cmCTestOptionalLog(
this->CTest, HANDLER_VERBOSE_OUTPUT,
"SetCTestConfiguration from CMAKE_TLS_VERSION:TLSVersion:"
<< *tlsVersionVar << std::endl,
this->Quiet);
this->CTest->SetCTestConfiguration("TLSVersion", *tlsVersionVar,
this->Quiet);
} else if (cm::optional<std::string> tlsVersionEnv =
cmSystemTools::GetEnvVar("CMAKE_TLS_VERSION")) {
cmCTestOptionalLog(
this->CTest, HANDLER_VERBOSE_OUTPUT,
"SetCTestConfiguration from ENV{CMAKE_TLS_VERSION}:TLSVersion:"
<< *tlsVersionEnv << std::endl,
this->Quiet);
this->CTest->SetCTestConfiguration("TLSVersion", *tlsVersionEnv,
this->Quiet);
}
}
if (!this->CTest->SetCTestConfigurationFromCMakeVariable(
this->Makefile, "TLSVerify", "CTEST_TLS_VERIFY", this->Quiet)) {
if (cmValue tlsVerifyVar =

View File

@@ -0,0 +1,2 @@
Error message was: ([Cc]ould *n.t resolve host:? '?badhostname.invalid'?|The requested URL returned error:|Protocol "https" (not supported or disabled|not supported|disabled)|.* was built with SSL disabled).*
Problems when submitting via HTTP

View File

@@ -0,0 +1 @@
Set CURLOPT_SSLVERSION to CURL_SSLVERSION_TLSv1_1

View File

@@ -0,0 +1 @@
include(FailDrop-common.cmake)

View File

@@ -0,0 +1,2 @@
Error message was: ([Cc]ould *n.t resolve host:? '?badhostname.invalid'?|The requested URL returned error:|Protocol "https" (not supported or disabled|not supported|disabled)|.* was built with SSL disabled).*
Problems when submitting via HTTP

View File

@@ -0,0 +1 @@
Set CURLOPT_SSLVERSION to CURL_SSLVERSION_TLSv1_1

View File

@@ -0,0 +1 @@
include(FailDrop-common.cmake)

View File

@@ -491,12 +491,17 @@ run_ctest(check-configuration-type)
function(run_FailDrop case)
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/FailDrop-${case}-build)
run_cmake_with_options(FailDrop-${case} ${ARGN})
unset(ENV{CMAKE_TLS_VERSION}) # Test that env variable is saved in ctest config file.
set(RunCMake_TEST_NO_CLEAN 1)
run_cmake_command(FailDrop-${case}-ctest
${CMAKE_CTEST_COMMAND} -M Experimental -T Submit -VV
)
endfunction()
run_FailDrop(TLSVersion-1.1 -DCTEST_TLS_VERSION=1.1)
run_FailDrop(TLSVersion-1.1-cmake -DCMAKE_TLS_VERSION=1.1) # Test fallback to CMake variable.
set(ENV{CMAKE_TLS_VERSION} 1.1) # Test fallback to env variable.
run_FailDrop(TLSVersion-1.1-env)
unset(ENV{CMAKE_TLS_VERSION})
run_FailDrop(TLSVerify-ON -DCTEST_TLS_VERIFY=ON)
run_FailDrop(TLSVerify-OFF -DCMAKE_TLS_VERIFY=OFF) # Test fallback to CMake variable.

View File

@@ -0,0 +1 @@
(-1|255)

View File

@@ -0,0 +1,2 @@
Error message was: ([Cc]ould *n.t resolve host:? '?badhostname.invalid'?|The requested URL returned error:|Protocol "https" (not supported or disabled|not supported|disabled)|.* was built with SSL disabled).*
Problems when submitting via HTTP

View File

@@ -0,0 +1,4 @@
SetCTestConfiguration from CMAKE_TLS_VERSION:TLSVersion:1\.1
SetCTestConfiguration:TLSVersion:1\.1
.*
Set CURLOPT_SSLVERSION to CURL_SSLVERSION_TLSv1_1

View File

@@ -0,0 +1 @@
(-1|255)

View File

@@ -0,0 +1,2 @@
Error message was: ([Cc]ould *n.t resolve host:? '?badhostname.invalid'?|The requested URL returned error:|Protocol "https" (not supported or disabled|not supported|disabled)|.* was built with SSL disabled).*
Problems when submitting via HTTP

View File

@@ -0,0 +1,4 @@
SetCTestConfiguration from ENV{CMAKE_TLS_VERSION}:TLSVersion:1\.1
SetCTestConfiguration:TLSVersion:1\.1
.*
Set CURLOPT_SSLVERSION to CURL_SSLVERSION_TLSv1_1

View File

@@ -59,6 +59,12 @@ block()
set(CASE_DROP_METHOD "https")
set(CASE_TEST_PREFIX_CODE "set(CTEST_TLS_VERSION 1.1)")
run_ctest(FailDrop-TLSVersion-1.1 -VV)
set(CASE_TEST_PREFIX_CODE "set(CMAKE_TLS_VERSION 1.1)") # Test fallback to CMake variable.
run_ctest(FailDrop-TLSVersion-1.1-cmake -VV)
set(ENV{CMAKE_TLS_VERSION} 1.1) # Test fallback to env variable.
set(CASE_TEST_PREFIX_CODE "")
run_ctest(FailDrop-TLSVersion-1.1-env -VV)
unset(ENV{CMAKE_TLS_VERSION})
set(CASE_TEST_PREFIX_CODE "set(CTEST_TLS_VERIFY ON)")
run_ctest(FailDrop-TLSVerify-ON -VV)
set(CASE_TEST_PREFIX_CODE "set(CMAKE_TLS_VERIFY OFF)") # Test fallback to CMake variable.