[pkg-nagios-changes] [Git][nagios-team/icinga2][master] 2 commits: Add upstream patch to improve unit tests.
Bas Couwenberg (@sebastic)
gitlab at salsa.debian.org
Thu Apr 23 09:01:26 BST 2026
Bas Couwenberg pushed to branch master at Debian Nagios Maintainer Group / icinga2
Commits:
98a978e6 by Bas Couwenberg at 2026-04-23T09:48:44+02:00
Add upstream patch to improve unit tests.
- - - - -
8033aff2 by Bas Couwenberg at 2026-04-23T09:49:05+02:00
Set distribution to experimental.
- - - - -
4 changed files:
- debian/changelog
- − debian/patches/perfdata-tests.patch
- + debian/patches/pr10780-parallel-unit-test.patch
- debian/patches/series
Changes:
=====================================
debian/changelog
=====================================
@@ -1,3 +1,9 @@
+icinga2 (2.16.0-3~exp1) experimental; urgency=medium
+
+ * Add upstream patch to improve unit tests.
+
+ -- Bas Couwenberg <sebastic at debian.org> Thu, 23 Apr 2026 09:48:53 +0200
+
icinga2 (2.16.0-2) unstable; urgency=medium
* Disable flaky perfdata tests.
=====================================
debian/patches/perfdata-tests.patch deleted
=====================================
@@ -1,178 +0,0 @@
-Description: Disable flaky perfdata tests.
-Author: Bas Couwenberg <sebastic at debian.org>
-Bug: https://github.com/Icinga/icinga2/issues/10811
-
---- a/test/perfdata-elasticsearchwriter.cpp
-+++ b/test/perfdata-elasticsearchwriter.cpp
-@@ -14,7 +14,7 @@ BOOST_FIXTURE_TEST_SUITE(perfdata_elasti
- *boost::unit_test::label("network")
- )
-
--BOOST_AUTO_TEST_CASE(connect)
-+BOOST_AUTO_TEST_CASE(connect, * boost::unit_test::disabled())
- {
- ResumeWriter();
-
-@@ -40,7 +40,7 @@ BOOST_AUTO_TEST_CASE(connect)
- PauseWriter();
- }
-
--BOOST_AUTO_TEST_CASE(pause_with_pending_work)
-+BOOST_AUTO_TEST_CASE(pause_with_pending_work, * boost::unit_test::disabled())
- {
- ResumeWriter();
-
---- a/test/perfdata-gelfwriter.cpp
-+++ b/test/perfdata-gelfwriter.cpp
-@@ -14,7 +14,7 @@ BOOST_FIXTURE_TEST_SUITE(perfdata_gelfwr
- *boost::unit_test::label("network")
- )
-
--BOOST_AUTO_TEST_CASE(connect)
-+BOOST_AUTO_TEST_CASE(connect, * boost::unit_test::disabled())
- {
- ResumeWriter();
-
-@@ -31,7 +31,7 @@ BOOST_AUTO_TEST_CASE(connect)
- PauseWriter();
- }
-
--BOOST_AUTO_TEST_CASE(pause_with_pending_work)
-+BOOST_AUTO_TEST_CASE(pause_with_pending_work, * boost::unit_test::disabled())
- {
- ResumeWriter();
-
---- a/test/perfdata-graphitewriter.cpp
-+++ b/test/perfdata-graphitewriter.cpp
-@@ -15,7 +15,7 @@ BOOST_FIXTURE_TEST_SUITE(perfdata_graphi
- *boost::unit_test::label("network")
- )
-
--BOOST_AUTO_TEST_CASE(connect)
-+BOOST_AUTO_TEST_CASE(connect, * boost::unit_test::disabled())
- {
- ResumeWriter();
-
-@@ -30,7 +30,7 @@ BOOST_AUTO_TEST_CASE(connect)
- PauseWriter();
- }
-
--BOOST_AUTO_TEST_CASE(pause_with_pending_work)
-+BOOST_AUTO_TEST_CASE(pause_with_pending_work, * boost::unit_test::disabled())
- {
- ResumeWriter();
-
---- a/test/perfdata-influxdbwriter.cpp
-+++ b/test/perfdata-influxdbwriter.cpp
-@@ -13,7 +13,7 @@ BOOST_FIXTURE_TEST_SUITE(perfdata_influx
- *boost::unit_test::label("network")
- )
-
--BOOST_AUTO_TEST_CASE(connect)
-+BOOST_AUTO_TEST_CASE(connect, * boost::unit_test::disabled())
- {
- ResumeWriter();
-
-@@ -33,7 +33,7 @@ BOOST_AUTO_TEST_CASE(connect)
- PauseWriter();
- }
-
--BOOST_AUTO_TEST_CASE(pause_with_pending_work)
-+BOOST_AUTO_TEST_CASE(pause_with_pending_work, * boost::unit_test::disabled())
- {
- ResumeWriter();
-
---- a/test/perfdata-opentsdbwriter.cpp
-+++ b/test/perfdata-opentsdbwriter.cpp
-@@ -15,7 +15,7 @@ BOOST_FIXTURE_TEST_SUITE(perfdata_opents
- *boost::unit_test::label("network")
- )
-
--BOOST_AUTO_TEST_CASE(connect)
-+BOOST_AUTO_TEST_CASE(connect, * boost::unit_test::disabled())
- {
- ResumeWriter();
-
-@@ -36,7 +36,7 @@ BOOST_AUTO_TEST_CASE(connect)
- PauseWriter();
- }
-
--BOOST_AUTO_TEST_CASE(pause_with_pending_work)
-+BOOST_AUTO_TEST_CASE(pause_with_pending_work, * boost::unit_test::disabled())
- {
- ResumeWriter();
-
---- a/test/perfdata-perfdatawriterconnection.cpp
-+++ b/test/perfdata-perfdatawriterconnection.cpp
-@@ -51,7 +51,7 @@ BOOST_FIXTURE_TEST_SUITE(perfdata_connec
-
- /* If there is no acceptor listening on the other side, connecting should fail.
- */
--BOOST_AUTO_TEST_CASE(connection_refused)
-+BOOST_AUTO_TEST_CASE(connection_refused, * boost::unit_test::disabled())
- {
- std::promise<void> p;
- TestThread timeoutThread{[&]() {
-@@ -69,7 +69,7 @@ BOOST_AUTO_TEST_CASE(connection_refused)
- /* The PerfdataWriterConnection connects automatically when sending the first data.
- * In case of http we also need to support disconnecting and reconnecting.
- */
--BOOST_AUTO_TEST_CASE(ensure_connected)
-+BOOST_AUTO_TEST_CASE(ensure_connected, * boost::unit_test::disabled())
- {
- std::promise<void> disconnectedPromise;
-
-@@ -92,7 +92,7 @@ BOOST_AUTO_TEST_CASE(ensure_connected)
- /* Verify that data can still be sent while CancelAfterTimeout is waiting and the timeout
- * can be aborted when all data has been sent successfully.
- */
--BOOST_AUTO_TEST_CASE(finish_during_timeout)
-+BOOST_AUTO_TEST_CASE(finish_during_timeout, * boost::unit_test::disabled())
- {
- std::promise<void> p;
-
-@@ -128,7 +128,7 @@ BOOST_AUTO_TEST_CASE(finish_during_timeo
- * in the kernel. But in that case the TLS handshake will be stuck, so we need to verify that a
- * handshake can be interrupted by CancelAfterTimeout().
- */
--BOOST_AUTO_TEST_CASE(stuck_in_handshake)
-+BOOST_AUTO_TEST_CASE(stuck_in_handshake, * boost::unit_test::disabled())
- {
- std::promise<void> p;
- TestThread timeoutThread{[&]() {
-@@ -151,7 +151,7 @@ BOOST_AUTO_TEST_CASE(stuck_in_handshake)
- * No orderly TLS shutdown can be performed in this case, because the stream has been truncated.
- * The server will need to handle this one on their own.
- */
--BOOST_AUTO_TEST_CASE(stuck_sending)
-+BOOST_AUTO_TEST_CASE(stuck_sending, * boost::unit_test::disabled())
- {
- std::promise<void> shutdownPromise;
- std::promise<void> dataReadPromise;
-@@ -194,7 +194,7 @@ BOOST_AUTO_TEST_CASE(stuck_sending)
- * in reality a server might not even do that. That case should be handled by our
- * AsioTlsStream::GracefulDisconnect() function with an additional 10s timeout.
- */
--BOOST_AUTO_TEST_CASE(stuck_reading_response)
-+BOOST_AUTO_TEST_CASE(stuck_reading_response, * boost::unit_test::disabled())
- {
- std::promise<void> shutdownPromise;
- std::promise<void> requestReadPromise;
-@@ -234,7 +234,7 @@ BOOST_AUTO_TEST_CASE(stuck_reading_respo
- * PerfdataWriterConnection should detect the disconnect, catch the exception and attempt to
- * reconnect without exiting Send().
- */
--BOOST_AUTO_TEST_CASE(reconnect_failed)
-+BOOST_AUTO_TEST_CASE(reconnect_failed, * boost::unit_test::disabled())
- {
- TestThread mockTargetThread{[&]() {
- Accept();
-@@ -269,7 +269,7 @@ BOOST_AUTO_TEST_CASE(reconnect_failed)
- * since on older boost versions the async_write() functions also accept non-const references, it
- * doesn't hurt to ensure this with a test-case.
- */
--BOOST_AUTO_TEST_CASE(http_send_retry)
-+BOOST_AUTO_TEST_CASE(http_send_retry, * boost::unit_test::disabled())
- {
- TestThread mockTargetThread{[&] {
- Accept();
=====================================
debian/patches/pr10780-parallel-unit-test.patch
=====================================
@@ -0,0 +1,189 @@
+Description: Enable parallel unit-test execution
+Author: Johannes Schmidt <johannes.schmidt at icinga.com>
+Origin: https://github.com/Icinga/icinga2/pull/10780
+Bug: https://github.com/Icinga/icinga2/issues/10811
+
+--- a/.github/workflows/linux.bash
++++ b/.github/workflows/linux.bash
+@@ -38,6 +38,7 @@ case "$DISTRO" in
+ )
+
+ ln -vs /usr/bin/cmake3 /usr/local/bin/cmake
++ ln -vs /usr/bin/ctest3 /usr/local/bin/ctest
+ ln -vs /usr/bin/ninja-build /usr/local/bin/ninja
+ CMAKE_OPTS+=(-DBOOST_{INCLUDEDIR=/boost_1_69_0,LIBRARYDIR=/boost_1_69_0/stage/lib})
+ export LD_LIBRARY_PATH=/boost_1_69_0/stage/lib
+@@ -154,6 +155,6 @@ cd /icinga2/build
+
+ ninja -v
+
+-ninja test
++ctest -j$(nproc) --output-on-failure
+ ninja install
+ icinga2 daemon -C
+--- a/Containerfile
++++ b/Containerfile
+@@ -129,7 +129,9 @@ RUN --mount=type=bind,source=.,target=/i
+ -DICINGA2_WITH_COMPAT=OFF \
+ -DICINGA2_WITH_LIVESTATUS=OFF && \
+ make -j$([ "$MAKE_JOBS" = auto ] && nproc || echo "$MAKE_JOBS") && \
+- if [ "${ICINGA2_BUILD_TESTING}" = ON ]; then CTEST_OUTPUT_ON_FAILURE=1 make test; fi && \
++ if [ "${ICINGA2_BUILD_TESTING}" = ON ]; then \
++ ctest -j$([ "$MAKE_JOBS" = auto ] && nproc || echo "$MAKE_JOBS") --output-on-failure; \
++ fi && \
+ make install DESTDIR=/icinga2-install
+
+ RUN rm -rf /icinga2-install/etc/icinga2/features-enabled/mainlog.conf \
+--- a/test/perfdata-perfdatawriterconnection.cpp
++++ b/test/perfdata-perfdatawriterconnection.cpp
+@@ -56,14 +56,14 @@ BOOST_AUTO_TEST_CASE(connection_refused)
+ std::promise<void> p;
+ TestThread timeoutThread{[&]() {
+ auto f = p.get_future();
+- GetConnection().CancelAfterTimeout(f, 50ms);
++ GetConnection().CancelAfterTimeout(f, 250ms);
+ }};
+
+ BOOST_REQUIRE_THROW(
+ GetConnection().Send(boost::asio::const_buffer{"foobar", 7}), PerfdataWriterConnection::Stopped
+ );
+
+- REQUIRE_JOINS_WITHIN(timeoutThread, 1s);
++ REQUIRE_JOINS_WITHIN(timeoutThread, 10s);
+ }
+
+ /* The PerfdataWriterConnection connects automatically when sending the first data.
+@@ -86,7 +86,7 @@ BOOST_AUTO_TEST_CASE(ensure_connected)
+ BOOST_REQUIRE_NO_THROW(GetConnection().Disconnect());
+ disconnectedPromise.set_value();
+
+- REQUIRE_JOINS_WITHIN(mockTargetThread, 1s);
++ REQUIRE_JOINS_WITHIN(mockTargetThread, 10s);
+ }
+
+ /* Verify that data can still be sent while CancelAfterTimeout is waiting and the timeout
+@@ -113,15 +113,15 @@ BOOST_AUTO_TEST_CASE(finish_during_timeo
+
+ TestThread timeoutThread{[&]() {
+ auto f = p.get_future();
+- GetConnection().CancelAfterTimeout(f, 50ms);
++ GetConnection().CancelAfterTimeout(f, 250ms);
+ BOOST_REQUIRE(f.wait_for(0ms) == std::future_status::ready);
+ BOOST_REQUIRE(!GetConnection().IsConnected());
+ }};
+
+ GetConnection().Send(boost::asio::const_buffer{"foobar", 7});
+
+- REQUIRE_JOINS_WITHIN(timeoutThread, 1s);
+- REQUIRE_JOINS_WITHIN(mockTargetThread, 1s);
++ REQUIRE_JOINS_WITHIN(timeoutThread, 10s);
++ REQUIRE_JOINS_WITHIN(mockTargetThread, 10s);
+ }
+
+ /* For the client, even a hanging server will accept the connection immediately, since it's done
+@@ -134,7 +134,7 @@ BOOST_AUTO_TEST_CASE(stuck_in_handshake)
+ TestThread timeoutThread{[&]() {
+ Accept();
+ auto f = p.get_future();
+- GetConnection().CancelAfterTimeout(f, 50ms);
++ GetConnection().CancelAfterTimeout(f, 250ms);
+ BOOST_REQUIRE(f.wait_for(0ms) == std::future_status::timeout);
+ }};
+
+@@ -142,7 +142,7 @@ BOOST_AUTO_TEST_CASE(stuck_in_handshake)
+ GetConnection().Send(boost::asio::const_buffer{"foobar", 7}), PerfdataWriterConnection::Stopped
+ );
+
+- REQUIRE_JOINS_WITHIN(timeoutThread, 1s);
++ REQUIRE_JOINS_WITHIN(timeoutThread, 10s);
+ }
+
+ /* When the disconnect timeout runs out while sending something to a slow or blocking server, we
+@@ -185,8 +185,8 @@ BOOST_AUTO_TEST_CASE(stuck_sending)
+ BOOST_REQUIRE_THROW(GetConnection().Send(buf), PerfdataWriterConnection::Stopped);
+ shutdownPromise.set_value();
+
+- REQUIRE_JOINS_WITHIN(timeoutThread, 1s);
+- REQUIRE_JOINS_WITHIN(mockTargetThread, 1s);
++ REQUIRE_JOINS_WITHIN(timeoutThread, 10s);
++ REQUIRE_JOINS_WITHIN(mockTargetThread, 10s);
+ }
+
+ /* This simulates a server that is stuck after receiving a HTTP request and before sending their
+@@ -226,8 +226,8 @@ BOOST_AUTO_TEST_CASE(stuck_reading_respo
+ BOOST_REQUIRE_THROW(GetConnection().Send(request), PerfdataWriterConnection::Stopped);
+ shutdownPromise.set_value();
+
+- REQUIRE_JOINS_WITHIN(timeoutThread, 1s);
+- REQUIRE_JOINS_WITHIN(mockTargetThread, 1s);
++ REQUIRE_JOINS_WITHIN(timeoutThread, 10s);
++ REQUIRE_JOINS_WITHIN(mockTargetThread, 10s);
+ }
+
+ /* This test simulates a server that closes the connection and reappears at a later time.
+@@ -261,7 +261,7 @@ BOOST_AUTO_TEST_CASE(reconnect_failed)
+ BOOST_REQUIRE_NO_THROW(GetConnection().Send(boost::asio::const_buffer{randomData.data(), randomData.size()}));
+ BOOST_REQUIRE_NO_THROW(GetConnection().Disconnect());
+
+- REQUIRE_JOINS_WITHIN(mockTargetThread, 1s);
++ REQUIRE_JOINS_WITHIN(mockTargetThread, 10s);
+ }
+
+ /* This tests if retrying an http send will reproducibly lead to the exact same message being
+@@ -329,7 +329,7 @@ BOOST_AUTO_TEST_CASE(http_send_retry)
+ BOOST_REQUIRE_NO_THROW(GetConnection().Send(request));
+ BOOST_REQUIRE_NO_THROW(GetConnection().Disconnect());
+
+- REQUIRE_JOINS_WITHIN(mockTargetThread, 1s);
++ REQUIRE_JOINS_WITHIN(mockTargetThread, 10s);
+ }
+
+ BOOST_AUTO_TEST_SUITE_END()
+--- a/lib/perfdata/perfdatawriterconnection.cpp
++++ b/lib/perfdata/perfdatawriterconnection.cpp
+@@ -62,7 +62,7 @@ bool PerfdataWriterConnection::IsStopped
+
+ void PerfdataWriterConnection::Disconnect()
+ {
+- if (m_Stopped.exchange(true, std::memory_order_relaxed)) {
++ if (m_Stopped.exchange(true)) {
+ return;
+ }
+
+@@ -76,9 +76,14 @@ void PerfdataWriterConnection::Disconnec
+ * completion.
+ */
+ std::visit(
+- [](const auto& stream) {
++ [this](const auto& stream) {
+ if (stream->lowest_layer().is_open()) {
+- stream->lowest_layer().cancel();
++ if (m_Connected) {
++ stream->lowest_layer().cancel();
++ } else {
++ boost::system::error_code ec;
++ stream->lowest_layer().close(ec);
++ }
+ }
+ },
+ m_Stream
+@@ -133,6 +138,10 @@ void PerfdataWriterConnection::EnsureCon
+ ::Connect(stream->lowest_layer(), m_Host, m_Port, yc);
+
+ if constexpr (std::is_same_v<std::decay_t<decltype(stream)>, Shared<AsioTlsStream>::Ptr>) {
++ if (m_Stopped) {
++ BOOST_THROW_EXCEPTION(Stopped{});
++ }
++
+ using type = boost::asio::ssl::stream_base::handshake_type;
+
+ stream->next_layer().async_handshake(type::client, yc);
+@@ -156,7 +165,7 @@ void PerfdataWriterConnection::EnsureCon
+
+ void PerfdataWriterConnection::Disconnect(boost::asio::yield_context yc)
+ {
+- if (!m_Connected.exchange(false, std::memory_order_relaxed)) {
++ if (!m_Connected.exchange(false)) {
+ return;
+ }
+
=====================================
debian/patches/series
=====================================
@@ -1,3 +1,3 @@
21_config_changes
postgres-checkcommand.patch
-perfdata-tests.patch
+pr10780-parallel-unit-test.patch
View it on GitLab: https://salsa.debian.org/nagios-team/icinga2/-/compare/a5f5200dd08f773e266171f85a6d82e323596d77...8033aff2eee431661e9484c36598aa5432bba41c
--
View it on GitLab: https://salsa.debian.org/nagios-team/icinga2/-/compare/a5f5200dd08f773e266171f85a6d82e323596d77...8033aff2eee431661e9484c36598aa5432bba41c
You're receiving this email because of your account on salsa.debian.org. Manage all notifications: https://salsa.debian.org/-/profile/notifications | Help: https://salsa.debian.org/help
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-nagios-changes/attachments/20260423/bebc2487/attachment-0001.htm>
More information about the pkg-nagios-changes
mailing list