From: Marcin Siodelski Date: Tue, 14 Jan 2020 11:09:37 +0000 (+0100) Subject: [#1024] Added unit test for new state transitions X-Git-Tag: Kea-1.7.4~67 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0cdfa6693a72b2d320d097d53ed68e29ae1d4e2c;p=thirdparty%2Fkea.git [#1024] Added unit test for new state transitions Checking transitions from the maintained and partner-maintained states. --- diff --git a/src/hooks/dhcp/high_availability/tests/ha_service_unittest.cc b/src/hooks/dhcp/high_availability/tests/ha_service_unittest.cc index 18c51441ed..33e81c28f0 100644 --- a/src/hooks/dhcp/high_availability/tests/ha_service_unittest.cc +++ b/src/hooks/dhcp/high_availability/tests/ha_service_unittest.cc @@ -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");