From aeb8bcc055597910b436a400feea7666fb0bb1c2 Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 5 Mar 2024 19:48:45 -0500 Subject: 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 --- Help/variable/CTEST_TLS_VERSION.rst | 3 +++ Modules/CTestTargets.cmake | 7 +++++++ Source/CTest/cmCTestSubmitCommand.cxx | 24 ++++++++++++++++++++-- .../FailDrop-TLSVersion-1.1-cmake-ctest-result.txt | 1 + .../FailDrop-TLSVersion-1.1-cmake-ctest-stderr.txt | 2 ++ .../FailDrop-TLSVersion-1.1-cmake-ctest-stdout.txt | 1 + .../FailDrop-TLSVersion-1.1-cmake.cmake | 1 + .../FailDrop-TLSVersion-1.1-env-ctest-result.txt | 1 + .../FailDrop-TLSVersion-1.1-env-ctest-stderr.txt | 2 ++ .../FailDrop-TLSVersion-1.1-env-ctest-stdout.txt | 1 + .../FailDrop-TLSVersion-1.1-env.cmake | 1 + Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake | 5 +++++ .../FailDrop-TLSVersion-1.1-cmake-result.txt | 1 + .../FailDrop-TLSVersion-1.1-cmake-stderr.txt | 2 ++ .../FailDrop-TLSVersion-1.1-cmake-stdout.txt | 4 ++++ .../FailDrop-TLSVersion-1.1-env-result.txt | 1 + .../FailDrop-TLSVersion-1.1-env-stderr.txt | 2 ++ .../FailDrop-TLSVersion-1.1-env-stdout.txt | 4 ++++ Tests/RunCMake/ctest_submit/RunCMakeTest.cmake | 6 ++++++ 19 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-cmake-ctest-result.txt create mode 100644 Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-cmake-ctest-stderr.txt create mode 100644 Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-cmake-ctest-stdout.txt create mode 100644 Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-cmake.cmake create mode 100644 Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-env-ctest-result.txt create mode 100644 Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-env-ctest-stderr.txt create mode 100644 Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-env-ctest-stdout.txt create mode 100644 Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-env.cmake create mode 100644 Tests/RunCMake/ctest_submit/FailDrop-TLSVersion-1.1-cmake-result.txt create mode 100644 Tests/RunCMake/ctest_submit/FailDrop-TLSVersion-1.1-cmake-stderr.txt create mode 100644 Tests/RunCMake/ctest_submit/FailDrop-TLSVersion-1.1-cmake-stdout.txt create mode 100644 Tests/RunCMake/ctest_submit/FailDrop-TLSVersion-1.1-env-result.txt create mode 100644 Tests/RunCMake/ctest_submit/FailDrop-TLSVersion-1.1-env-stderr.txt create mode 100644 Tests/RunCMake/ctest_submit/FailDrop-TLSVersion-1.1-env-stdout.txt diff --git a/Help/variable/CTEST_TLS_VERSION.rst b/Help/variable/CTEST_TLS_VERSION.rst index c19d2a4..f8123df 100644 --- a/Help/variable/CTEST_TLS_VERSION.rst +++ b/Help/variable/CTEST_TLS_VERSION.rst @@ -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. diff --git a/Modules/CTestTargets.cmake b/Modules/CTestTargets.cmake index 3fcf702..f672410 100644 --- a/Modules/CTestTargets.cmake +++ b/Modules/CTestTargets.cmake @@ -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() diff --git a/Source/CTest/cmCTestSubmitCommand.cxx b/Source/CTest/cmCTestSubmitCommand.cxx index ec5f702..0b21b24 100644 --- a/Source/CTest/cmCTestSubmitCommand.cxx +++ b/Source/CTest/cmCTestSubmitCommand.cxx @@ -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 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 = diff --git a/Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-cmake-ctest-result.txt b/Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-cmake-ctest-result.txt new file mode 100644 index 0000000..d197c91 --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-cmake-ctest-result.txt @@ -0,0 +1 @@ +[^0] diff --git a/Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-cmake-ctest-stderr.txt b/Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-cmake-ctest-stderr.txt new file mode 100644 index 0000000..e3df62f --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-cmake-ctest-stderr.txt @@ -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 diff --git a/Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-cmake-ctest-stdout.txt b/Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-cmake-ctest-stdout.txt new file mode 100644 index 0000000..e83d934 --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-cmake-ctest-stdout.txt @@ -0,0 +1 @@ + Set CURLOPT_SSLVERSION to CURL_SSLVERSION_TLSv1_1 diff --git a/Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-cmake.cmake b/Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-cmake.cmake new file mode 100644 index 0000000..e0368fc --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-cmake.cmake @@ -0,0 +1 @@ +include(FailDrop-common.cmake) diff --git a/Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-env-ctest-result.txt b/Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-env-ctest-result.txt new file mode 100644 index 0000000..d197c91 --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-env-ctest-result.txt @@ -0,0 +1 @@ +[^0] diff --git a/Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-env-ctest-stderr.txt b/Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-env-ctest-stderr.txt new file mode 100644 index 0000000..e3df62f --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-env-ctest-stderr.txt @@ -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 diff --git a/Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-env-ctest-stdout.txt b/Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-env-ctest-stdout.txt new file mode 100644 index 0000000..e83d934 --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-env-ctest-stdout.txt @@ -0,0 +1 @@ + Set CURLOPT_SSLVERSION to CURL_SSLVERSION_TLSv1_1 diff --git a/Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-env.cmake b/Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-env.cmake new file mode 100644 index 0000000..e0368fc --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/FailDrop-TLSVersion-1.1-env.cmake @@ -0,0 +1 @@ +include(FailDrop-common.cmake) diff --git a/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake b/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake index c3e573a..e56a4cb 100644 --- a/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake +++ b/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake @@ -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. diff --git a/Tests/RunCMake/ctest_submit/FailDrop-TLSVersion-1.1-cmake-result.txt b/Tests/RunCMake/ctest_submit/FailDrop-TLSVersion-1.1-cmake-result.txt new file mode 100644 index 0000000..b57e2de --- /dev/null +++ b/Tests/RunCMake/ctest_submit/FailDrop-TLSVersion-1.1-cmake-result.txt @@ -0,0 +1 @@ +(-1|255) diff --git a/Tests/RunCMake/ctest_submit/FailDrop-TLSVersion-1.1-cmake-stderr.txt b/Tests/RunCMake/ctest_submit/FailDrop-TLSVersion-1.1-cmake-stderr.txt new file mode 100644 index 0000000..e3df62f --- /dev/null +++ b/Tests/RunCMake/ctest_submit/FailDrop-TLSVersion-1.1-cmake-stderr.txt @@ -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 diff --git a/Tests/RunCMake/ctest_submit/FailDrop-TLSVersion-1.1-cmake-stdout.txt b/Tests/RunCMake/ctest_submit/FailDrop-TLSVersion-1.1-cmake-stdout.txt new file mode 100644 index 0000000..ed3677a --- /dev/null +++ b/Tests/RunCMake/ctest_submit/FailDrop-TLSVersion-1.1-cmake-stdout.txt @@ -0,0 +1,4 @@ +SetCTestConfiguration from CMAKE_TLS_VERSION:TLSVersion:1\.1 +SetCTestConfiguration:TLSVersion:1\.1 +.* + Set CURLOPT_SSLVERSION to CURL_SSLVERSION_TLSv1_1 diff --git a/Tests/RunCMake/ctest_submit/FailDrop-TLSVersion-1.1-env-result.txt b/Tests/RunCMake/ctest_submit/FailDrop-TLSVersion-1.1-env-result.txt new file mode 100644 index 0000000..b57e2de --- /dev/null +++ b/Tests/RunCMake/ctest_submit/FailDrop-TLSVersion-1.1-env-result.txt @@ -0,0 +1 @@ +(-1|255) diff --git a/Tests/RunCMake/ctest_submit/FailDrop-TLSVersion-1.1-env-stderr.txt b/Tests/RunCMake/ctest_submit/FailDrop-TLSVersion-1.1-env-stderr.txt new file mode 100644 index 0000000..e3df62f --- /dev/null +++ b/Tests/RunCMake/ctest_submit/FailDrop-TLSVersion-1.1-env-stderr.txt @@ -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 diff --git a/Tests/RunCMake/ctest_submit/FailDrop-TLSVersion-1.1-env-stdout.txt b/Tests/RunCMake/ctest_submit/FailDrop-TLSVersion-1.1-env-stdout.txt new file mode 100644 index 0000000..c31b4bc --- /dev/null +++ b/Tests/RunCMake/ctest_submit/FailDrop-TLSVersion-1.1-env-stdout.txt @@ -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 diff --git a/Tests/RunCMake/ctest_submit/RunCMakeTest.cmake b/Tests/RunCMake/ctest_submit/RunCMakeTest.cmake index 46b0ba8..ad51960 100644 --- a/Tests/RunCMake/ctest_submit/RunCMakeTest.cmake +++ b/Tests/RunCMake/ctest_submit/RunCMakeTest.cmake @@ -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. -- cgit v0.12