diff --git a/satrs/src/dev_mgmt.rs b/satrs/src/dev_mgmt.rs index 1333848..4d05ed5 100644 --- a/satrs/src/dev_mgmt.rs +++ b/satrs/src/dev_mgmt.rs @@ -334,11 +334,12 @@ mod tests { #[test] fn test_mode_commanding_one_child() { - let mut assy_helper = DevManagerCommandingHelper::new(TransparentDevManagerHook::default()); + let mut dev_mgmt_helper = + DevManagerCommandingHelper::new(TransparentDevManagerHook::default()); let mode_req_sender = ModeReqSenderMock::default(); - assy_helper.add_mode_child(ExampleId::Id1 as u64, UNKNOWN_MODE); + dev_mgmt_helper.add_mode_child(ExampleId::Id1 as u64, UNKNOWN_MODE); let expected_mode = ModeAndSubmode::new(ExampleMode::Mode1 as u32, 0); - assy_helper + dev_mgmt_helper .send_mode_cmd_to_one_child( 1, ExampleId::Id1 as u64, @@ -359,10 +360,10 @@ mod tests { } ); matches!( - assy_helper.state(), + dev_mgmt_helper.state(), DevManagerCommandingState::AwaitingReplies { .. } ); - if let DevManagerCommandingState::AwaitingReplies(ctx) = assy_helper.state() { + if let DevManagerCommandingState::AwaitingReplies(ctx) = dev_mgmt_helper.state() { assert_eq!(ctx.target_mode, expected_mode); assert_eq!(ctx.active_request_id, 1); } @@ -373,11 +374,75 @@ mod tests { if let DevManagerHelperResult::ModeCommandingDone(ActiveModeCommandContext { target_mode, active_request_id, - }) = assy_helper.handle_mode_reply(&reply).unwrap() + }) = dev_mgmt_helper.handle_mode_reply(&reply).unwrap() { assert_eq!(target_mode, expected_mode); assert_eq!(active_request_id, 1); } - matches!(assy_helper.state(), DevManagerCommandingState::Idle); + matches!(dev_mgmt_helper.state(), DevManagerCommandingState::Idle); + } + + #[test] + fn test_mode_commanding_multi_child() { + let mut dev_mgmt_helper = + DevManagerCommandingHelper::new(TransparentDevManagerHook::default()); + let mode_req_sender = ModeReqSenderMock::default(); + dev_mgmt_helper.add_mode_child(ExampleId::Id1 as u64, UNKNOWN_MODE); + dev_mgmt_helper.add_mode_child(ExampleId::Id2 as u64, UNKNOWN_MODE); + let expected_mode = ModeAndSubmode::new(ExampleMode::Mode2 as u32, 0); + dev_mgmt_helper + .send_mode_cmd_to_all_children(1, expected_mode, false, &mode_req_sender) + .unwrap(); + assert_eq!(mode_req_sender.requests.borrow().len(), 2); + let req = mode_req_sender.requests.borrow_mut().pop_front().unwrap(); + assert_eq!(req.target_id, ExampleId::Id1 as u64); + assert_eq!(req.request_id, 1); + assert_eq!( + req.request, + ModeRequest::SetMode { + mode_and_submode: expected_mode, + forced: false + } + ); + let req = mode_req_sender.requests.borrow_mut().pop_front().unwrap(); + assert_eq!(req.target_id, ExampleId::Id2 as u64); + assert_eq!(req.request_id, 1); + assert_eq!( + req.request, + ModeRequest::SetMode { + mode_and_submode: expected_mode, + forced: false + } + ); + matches!( + dev_mgmt_helper.state(), + DevManagerCommandingState::AwaitingReplies { .. } + ); + if let DevManagerCommandingState::AwaitingReplies(ctx) = dev_mgmt_helper.state() { + assert_eq!(ctx.target_mode, expected_mode); + assert_eq!(ctx.active_request_id, 1); + } + + let reply = GenericMessage::new( + MessageMetadata::new(1, ExampleId::Id1 as u64), + ModeReply::ModeReply(expected_mode), + ); + assert_eq!( + dev_mgmt_helper.handle_mode_reply(&reply).unwrap(), + DevManagerHelperResult::Busy + ); + let reply = GenericMessage::new( + MessageMetadata::new(1, ExampleId::Id2 as u64), + ModeReply::ModeReply(expected_mode), + ); + if let DevManagerHelperResult::ModeCommandingDone(ActiveModeCommandContext { + target_mode, + active_request_id, + }) = dev_mgmt_helper.handle_mode_reply(&reply).unwrap() + { + assert_eq!(target_mode, expected_mode); + assert_eq!(active_request_id, 1); + } + matches!(dev_mgmt_helper.state(), DevManagerCommandingState::Idle); } }