]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#1959] unsent-update-count in heartbeat response
authorMarcin Siodelski <marcin@isc.org>
Tue, 27 Jul 2021 19:24:51 +0000 (21:24 +0200)
committerMarcin Siodelski <marcin@isc.org>
Wed, 22 Sep 2021 06:09:39 +0000 (08:09 +0200)
src/hooks/dhcp/high_availability/ha_service.cc
src/hooks/dhcp/high_availability/tests/ha_service_unittest.cc

index 46d7728c360d42a8e0d1ae8e3ef864a066e7ff01..5b5a27420ff1d2142a8125f20ae79b4ad3cf9276 100644 (file)
@@ -1573,6 +1573,9 @@ HAService::processHeartbeat() {
     }
     arguments->set("scopes", scopes_list);
 
+    arguments->set("unsent-update-count",
+                   Element::create(static_cast<int64_t>(communication_state_->getUnsentUpdateCount())));
+
     return (createAnswer(CONTROL_RESULT_SUCCESS, "HA peer status returned.",
                          arguments));
 }
index f2fed405ecbbb8a39ba329bf9055778ba11c6359..3d485e54ded6d875e21e8674ad3c692e9e914f2f 100644 (file)
@@ -2495,6 +2495,10 @@ TEST_F(HAServiceTest, processHeartbeat) {
     TestHAService service(io_service_,  network_state_, config_storage);
     service.query_filter_.serveDefaultScopes();
 
+    for (auto i = 0; i < 6; ++i) {
+        service.communication_state_->increaseUnsentUpdateCount();
+    }
+
     // Process heartbeat command.
     ConstElementPtr rsp;
     ASSERT_NO_THROW(rsp = service.processHeartbeat());
@@ -2538,6 +2542,14 @@ TEST_F(HAServiceTest, processHeartbeat) {
     // Let's allow the response propagation time of 5 seconds to make
     // sure this test doesn't fail on slow systems.
     EXPECT_LT(td.seconds(), 5);
+
+    // The response should contain unsent-update-count parameter indicating
+    // how many updates haven't been sent to a partner because the partner
+    // was unavailable.
+    ConstElementPtr unsent_update_count = args->get("unsent-update-count");
+    ASSERT_TRUE(unsent_update_count);
+    EXPECT_EQ(Element::integer, unsent_update_count->getType());
+    EXPECT_EQ(6, static_cast<uint64_t>(unsent_update_count->intValue()));
 }
 
 // This test verifies that the correct value of the heartbeat-delay is used.