]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#1219] Moved shared code to fixture methods
authorFrancis Dupont <fdupont@isc.org>
Mon, 18 May 2020 17:07:12 +0000 (19:07 +0200)
committerFrancis Dupont <fdupont@isc.org>
Mon, 18 May 2020 17:07:12 +0000 (19:07 +0200)
src/hooks/dhcp/high_availability/tests/ha_service_unittest.cc

index c0507c45d8e20552938b5dad4cb8369bf4c45b7b..51baedbc8a54ad70f57ef5f4fce20d7aecc75d35 100644 (file)
@@ -922,6 +922,432 @@ public:
         }
     }
 
+    /// @brief Tests scenarios when all lease updates are sent successfully.
+    void testSendSuccessfulUpdates() {
+        // Start HTTP servers.
+        ASSERT_NO_THROW({
+                listener_->start();
+                listener2_->start();
+                listener3_->start();
+        });
+
+        // This flag will be set to true if unpark is called.
+        bool unpark_called = false;
+        testSendLeaseUpdates([&unpark_called] { unpark_called = true; },
+                             true, 1);
+
+        // Expecting that the packet was unparked because lease
+        // updates are expected to be successful.
+        EXPECT_TRUE(unpark_called);
+
+        // The server 2 should have received two commands.
+        EXPECT_EQ(2, factory2_->getResponseCreator()->getReceivedRequests().size());
+
+        // Check that the server 2 has received lease4-update command.
+        auto update_request2 =
+            factory2_->getResponseCreator()->findRequest("lease4-update",
+                                                         "192.1.2.3");
+        EXPECT_TRUE(update_request2);
+
+        // Check that the server 2 has received lease4-del command.
+        auto delete_request2 =
+            factory2_->getResponseCreator()->findRequest("lease4-del",
+                                                         "192.2.3.4");
+        EXPECT_TRUE(delete_request2);
+
+        // Lease updates should be successfully sent to server3.
+        EXPECT_EQ(2, factory3_->getResponseCreator()->getReceivedRequests().size());
+
+        // Check that the server 3 has received lease4-update command.
+        auto update_request3 =
+            factory3_->getResponseCreator()->findRequest("lease4-update",
+                                                         "192.1.2.3");
+        EXPECT_TRUE(update_request3);
+
+        // Check that the server 3 has received lease4-del command.
+        auto delete_request3 =
+            factory3_->getResponseCreator()->findRequest("lease4-del",
+                                                         "192.2.3.4");
+        EXPECT_TRUE(delete_request3);
+    }
+
+    /// @brief Tests scenarios when lease updates are not sent to the failover peer.
+    void testSendUpdatesPartnerDown() {
+        // Start HTTP servers.
+        ASSERT_NO_THROW({
+                listener_->start();
+                listener2_->start();
+                listener3_->start();
+        });
+
+        // This flag will be set to true if unpark is called.
+        bool unpark_called = false;
+        testSendLeaseUpdates([&unpark_called] { unpark_called = true; },
+                             false, 0, MyState(HA_PARTNER_DOWN_ST));
+
+        // There were no lease updates for which we have been waiting
+        // to complete so the packet was never unparked. Note that in
+        // such situation the packet is not parked either.
+        EXPECT_FALSE(unpark_called);
+
+        // Server 2 should not receive lease4-update.
+        auto update_request2 =
+            factory2_->getResponseCreator()->findRequest("lease4-update",
+                                                         "192.1.2.3");
+        EXPECT_FALSE(update_request2);
+
+        // Server 2 should not receive lease4-del.
+        auto delete_request2 =
+            factory2_->getResponseCreator()->findRequest("lease4-del",
+                                                         "192.2.3.4");
+        EXPECT_FALSE(delete_request2);
+    }
+
+    /// @brief Tests scenarios when one of the servers to which
+    /// updates are sent is offline.
+    void testSendUpdatesActiveServerOffline() {
+        // Start only two servers out of three. The server 3 is not running.
+        ASSERT_NO_THROW({
+                listener_->start();
+                listener3_->start();
+        });
+
+        testSendLeaseUpdates([] {
+            ADD_FAILURE() << "unpark function called but expected that "
+                "the packet is dropped";
+        }, false, 1);
+
+        // Server 2 should not receive lease4-update.
+        auto update_request2 =
+            factory2_->getResponseCreator()->findRequest("lease4-update",
+                                                         "192.1.2.3");
+        EXPECT_FALSE(update_request2);
+
+        // Server 2 should not receive lease4-del.
+        auto delete_request2 =
+            factory2_->getResponseCreator()->findRequest("lease4-del",
+                                                         "192.2.3.4");
+        EXPECT_FALSE(delete_request2);
+    }
+
+    /// @brief Tests scenarios when one of the servers to which a
+    /// lease update is sent returns an error.
+    void testSndUpdatesControlResultError() {
+        // Instruct the server 2 to return an error as a result of receiving a command.
+        factory2_->getResponseCreator()->setControlResult(CONTROL_RESULT_ERROR);
+
+        // Start only two servers out of three. The server 3 is not running.
+        ASSERT_NO_THROW({
+                listener_->start();
+                listener2_->start();
+                listener3_->start();
+        });
+
+        testSendLeaseUpdates([] {
+            ADD_FAILURE() << "unpark function called but expected that "
+                "the packet is dropped";
+        }, false, 1);
+
+        // The updates should be sent to server 2 and this server should
+        // return error code.
+        EXPECT_EQ(2, factory2_->getResponseCreator()->getReceivedRequests().size());
+
+        // Server 2 should receive lease4-update.
+        auto update_request2 =
+            factory2_->getResponseCreator()->findRequest("lease4-update",
+                                                         "192.1.2.3");
+        EXPECT_TRUE(update_request2);
+
+        // Server 2 should receive lease4-del.
+        auto delete_request2 =
+            factory2_->getResponseCreator()->findRequest("lease4-del",
+                                                         "192.2.3.4");
+        EXPECT_TRUE(delete_request2);
+
+        // Lease updates should be successfully sent to server3.
+        EXPECT_EQ(2, factory3_->getResponseCreator()->getReceivedRequests().size());
+
+        // Check that the server 3 has received lease4-update command.
+        auto update_request3 =
+            factory3_->getResponseCreator()->findRequest("lease4-update",
+                                                         "192.1.2.3");
+        EXPECT_TRUE(update_request3);
+
+        // Check that the server 3 has received lease4-del command.
+        auto delete_request3 =
+            factory3_->getResponseCreator()->findRequest("lease4-del",
+                                                         "192.2.3.4");
+        EXPECT_TRUE(delete_request3);
+    }
+
+    /// @brief Tests scenarios when one of the servers to which updates are sent is offline.
+    void testSendUpdatesBackupServerOffline() {
+        // Start only two servers out of three. The server 2 is not running.
+        ASSERT_NO_THROW({
+                listener_->start();
+                listener2_->start();
+        });
+
+        bool unpark_called = false;
+        testSendLeaseUpdates([&unpark_called] { unpark_called = true; },
+                             true, 1);
+
+        EXPECT_TRUE(unpark_called);
+
+        // The server 2 should have received two commands.
+        EXPECT_EQ(2, factory2_->getResponseCreator()->getReceivedRequests().size());
+
+        // Check that the server 2 has received lease4-update command.
+        auto update_request2 =
+            factory2_->getResponseCreator()->findRequest("lease4-update",
+                                                         "192.1.2.3");
+        EXPECT_TRUE(update_request2);
+
+        // Check that the server 2 has received lease4-del command.
+        auto delete_request2 =
+            factory2_->getResponseCreator()->findRequest("lease4-del",
+                                                         "192.2.3.4");
+        EXPECT_TRUE(delete_request2);
+
+        // Server 3 should not receive lease4-update.
+        auto update_request3 =
+            factory3_->getResponseCreator()->findRequest("lease4-update",
+                                                         "192.1.2.3");
+        EXPECT_FALSE(update_request3);
+
+        // Server 3 should not receive lease4-del.
+        auto delete_request3 =
+            factory3_->getResponseCreator()->findRequest("lease4-del",
+                                                         "192.2.3.4");
+        EXPECT_FALSE(delete_request3);
+    }
+
+    /// @brief Tests scenarios when all lease updates are sent successfully.
+    void testSendSuccessfulUpdates6() {
+        // Start HTTP servers.
+        ASSERT_NO_THROW({
+                listener_->start();
+                listener2_->start();
+                listener3_->start();
+        });
+
+        // This flag will be set to true if unpark is called.
+        bool unpark_called = false;
+        testSendLeaseUpdates6([&unpark_called] { unpark_called = true; },
+                              true, 1);
+
+        // Expecting that the packet was unparked because lease
+        // updates are expected to be successful.
+        EXPECT_TRUE(unpark_called);
+
+        // The server 2 should have received one command.
+        EXPECT_EQ(1, factory2_->getResponseCreator()->getReceivedRequests().size());
+
+        // Check that the server 2 has received lease6-bulk-apply command.
+        auto update_request2 =
+            factory2_->getResponseCreator()->findRequest("lease6-bulk-apply",
+                                                         "2001:db8:1::cafe",
+                                                         "2001:db8:1::efac");
+        EXPECT_TRUE(update_request2);
+
+        // Lease updates should be successfully sent to server3.
+        EXPECT_EQ(1, factory3_->getResponseCreator()->getReceivedRequests().size());
+
+        // Check that the server 3 has received lease6-bulk-apply command.
+        auto update_request3 =
+            factory3_->getResponseCreator()->findRequest("lease6-bulk-apply",
+                                                         "2001:db8:1::cafe",
+                                                         "2001:db8:1::efac");
+        EXPECT_TRUE(update_request3);
+    }
+
+    /// @brief Tests scenarios when lease updates are not sent to the failover peer.
+    void testSendUpdatesPartnerDown6() {
+        // Start HTTP servers.
+        ASSERT_NO_THROW({
+                listener_->start();
+                listener2_->start();
+                listener3_->start();
+        });
+
+        // This flag will be set to true if unpark is called.
+        bool unpark_called = false;
+        testSendLeaseUpdates6([&unpark_called] { unpark_called = true; },
+                              false, 0, MyState(HA_PARTNER_DOWN_ST));
+
+        // There were no lease updates for which we have been waiting to
+        // complete so the packet was never unparked. Note that in such
+        // situation the packet is not parked either.
+        EXPECT_FALSE(unpark_called);
+
+        // Server 2 should not receive lease6-bulk-apply.
+        auto update_request2 =
+            factory2_->getResponseCreator()->findRequest("lease6-bulk-apply",
+                                                         "2001:db8:1::cafe",
+                                                         "2001:db8:1::efac");
+        EXPECT_FALSE(update_request2);
+    }
+
+    /// @brief Tests scenarios when one of the servers to which
+    /// updates are sent is offline.
+    void testSendUpdatesActiveServerOffline6() {
+        // Start only two servers out of three. The server 3 is not running.
+        ASSERT_NO_THROW({
+                listener_->start();
+                listener3_->start();
+        });
+
+        testSendLeaseUpdates6([] {
+            ADD_FAILURE() << "unpark function called but expected that "
+                "the packet is dropped";
+        }, false, 1);
+
+        // Server 2 should not receive lease6-bulk-apply.
+        auto update_request2 =
+            factory2_->getResponseCreator()->findRequest("lease6-bulk-apply",
+                                                         "2001:db8:1::cafe",
+                                                         "2001:db8:1::efac");
+        EXPECT_FALSE(update_request2);
+    }
+
+    /// @brief Tests scenarios when one of the servers to which
+    /// updates are sent is offline.
+    void testSendUpdatesBackupServerOffline6() {
+        // Start only two servers out of three. The server 2 is not running.
+        ASSERT_NO_THROW({
+                listener_->start();
+                listener2_->start();
+        });
+
+        bool unpark_called = false;
+        testSendLeaseUpdates6([&unpark_called] { unpark_called = true; },
+                              true, 1);
+
+        EXPECT_TRUE(unpark_called);
+
+        // The server 2 should have received one command.
+        EXPECT_EQ(1, factory2_->getResponseCreator()->getReceivedRequests().size());
+
+        // Check that the server 2 has received lease6-bulk-apply command.
+        auto update_request2 =
+            factory2_->getResponseCreator()->findRequest("lease6-bulk-apply",
+                                                         "2001:db8:1::cafe",
+                                                         "2001:db8:1::efac");
+        EXPECT_TRUE(update_request2);
+
+        // Server 3 should not receive lease6-bulk-apply.
+        auto update_request3 =
+            factory3_->getResponseCreator()->findRequest("lease6-bulk-apply",
+                                                         "2001:db8:1::cafe",
+                                                         "2001:db8:1::efac");
+        EXPECT_FALSE(update_request3);
+    }
+
+    /// @brief Tests scenarios when one of the servers to which a
+    /// lease update is sent returns an error.
+    void testSendUpdatesControlResultError6() {
+        // Instruct the server 2 to return an error as a result of receiving a command.
+        factory2_->getResponseCreator()->setControlResult(CONTROL_RESULT_ERROR);
+
+        // Start only two servers out of three. The server 3 is not running.
+        ASSERT_NO_THROW({
+                listener_->start();
+                listener2_->start();
+                listener3_->start();
+        });
+
+        testSendLeaseUpdates6([] {
+            ADD_FAILURE() << "unpark function called but expected that "
+                "the packet is dropped";
+        }, false, 1);
+
+        // The updates should be sent to server 2 and this server should return error code.
+        EXPECT_EQ(1, factory2_->getResponseCreator()->getReceivedRequests().size());
+
+        // Server 2 should receive lease6-bulk-apply.
+        auto update_request2 =
+            factory2_->getResponseCreator()->findRequest("lease6-bulk-apply",
+                                                         "2001:db8:1::cafe",
+                                                         "2001:db8:1::efac");
+        EXPECT_TRUE(update_request2);
+    }
+
+    /// @brief These tests verify that the server accepts the response
+    /// to the lease6-bulk-apply command including
+    /// failed-deleted-leases and failed-leases parameters.
+    void testSendUpdatesFailedLeases6() {
+        // Create a dummy lease which failed to be deleted.
+        auto failed_deleted_lease = Element::createMap();
+        failed_deleted_lease->set("type",
+                                  Element::create("IA_NA"));
+        failed_deleted_lease->set("ip-address",
+                                  Element::create("2001:db8:1::1"));
+        failed_deleted_lease->set("subnet-id",
+                                  Element::create(1));
+        failed_deleted_lease->set("result",
+                                  Element::create(CONTROL_RESULT_EMPTY));
+        failed_deleted_lease->set("error-message",
+                                  Element::create("no lease found"));
+
+        // Crate a dummy lease which failed to be created.
+        auto failed_lease = Element::createMap();
+        failed_lease->set("type",
+                          Element::create("IA_PD"));
+        failed_lease->set("ip-address",
+                          Element::create("2001:db8:1::"));
+        failed_lease->set("subnet-id",
+                          Element::create(2));
+        failed_lease->set("result",
+                          Element::create(CONTROL_RESULT_ERROR));
+        failed_lease->set("error-message",
+                          Element::create("failed to create lease"));
+
+        // Create the "failed-deleted-leases" list.
+        auto failed_deleted_leases = Element::createList();
+        failed_deleted_leases->add(failed_deleted_lease);
+
+        // Create the "failed-leases" list.
+        auto failed_leases = Element::createList();
+        failed_leases->add(failed_lease);
+
+        // Add both lists to the arguments.
+        ElementPtr arguments = Element::createMap();
+        arguments->set("failed-deleted-leases", failed_deleted_leases);
+        arguments->set("failed-leases", failed_leases);
+
+        // Configure the server to return this response.
+        factory2_->getResponseCreator()->setArguments("lease6-bulk-apply",
+                                                      arguments);
+
+        // Start HTTP servers.
+        ASSERT_NO_THROW({
+                listener_->start();
+                listener2_->start();
+                listener3_->start();
+        });
+
+        // This flag will be set to true if unpark is called.
+        bool unpark_called = false;
+        testSendLeaseUpdates6([&unpark_called] { unpark_called = true; },
+                              true, 1);
+
+        // Expecting that the packet was unparked because lease
+        // updates are expected to be successful.
+        EXPECT_TRUE(unpark_called);
+
+        // The server 2 should have received one command.
+        EXPECT_EQ(1, factory2_->getResponseCreator()->getReceivedRequests().size());
+
+        // Check that the server 2 has received lease6-bulk-apply command.
+        auto update_request2 =
+            factory2_->getResponseCreator()->findRequest("lease6-bulk-apply",
+                                                         "2001:db8:1::cafe",
+                                                         "2001:db8:1::efac");
+        EXPECT_TRUE(update_request2);
+    }
+
+    //////
+
     /// @brief Runs HAService::processSynchronize for the DHCPv4 server and
     /// returns a response.
     ///
