diff --git a/src/tests/cases/snapshots/ui__pause_by_space-2.snap b/src/tests/cases/snapshots/ui__pause_by_space-2.snap new file mode 100644 index 000000000..204efd1c2 --- /dev/null +++ b/src/tests/cases/snapshots/ui__pause_by_space-2.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[1]" +--- + Total Rate Up / Down: 0Bps / 0Bps [PAUSED] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/ui__pause_by_space-3.snap b/src/tests/cases/snapshots/ui__pause_by_space-3.snap new file mode 100644 index 000000000..d710afbc2 --- /dev/null +++ b/src/tests/cases/snapshots/ui__pause_by_space-3.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[2]" +--- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/ui__pause_by_space-4.snap b/src/tests/cases/snapshots/ui__pause_by_space-4.snap new file mode 100644 index 000000000..5488196df --- /dev/null +++ b/src/tests/cases/snapshots/ui__pause_by_space-4.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[3]" +--- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/ui__pause_by_space-5.snap b/src/tests/cases/snapshots/ui__pause_by_space-5.snap new file mode 100644 index 000000000..1524b669b --- /dev/null +++ b/src/tests/cases/snapshots/ui__pause_by_space-5.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[4]" +--- + Total Rate Up / Down: 0Bps / 0Bps + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/cases/snapshots/ui__pause_by_space.snap b/src/tests/cases/snapshots/ui__pause_by_space.snap new file mode 100644 index 000000000..ec8d97c42 --- /dev/null +++ b/src/tests/cases/snapshots/ui__pause_by_space.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[0]" +--- + Total Rate Up / Down: 0Bps / 0Bps +┌Utilization by process name──────────────────────────────────────────────────────────────────┐┌Utilization by connection────────────────────────────────────────────────────────────────────┐ +│Process Connection count Rate Up / Down ││Connection Process Rate Up / Down │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ │└─────────────────────────────────────────────────────────────────────────────────────────────┘ +│ │┌Utilization by remote address────────────────────────────────────────────────────────────────┐ +│ ││Remote Address Connection Count Rate Up / Down │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +└─────────────────────────────────────────────────────────────────────────────────────────────┘└─────────────────────────────────────────────────────────────────────────────────────────────┘ + diff --git a/src/tests/cases/test_utils.rs b/src/tests/cases/test_utils.rs index 22e6c6341..18440cc1c 100644 --- a/src/tests/cases/test_utils.rs +++ b/src/tests/cases/test_utils.rs @@ -24,9 +24,9 @@ pub fn os_input_output( ) -> OsInputOutput { os_input_output_factory( network_frames, - sleep_num, None, create_fake_dns_client(HashMap::new()), + sleep_and_quit_events(sleep_num), ) } pub fn os_input_output_stdout( @@ -36,9 +36,9 @@ pub fn os_input_output_stdout( ) -> OsInputOutput { os_input_output_factory( network_frames, - sleep_num, stdout, create_fake_dns_client(HashMap::new()), + sleep_and_quit_events(sleep_num), ) } @@ -48,14 +48,19 @@ pub fn os_input_output_dns( stdout: Option>>>, dns_client: Option, ) -> OsInputOutput { - os_input_output_factory(network_frames, sleep_num, stdout, dns_client) + os_input_output_factory( + network_frames, + stdout, + dns_client, + sleep_and_quit_events(sleep_num), + ) } -fn os_input_output_factory( +pub fn os_input_output_factory( network_frames: Vec>, - sleep_num: usize, stdout: Option>>>, dns_client: Option, + keyboard_events: Box + Send>, ) -> OsInputOutput { let on_winch = create_fake_on_winch(false); let cleanup = Box::new(|| {}); @@ -74,7 +79,7 @@ fn os_input_output_factory( network_interfaces: get_interfaces(), network_frames, get_open_sockets, - keyboard_events: sleep_and_quit_events(sleep_num), + keyboard_events, dns_client, on_winch, cleanup, diff --git a/src/tests/cases/ui.rs b/src/tests/cases/ui.rs index cd5aad90b..c5addcf8b 100644 --- a/src/tests/cases/ui.rs +++ b/src/tests/cases/ui.rs @@ -9,13 +9,17 @@ use ::std::collections::HashMap; use ::std::net::IpAddr; use crate::tests::cases::test_utils::{ - opts_ui, os_input_output, sleep_and_quit_events, test_backend_factory, + opts_ui, os_input_output, os_input_output_factory, sleep_and_quit_events, test_backend_factory, }; +use ::termion::event::{Event, Key}; use packet_builder::payload::PayloadData; use packet_builder::*; use pnet_bandwhich_fork::datalink::DataLinkReceiver; use pnet_bandwhich_fork::packet::Packet; use pnet_base::MacAddr; +use std::iter; + +use crate::tests::fakes::KeyboardEvents; use crate::{start, Opt, OsInputOutput}; @@ -59,6 +63,55 @@ fn basic_startup() { assert_snapshot!(&terminal_draw_events_mirror[0]); } +#[test] +fn pause_by_space() { + let network_frames = vec![NetworkFrames::new(vec![ + Some(build_tcp_packet( + "1.1.1.1", + "10.0.0.2", + 12345, + 443, + b"I have come from 1.1.1.1", + )), + None, // sleep + None, // sleep + None, // sleep + Some(build_tcp_packet( + "1.1.1.1", + "10.0.0.2", + 12345, + 443, + b"Same here, but one second later", + )), + ]) as Box]; + + // sleep for 1s, then press space, sleep for 2s, then quit + let mut events: Vec> = iter::repeat(None).take(1).collect(); + events.push(Some(Event::Key(Key::Char(' ')))); + events.push(None); + events.push(None); + events.push(Some(Event::Key(Key::Char(' ')))); + events.push(Some(Event::Key(Key::Ctrl('c')))); + + let events = Box::new(KeyboardEvents::new(events)); + let os_input = os_input_output_factory(network_frames, None, None, events); + let (terminal_events, terminal_draw_events, backend) = test_backend_factory(190, 50); + let opts = opts_ui(); + start(backend, os_input, opts); + let terminal_draw_events_mirror = terminal_draw_events.lock().unwrap(); + let expected_terminal_events = vec![ + Clear, HideCursor, Draw, Flush, Draw, Flush, Draw, Flush, Clear, ShowCursor, + ]; + assert_eq!( + &terminal_events.lock().unwrap()[..], + &expected_terminal_events[..] + ); + assert_eq!(terminal_draw_events_mirror.len(), 3); + assert_snapshot!(&terminal_draw_events_mirror[0]); + assert_snapshot!(&terminal_draw_events_mirror[1]); + assert_snapshot!(&terminal_draw_events_mirror[2]); +} + #[test] fn one_packet_of_traffic() { let network_frames = vec![NetworkFrames::new(vec![Some(build_tcp_packet(