]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#3178] Added status-get test for H&S
authorMarcin Siodelski <marcin@isc.org>
Mon, 18 Dec 2023 12:49:30 +0000 (13:49 +0100)
committerMarcin Siodelski <marcin@isc.org>
Fri, 5 Jan 2024 18:04:19 +0000 (19:04 +0100)
src/hooks/dhcp/high_availability/tests/ha_impl_unittest.cc

index 8885dae142166f6c87e52cf2ffa3e981b7189cac..5a7576fcce4343b656e0b5c1f527319847f8bdbf 100644 (file)
@@ -1721,6 +1721,88 @@ TEST_F(HAImplTest, statusGetPassiveBackup) {
     EXPECT_TRUE(isEquivalent(got, Element::fromJSON(expected)));
 }
 
+// Tests status-get command processed handler for standby server in the
+// hub-and-spoke mode.
+TEST_F(HAImplTest, statusGetHubAndSpoke) {
+    TestHAImpl ha_impl;
+    ASSERT_NO_THROW(ha_impl.configure(createValidHubJsonConfiguration()));
+
+    // Starting the service is required prior to running any callouts.
+    NetworkStatePtr network_state(new NetworkState(NetworkState::DHCPv4));
+    ASSERT_NO_THROW(ha_impl.startServices(io_service_, network_state,
+                                          HAServerType::DHCPv4));
+
+    std::string name = "status-get";
+    ConstElementPtr response =
+        Element::fromJSON("{ \"arguments\": { \"pid\": 1 }, \"result\": 0 }");
+
+    CalloutHandlePtr callout_handle = HooksManager::createCalloutHandle();
+
+    callout_handle->setArgument("name", name);
+    callout_handle->setArgument("response", response);
+
+    ASSERT_NO_THROW(ha_impl.commandProcessed(*callout_handle));
+
+    ConstElementPtr got;
+    callout_handle->getArgument("response", got);
+    ASSERT_TRUE(got);
+
+    std::string expected =
+        "{"
+        "    \"arguments\": {"
+        "        \"high-availability\": ["
+        "            {"
+        "                \"ha-mode\": \"hot-standby\","
+        "                \"ha-servers\": {"
+        "                    \"local\": {"
+        "                        \"role\": \"standby\","
+        "                        \"scopes\": [ ],"
+        "                        \"state\": \"waiting\""
+        "                    },"
+        "                    \"remote\": {"
+        "                        \"age\": 0,"
+        "                        \"analyzed-packets\": 0,"
+        "                        \"communication-interrupted\": false,"
+        "                        \"connecting-clients\": 0,"
+        "                        \"in-touch\": false,"
+        "                        \"last-scopes\": [ ],"
+        "                        \"last-state\": \"\","
+        "                        \"role\": \"primary\","
+        "                        \"unacked-clients\": 0,"
+        "                        \"unacked-clients-left\": 0"
+        "                    }"
+        "                }"
+        "            },"
+        "            {"
+        "                \"ha-mode\": \"hot-standby\","
+        "                \"ha-servers\": {"
+        "                    \"local\": {"
+        "                        \"role\": \"standby\","
+        "                        \"scopes\": [ ],"
+        "                        \"state\": \"waiting\""
+        "                    },"
+        "                    \"remote\": {"
+        "                        \"age\": 0,"
+        "                        \"analyzed-packets\": 0,"
+        "                        \"communication-interrupted\": false,"
+        "                        \"connecting-clients\": 0,"
+        "                        \"in-touch\": false,"
+        "                        \"last-scopes\": [ ],"
+        "                        \"last-state\": \"\","
+        "                        \"role\": \"primary\","
+        "                        \"unacked-clients\": 0,"
+        "                        \"unacked-clients-left\": 0"
+        "                    }"
+        "                }"
+        "            }"
+        "        ],"
+        "        \"pid\": 1"
+        "    },"
+        "    \"result\": 0"
+        "}";
+    EXPECT_TRUE(isEquivalent(got, Element::fromJSON(expected)));
+}
+
 // Test ha-maintenance-notify command handler with server name.
 TEST_F(HAImplTest, maintenanceNotify) {
     HAImpl ha_impl;