]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#1024] Added unit test for new state transitions
authorMarcin Siodelski <marcin@isc.org>
Tue, 14 Jan 2020 11:09:37 +0000 (12:09 +0100)
committerMarcin Siodelski <marcin@isc.org>
Mon, 27 Jan 2020 12:55:17 +0000 (13:55 +0100)
Checking transitions from the maintained and partner-maintained states.

src/hooks/dhcp/high_availability/tests/ha_service_unittest.cc

index 18c51441ed51afc4bec2fda9f3c0ea4e2e5db5fc..33e81c28f0d820b0207e5a14bd66ae7f5b51e7e4 100644 (file)
@@ -2858,8 +2858,11 @@ public:
 
         // If the partner is unavailable we also have to verify the case when
         // we detect that the partner is considered offline (after running the
-        // whole failure detection algorithm).
-        if (partner_state.state_ == HA_UNAVAILABLE_ST) {
+        // whole failure detection algorithm). The server being in the maintained
+        // state is excluded from this because it must not transition out of this
+        // state until an administrator makes some action.
+        if ((my_state.state_ != HA_MAINTAINED_ST) &&
+            (partner_state.state_ == HA_UNAVAILABLE_ST)) {
             // Transition this server back to the initial state.
             service_->transition(my_state.state_, HAService::NOP_EVT);
             // Simulate lack of communication between the servers.
@@ -3532,6 +3535,38 @@ TEST_F(HAServiceStateMachineTest, stateTransitionsLoadBalancingPrimary) {
                        FinalState(HA_LOAD_BALANCING_ST));
     }
 
+    // MAINTAINED state transitions
+    {
+        SCOPED_TRACE("MAINTAINED state transitions");
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_LOAD_BALANCING_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_MAINTAINED_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_PARTNER_DOWN_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_PARTNER_MAINTAINED_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_READY_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_SYNCING_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_TERMINATED_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_WAITING_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_UNAVAILABLE_ST),
+                       FinalState(HA_MAINTAINED_ST));
+    }
+
     // PARTNER DOWN state transitions
     {
         SCOPED_TRACE("PARTNER DOWN state transitions");
@@ -3564,6 +3599,38 @@ TEST_F(HAServiceStateMachineTest, stateTransitionsLoadBalancingPrimary) {
                        FinalState(HA_PARTNER_DOWN_ST));
     }
 
+    // PARTNER MAINTAINED state transitions
+    {
+        SCOPED_TRACE("PARTNER MAINTAINED state transitions");
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_LOAD_BALANCING_ST),
+                       FinalState(HA_PARTNER_MAINTAINED_ST));
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_MAINTAINED_ST),
+                       FinalState(HA_PARTNER_MAINTAINED_ST));
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_PARTNER_DOWN_ST),
+                       FinalState(HA_PARTNER_MAINTAINED_ST));
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_PARTNER_MAINTAINED_ST),
+                       FinalState(HA_PARTNER_MAINTAINED_ST));
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_READY_ST),
+                       FinalState(HA_PARTNER_MAINTAINED_ST));
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_SYNCING_ST),
+                       FinalState(HA_PARTNER_MAINTAINED_ST));
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_TERMINATED_ST),
+                       FinalState(HA_PARTNER_MAINTAINED_ST));
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_WAITING_ST),
+                       FinalState(HA_PARTNER_MAINTAINED_ST));
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_UNAVAILABLE_ST),
+                       FinalState(HA_PARTNER_DOWN_ST));
+    }
+
     // READY state transitions
     {
         SCOPED_TRACE("READY state transitions");
@@ -3707,6 +3774,38 @@ TEST_F(HAServiceStateMachineTest, stateTransitionsLoadBalancingSecondary) {
                          FinalState(HA_LOAD_BALANCING_ST));
     }
 
+    // MAINTAINED state transitions
+    {
+        SCOPED_TRACE("MAINTAINED state transitions");
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_LOAD_BALANCING_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_MAINTAINED_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_PARTNER_DOWN_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_PARTNER_MAINTAINED_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_READY_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_SYNCING_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_TERMINATED_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_WAITING_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_UNAVAILABLE_ST),
+                       FinalState(HA_MAINTAINED_ST));
+    }
+
     // PARTNER DOWN state transitions
     {
         SCOPED_TRACE("PARTNER DOWN state transitions");
@@ -3739,6 +3838,38 @@ TEST_F(HAServiceStateMachineTest, stateTransitionsLoadBalancingSecondary) {
                        FinalState(HA_PARTNER_DOWN_ST));
     }
 
