diff options
12 files changed, 83 insertions, 1 deletions
diff --git a/cmake/QtTestHelpers.cmake b/cmake/QtTestHelpers.cmake index a7d6d9d849..e9ecf6857a 100644 --- a/cmake/QtTestHelpers.cmake +++ b/cmake/QtTestHelpers.cmake @@ -72,13 +72,80 @@ function(qt_add_manual_test target) endfunction() +# This function will configure the fixture for the network tests that require docker network services +# qmake counterpart: qtbase/mkspecs/features/unsupported/testserver.prf +function(qt_internal_setup_docker_test_fixture name) + # Only Linux is provisioned with docker at this time + if (NOT CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux") + return() + endif() + + set(QT_TEST_SERVER_LIST ${ARGN}) + set(DNSDOMAIN test-net.qt.local) + + find_program(QT_DOCKER_COMPOSE docker-compose) + if (NOT QT_DOCKER_COMPOSE) + message(WARNING "docker-compose was not found. Docker network tests will not be run.") + return() + endif() + if (NOT DEFINED QT_DOCKER_COMPOSE_VERSION) + execute_process(COMMAND "${QT_DOCKER_COMPOSE}" --version OUTPUT_VARIABLE QT_DOCKER_COMPOSE_VERSION) + string(REPLACE "\n" "" QT_DOCKER_COMPOSE_VERSION "${QT_DOCKER_COMPOSE_VERSION}") + set(QT_DOCKER_COMPOSE_VERSION "${QT_DOCKER_COMPOSE_VERSION}" CACHE STRING "docker compose version") + endif() + + find_program(QT_DOCKER docker) + if (NOT QT_DOCKER) + message(WARNING "docker was not found. Docker network tests will not be run.") + return() + endif() + if (NOT DEFINED QT_DOCKER_TEST_SERVER) + execute_process(COMMAND "${QT_DOCKER}" images -aq "qt-test-server-*" OUTPUT_VARIABLE QT_DOCKER_TEST_SERVER) + if (NOT QT_DOCKER_TEST_SERVER) + message(WARNING + "Docker image qt-test-server-* not found.\n" + "Run the provisioning script (coin/provisioning/.../testserver/docker_testserver.sh) in advance\n" + "Docker network tests will not be run.") + return() + endif() + set(QT_DOCKER_TEST_SERVER "ON" CACHE BOOL "docker qt-test-server-* present") + endif() + + target_compile_definitions("${name}" + PRIVATE + QT_TEST_SERVER QT_TEST_SERVER_NAME QT_TEST_SERVER_DOMAIN=\"${DNSDOMAIN}\" + ) + + set(TESTSERVER_COMPOSE_FILE "${QT_SOURCE_TREE}/tests/testserver/docker-compose-bridge-network.yml") + + # Bring up test servers and make sure the services are ready. + add_test(NAME ${name}-setup COMMAND + "${QT_DOCKER_COMPOSE}" -f ${TESTSERVER_COMPOSE_FILE} up --build -d --force-recreate --timeout 1 ${QT_TEST_SERVER_LIST} + ) + # Stop and remove test servers after testing. + add_test(NAME ${name}-cleanup COMMAND + "${QT_DOCKER_COMPOSE}" -f ${TESTSERVER_COMPOSE_FILE} down --timeout 1 + ) + + set_tests_properties(${name}-setup PROPERTIES FIXTURES_SETUP ${name}-docker) + set_tests_properties(${name}-cleanup PROPERTIES FIXTURES_CLEANUP ${name}-docker) + set_tests_properties(${name} PROPERTIES FIXTURES_REQUIRED ${name}-docker) + + foreach(test_name ${name} ${name}-setup ${name}-cleanup) + set_property(TEST "${test_name}" APPEND PROPERTY ENVIRONMENT "testserver=${QT_DOCKER_COMPOSE_VERSION}") + set_property(TEST "${test_name}" APPEND PROPERTY ENVIRONMENT TEST_DOMAIN=${DNSDOMAIN}) + set_property(TEST "${test_name}" APPEND PROPERTY ENVIRONMENT "SHARED_DATA=${QT_SOURCE_TREE}/mkspecs/features/data/testserver") + set_property(TEST "${test_name}" APPEND PROPERTY ENVIRONMENT SHARED_SERVICE=bridge-network) + endforeach() + +endfunction() # This function creates a CMake test target with the specified name for use with CTest. function(qt_add_test name) qt_parse_all_arguments(arg "qt_add_test" "RUN_SERIAL;EXCEPTIONS;GUI;QMLTEST;CATCH;LOWDPI" "OUTPUT_DIRECTORY;WORKING_DIRECTORY;TIMEOUT;VERSION" - "QML_IMPORTPATH;TESTDATA;${__default_private_args};${__default_public_args}" ${ARGN} + "QML_IMPORTPATH;TESTDATA;QT_TEST_SERVER_LIST;${__default_private_args};${__default_public_args}" ${ARGN} ) if (NOT arg_OUTPUT_DIRECTORY) @@ -191,6 +258,10 @@ function(qt_add_test name) endif() add_test(NAME "${name}" COMMAND ${test_executable} ${extra_test_args} ${test_outputs} WORKING_DIRECTORY "${test_working_dir}") + + if (arg_QT_TEST_SERVER_LIST) + qt_internal_setup_docker_test_fixture(${name} ${arg_QT_TEST_SERVER_LIST}) + endif() endif() set_tests_properties("${name}" PROPERTIES RUN_SERIAL "${arg_RUN_SERIAL}" LABELS "${label}") if (arg_TIMEOUT) diff --git a/tests/auto/network/access/qabstractnetworkcache/CMakeLists.txt b/tests/auto/network/access/qabstractnetworkcache/CMakeLists.txt index 3196ccca59..9ebd765fd4 100644 --- a/tests/auto/network/access/qabstractnetworkcache/CMakeLists.txt +++ b/tests/auto/network/access/qabstractnetworkcache/CMakeLists.txt @@ -16,6 +16,7 @@ qt_add_test(tst_qabstractnetworkcache PUBLIC_LIBRARIES Qt::Network TESTDATA ${test_data} + QT_TEST_SERVER_LIST "apache2" # special case ) #### Keys ignored in scope 1:.:.:qabstractnetworkcache.pro:<TRUE>: diff --git a/tests/auto/network/access/qhttpnetworkconnection/CMakeLists.txt b/tests/auto/network/access/qhttpnetworkconnection/CMakeLists.txt index 621e339c1a..ffd9ea934e 100644 --- a/tests/auto/network/access/qhttpnetworkconnection/CMakeLists.txt +++ b/tests/auto/network/access/qhttpnetworkconnection/CMakeLists.txt @@ -14,6 +14,7 @@ qt_add_test(tst_qhttpnetworkconnection PUBLIC_LIBRARIES Qt::CorePrivate Qt::NetworkPrivate + QT_TEST_SERVER_LIST "apache2" # special case ) #### Keys ignored in scope 1:.:.:qhttpnetworkconnection.pro:<TRUE>: diff --git a/tests/auto/network/access/qnetworkreply/test/CMakeLists.txt b/tests/auto/network/access/qnetworkreply/test/CMakeLists.txt index 568eb2adf6..24f264703f 100644 --- a/tests/auto/network/access/qnetworkreply/test/CMakeLists.txt +++ b/tests/auto/network/access/qnetworkreply/test/CMakeLists.txt @@ -28,6 +28,7 @@ qt_add_test(tst_qnetworkreply Qt::CorePrivate Qt::NetworkPrivate TESTDATA ${test_data} + QT_TEST_SERVER_LIST "vsftpd" "apache2" "ftp-proxy" "danted" "squid" # special case ) # Resources: diff --git a/tests/auto/network/socket/qhttpsocketengine/CMakeLists.txt b/tests/auto/network/socket/qhttpsocketengine/CMakeLists.txt index 8afcdc3376..5b4a9d0195 100644 --- a/tests/auto/network/socket/qhttpsocketengine/CMakeLists.txt +++ b/tests/auto/network/socket/qhttpsocketengine/CMakeLists.txt @@ -16,6 +16,7 @@ qt_add_test(tst_qhttpsocketengine PUBLIC_LIBRARIES Qt::CorePrivate Qt::NetworkPrivate + QT_TEST_SERVER_LIST "squid" "danted" "cyrus" "apache2" # special case ) #### Keys ignored in scope 1:.:.:qhttpsocketengine.pro:<TRUE>: diff --git a/tests/auto/network/socket/qsocks5socketengine/CMakeLists.txt b/tests/auto/network/socket/qsocks5socketengine/CMakeLists.txt index 0b2430c81a..e46257c123 100644 --- a/tests/auto/network/socket/qsocks5socketengine/CMakeLists.txt +++ b/tests/auto/network/socket/qsocks5socketengine/CMakeLists.txt @@ -16,6 +16,7 @@ qt_add_test(tst_qsocks5socketengine PUBLIC_LIBRARIES Qt::CorePrivate Qt::NetworkPrivate + QT_TEST_SERVER_LIST "danted" "apache2" "cyrus" # special case ) #### Keys ignored in scope 1:.:.:qsocks5socketengine.pro:<TRUE>: diff --git a/tests/auto/network/socket/qtcpserver/test/CMakeLists.txt b/tests/auto/network/socket/qtcpserver/test/CMakeLists.txt index ae345b99f4..4d328ebddb 100644 --- a/tests/auto/network/socket/qtcpserver/test/CMakeLists.txt +++ b/tests/auto/network/socket/qtcpserver/test/CMakeLists.txt @@ -10,6 +10,7 @@ qt_add_test(tst_qtcpserver ../tst_qtcpserver.cpp PUBLIC_LIBRARIES Qt::Network + QT_TEST_SERVER_LIST "danted" "cyrus" "squid" "ftp-proxy" # special case ) #### Keys ignored in scope 1:.:.:test.pro:<TRUE>: diff --git a/tests/auto/network/socket/qtcpsocket/test/CMakeLists.txt b/tests/auto/network/socket/qtcpsocket/test/CMakeLists.txt index a1a6dc172a..3b4bd856a3 100644 --- a/tests/auto/network/socket/qtcpsocket/test/CMakeLists.txt +++ b/tests/auto/network/socket/qtcpsocket/test/CMakeLists.txt @@ -11,6 +11,7 @@ qt_add_test(tst_qtcpsocket PUBLIC_LIBRARIES Qt::CorePrivate Qt::NetworkPrivate + QT_TEST_SERVER_LIST "danted" "squid" "apache2" "ftp-proxy" "vsftpd" "iptables" "cyrus" # special case ) ## Scopes: diff --git a/tests/auto/network/socket/qudpsocket/test/CMakeLists.txt b/tests/auto/network/socket/qudpsocket/test/CMakeLists.txt index a2fa36b078..3da08a0e72 100644 --- a/tests/auto/network/socket/qudpsocket/test/CMakeLists.txt +++ b/tests/auto/network/socket/qudpsocket/test/CMakeLists.txt @@ -12,6 +12,7 @@ qt_add_test(tst_qudpsocket ../../../../../shared PUBLIC_LIBRARIES Qt::Network + QT_TEST_SERVER_LIST "danted" "echo" # special case ) #### Keys ignored in scope 1:.:.:test.pro:<TRUE>: diff --git a/tests/auto/network/ssl/qsslsocket/CMakeLists.txt b/tests/auto/network/ssl/qsslsocket/CMakeLists.txt index 59ab6ff93a..d0307042f4 100644 --- a/tests/auto/network/ssl/qsslsocket/CMakeLists.txt +++ b/tests/auto/network/ssl/qsslsocket/CMakeLists.txt @@ -20,6 +20,7 @@ qt_add_test(tst_qsslsocket Qt::CorePrivate Qt::NetworkPrivate TESTDATA ${test_data} + QT_TEST_SERVER_LIST "squid" "danted" "cyrus" "apache2" "echo" # special case ) #### Keys ignored in scope 1:.:.:qsslsocket.pro:<TRUE>: diff --git a/tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/CMakeLists.txt b/tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/CMakeLists.txt index 9a1beaeb76..0d6b8a4c4a 100644 --- a/tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/CMakeLists.txt +++ b/tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/CMakeLists.txt @@ -16,6 +16,7 @@ qt_add_test(tst_qsslsocket_onDemandCertificates_member PUBLIC_LIBRARIES Qt::CorePrivate Qt::NetworkPrivate + QT_TEST_SERVER_LIST "squid" "danted" # special case ) #### Keys ignored in scope 1:.:.:qsslsocket_onDemandCertificates_member.pro:<TRUE>: diff --git a/tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/CMakeLists.txt b/tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/CMakeLists.txt index f8d6735c20..b17da05d86 100644 --- a/tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/CMakeLists.txt +++ b/tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/CMakeLists.txt @@ -16,6 +16,7 @@ qt_add_test(tst_qsslsocket_onDemandCertificates_static PUBLIC_LIBRARIES Qt::CorePrivate Qt::NetworkPrivate + QT_TEST_SERVER_LIST "squid" "danted" # special case ) #### Keys ignored in scope 1:.:.:qsslsocket_onDemandCertificates_static.pro:<TRUE>: |