From 722f417c534bc63d7e206df61867f93ff7d227c0 Mon Sep 17 00:00:00 2001 From: Sebastian Palencsar Date: Sun, 21 Jun 2026 08:56:03 +0200 Subject: [PATCH] fix(ci): run Qt tests headless in Docker/CI Use QCoreApplication for the race test, set QT_QPA_PLATFORM=offscreen and QT_MEDIA_BACKEND=ffmpeg for playback tests, and export the same vars in CI before ctest to avoid subprocess aborts without a display. --- .github/workflows/build.yml | 2 ++ tests/CMakeLists.txt | 10 ++++++++-- tests/radiobackend_playback_test.cpp | 11 ++++++++++- tests/radiobrowser_race_test.cpp | 10 ++++++++-- 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0e2f231..53b55a4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -35,6 +35,8 @@ jobs: qt6-multimedia-ffmpeg cmake -S . -B build -DCMAKE_BUILD_TYPE=Release cmake --build build -j"$(nproc)" + export QT_QPA_PLATFORM=offscreen + export QT_MEDIA_BACKEND=ffmpeg ctest --test-dir build --output-on-failure "$(/usr/lib/qt6/bin/qtpaths6 --query QT_INSTALL_BINS)/qmllint" src/qml/Main.qml src/qml/components/*.qml src/qml/theme/BearTheme.qml ' diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index ce72411..c4768dc 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,5 +1,10 @@ find_package(Qt6 REQUIRED COMPONENTS Test) +set(BEARWAVE_TEST_ENV + QT_QPA_PLATFORM=offscreen + QT_MEDIA_BACKEND=ffmpeg +) + set(TEST_SOURCES radiobackend_playback_test.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../src/radiobackend.cpp @@ -25,6 +30,7 @@ target_link_libraries(radiobackend_playback_test PRIVATE ) add_test(NAME radiobackend_playback_test COMMAND radiobackend_playback_test) +set_tests_properties(radiobackend_playback_test PROPERTIES ENVIRONMENT "${BEARWAVE_TEST_ENV}") set(RACE_TEST_SOURCES radiobrowser_race_test.cpp @@ -42,7 +48,7 @@ target_link_libraries(radiobrowser_race_test PRIVATE Qt6::Core Qt6::Network Qt6::Test - Qt6::Widgets ) -add_test(NAME radiobrowser_race_test COMMAND radiobrowser_race_test) \ No newline at end of file +add_test(NAME radiobrowser_race_test COMMAND radiobrowser_race_test) +set_tests_properties(radiobrowser_race_test PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen") \ No newline at end of file diff --git a/tests/radiobackend_playback_test.cpp b/tests/radiobackend_playback_test.cpp index c97b067..7ad6d7f 100644 --- a/tests/radiobackend_playback_test.cpp +++ b/tests/radiobackend_playback_test.cpp @@ -328,5 +328,14 @@ void RadioBackendPlaybackTest::manual_station_accepts_http_and_https() QCOMPARE(backend.stations().size(), 2); } -QTEST_MAIN(RadioBackendPlaybackTest) +int main(int argc, char *argv[]) +{ + qputenv("QT_QPA_PLATFORM", "offscreen"); + qputenv("QT_MEDIA_BACKEND", "ffmpeg"); + + QApplication app(argc, argv); + RadioBackendPlaybackTest test; + return QTest::qExec(&test, argc, argv); +} + #include "radiobackend_playback_test.moc" \ No newline at end of file diff --git a/tests/radiobrowser_race_test.cpp b/tests/radiobrowser_race_test.cpp index 0446c00..ec43ed5 100644 --- a/tests/radiobrowser_race_test.cpp +++ b/tests/radiobrowser_race_test.cpp @@ -2,7 +2,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later #include -#include +#include #include #include #include @@ -100,5 +100,11 @@ void RadioBrowserRaceTest::latest_request_wins_after_rapid_category_switch() || finalName == QStringLiteral("NL Station")); } -QTEST_MAIN(RadioBrowserRaceTest) +int main(int argc, char *argv[]) +{ + QCoreApplication app(argc, argv); + RadioBrowserRaceTest test; + return QTest::qExec(&test, argc, argv); +} + #include "radiobrowser_race_test.moc" \ No newline at end of file