+    // PARTNER MAINTAINED state transitions
+    {
+        SCOPED_TRACE("PARTNER MAINTAINED state transitions");
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_LOAD_BALANCING_ST),
+                       FinalState(HA_PARTNER_MAINTAINED_ST));
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_MAINTAINED_ST),
+                       FinalState(HA_PARTNER_MAINTAINED_ST));
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_PARTNER_DOWN_ST),
+                       FinalState(HA_PARTNER_MAINTAINED_ST));
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_PARTNER_MAINTAINED_ST),
+                       FinalState(HA_PARTNER_MAINTAINED_ST));
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_READY_ST),
+                       FinalState(HA_PARTNER_MAINTAINED_ST));
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_SYNCING_ST),
+                       FinalState(HA_PARTNER_MAINTAINED_ST));
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_TERMINATED_ST),
+                       FinalState(HA_PARTNER_MAINTAINED_ST));
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_WAITING_ST),
+                       FinalState(HA_PARTNER_MAINTAINED_ST));
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_UNAVAILABLE_ST),
+                       FinalState(HA_PARTNER_DOWN_ST));
+    }
+
     // READY state transitions
     {
         SCOPED_TRACE("READY state transitions");
@@ -4178,6 +4309,38 @@ TEST_F(HAServiceStateMachineTest, stateTransitionsHotStandbyPrimary) {
                        FinalState(HA_HOT_STANDBY_ST));
     }
 
+    // MAINTAINED state transitions
+    {
+        SCOPED_TRACE("MAINTAINED state transitions");
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_LOAD_BALANCING_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_MAINTAINED_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_PARTNER_DOWN_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_PARTNER_MAINTAINED_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_READY_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_SYNCING_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_TERMINATED_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_WAITING_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_UNAVAILABLE_ST),
+                       FinalState(HA_MAINTAINED_ST));
+    }
+
     // PARTNER DOWN state transitions
     {
         SCOPED_TRACE("PARTNER DOWN state transitions");
@@ -4210,6 +4373,38 @@ TEST_F(HAServiceStateMachineTest, stateTransitionsHotStandbyPrimary) {
                        FinalState(HA_PARTNER_DOWN_ST));
     }
 
+    // PARTNER MAINTAINED state transitions
+    {
+        SCOPED_TRACE("PARTNER MAINTAINED state transitions");
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_LOAD_BALANCING_ST),
+                       FinalState(HA_PARTNER_MAINTAINED_ST));
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_MAINTAINED_ST),
+                       FinalState(HA_PARTNER_MAINTAINED_ST));
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_PARTNER_DOWN_ST),
+                       FinalState(HA_PARTNER_MAINTAINED_ST));
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_PARTNER_MAINTAINED_ST),
+                       FinalState(HA_PARTNER_MAINTAINED_ST));
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_READY_ST),
+                       FinalState(HA_PARTNER_MAINTAINED_ST));
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_SYNCING_ST),
+                       FinalState(HA_PARTNER_MAINTAINED_ST));
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_TERMINATED_ST),
+                       FinalState(HA_PARTNER_MAINTAINED_ST));
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_WAITING_ST),
+                       FinalState(HA_PARTNER_MAINTAINED_ST));
+
+        testTransition(MyState(HA_PARTNER_MAINTAINED_ST), PartnerState(HA_UNAVAILABLE_ST),
+                       FinalState(HA_PARTNER_DOWN_ST));
+    }
+
     // READY state transitions
     {
         SCOPED_TRACE("READY state transitions");
@@ -4368,6 +4563,38 @@ TEST_F(HAServiceStateMachineTest, stateTransitionsHotStandbyStandby) {
                        FinalState(HA_HOT_STANDBY_ST));
     }
 
+    // MAINTAINED state transitions
+    {
+        SCOPED_TRACE("MAINTAINED state transitions");
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_LOAD_BALANCING_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_MAINTAINED_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_PARTNER_DOWN_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_PARTNER_MAINTAINED_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_READY_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_SYNCING_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_TERMINATED_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_WAITING_ST),
+                       FinalState(HA_MAINTAINED_ST));
+
+        testTransition(MyState(HA_MAINTAINED_ST), PartnerState(HA_UNAVAILABLE_ST),
+                       FinalState(HA_MAINTAINED_ST));
+    }
+
     // PARTNER DOWN state transitions
     {
         SCOPED_TRACE("PARTNER DOWN state transitions");
@@ -4400,6 +4627,7 @@ TEST_F(HAServiceStateMachineTest, stateTransitionsHotStandbyStandby) {
                        FinalState(HA_PARTNER_DOWN_ST));
     }
 
+
     // READY state transitions
     {
         SCOPED_TRACE("READY state transitions");