more tests
This commit is contained in:
parent
918ff101a8
commit
4e9a79348c
@ -1,4 +1,5 @@
|
|||||||
use core::cell::Cell;
|
use core::cell::Cell;
|
||||||
|
use num_enum::TryFromPrimitive;
|
||||||
use satrs::mode::{
|
use satrs::mode::{
|
||||||
Mode, ModeError, ModeProvider, ModeReplyReceiver, ModeReplySender, ModeRequestHandler,
|
Mode, ModeError, ModeProvider, ModeReplyReceiver, ModeReplySender, ModeRequestHandler,
|
||||||
ModeRequestHandlerMpscBounded, ModeRequestReceiver, ModeRequestSender,
|
ModeRequestHandlerMpscBounded, ModeRequestReceiver, ModeRequestSender,
|
||||||
@ -26,7 +27,7 @@ use satrs::{
|
|||||||
};
|
};
|
||||||
use std::borrow::{Borrow, BorrowMut};
|
use std::borrow::{Borrow, BorrowMut};
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
use std::collections::VecDeque;
|
use std::collections::{HashMap, VecDeque};
|
||||||
use std::convert::Infallible;
|
use std::convert::Infallible;
|
||||||
use std::{println, sync::mpsc};
|
use std::{println, sync::mpsc};
|
||||||
|
|
||||||
@ -43,6 +44,8 @@ pub enum AcsMode {
|
|||||||
IDLE = 2,
|
IDLE = 2,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, TryFromPrimitive)]
|
||||||
|
#[repr(u64)]
|
||||||
pub enum TestComponentId {
|
pub enum TestComponentId {
|
||||||
MagnetometerDevice0 = 1,
|
MagnetometerDevice0 = 1,
|
||||||
MagnetometerDevice1 = 2,
|
MagnetometerDevice1 = 2,
|
||||||
@ -1760,6 +1763,24 @@ fn announce_recursively() {
|
|||||||
assert_eq!(announces.len(), 1);
|
assert_eq!(announces.len(), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn generic_mode_reply_checker(
|
||||||
|
reply_meta: MessageMetadata,
|
||||||
|
mode_and_submode: ModeAndSubmode,
|
||||||
|
expected_modes: &mut HashMap<u64, ModeAndSubmode>,
|
||||||
|
) {
|
||||||
|
let id = TestComponentId::try_from(reply_meta.sender_id()).expect("invalid sender id");
|
||||||
|
if !expected_modes.contains_key(&reply_meta.sender_id()) {
|
||||||
|
panic!("received unexpected mode reply from component {:?}", id);
|
||||||
|
}
|
||||||
|
let expected_mode = expected_modes.get(&reply_meta.sender_id()).unwrap();
|
||||||
|
assert_eq!(
|
||||||
|
expected_mode, &mode_and_submode,
|
||||||
|
"mode mismatch for component {:?}, expected {:?}, got {:?}",
|
||||||
|
id, expected_mode, mode_and_submode
|
||||||
|
);
|
||||||
|
expected_modes.remove(&reply_meta.sender_id());
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn command_safe_mode() {
|
fn command_safe_mode() {
|
||||||
let mut tb = TreeTestbench::new();
|
let mut tb = TreeTestbench::new();
|
||||||
@ -1772,6 +1793,7 @@ fn command_safe_mode() {
|
|||||||
.send_mode_cmd(ModeAndSubmode::new(AcsMode::SAFE as u32, 0));
|
.send_mode_cmd(ModeAndSubmode::new(AcsMode::SAFE as u32, 0));
|
||||||
tb.run();
|
tb.run();
|
||||||
tb.run();
|
tb.run();
|
||||||
|
tb.run();
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
tb.ctrl.mode_and_submode(),
|
tb.ctrl.mode_and_submode(),
|
||||||
ModeAndSubmode::new(AcsMode::SAFE as u32, 0)
|
ModeAndSubmode::new(AcsMode::SAFE as u32, 0)
|
||||||
@ -1848,6 +1870,28 @@ fn command_safe_mode() {
|
|||||||
tb.subsystem.subsystem_helper.current_mode,
|
tb.subsystem.subsystem_helper.current_mode,
|
||||||
ModeAndSubmode::new(AcsMode::SAFE as u32, 0),
|
ModeAndSubmode::new(AcsMode::SAFE as u32, 0),
|
||||||
);
|
);
|
||||||
|
assert_eq!(
|
||||||
|
tb.subsystem.mode_reply_mock.num_of_received_mode_replies(),
|
||||||
|
3
|
||||||
|
);
|
||||||
|
let mut expected_modes = HashMap::new();
|
||||||
|
expected_modes.insert(
|
||||||
|
TestComponentId::AcsController as u64,
|
||||||
|
ModeAndSubmode::new(AcsMode::SAFE as u32, 0),
|
||||||
|
);
|
||||||
|
expected_modes.insert(
|
||||||
|
TestComponentId::MagnetometerAssembly as u64,
|
||||||
|
ModeAndSubmode::new(DefaultMode::NORMAL as u32, 0),
|
||||||
|
);
|
||||||
|
expected_modes.insert(
|
||||||
|
TestComponentId::MgtDevManager as u64,
|
||||||
|
ModeAndSubmode::new(DefaultMode::NORMAL as u32, 0),
|
||||||
|
);
|
||||||
|
while let Some(reply) = tb.subsystem.mode_reply_mock.mode_reply_messages.pop_front() {
|
||||||
|
generic_mode_reply_checker(reply.0, reply.1, &mut expected_modes);
|
||||||
|
}
|
||||||
|
assert!(expected_modes.is_empty());
|
||||||
|
|
||||||
generic_mock_check(
|
generic_mock_check(
|
||||||
&mut tb.ctrl.mode_req_mock,
|
&mut tb.ctrl.mode_req_mock,
|
||||||
ModeAndSubmode::new(AcsMode::SAFE as u32, 0),
|
ModeAndSubmode::new(AcsMode::SAFE as u32, 0),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user