]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#2954] Fixed sporadic UT failure
authorThomas Markwalder <tmark@isc.org>
Thu, 10 Aug 2023 19:11:40 +0000 (15:11 -0400)
committerThomas Markwalder <tmark@isc.org>
Thu, 10 Aug 2023 19:11:40 +0000 (15:11 -0400)
modified /src/lib/asiolink/tests/io_service_signal_unittests.cc

ChangeLog
src/lib/asiolink/tests/io_service_signal_unittests.cc

index faff432076457d6f2dcfdf2655dfce064c0bf05d..d58896fb8f6ff800656d9428dd65da5f1710b76c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2173.  [bug]           tmark
+       Fixed a sporadic failure of IOSignaltest.mixedSignals
+       unit test.  Test no longer relies on signals arriving
+       in order they are sent as it cannot be guaranteed.
+       (Gitlab #2954)
+
 2172.  [func]          fdupont
        Completed and improved logs showing what client classes
        are assigned to queries during processing.
index 1dd41a6aae83a1d671db4014d0deddca0b99fba5..69d0c09713b7b66603f90d66d465438644e7f822 100644 (file)
@@ -229,16 +229,20 @@ TEST_F(IOSignalTest, mixedSignals) {
     ASSERT_NO_THROW(io_signal_set_->add(SIGUSR1));
     ASSERT_NO_THROW(io_signal_set_->add(SIGUSR2));
 
+    // Stop the IO run once we have received eight signals.
     stop_at_count_ = 8;
 
-    // User a repeating TimedSignal so we should generate a signal every 3, 5
-    // and 7 ms until we hit our stop count.
-    TimedSignal sig_1(*io_service_, SIGINT, 3,
-                      asiolink::IntervalTimer::REPEATING);
-    TimedSignal sig_2(*io_service_, SIGUSR1, 5,
-                      asiolink::IntervalTimer::REPEATING);
-    TimedSignal sig_3(*io_service_, SIGUSR2, 7,
-                      asiolink::IntervalTimer::REPEATING);
+    // Since signal order arrival cannot be guaranteed, we'll use
+    // explicit one shot signals so we can guarantee how many
+    // of each signal we should get.
+    TimedSignal sig1(*io_service_, SIGINT, 2);
+    TimedSignal sig2(*io_service_, SIGUSR1, 2);
+    TimedSignal sig3(*io_service_, SIGINT, 2);
+    TimedSignal sig4(*io_service_, SIGUSR2, 2);
+    TimedSignal sig5(*io_service_, SIGINT, 2);
+    TimedSignal sig6(*io_service_, SIGUSR1, 2);
+    TimedSignal sig7(*io_service_, SIGINT, 2);
+    TimedSignal sig8(*io_service_, SIGUSR2, 2);
 
     // Start processing IO.  This should continue until we stop either by
     // hitting the stop count or if things go wrong, max test time.