Add a few more ProgramRunner tests
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
690a165950
commit
6d33b7ed50
@ -531,4 +531,107 @@ mod test {
|
||||
sec_runner.quit().await.unwrap();
|
||||
yield_now().await;
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_close_event_chan() {
|
||||
let (sections, mut sec_runner, _) = make_sections_and_runner();
|
||||
let mut runner = ProgramRunner::new(sec_runner.clone());
|
||||
let mut prog_events = runner.subscribe().await.unwrap();
|
||||
|
||||
let program: ProgramRef = Program {
|
||||
id: 1,
|
||||
name: "Program 1".into(),
|
||||
sequence: vec![],
|
||||
}
|
||||
.into();
|
||||
|
||||
runner.update_sections(sections.clone()).await.unwrap();
|
||||
|
||||
runner.run_program(program.clone()).await.unwrap();
|
||||
prog_events.recv().await.unwrap();
|
||||
prog_events.recv().await.unwrap();
|
||||
// Make sure it doesn't panic when the events channel is dropped
|
||||
drop(prog_events);
|
||||
yield_now().await;
|
||||
runner.run_program(program).await.unwrap();
|
||||
yield_now().await;
|
||||
|
||||
runner.quit().await.unwrap();
|
||||
sec_runner.quit().await.unwrap();
|
||||
yield_now().await;
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_run_program_id() {
|
||||
let (sections, mut sec_runner, _) = make_sections_and_runner();
|
||||
let mut runner = ProgramRunner::new(sec_runner.clone());
|
||||
let mut prog_events = runner.subscribe().await.unwrap();
|
||||
|
||||
let program1: ProgramRef = Program {
|
||||
id: 1,
|
||||
name: "Program 1".into(),
|
||||
sequence: vec![
|
||||
ProgramItem {
|
||||
section_id: 2,
|
||||
duration: Duration::from_secs(10),
|
||||
},
|
||||
],
|
||||
}
|
||||
.into();
|
||||
let program2: ProgramRef = Program {
|
||||
id: 2,
|
||||
name: "Program 2".into(),
|
||||
sequence: vec![
|
||||
ProgramItem {
|
||||
section_id: 2,
|
||||
duration: Duration::from_secs(10),
|
||||
},
|
||||
],
|
||||
}
|
||||
.into();
|
||||
let programs = ordmap![ 1 => program1, 2 => program2 ];
|
||||
|
||||
runner.update_sections(sections.clone()).await.unwrap();
|
||||
runner.update_programs(programs).await.unwrap();
|
||||
|
||||
// First try a non-existant program id
|
||||
runner.run_program_id(3).await.unwrap();
|
||||
yield_now().await;
|
||||
assert!(matches!(
|
||||
prog_events.try_recv(),
|
||||
Err(broadcast::TryRecvError::Empty)
|
||||
));
|
||||
|
||||
runner.run_program_id(1).await.unwrap();
|
||||
yield_now().await;
|
||||
assert!(matches!(
|
||||
prog_events.try_recv().unwrap(),
|
||||
ProgramEvent::RunStart(prog)
|
||||
if prog.id == 1
|
||||
));
|
||||
|
||||
tokio::time::pause();
|
||||
assert!(matches!(
|
||||
prog_events.recv().await.unwrap(),
|
||||
ProgramEvent::RunFinish(prog)
|
||||
if prog.id == 1
|
||||
));
|
||||
runner.run_program_id(1).await.unwrap();
|
||||
yield_now().await;
|
||||
assert!(matches!(
|
||||
prog_events.try_recv().unwrap(),
|
||||
ProgramEvent::RunStart(prog)
|
||||
if prog.id == 1
|
||||
));
|
||||
|
||||
assert!(matches!(
|
||||
prog_events.recv().await.unwrap(),
|
||||
ProgramEvent::RunFinish(prog)
|
||||
if prog.id == 1
|
||||
));
|
||||
|
||||
runner.quit().await.unwrap();
|
||||
sec_runner.quit().await.unwrap();
|
||||
yield_now().await;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user