@@ -1184,797 +1610,128 @@ TEST_F(HAServiceTest, hotStandbyScopeSelectionThisStandby) {
 
 // Test scenario when all lease updates are sent successfully.
 TEST_F(HAServiceTest, sendSuccessfulUpdates) {
-    // Start HTTP servers.
-    ASSERT_NO_THROW({
-        listener_->start();
-        listener2_->start();
-        listener3_->start();
-    });
-
-    // This flag will be set to true if unpark is called.
-    bool unpark_called = false;
-    testSendLeaseUpdates([&unpark_called] {
-        unpark_called = true;
-    }, true, 1);
-
-    // Expecting that the packet was unparked because lease updates are expected
-    // to be successful.
-    EXPECT_TRUE(unpark_called);
-
-    // The server 2 should have received two commands.
-    EXPECT_EQ(2, factory2_->getResponseCreator()->getReceivedRequests().size());
-
-    // Check that the server 2 has received lease4-update command.
-    auto update_request2 = factory2_->getResponseCreator()->findRequest("lease4-update",
-                                                                        "192.1.2.3");
-    EXPECT_TRUE(update_request2);
-
-    // Check that the server 2 has received lease4-del command.
-    auto delete_request2 = factory2_->getResponseCreator()->findRequest("lease4-del",
-                                                                        "192.2.3.4");
-    EXPECT_TRUE(delete_request2);
-
-    // Lease updates should be successfully sent to server3.
-    EXPECT_EQ(2, factory3_->getResponseCreator()->getReceivedRequests().size());
-
-    // Check that the server 3 has received lease4-update command.
-    auto update_request3 = factory3_->getResponseCreator()->findRequest("lease4-update",
-                                                                        "192.1.2.3");
-    EXPECT_TRUE(update_request3);
-
-    // Check that the server 3 has received lease4-del command.
-    auto delete_request3 = factory3_->getResponseCreator()->findRequest("lease4-del",
-                                                                        "192.2.3.4");
-    EXPECT_TRUE(delete_request3);
+    testSendSuccessfulUpdates();
 }
 
 // Test scenario when all lease updates are sent successfully.
 TEST_F(HAServiceTest, sendSuccessfulUpdatesMultiThreading) {
     MultiThreadingMgr::instance().setMode(true);
-    // Start HTTP servers.
-    ASSERT_NO_THROW({
-        listener_->start();
-        listener2_->start();
-        listener3_->start();
-    });
-
-    // This flag will be set to true if unpark is called.
-    bool unpark_called = false;
-    testSendLeaseUpdates([&unpark_called] {
-        unpark_called = true;
-    }, true, 1);
-
-    // Expecting that the packet was unparked because lease updates are expected
-    // to be successful.
-    EXPECT_TRUE(unpark_called);
-
-    // The server 2 should have received two commands.
-    EXPECT_EQ(2, factory2_->getResponseCreator()->getReceivedRequests().size());
-
-    // Check that the server 2 has received lease4-update command.
-    auto update_request2 = factory2_->getResponseCreator()->findRequest("lease4-update",
-                                                                        "192.1.2.3");
-    EXPECT_TRUE(update_request2);
-
-    // Check that the server 2 has received lease4-del command.
-    auto delete_request2 = factory2_->getResponseCreator()->findRequest("lease4-del",
-                                                                        "192.2.3.4");
-    EXPECT_TRUE(delete_request2);
-
-    // Lease updates should be successfully sent to server3.
-    EXPECT_EQ(2, factory3_->getResponseCreator()->getReceivedRequests().size());
-
-    // Check that the server 3 has received lease4-update command.
-    auto update_request3 = factory3_->getResponseCreator()->findRequest("lease4-update",
-                                                                        "192.1.2.3");
-    EXPECT_TRUE(update_request3);
-
-    // Check that the server 3 has received lease4-del command.
-    auto delete_request3 = factory3_->getResponseCreator()->findRequest("lease4-del",
-                                                                        "192.2.3.4");
-    EXPECT_TRUE(delete_request3);
+    testSendSuccessfulUpdates();
 }
 
 // Test scenario when lease updates are not sent to the failover peer.
 TEST_F(HAServiceTest, sendUpdatesPartnerDown) {
-    // Start HTTP servers.
-    ASSERT_NO_THROW({
-        listener_->start();
-        listener2_->start();
-        listener3_->start();
-    });
-
-    // This flag will be set to true if unpark is called.
-    bool unpark_called = false;
-    testSendLeaseUpdates([&unpark_called] {
-        unpark_called = true;
-    }, false, 0, MyState(HA_PARTNER_DOWN_ST));
-
-    // There were no lease updates for which we have been waiting to complete so
-    // the packet was never unparked. Note that in such situation the packet is
-    // not parked either.
-    EXPECT_FALSE(unpark_called);
-
-    // Server 2 should not receive lease4-update.
-    auto update_request2 = factory2_->getResponseCreator()->findRequest("lease4-update",
-                                                                        "192.1.2.3");
-    EXPECT_FALSE(update_request2);
-
-    // Server 2 should not receive lease4-del.
-    auto delete_request2 = factory2_->getResponseCreator()->findRequest("lease4-del",
-                                                                        "192.2.3.4");
-    EXPECT_FALSE(delete_request2);
+    testSendUpdatesPartnerDown();
 }
 
 // Test scenario when lease updates are not sent to the failover peer.
 TEST_F(HAServiceTest, sendUpdatesPartnerDownMultiThreading) {
     MultiThreadingMgr::instance().setMode(true);
-    // Start HTTP servers.
-    ASSERT_NO_THROW({
-        listener_->start();
-        listener2_->start();
-        listener3_->start();
-    });
-
-    // This flag will be set to true if unpark is called.
-    bool unpark_called = false;
-    testSendLeaseUpdates([&unpark_called] {
-        unpark_called = true;
-    }, false, 0, MyState(HA_PARTNER_DOWN_ST));
-
-    // There were no lease updates for which we have been waiting to complete so
-    // the packet was never unparked. Note that in such situation the packet is
-    // not parked either.
-    EXPECT_FALSE(unpark_called);
-
-    // Server 2 should not receive lease4-update.
-    auto update_request2 = factory2_->getResponseCreator()->findRequest("lease4-update",
-                                                                        "192.1.2.3");
-    EXPECT_FALSE(update_request2);
-
-    // Server 2 should not receive lease4-del.
-    auto delete_request2 = factory2_->getResponseCreator()->findRequest("lease4-del",
-                                                                        "192.2.3.4");
-    EXPECT_FALSE(delete_request2);
+    testSendUpdatesPartnerDown();
 }
 
 // Test scenario when one of the servers to which updates are sent is offline.
 TEST_F(HAServiceTest, sendUpdatesActiveServerOffline) {
-    // Start only two servers out of three. The server 3 is not running.
-    ASSERT_NO_THROW({
-            listener_->start();
-            listener3_->start();
-    });
-
-    testSendLeaseUpdates([] {
-        ADD_FAILURE() << "unpark function called but expected that the packet"
-            " is dropped";
-    }, false, 1);
-
-    // Server 2 should not receive lease4-update.
-    auto update_request2 = factory2_->getResponseCreator()->findRequest("lease4-update",
-                                                                        "192.1.2.3");
-    EXPECT_FALSE(update_request2);
-
-    // Server 2 should not receive lease4-del.
-    auto delete_request2 = factory2_->getResponseCreator()->findRequest("lease4-del",
-                                                                        "192.2.3.4");
-    EXPECT_FALSE(delete_request2);
+    testSendUpdatesActiveServerOffline();
 }
 
 // Test scenario when one of the servers to which updates are sent is offline.
 TEST_F(HAServiceTest, sendUpdatesActiveServerOfflineMultiThreading) {
     MultiThreadingMgr::instance().setMode(true);
-    // Start only two servers out of three. The server 3 is not running.
-    ASSERT_NO_THROW({
-            listener_->start();
-            listener3_->start();
-    });
-
-    testSendLeaseUpdates([] {
-        ADD_FAILURE() << "unpark function called but expected that the packet"
-            " is dropped";
-    }, false, 1);
-
-    // Server 2 should not receive lease4-update.
-    auto update_request2 = factory2_->getResponseCreator()->findRequest("lease4-update",
-                                                                        "192.1.2.3");
-    EXPECT_FALSE(update_request2);
-
-    // Server 2 should not receive lease4-del.
-    auto delete_request2 = factory2_->getResponseCreator()->findRequest("lease4-del",
-                                                                        "192.2.3.4");
-    EXPECT_FALSE(delete_request2);
+    testSendUpdatesActiveServerOffline();
 }
 
 // Test scenario when one of the servers to which updates are sent is offline.
 TEST_F(HAServiceTest, sendUpdatesBackupServerOffline) {
-    // Start only two servers out of three. The server 2 is not running.
-    ASSERT_NO_THROW({
-            listener_->start();
-            listener2_->start();
-    });
-
-    bool unpark_called = false;
-    testSendLeaseUpdates([&unpark_called] {
-        unpark_called = true;
-    }, true, 1);
-
-    EXPECT_TRUE(unpark_called);
-
-    // The server 2 should have received two commands.
-    EXPECT_EQ(2, factory2_->getResponseCreator()->getReceivedRequests().size());
-
-    // Check that the server 2 has received lease4-update command.
-    auto update_request2 = factory2_->getResponseCreator()->findRequest("lease4-update",
-                                                                        "192.1.2.3");
-    EXPECT_TRUE(update_request2);
-
-    // Check that the server 2 has received lease4-del command.
-    auto delete_request2 = factory2_->getResponseCreator()->findRequest("lease4-del",
-                                                                        "192.2.3.4");
-    EXPECT_TRUE(delete_request2);
-
-    // Server 3 should not receive lease4-update.
-    auto update_request3 = factory3_->getResponseCreator()->findRequest("lease4-update",
-                                                                        "192.1.2.3");
-    EXPECT_FALSE(update_request3);
-
-    // Server 3 should not receive lease4-del.
-    auto delete_request3 = factory3_->getResponseCreator()->findRequest("lease4-del",
-                                                                        "192.2.3.4");
-    EXPECT_FALSE(delete_request3);
+    testSendUpdatesBackupServerOffline();
 }
 
 // Test scenario when one of the servers to which updates are sent is offline.
 TEST_F(HAServiceTest, sendUpdatesBackupServerOfflineMultiThreading) {
     MultiThreadingMgr::instance().setMode(true);
-    // Start only two servers out of three. The server 2 is not running.
-    ASSERT_NO_THROW({
-            listener_->start();
-            listener2_->start();
-    });
-
-    bool unpark_called = false;
-    testSendLeaseUpdates([&unpark_called] {
-        unpark_called = true;
-    }, true, 1);
-
-    EXPECT_TRUE(unpark_called);
-
-    // The server 2 should have received two commands.
-    EXPECT_EQ(2, factory2_->getResponseCreator()->getReceivedRequests().size());
-
-    // Check that the server 2 has received lease4-update command.
-    auto update_request2 = factory2_->getResponseCreator()->findRequest("lease4-update",
-                                                                        "192.1.2.3");
-    EXPECT_TRUE(update_request2);
-
-    // Check that the server 2 has received lease4-del command.
-    auto delete_request2 = factory2_->getResponseCreator()->findRequest("lease4-del",
-                                                                        "192.2.3.4");
-    EXPECT_TRUE(delete_request2);
-
-    // Server 3 should not receive lease4-update.
-    auto update_request3 = factory3_->getResponseCreator()->findRequest("lease4-update",
-                                                                        "192.1.2.3");
-    EXPECT_FALSE(update_request3);
-
-    // Server 3 should not receive lease4-del.
-    auto delete_request3 = factory3_->getResponseCreator()->findRequest("lease4-del",
-                                                                        "192.2.3.4");
-    EXPECT_FALSE(delete_request3);
+    testSendUpdatesBackupServerOffline();
 }
 
 // Test scenario when one of the servers to which a lease update is sent
 // returns an error.
 TEST_F(HAServiceTest, sendUpdatesControlResultError) {
-    // Instruct the server 2 to return an error as a result of receiving a command.
-    factory2_->getResponseCreator()->setControlResult(CONTROL_RESULT_ERROR);
-
-    // Start only two servers out of three. The server 3 is not running.
-    ASSERT_NO_THROW({
-        listener_->start();
-        listener2_->start();
-        listener3_->start();
-    });
-
-    testSendLeaseUpdates([] {
-        ADD_FAILURE() << "unpark function called but expected that the packet"
-            " is dropped";
-    }, false, 1);
-
-    // The updates should be sent to server 2 and this server should return error code.
-    EXPECT_EQ(2, factory2_->getResponseCreator()->getReceivedRequests().size());
-
-    // Server 2 should receive lease4-update.
-    auto update_request2 = factory2_->getResponseCreator()->findRequest("lease4-update",
-                                                                        "192.1.2.3");
-    EXPECT_TRUE(update_request2);
-
-    // Server 2 should receive lease4-del.
-    auto delete_request2 = factory2_->getResponseCreator()->findRequest("lease4-del",
-                                                                        "192.2.3.4");
-    EXPECT_TRUE(delete_request2);
-
-    // Lease updates should be successfully sent to server3.
-    EXPECT_EQ(2, factory3_->getResponseCreator()->getReceivedRequests().size());
-
-    // Check that the server 3 has received lease4-update command.
-    auto update_request3 = factory3_->getResponseCreator()->findRequest("lease4-update",
-                                                                        "192.1.2.3");
-    EXPECT_TRUE(update_request3);
-
-    // Check that the server 3 has received lease4-del command.
-    auto delete_request3 = factory3_->getResponseCreator()->findRequest("lease4-del",
-                                                                        "192.2.3.4");
-    EXPECT_TRUE(delete_request3);
+    testSndUpdatesControlResultError();
 }
 
 // Test scenario when one of the servers to which a lease update is sent
 // returns an error.
 TEST_F(HAServiceTest, sendUpdatesControlResultErrorMultiThreading) {
     MultiThreadingMgr::instance().setMode(true);
-    // Instruct the server 2 to return an error as a result of receiving a command.
-    factory2_->getResponseCreator()->setControlResult(CONTROL_RESULT_ERROR);
-
-    // Start only two servers out of three. The server 3 is not running.
-    ASSERT_NO_THROW({
-        listener_->start();
-        listener2_->start();
-        listener3_->start();
-    });
-
-    testSendLeaseUpdates([] {
-        ADD_FAILURE() << "unpark function called but expected that the packet"
-            " is dropped";
-    }, false, 1);
-
-    // The updates should be sent to server 2 and this server should return error code.
-    EXPECT_EQ(2, factory2_->getResponseCreator()->getReceivedRequests().size());
-
-    // Server 2 should receive lease4-update.
-    auto update_request2 = factory2_->getResponseCreator()->findRequest("lease4-update",
-                                                                        "192.1.2.3");
-    EXPECT_TRUE(update_request2);
-
-    // Server 2 should receive lease4-del.
-    auto delete_request2 = factory2_->getResponseCreator()->findRequest("lease4-del",
-                                                                        "192.2.3.4");
-    EXPECT_TRUE(delete_request2);
-
-    // Lease updates should be successfully sent to server3.
-    EXPECT_EQ(2, factory3_->getResponseCreator()->getReceivedRequests().size());
-
-    // Check that the server 3 has received lease4-update command.
-    auto update_request3 = factory3_->getResponseCreator()->findRequest("lease4-update",
-                                                                        "192.1.2.3");
-    EXPECT_TRUE(update_request3);
-
-    // Check that the server 3 has received lease4-del command.
-    auto delete_request3 = factory3_->getResponseCreator()->findRequest("lease4-del",
-                                                                        "192.2.3.4");
-    EXPECT_TRUE(delete_request3);
+    testSndUpdatesControlResultError();
 }
 
 // Test scenario when all lease updates are sent successfully.
 TEST_F(HAServiceTest, sendSuccessfulUpdates6) {
-    // Start HTTP servers.
-    ASSERT_NO_THROW({
-        listener_->start();
-        listener2_->start();
-        listener3_->start();
-    });
-
-    // This flag will be set to true if unpark is called.
-    bool unpark_called = false;
-    testSendLeaseUpdates6([&unpark_called] {
-        unpark_called = true;
-    }, true, 1);
-
-    // Expecting that the packet was unparked because lease updates are expected
-    // to be successful.
-    EXPECT_TRUE(unpark_called);
-
-    // The server 2 should have received one command.
-    EXPECT_EQ(1, factory2_->getResponseCreator()->getReceivedRequests().size());
-
-    // Check that the server 2 has received lease6-bulk-apply command.
-    auto update_request2 = factory2_->getResponseCreator()->findRequest("lease6-bulk-apply",
-                                                                        "2001:db8:1::cafe",
-                                                                        "2001:db8:1::efac");
-    EXPECT_TRUE(update_request2);
-
-    // Lease updates should be successfully sent to server3.
-    EXPECT_EQ(1, factory3_->getResponseCreator()->getReceivedRequests().size());
-
-    // Check that the server 3 has received lease6-bulk-apply command.
-    auto update_request3 = factory3_->getResponseCreator()->findRequest("lease6-bulk-apply",
-                                                                        "2001:db8:1::cafe",
-                                                                        "2001:db8:1::efac");
-    EXPECT_TRUE(update_request3);
+    testSendSuccessfulUpdates6();
 }
 
 // Test scenario when all lease updates are sent successfully.
 TEST_F(HAServiceTest, sendSuccessfulUpdates6MultiThreading) {
     MultiThreadingMgr::instance().setMode(true);
-    // Start HTTP servers.
-    ASSERT_NO_THROW({
-        listener_->start();
-        listener2_->start();
-        listener3_->start();
-    });
-
-    // This flag will be set to true if unpark is called.
-    bool unpark_called = false;
-    testSendLeaseUpdates6([&unpark_called] {
-        unpark_called = true;
-    }, true, 1);
-
-    // Expecting that the packet was unparked because lease updates are expected
-    // to be successful.
-    EXPECT_TRUE(unpark_called);
-
-    // The server 2 should have received one command.
-    EXPECT_EQ(1, factory2_->getResponseCreator()->getReceivedRequests().size());
-
-    // Check that the server 2 has received lease6-bulk-apply command.
-    auto update_request2 = factory2_->getResponseCreator()->findRequest("lease6-bulk-apply",
-                                                                        "2001:db8:1::cafe",
-                                                                        "2001:db8:1::efac");
-    EXPECT_TRUE(update_request2);
-
-    // Lease updates should be successfully sent to server3.
-    EXPECT_EQ(1, factory3_->getResponseCreator()->getReceivedRequests().size());
-
-    // Check that the server 3 has received lease6-bulk-apply command.
-    auto update_request3 = factory3_->getResponseCreator()->findRequest("lease6-bulk-apply",
-                                                                        "2001:db8:1::cafe",
-                                                                        "2001:db8:1::efac");
-    EXPECT_TRUE(update_request3);
+    testSendSuccessfulUpdates6();
 }
-
 // Test scenario when lease updates are not sent to the failover peer.
 TEST_F(HAServiceTest, sendUpdatesPartnerDown6) {
-    // Start HTTP servers.
-    ASSERT_NO_THROW({
-        listener_->start();
-        listener2_->start();
-        listener3_->start();
-    });
-
-    // This flag will be set to true if unpark is called.
-    bool unpark_called = false;
-    testSendLeaseUpdates6([&unpark_called] {
-        unpark_called = true;
-    }, false, 0, MyState(HA_PARTNER_DOWN_ST));
-
-    // There were no lease updates for which we have been waiting to complete so
-    // the packet was never unparked. Note that in such situation the packet is
-    // not parked either.
-    EXPECT_FALSE(unpark_called);
-
-    // Server 2 should not receive lease6-bulk-apply.
-    auto update_request2 = factory2_->getResponseCreator()->findRequest("lease6-bulk-apply",
-                                                                        "2001:db8:1::cafe",
-                                                                        "2001:db8:1::efac");
-    EXPECT_FALSE(update_request2);
+    testSendUpdatesPartnerDown6();
 }
 
 // Test scenario when lease updates are not sent to the failover peer.
 TEST_F(HAServiceTest, sendUpdatesPartnerDown6MultiThreading) {
     MultiThreadingMgr::instance().setMode(true);
-    // Start HTTP servers.
-    ASSERT_NO_THROW({
-        listener_->start();
-        listener2_->start();
-        listener3_->start();
-    });
-
-    // This flag will be set to true if unpark is called.
-    bool unpark_called = false;
-    testSendLeaseUpdates6([&unpark_called] {
-        unpark_called = true;
-    }, false, 0, MyState(HA_PARTNER_DOWN_ST));
-
-    // There were no lease updates for which we have been waiting to complete so
-    // the packet was never unparked. Note that in such situation the packet is
-    // not parked either.
-    EXPECT_FALSE(unpark_called);
-
-    // Server 2 should not receive lease6-bulk-apply.
-    auto update_request2 = factory2_->getResponseCreator()->findRequest("lease6-bulk-apply",
-                                                                        "2001:db8:1::cafe",
-                                                                        "2001:db8:1::efac");
-    EXPECT_FALSE(update_request2);
+    testSendUpdatesPartnerDown6();
 }
 
 // Test scenario when one of the servers to which updates are sent is offline.
 TEST_F(HAServiceTest, sendUpdatesActiveServerOffline6) {
-    // Start only two servers out of three. The server 3 is not running.
-    ASSERT_NO_THROW({
-            listener_->start();
-            listener3_->start();
-    });
-
-    testSendLeaseUpdates6([] {
-        ADD_FAILURE() << "unpark function called but expected that the packet"
-            " is dropped";
-    }, false, 1);
-
-    // Server 2 should not receive lease6-bulk-apply.
-    auto update_request2 = factory2_->getResponseCreator()->findRequest("lease6-bulk-apply",
-                                                                        "2001:db8:1::cafe",
-                                                                        "2001:db8:1::efac");
-    EXPECT_FALSE(update_request2);
+    testSendUpdatesActiveServerOffline6();
 }
 
 // Test scenario when one of the servers to which updates are sent is offline.
 TEST_F(HAServiceTest, sendUpdatesActiveServerOffline6MultiThreading) {
     MultiThreadingMgr::instance().setMode(true);
-    // Start only two servers out of three. The server 3 is not running.
-    ASSERT_NO_THROW({
-            listener_->start();
-            listener3_->start();
-    });
-
-    testSendLeaseUpdates6([] {
-        ADD_FAILURE() << "unpark function called but expected that the packet"
-            " is dropped";
-    }, false, 1);
-
-    // Server 2 should not receive lease6-bulk-apply.
-    auto update_request2 = factory2_->getResponseCreator()->findRequest("lease6-bulk-apply",
-                                                                        "2001:db8:1::cafe",
-                                                                        "2001:db8:1::efac");
-    EXPECT_FALSE(update_request2);
+    testSendUpdatesActiveServerOffline6();
 }
 
 // Test scenario when one of the servers to which updates are sent is offline.
 TEST_F(HAServiceTest, sendUpdatesBackupServerOffline6) {
-    // Start only two servers out of three. The server 2 is not running.
-    ASSERT_NO_THROW({
-            listener_->start();
-            listener2_->start();
-    });
-
-    bool unpark_called = false;
-    testSendLeaseUpdates6([&unpark_called] {
-        unpark_called = true;
-    }, true, 1);
-
-    EXPECT_TRUE(unpark_called);
-
-    // The server 2 should have received one command.
-    EXPECT_EQ(1, factory2_->getResponseCreator()->getReceivedRequests().size());
-
-    // Check that the server 2 has received lease6-bulk-apply command.
-    auto update_request2 = factory2_->getResponseCreator()->findRequest("lease6-bulk-apply",
-                                                                        "2001:db8:1::cafe",
-                                                                        "2001:db8:1::efac");
-    EXPECT_TRUE(update_request2);
-
-    // Server 3 should not receive lease6-bulk-apply.
-    auto update_request3 = factory3_->getResponseCreator()->findRequest("lease6-bulk-apply",
-                                                                        "2001:db8:1::cafe",
-                                                                        "2001:db8:1::efac");
-    EXPECT_FALSE(update_request3);
+    testSendUpdatesBackupServerOffline6();
 }
 
 // Test scenario when one of the servers to which updates are sent is offline.
 TEST_F(HAServiceTest, sendUpdatesBackupServerOffline6MultiThreading) {
     MultiThreadingMgr::instance().setMode(true);
-    // Start only two servers out of three. The server 2 is not running.
-    ASSERT_NO_THROW({
-            listener_->start();
-            listener2_->start();
-    });
-
-    bool unpark_called = false;
-    testSendLeaseUpdates6([&unpark_called] {
-        unpark_called = true;
-    }, true, 1);
-
-    EXPECT_TRUE(unpark_called);
-
-    // The server 2 should have received one command.
-    EXPECT_EQ(1, factory2_->getResponseCreator()->getReceivedRequests().size());
-
-    // Check that the server 2 has received lease6-bulk-apply command.
-    auto update_request2 = factory2_->getResponseCreator()->findRequest("lease6-bulk-apply",
-                                                                        "2001:db8:1::cafe",
-                                                                        "2001:db8:1::efac");
-    EXPECT_TRUE(update_request2);
-
-    // Server 3 should not receive lease6-bulk-apply.
-    auto update_request3 = factory3_->getResponseCreator()->findRequest("lease6-bulk-apply",
-                                                                        "2001:db8:1::cafe",
-                                                                        "2001:db8:1::efac");
-    EXPECT_FALSE(update_request3);
+    testSendUpdatesBackupServerOffline6();
 }
 
 // Test scenario when one of the servers to which a lease update is sent
 // returns an error.
 TEST_F(HAServiceTest, sendUpdatesControlResultError6) {
-    // Instruct the server 2 to return an error as a result of receiving a command.
-    factory2_->getResponseCreator()->setControlResult(CONTROL_RESULT_ERROR);
-
-    // Start only two servers out of three. The server 3 is not running.
-    ASSERT_NO_THROW({
-        listener_->start();
-        listener2_->start();
-        listener3_->start();
-    });
-
-    testSendLeaseUpdates6([] {
-        ADD_FAILURE() << "unpark function called but expected that the packet"
-            " is dropped";
-    }, false, 1);
-
-    // The updates should be sent to server 2 and this server should return error code.
-    EXPECT_EQ(1, factory2_->getResponseCreator()->getReceivedRequests().size());
-
-    // Server 2 should receive lease6-bulk-apply.
-    auto update_request2 = factory2_->getResponseCreator()->findRequest("lease6-bulk-apply",
-                                                                        "2001:db8:1::cafe",
-                                                                        "2001:db8:1::efac");
-    EXPECT_TRUE(update_request2);
+    testSendUpdatesControlResultError6();
 }
 
 // Test scenario when one of the servers to which a lease update is sent
 // returns an error.
 TEST_F(HAServiceTest, sendUpdatesControlResultError6MultiThreading) {
     MultiThreadingMgr::instance().setMode(true);
-    // Instruct the server 2 to return an error as a result of receiving a command.
-    factory2_->getResponseCreator()->setControlResult(CONTROL_RESULT_ERROR);
-
-    // Start only two servers out of three. The server 3 is not running.
-    ASSERT_NO_THROW({
-        listener_->start();
-        listener2_->start();
-        listener3_->start();
-    });
-
-    testSendLeaseUpdates6([] {
-        ADD_FAILURE() << "unpark function called but expected that the packet"
-            " is dropped";
-    }, false, 1);
-
-    // The updates should be sent to server 2 and this server should return error code.
-    EXPECT_EQ(1, factory2_->getResponseCreator()->getReceivedRequests().size());
-
-    // Server 2 should receive lease6-bulk-apply.
-    auto update_request2 = factory2_->getResponseCreator()->findRequest("lease6-bulk-apply",
-                                                                        "2001:db8:1::cafe",
-                                                                        "2001:db8:1::efac");
-    EXPECT_TRUE(update_request2);
+    testSendUpdatesControlResultError6();
 }
 
 // This test verifies that the server accepts the response to the lease6-bulk-apply
 // command including failed-deleted-leases and failed-leases parameters.
 TEST_F(HAServiceTest, sendUpdatesFailedLeases6) {
-    // Create a dummy lease which failed to be deleted.
-    auto failed_deleted_lease = Element::createMap();
-    failed_deleted_lease->set("type", Element::create("IA_NA"));
-    failed_deleted_lease->set("ip-address", Element::create("2001:db8:1::1"));
-    failed_deleted_lease->set("subnet-id", Element::create(1));
-    failed_deleted_lease->set("result", Element::create(CONTROL_RESULT_EMPTY));
-    failed_deleted_lease->set("error-message", Element::create("no lease found"));
-
-    // Crate a dummy lease which failed to be created.
-    auto failed_lease = Element::createMap();
-    failed_lease->set("type", Element::create("IA_PD"));
-    failed_lease->set("ip-address", Element::create("2001:db8:1::"));
-    failed_lease->set("subnet-id", Element::create(2));
-    failed_lease->set("result", Element::create(CONTROL_RESULT_ERROR));
-    failed_lease->set("error-message", Element::create("failed to create lease"));
-
-    // Create the "failed-deleted-leases" list.
-    auto failed_deleted_leases = Element::createList();
-    failed_deleted_leases->add(failed_deleted_lease);
-
-    // Create the "failed-leases" list.
-    auto failed_leases = Element::createList();
-    failed_leases->add(failed_lease);
-
-    // Add both lists to the arguments.
-    ElementPtr arguments = Element::createMap();
-    arguments->set("failed-deleted-leases", failed_deleted_leases);
-    arguments->set("failed-leases", failed_leases);
-
-    // Configure the server to return this response.
-    factory2_->getResponseCreator()->setArguments("lease6-bulk-apply",
-                                                  arguments);
-
-    // Start HTTP servers.
-    ASSERT_NO_THROW({
-        listener_->start();
-        listener2_->start();
-        listener3_->start();
-    });
-
-    // This flag will be set to true if unpark is called.
-    bool unpark_called = false;
-    testSendLeaseUpdates6([&unpark_called] {
-        unpark_called = true;
-    }, true, 1);
-
-    // Expecting that the packet was unparked because lease updates are expected
-    // to be successful.
-    EXPECT_TRUE(unpark_called);
-
-    // The server 2 should have received one command.
-    EXPECT_EQ(1, factory2_->getResponseCreator()->getReceivedRequests().size());
-
-    // Check that the server 2 has received lease6-bulk-apply command.
-    auto update_request2 = factory2_->getResponseCreator()->findRequest("lease6-bulk-apply",
-                                                                        "2001:db8:1::cafe",
-                                                                        "2001:db8:1::efac");
-    EXPECT_TRUE(update_request2);
+    testSendUpdatesFailedLeases6();
 }
 
 // This test verifies that the server accepts the response to the lease6-bulk-apply
 // command including failed-deleted-leases and failed-leases parameters.
 TEST_F(HAServiceTest, sendUpdatesFailedLeases6MultiThreading) {
     MultiThreadingMgr::instance().setMode(true);
-    // Create a dummy lease which failed to be deleted.
-    auto failed_deleted_lease = Element::createMap();
-    failed_deleted_lease->set("type", Element::create("IA_NA"));
-    failed_deleted_lease->set("ip-address", Element::create("2001:db8:1::1"));
-    failed_deleted_lease->set("subnet-id", Element::create(1));
-    failed_deleted_lease->set("result", Element::create(CONTROL_RESULT_EMPTY));
-    failed_deleted_lease->set("error-message", Element::create("no lease found"));
-
-    // Crate a dummy lease which failed to be created.
-    auto failed_lease = Element::createMap();
-    failed_lease->set("type", Element::create("IA_PD"));
-    failed_lease->set("ip-address", Element::create("2001:db8:1::"));
-    failed_lease->set("subnet-id", Element::create(2));
-    failed_lease->set("result", Element::create(CONTROL_RESULT_ERROR));
-    failed_lease->set("error-message", Element::create("failed to create lease"));
-
-    // Create the "failed-deleted-leases" list.
-    auto failed_deleted_leases = Element::createList();
-    failed_deleted_leases->add(failed_deleted_lease);
-
-    // Create the "failed-leases" list.
-    auto failed_leases = Element::createList();
-    failed_leases->add(failed_lease);
-
-    // Add both lists to the arguments.
-    ElementPtr arguments = Element::createMap();
-    arguments->set("failed-deleted-leases", failed_deleted_leases);
-    arguments->set("failed-leases", failed_leases);
-
-    // Configure the server to return this response.
-    factory2_->getResponseCreator()->setArguments("lease6-bulk-apply",
-                                                  arguments);
-
-    // Start HTTP servers.
-    ASSERT_NO_THROW({
-        listener_->start();
-        listener2_->start();
-        listener3_->start();
-    });
-
-    // This flag will be set to true if unpark is called.
-    bool unpark_called = false;
-    testSendLeaseUpdates6([&unpark_called] {
-        unpark_called = true;
-    }, true, 1);
-
-    // Expecting that the packet was unparked because lease updates are expected
-    // to be successful.
-    EXPECT_TRUE(unpark_called);
-
-    // The server 2 should have received one command.
-    EXPECT_EQ(1, factory2_->getResponseCreator()->getReceivedRequests().size());
-
-    // Check that the server 2 has received lease6-bulk-apply command.
-    auto update_request2 = factory2_->getResponseCreator()->findRequest("lease6-bulk-apply",
-                                                                        "2001:db8:1::cafe",
-                                                                        "2001:db8:1::efac");
-    EXPECT_TRUE(update_request2);
+    testSendUpdatesFailedLeases6();
 }
 
 // This test verifies that the heartbeat command is processed successfully.