@@ -432,3 +432,28 @@ TEST_F(FailsafeTest, skip_failsafe)
432432 ASSERT_EQ (updated_user_intented_mode, state.user_intended_mode );
433433 ASSERT_EQ (failsafe.selectedAction (), FailsafeBase::Action::Warn);
434434}
435+
436+ TEST_F (FailsafeTest, user_termination)
437+ {
438+ FailsafeTester failsafe (nullptr );
439+
440+ failsafe_flags_s failsafe_flags{};
441+ FailsafeBase::State state{};
442+ state.armed = true ;
443+ state.user_intended_mode = vehicle_status_s::NAVIGATION_STATE_TERMINATION;
444+ state.vehicle_type = vehicle_status_s::VEHICLE_TYPE_ROTARY_WING;
445+ hrt_abstime time = 5_s;
446+
447+ // User intended termination -> failsafe termination
448+ uint8_t updated_user_intented_mode = failsafe.update (time, state, false , false , failsafe_flags);
449+ EXPECT_EQ (updated_user_intented_mode, state.user_intended_mode );
450+ EXPECT_EQ (failsafe.selectedAction (), FailsafeBase::Action::Terminate);
451+
452+ // Links lost during termination -> stay in termination
453+ failsafe_flags.gcs_connection_lost = true ;
454+ failsafe_flags.manual_control_signal_lost = true ;
455+
456+ updated_user_intented_mode = failsafe.update (time, state, false , false , failsafe_flags);
457+ EXPECT_EQ (updated_user_intented_mode, state.user_intended_mode );
458+ EXPECT_EQ (failsafe.selectedAction (), FailsafeBase::Action::Terminate);
459+ }
0 commit comments