summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCristian Adam <cristian.adam@qt.io>2020-09-16 14:50:18 +0200
committerAlexandru Croitor <alexandru.croitor@qt.io>2020-09-17 00:11:04 +0000
commit0aa4b33b92da6a95d29caee62e4ac5e4c53a84ff (patch)
tree3a822608b4e76718657439fafb0784f230e1167a
parent7aacc8144e7da6b1ec48ab7c1e5c431d78c99c5f (diff)
CMake Build: Add qtnetwork docker testserver support
qt_add_test supports now QT_TEST_SERVER_LIST, which will add the test servers as docker test fixtures. The docker server will be started before the test is run, and stopped after the test is run. Running the tests in parallel is not supported. Docker tests are currently only supported on Linux hosts. Task-number: QTBUG-85034 Change-Id: If3cefe05c5dec19c14b05d2fa8b01a0b6d95e259 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
-rw-r--r--cmake/QtTestHelpers.cmake73
-rw-r--r--tests/auto/network/access/qabstractnetworkcache/CMakeLists.txt1
-rw-r--r--tests/auto/network/access/qhttpnetworkconnection/CMakeLists.txt1
-rw-r--r--tests/auto/network/access/qnetworkreply/test/CMakeLists.txt1
-rw-r--r--tests/auto/network/socket/qhttpsocketengine/CMakeLists.txt1
-rw-r--r--tests/auto/network/socket/qsocks5socketengine/CMakeLists.txt1
-rw-r--r--tests/auto/network/socket/qtcpserver/test/CMakeLists.txt1
-rw-r--r--tests/auto/network/socket/qtcpsocket/test/CMakeLists.txt1
-rw-r--r--tests/auto/network/socket/qudpsocket/test/CMakeLists.txt1
-rw-r--r--tests/auto/network/ssl/qsslsocket/CMakeLists.txt1
-rw-r--r--tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/CMakeLists.txt1
-rw-r--r--tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/CMakeLists.txt1
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>: