continue testing of mode tables

This commit is contained in:
2025-01-27 12:35:08 +01:00
parent 0870471886
commit 127d22d445
2 changed files with 366 additions and 59 deletions

View File

@ -14,7 +14,7 @@ use satrs::mode_tree::{SequenceTablesMapValue, TargetTablesMapValue};
use satrs::request::{MessageMetadata, RequestId};
use satrs::res_code::ResultU16;
use satrs::subsystem::{
ModeCommandingResult, ModeDoesNotExistError, ModeTreeHelperError, ModeTreeHelperState,
ModeCommandingResult, ModeTreeHelperError, ModeTreeHelperState, StartSequenceError,
SubsystemCommandingHelper, SubsystemHelperResult,
};
use satrs::{
@ -394,8 +394,8 @@ impl ModeProvider for AcsSubsystem {
pub enum SubsystemModeError {
#[error("messaging error: {0:?}")]
Mode(#[from] ModeError),
#[error("mode does not exist: {0}")]
ModeDoesNotExist(#[from] ModeDoesNotExistError),
#[error("start sequence error: {0}")]
StartError(#[from] StartSequenceError),
}
impl ModeRequestHandler for AcsSubsystem {
@ -1452,44 +1452,50 @@ fn command_safe_mode() {
);
// Check function calls for subsystem
let generic_mock_check =
|mock: &mut ModeRequestHandlerMock, expected_mode_for_transition: ModeAndSubmode| {
assert_eq!(mock.start_transition_calls.borrow().len(), 1);
let start_transition_call = mock.start_transition_calls.borrow_mut().front().unwrap();
assert_eq!(start_transition_call.0.request_id(), request_id);
assert_eq!(start_transition_call.1, expected_mode_for_transition);
assert_eq!(mock.handle_mode_reached_calls.borrow().len(), 1);
let generic_mock_check = |mock: &mut ModeRequestHandlerMock,
expected_mode_for_transition: ModeAndSubmode,
expected_req_id: RequestId| {
assert_eq!(mock.start_transition_calls.borrow().len(), 1);
let start_transition_call = mock.start_transition_calls.borrow_mut().front().unwrap();
assert_eq!(start_transition_call.0.request_id(), expected_req_id);
assert_eq!(start_transition_call.1, expected_mode_for_transition);
assert_eq!(mock.handle_mode_reached_calls.borrow().len(), 1);
let handle_mode_reached_ref = mock.handle_mode_reached_calls.borrow();
let handle_mode_reached_call = handle_mode_reached_ref.front().unwrap();
let handle_mode_reached_ref = mock.handle_mode_reached_calls.borrow();
let handle_mode_reached_call = handle_mode_reached_ref.front().unwrap();
assert_eq!(
handle_mode_reached_call.as_ref().unwrap().request_id(),
expected_req_id
);
drop(handle_mode_reached_ref);
assert_eq!(mock.send_mode_reply_calls.borrow().len(), 1);
let mode_reply_call = *mock.send_mode_reply_calls.borrow_mut().front().unwrap();
assert_eq!(mode_reply_call.0.request_id(), expected_req_id);
if let ModeReply::ModeReply(mode_and_submode) = mode_reply_call.1 {
assert_eq!(
handle_mode_reached_call.as_ref().unwrap().request_id(),
request_id
mode_and_submode, expected_mode_for_transition,
"unexpected mode for component {}",
mock.id
);
drop(handle_mode_reached_ref);
assert_eq!(mock.send_mode_reply_calls.borrow().len(), 1);
let mode_reply_call = *mock.send_mode_reply_calls.borrow_mut().front().unwrap();
assert_eq!(mode_reply_call.0.request_id(), request_id);
if let ModeReply::ModeReply(mode_and_submode) = mode_reply_call.1 {
assert_eq!(
mode_and_submode, expected_mode_for_transition,
"unexpected mode for component {}",
mock.id
);
} else {
panic!("Unexpected mode reply for component {}", mock.id);
}
// TODO: Check all mode replies
assert_eq!(mock.mode_messages_received(), 3);
mock.clear();
};
} else {
panic!("Unexpected mode reply for component {}", mock.id);
}
// TODO: Check all mode replies
assert_eq!(mock.mode_messages_received(), 3);
mock.clear();
};
let expected_req_id_for_children = tb.subsystem.subsystem_helper.internal_request_id().unwrap();
generic_mock_check(
&mut tb.subsystem.mode_req_mock,
ModeAndSubmode::new(AcsMode::SAFE as u32, 0),
request_id,
);
assert_eq!(
tb.subsystem.subsystem_helper.request_id().unwrap(),
request_id
);
assert!(tb.subsystem.subsystem_helper.active_request_id.is_none());
assert_eq!(
tb.subsystem.subsystem_helper.state(),
ModeTreeHelperState::TargetKeeping
@ -1520,10 +1526,12 @@ fn command_safe_mode() {
generic_mock_check(
&mut tb.ctrl.mode_req_mock,
ModeAndSubmode::new(AcsMode::SAFE as u32, 0),
expected_req_id_for_children,
);
generic_mock_check(
&mut tb.mgm_assy.mode_req_mock,
ModeAndSubmode::new(DefaultMode::NORMAL as u32, 0),
expected_req_id_for_children,
);
let mut expected_modes = HashMap::new();
expected_modes.insert(
@ -1542,6 +1550,7 @@ fn command_safe_mode() {
generic_mock_check(
&mut tb.mgt_manager.mode_req_mock,
ModeAndSubmode::new(DefaultMode::NORMAL as u32, 0),
expected_req_id_for_children,
);
let mut expected_modes = HashMap::new();
expected_modes.insert(
@ -1559,13 +1568,16 @@ fn command_safe_mode() {
generic_mock_check(
&mut tb.mgt_dev.mode_req_mock,
ModeAndSubmode::new(DefaultMode::NORMAL as u32, 0),
expected_req_id_for_children,
);
generic_mock_check(
&mut tb.mgm_devs[0].mode_req_mock,
ModeAndSubmode::new(DefaultMode::NORMAL as u32, 0),
expected_req_id_for_children,
);
generic_mock_check(
&mut tb.mgm_devs[1].mode_req_mock,
ModeAndSubmode::new(DefaultMode::NORMAL as u32, 0),
expected_req_id_for_children,
);
}