From 3e1b6d18bcc0a678c1da1be4a8bf53c19fbb98bd Mon Sep 17 00:00:00 2001 From: Aram Drevekenin Date: Wed, 9 Oct 2019 21:53:23 +0200 Subject: test(ui): new details and responsive layout --- src/tests/fakes/fake_input.rs | 10 +- src/tests/fakes/fake_output.rs | 23 +- src/tests/mod.rs | 407 ++++++++++++++++++++- src/tests/snapshots/tests__basic_startup.snap | 8 +- .../snapshots/tests__bi_directional_traffic-2.snap | 8 +- .../snapshots/tests__bi_directional_traffic.snap | 8 +- ...tests__layout_full_width_under_30_height-2.snap | 34 ++ .../tests__layout_full_width_under_30_height.snap | 34 ++ ...ests__layout_under_120_width_full_height-2.snap | 55 +++ .../tests__layout_under_120_width_full_height.snap | 55 +++ ...__layout_under_120_width_under_30_height-2.snap | 34 ++ ...ts__layout_under_120_width_under_30_height.snap | 34 ++ ...layout_under_120_width_under_full_height-2.snap | 55 +++ ...__layout_under_120_width_under_full_height.snap | 55 +++ ...ests__layout_under_150_width_full_height-2.snap | 55 +++ .../tests__layout_under_150_width_full_height.snap | 55 +++ ...__layout_under_150_width_under_30_height-2.snap | 34 ++ ...ts__layout_under_150_width_under_30_height.snap | 34 ++ ...sts__multiple_connections_from_remote_ip-2.snap | 10 +- ...tests__multiple_connections_from_remote_ip.snap | 8 +- ...ts_of_traffic_from_different_connections-2.snap | 12 +- ...kets_of_traffic_from_different_connections.snap | 8 +- ...ackets_of_traffic_from_single_connection-2.snap | 8 +- ..._packets_of_traffic_from_single_connection.snap | 8 +- ...iple_processes_with_multiple_connections-2.snap | 20 +- ...ltiple_processes_with_multiple_connections.snap | 8 +- .../snapshots/tests__one_packet_of_traffic-2.snap | 8 +- .../snapshots/tests__one_packet_of_traffic.snap | 8 +- ...s__one_process_with_multiple_connections-2.snap | 12 +- ...sts__one_process_with_multiple_connections.snap | 8 +- ...ustained_traffic_from_multiple_processes-2.snap | 12 +- ..._sustained_traffic_from_multiple_processes.snap | 12 +- ...c_from_multiple_processes_bi_directional-2.snap | 12 +- ...fic_from_multiple_processes_bi_directional.snap | 12 +- ...ests__sustained_traffic_from_one_process-2.snap | 8 +- .../tests__sustained_traffic_from_one_process.snap | 8 +- .../tests__traffic_with_host_names-2.snap | 12 +- .../snapshots/tests__traffic_with_host_names.snap | 12 +- .../tests__traffic_with_winch_event-3.snap | 6 +- .../snapshots/tests__traffic_with_winch_event.snap | 6 +- 40 files changed, 1070 insertions(+), 146 deletions(-) create mode 100644 src/tests/snapshots/tests__layout_full_width_under_30_height-2.snap create mode 100644 src/tests/snapshots/tests__layout_full_width_under_30_height.snap create mode 100644 src/tests/snapshots/tests__layout_under_120_width_full_height-2.snap create mode 100644 src/tests/snapshots/tests__layout_under_120_width_full_height.snap create mode 100644 src/tests/snapshots/tests__layout_under_120_width_under_30_height-2.snap create mode 100644 src/tests/snapshots/tests__layout_under_120_width_under_30_height.snap create mode 100644 src/tests/snapshots/tests__layout_under_120_width_under_full_height-2.snap create mode 100644 src/tests/snapshots/tests__layout_under_120_width_under_full_height.snap create mode 100644 src/tests/snapshots/tests__layout_under_150_width_full_height-2.snap create mode 100644 src/tests/snapshots/tests__layout_under_150_width_full_height.snap create mode 100644 src/tests/snapshots/tests__layout_under_150_width_under_30_height-2.snap create mode 100644 src/tests/snapshots/tests__layout_under_150_width_under_30_height.snap diff --git a/src/tests/fakes/fake_input.rs b/src/tests/fakes/fake_input.rs index ea1f34c..b45587b 100644 --- a/src/tests/fakes/fake_input.rs +++ b/src/tests/fakes/fake_input.rs @@ -89,8 +89,8 @@ pub fn get_open_sockets() -> HashMap { let mut open_sockets = HashMap::new(); open_sockets.insert( Connection::new( - SocketAddr::new(IpAddr::V4(Ipv4Addr::new(10, 0, 0, 2)), 443), SocketAddr::new(IpAddr::V4(Ipv4Addr::new(1, 1, 1, 1)), 12345), + 443, Protocol::Tcp, ) .unwrap(), @@ -98,8 +98,8 @@ pub fn get_open_sockets() -> HashMap { ); open_sockets.insert( Connection::new( - SocketAddr::new(IpAddr::V4(Ipv4Addr::new(10, 0, 0, 2)), 443), SocketAddr::new(IpAddr::V4(Ipv4Addr::new(2, 2, 2, 2)), 54321), + 443, Protocol::Tcp, ) .unwrap(), @@ -107,8 +107,8 @@ pub fn get_open_sockets() -> HashMap { ); open_sockets.insert( Connection::new( - SocketAddr::new(IpAddr::V4(Ipv4Addr::new(10, 0, 0, 2)), 443), SocketAddr::new(IpAddr::V4(Ipv4Addr::new(3, 3, 3, 3)), 1337), + 443, Protocol::Tcp, ) .unwrap(), @@ -116,8 +116,8 @@ pub fn get_open_sockets() -> HashMap { ); open_sockets.insert( Connection::new( - SocketAddr::new(IpAddr::V4(Ipv4Addr::new(10, 0, 0, 2)), 443), SocketAddr::new(IpAddr::V4(Ipv4Addr::new(4, 4, 4, 4)), 1337), + 443, Protocol::Tcp, ) .unwrap(), @@ -125,8 +125,8 @@ pub fn get_open_sockets() -> HashMap { ); open_sockets.insert( Connection::new( - SocketAddr::new(IpAddr::V4(Ipv4Addr::new(10, 0, 0, 2)), 443), SocketAddr::new(IpAddr::V4(Ipv4Addr::new(1, 1, 1, 1)), 12346), + 443, Protocol::Tcp, ) .unwrap(), diff --git a/src/tests/fakes/fake_output.rs b/src/tests/fakes/fake_output.rs index 6fb356c..2112371 100644 --- a/src/tests/fakes/fake_output.rs +++ b/src/tests/fakes/fake_output.rs @@ -18,20 +18,24 @@ pub enum TerminalEvent { pub struct TestBackend { pub events: Arc>>, pub draw_events: Arc>>, - terminal_width: u16, - terminal_height: u16, + terminal_width: Arc>, + terminal_height: Arc>, } impl TestBackend { pub fn new( log: Arc>>, draw_log: Arc>>, + terminal_width: Arc>, // 190 + terminal_height: Arc>, // 50 ) -> TestBackend { TestBackend { events: log, draw_events: draw_log, - terminal_width: 190, - terminal_height: 50, + terminal_width, + terminal_height, +// terminal_width: 190, +// terminal_height: 50, } } } @@ -78,8 +82,10 @@ impl Backend for TestBackend { for (x, y, cell) in content { coordinates.insert(Point { x, y }, cell); } - for y in 0..self.terminal_height { - for x in 0..self.terminal_width { + let terminal_height = self.terminal_height.lock().unwrap(); + let terminal_width = self.terminal_width.lock().unwrap(); + for y in 0..*terminal_height { + for x in 0..*terminal_width { match coordinates.get(&Point { x, y }) { Some(cell) => { // this will contain no style information at all @@ -98,7 +104,10 @@ impl Backend for TestBackend { } fn size(&self) -> io::Result { - Ok(Rect::new(0, 0, self.terminal_width, self.terminal_height)) + let terminal_height = self.terminal_height.lock().unwrap(); + let terminal_width = self.terminal_width.lock().unwrap(); + + Ok(Rect::new(0, 0, *terminal_width, *terminal_height)) } fn flush(&mut self) -> io::Result<()> { diff --git a/src/tests/mod.rs b/src/tests/mod.rs index 853a056..bb6da95 100644 --- a/src/tests/mod.rs +++ b/src/tests/mod.rs @@ -59,10 +59,12 @@ fn basic_startup() { None, // sleep ]); + let terminal_width = Arc::new(Mutex::new(190)); + let terminal_height = Arc::new(Mutex::new(50)); let terminal_events = LogWithMirror::new(Vec::new()); let terminal_draw_events = LogWithMirror::new(Vec::new()); - let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write); + let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write, terminal_width, terminal_height); let network_interface = get_interface(); let lookup_addr = create_fake_lookup_addr(HashMap::new()); let receive_winch = Box::new(create_fake_receive_winch(false)); @@ -102,10 +104,12 @@ fn one_packet_of_traffic() { b"I am a fake tcp packet", ))]); + let terminal_width = Arc::new(Mutex::new(190)); + let terminal_height = Arc::new(Mutex::new(50)); let terminal_events = LogWithMirror::new(Vec::new()); let terminal_draw_events = LogWithMirror::new(Vec::new()); - let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write); + let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write, terminal_width, terminal_height); let network_interface = get_interface(); let lookup_addr = create_fake_lookup_addr(HashMap::new()); let receive_winch = Box::new(create_fake_receive_winch(false)); @@ -157,10 +161,12 @@ fn bi_directional_traffic() { )), ]); + let terminal_width = Arc::new(Mutex::new(190)); + let terminal_height = Arc::new(Mutex::new(50)); let terminal_events = LogWithMirror::new(Vec::new()); let terminal_draw_events = LogWithMirror::new(Vec::new()); - let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write); + let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write, terminal_width, terminal_height); let network_interface = get_interface(); let lookup_addr = create_fake_lookup_addr(HashMap::new()); let receive_winch = Box::new(create_fake_receive_winch(false)); @@ -212,10 +218,12 @@ fn multiple_packets_of_traffic_from_different_connections() { )), ]); + let terminal_width = Arc::new(Mutex::new(190)); + let terminal_height = Arc::new(Mutex::new(50)); let terminal_events = LogWithMirror::new(Vec::new()); let terminal_draw_events = LogWithMirror::new(Vec::new()); - let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write); + let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write, terminal_width, terminal_height); let receive_winch = Box::new(create_fake_receive_winch(false)); let network_interface = get_interface(); let lookup_addr = create_fake_lookup_addr(HashMap::new()); @@ -267,10 +275,12 @@ fn multiple_packets_of_traffic_from_single_connection() { )), ]); + let terminal_width = Arc::new(Mutex::new(190)); + let terminal_height = Arc::new(Mutex::new(50)); let terminal_events = LogWithMirror::new(Vec::new()); let terminal_draw_events = LogWithMirror::new(Vec::new()); - let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write); + let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write, terminal_width, terminal_height); let network_interface = get_interface(); let lookup_addr = create_fake_lookup_addr(HashMap::new()); let receive_winch = Box::new(create_fake_receive_winch(false)); @@ -322,10 +332,12 @@ fn one_process_with_multiple_connections() { )), ]); + let terminal_width = Arc::new(Mutex::new(190)); + let terminal_height = Arc::new(Mutex::new(50)); let terminal_events = LogWithMirror::new(Vec::new()); let terminal_draw_events = LogWithMirror::new(Vec::new()); - let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write); + let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write, terminal_width, terminal_height); let network_interface = get_interface(); let lookup_addr = create_fake_lookup_addr(HashMap::new()); let receive_winch = Box::new(create_fake_receive_winch(false)); @@ -391,10 +403,12 @@ fn multiple_processes_with_multiple_connections() { )), ]); + let terminal_width = Arc::new(Mutex::new(190)); + let terminal_height = Arc::new(Mutex::new(50)); let terminal_events = LogWithMirror::new(Vec::new()); let terminal_draw_events = LogWithMirror::new(Vec::new()); - let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write); + let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write, terminal_width, terminal_height); let network_interface = get_interface(); let lookup_addr = create_fake_lookup_addr(HashMap::new()); let receive_winch = Box::new(create_fake_receive_winch(false)); @@ -446,10 +460,12 @@ fn multiple_connections_from_remote_ip() { )), ]); + let terminal_width = Arc::new(Mutex::new(190)); + let terminal_height = Arc::new(Mutex::new(50)); let terminal_events = LogWithMirror::new(Vec::new()); let terminal_draw_events = LogWithMirror::new(Vec::new()); - let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write); + let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write, terminal_width, terminal_height); let network_interface = get_interface(); let lookup_addr = create_fake_lookup_addr(HashMap::new()); let receive_winch = Box::new(create_fake_receive_winch(false)); @@ -503,10 +519,12 @@ fn sustained_traffic_from_one_process() { )), ]); + let terminal_width = Arc::new(Mutex::new(190)); + let terminal_height = Arc::new(Mutex::new(50)); let terminal_events = LogWithMirror::new(Vec::new()); let terminal_draw_events = LogWithMirror::new(Vec::new()); - let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write); + let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write, terminal_width, terminal_height); let network_interface = get_interface(); let lookup_addr = create_fake_lookup_addr(HashMap::new()); let receive_winch = Box::new(create_fake_receive_winch(false)); @@ -574,10 +592,12 @@ fn sustained_traffic_from_multiple_processes() { )), ]); + let terminal_width = Arc::new(Mutex::new(190)); + let terminal_height = Arc::new(Mutex::new(50)); let terminal_events = LogWithMirror::new(Vec::new()); let terminal_draw_events = LogWithMirror::new(Vec::new()); - let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write); + let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write, terminal_width, terminal_height); let network_interface = get_interface(); let lookup_addr = create_fake_lookup_addr(HashMap::new()); let receive_winch = Box::new(create_fake_receive_winch(false)); @@ -673,10 +693,12 @@ fn sustained_traffic_from_multiple_processes_bi_directional() { )), ]); + let terminal_width = Arc::new(Mutex::new(190)); + let terminal_height = Arc::new(Mutex::new(50)); let terminal_events = LogWithMirror::new(Vec::new()); let terminal_draw_events = LogWithMirror::new(Vec::new()); - let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write); + let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write, terminal_width, terminal_height); let network_interface = get_interface(); let lookup_addr = create_fake_lookup_addr(HashMap::new()); let receive_winch = Box::new(create_fake_receive_winch(false)); @@ -772,10 +794,12 @@ fn traffic_with_host_names() { )), ]); + let terminal_width = Arc::new(Mutex::new(190)); + let terminal_height = Arc::new(Mutex::new(50)); let terminal_events = LogWithMirror::new(Vec::new()); let terminal_draw_events = LogWithMirror::new(Vec::new()); - let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write); + let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write, terminal_width, terminal_height); let network_interface = get_interface(); let mut ips_to_hostnames = HashMap::new(); ips_to_hostnames.insert( @@ -831,10 +855,12 @@ fn traffic_with_winch_event() { b"I am a fake tcp packet", ))]); + let terminal_width = Arc::new(Mutex::new(190)); + let terminal_height = Arc::new(Mutex::new(50)); let terminal_events = LogWithMirror::new(Vec::new()); let terminal_draw_events = LogWithMirror::new(Vec::new()); - let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write); + let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write, terminal_width, terminal_height); let network_interface = get_interface(); let lookup_addr = create_fake_lookup_addr(HashMap::new()); let receive_winch = Box::new(create_fake_receive_winch(true)); @@ -862,3 +888,358 @@ fn traffic_with_winch_event() { assert_snapshot!(&terminal_draw_events_mirror[1]); assert_snapshot!(&terminal_draw_events_mirror[2]); } + +#[test] +fn layout_full_width_under_30_height() { + let keyboard_events = Box::new(KeyboardEvents::new(vec![ + None, // sleep + None, // sleep + Some(Event::Key(Key::Ctrl('c'))), + ])); + let network_frames = 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", + )), + Some(build_tcp_packet( + "3.3.3.3", + "10.0.0.2", + 1337, + 443, + b"Awesome, I'm from 3.3.3.3", + )), + Some(build_tcp_packet( + "2.2.2.2", + "10.0.0.2", + 54321, + 443, + b"You know, 2.2.2.2 is really nice!", + )), + Some(build_tcp_packet( + "4.4.4.4", + "10.0.0.2", + 1337, + 443, + b"I'm partial to 4.4.4.4", + )), + ]); + + let terminal_width = Arc::new(Mutex::new(190)); + let terminal_height = Arc::new(Mutex::new(29)); + let terminal_events = LogWithMirror::new(Vec::new()); + let terminal_draw_events = LogWithMirror::new(Vec::new()); + + let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write, terminal_width, terminal_height); + let network_interface = get_interface(); + let lookup_addr = create_fake_lookup_addr(HashMap::new()); + let receive_winch = Box::new(create_fake_receive_winch(false)); + + let os_input = crate::OsInput { + network_interface, + network_frames, + get_open_sockets, + keyboard_events, + lookup_addr, + receive_winch, + }; + crate::start(backend, os_input); + + let terminal_events_mirror = terminal_events.mirror.lock().unwrap(); + let terminal_draw_events_mirror = terminal_draw_events.mirror.lock().unwrap(); + + let expected_terminal_events = vec![ + Clear, HideCursor, Draw, Flush, Draw, Flush, Clear, ShowCursor, + ]; + assert_eq!(&terminal_events_mirror[..], &expected_terminal_events[..]); + + assert_eq!(terminal_draw_events_mirror.len(), 2); + assert_snapshot!(&terminal_draw_events_mirror[0]); + assert_snapshot!(&terminal_draw_events_mirror[1]); +} + +#[test] +fn layout_under_150_width_full_height() { + let keyboard_events = Box::new(KeyboardEvents::new(vec![ + None, // sleep + None, // sleep + Some(Event::Key(Key::Ctrl('c'))), + ])); + let network_frames = 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", + )), + Some(build_tcp_packet( + "3.3.3.3", + "10.0.0.2", + 1337, + 443, + b"Awesome, I'm from 3.3.3.3", + )), + Some(build_tcp_packet( + "2.2.2.2", + "10.0.0.2", + 54321, + 443, + b"You know, 2.2.2.2 is really nice!", + )), + Some(build_tcp_packet( + "4.4.4.4", + "10.0.0.2", + 1337, + 443, + b"I'm partial to 4.4.4.4", + )), + ]); + + let terminal_width = Arc::new(Mutex::new(149)); + let terminal_height = Arc::new(Mutex::new(50)); + let terminal_events = LogWithMirror::new(Vec::new()); + let terminal_draw_events = LogWithMirror::new(Vec::new()); + + let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write, terminal_width, terminal_height); + let network_interface = get_interface(); + let lookup_addr = create_fake_lookup_addr(HashMap::new()); + let receive_winch = Box::new(create_fake_receive_winch(false)); + + let os_input = crate::OsInput { + network_interface, + network_frames, + get_open_sockets, + keyboard_events, + lookup_addr, + receive_winch, + }; + crate::start(backend, os_input); + + let terminal_events_mirror = terminal_events.mirror.lock().unwrap(); + let terminal_draw_events_mirror = terminal_draw_events.mirror.lock().unwrap(); + + let expected_terminal_events = vec![ + Clear, HideCursor, Draw, Flush, Draw, Flush, Clear, ShowCursor, + ]; + assert_eq!(&terminal_events_mirror[..], &expected_terminal_events[..]); + + assert_eq!(terminal_draw_events_mirror.len(), 2); + assert_snapshot!(&terminal_draw_events_mirror[0]); + assert_snapshot!(&terminal_draw_events_mirror[1]); +} + +#[test] +fn layout_under_150_width_under_30_height () { + let keyboard_events = Box::new(KeyboardEvents::new(vec![ + None, // sleep + None, // sleep + Some(Event::Key(Key::Ctrl('c'))), + ])); + let network_frames = 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", + )), + Some(build_tcp_packet( + "3.3.3.3", + "10.0.0.2", + 1337, + 443, + b"Awesome, I'm from 3.3.3.3", + )), + Some(build_tcp_packet( + "2.2.2.2", + "10.0.0.2", + 54321, + 443, + b"You know, 2.2.2.2 is really nice!", + )), + Some(build_tcp_packet( + "4.4.4.4", + "10.0.0.2", + 1337, + 443, + b"I'm partial to 4.4.4.4", + )), + ]); + + let terminal_width = Arc::new(Mutex::new(149)); + let terminal_height = Arc::new(Mutex::new(29)); + let terminal_events = LogWithMirror::new(Vec::new()); + let terminal_draw_events = LogWithMirror::new(Vec::new()); + + let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write, terminal_width, terminal_height); + let network_interface = get_interface(); + let lookup_addr = create_fake_lookup_addr(HashMap::new()); + let receive_winch = Box::new(create_fake_receive_winch(false)); + + let os_input = crate::OsInput { + network_interface, + network_frames, + get_open_sockets, + keyboard_events, + lookup_addr, + receive_winch, + }; + crate::start(backend, os_input); + + let terminal_events_mirror = terminal_events.mirror.lock().unwrap(); + let terminal_draw_events_mirror = terminal_draw_events.mirror.lock().unwrap(); + + let expected_terminal_events = vec![ + Clear, HideCursor, Draw, Flush, Draw, Flush, Clear, ShowCursor, + ]; + assert_eq!(&terminal_events_mirror[..], &expected_terminal_events[..]); + + assert_eq!(terminal_draw_events_mirror.len(), 2); + assert_snapshot!(&terminal_draw_events_mirror[0]); + assert_snapshot!(&terminal_draw_events_mirror[1]); +} + +#[test] +fn layout_under_120_width_full_height () { + let keyboard_events = Box::new(KeyboardEvents::new(vec![ + None, // sleep + None, // sleep + Some(Event::Key(Key::Ctrl('c'))), + ])); + let network_frames = 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", + )), + Some(build_tcp_packet( + "3.3.3.3", + "10.0.0.2", + 1337, + 443, + b"Awesome, I'm from 3.3.3.3", + )), + Some(build_tcp_packet( + "2.2.2.2", + "10.0.0.2", + 54321, + 443, + b"You know, 2.2.2.2 is really nice!", + )), + Some(build_tcp_packet( + "4.4.4.4", + "10.0.0.2", + 1337, + 443, + b"I'm partial to 4.4.4.4", + )), + ]); + + let terminal_width = Arc::new(Mutex::new(119)); + let terminal_height = Arc::new(Mutex::new(50)); + let terminal_events = LogWithMirror::new(Vec::new()); + let terminal_draw_events = LogWithMirror::new(Vec::new()); + + let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write, terminal_width, terminal_height); + let network_interface = get_interface(); + let lookup_addr = create_fake_lookup_addr(HashMap::new()); + let receive_winch = Box::new(create_fake_receive_winch(false)); + + let os_input = crate::OsInput { + network_interface, + network_frames, + get_open_sockets, + keyboard_events, + lookup_addr, + receive_winch, + }; + crate::start(backend, os_input); + + let terminal_events_mirror = terminal_events.mirror.lock().unwrap(); + let terminal_draw_events_mirror = terminal_draw_events.mirror.lock().unwrap(); + + let expected_terminal_events = vec![ + Clear, HideCursor, Draw, Flush, Draw, Flush, Clear, ShowCursor, + ]; + assert_eq!(&terminal_events_mirror[..], &expected_terminal_events[..]); + + assert_eq!(terminal_draw_events_mirror.len(), 2); + assert_snapshot!(&terminal_draw_events_mirror[0]); + assert_snapshot!(&terminal_draw_events_mirror[1]); +} + +#[test] +fn layout_under_120_width_under_30_height () { + let keyboard_events = Box::new(KeyboardEvents::new(vec![ + None, // sleep + None, // sleep + Some(Event::Key(Key::Ctrl('c'))), + ])); + let network_frames = 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", + )), + Some(build_tcp_packet( + "3.3.3.3", + "10.0.0.2", + 1337, + 443, + b"Awesome, I'm from 3.3.3.3", + )), + Some(build_tcp_packet( + "2.2.2.2", + "10.0.0.2", + 54321, + 443, + b"You know, 2.2.2.2 is really nice!", + )), + Some(build_tcp_packet( + "4.4.4.4", + "10.0.0.2", + 1337, + 443, + b"I'm partial to 4.4.4.4", + )), + ]); + + let terminal_width = Arc::new(Mutex::new(119)); + let terminal_height = Arc::new(Mutex::new(29)); + let terminal_events = LogWithMirror::new(Vec::new()); + let terminal_draw_events = LogWithMirror::new(Vec::new()); + + let backend = TestBackend::new(terminal_events.write, terminal_draw_events.write, terminal_width, terminal_height); + let network_interface = get_interface(); + let lookup_addr = create_fake_lookup_addr(HashMap::new()); + let receive_winch = Box::new(create_fake_receive_winch(false)); + + let os_input = crate::OsInput { + network_interface, + network_frames, + get_open_sockets, + keyboard_events, + lookup_addr, + receive_winch, + }; + crate::start(backend, os_input); + + let terminal_events_mirror = terminal_events.mirror.lock().unwrap(); + let terminal_draw_events_mirror = terminal_draw_events.mirror.lock().unwrap(); + + let expected_terminal_events = vec![ + Clear, HideCursor, Draw, Flush, Draw, Flush, Clear, ShowCursor, + ]; + assert_eq!(&terminal_events_mirror[..], &expected_terminal_events[..]); + + assert_eq!(terminal_draw_events_mirror.len(), 2); + assert_snapshot!(&terminal_draw_events_mirror[0]); + assert_snapshot!(&terminal_draw_events_mirror[1]); +} diff --git a/src/tests/snapshots/tests__basic_startup.snap b/src/tests/snapshots/tests__basic_startup.snap index c2ae8cb..f6a6bed 100644 --- a/src/tests/snapshots/tests__basic_startup.snap +++ b/src/tests/snapshots/tests__basic_startup.snap @@ -1,10 +1,10 @@ --- -source: tests/cli.rs +source: src/tests/mod.rs expression: "&terminal_draw_events_mirror[0]" --- + Total Rate Up/Down: 0Bps/0Bps ┌Utilization by connection────────────────────────────────────────────────────────────────────┐┌Utilization by process name──────────────────────────────────────────────────────────────────┐ -│Connection Processes Total Bytes Up/Down ││Process Connection Count Total Bytes │ -│ ││ │ +│Connection Process Rate Up/Down ││Process Connection count Rate Up/Down │ │ ││ │ │ ││ │ │ ││ │ @@ -28,7 +28,7 @@ expression: "&terminal_draw_events_mirror[0]" │ ││ │ │ │└─────────────────────────────────────────────────────────────────────────────────────────────┘ │ │┌Utilization by remote ip─────────────────────────────────────────────────────────────────────┐ -│ ││Remote Address Connection Count Total Bytes │ +│ ││Remote Address Connection Count Rate Up/Down │ │ ││ │ │ ││ │ │ ││ │ diff --git a/src/tests/snapshots/tests__bi_directional_traffic-2.snap b/src/tests/snapshots/tests__bi_directional_traffic-2.snap index e90a2f8..aa5df7d 100644 --- a/src/tests/snapshots/tests__bi_directional_traffic-2.snap +++ b/src/tests/snapshots/tests__bi_directional_traffic-2.snap @@ -1,11 +1,12 @@ --- -source: tests/cli.rs +source: src/tests/mod.rs expression: "&terminal_draw_events_mirror[1]" --- + 29Bps/31Bps - 10.0.0.2:443 => 1.1.1.1:12345 (tcp) 1 29Bps/31Bps 1 1 29Bps/31Bps + :443 => 1.1.1.1:12345 (tcp) 1 29Bps/31Bps 1 1 29Bps/31Bps @@ -29,8 +30,7 @@ expression: "&terminal_draw_events_mirror[1]" - - 1.1.1.1 1 29Bps/31Bps + 1.1.1.1 1 29Bps/31Bps diff --git a/src/tests/snapshots/tests__bi_directional_traffic.snap b/src/tests/snapshots/tests__bi_directional_traffic.snap index c2ae8cb..f6a6bed 100644 --- a/src/tests/snapshots/tests__bi_directional_traffic.snap +++ b/src/tests/snapshots/tests__bi_directional_traffic.snap @@ -1,10 +1,10 @@ --- -source: tests/cli.rs +source: src/tests/mod.rs expression: "&terminal_draw_events_mirror[0]" --- + Total Rate Up/Down: 0Bps/0Bps ┌Utilization by connection────────────────────────────────────────────────────────────────────┐┌Utilization by process name──────────────────────────────────────────────────────────────────┐ -│Connection Processes Total Bytes Up/Down ││Process Connection Count Total Bytes │ -│ ││ │ +│Connection Process Rate Up/Down ││Process Connection count Rate Up/Down │ │ ││ │ │ ││ │ │ ││ │ @@ -28,7 +28,7 @@ expression: "&terminal_draw_events_mirror[0]" │ ││ │ │ │└─────────────────────────────────────────────────────────────────────────────────────────────┘ │ │┌Utilization by remote ip─────────────────────────────────────────────────────────────────────┐ -│ ││Remote Address Connection Count Total Bytes │ +│ ││Remote Address Connection Count Rate Up/Down │ │ ││ │ │ ││ │ │ ││ │ diff --git a/src/tests/snapshots/tests__layout_full_width_under_30_height-2.snap b/src/tests/snapshots/tests__layout_full_width_under_30_height-2.snap new file mode 100644 index 0000000..8d1822a --- /dev/null +++ b/src/tests/snapshots/tests__layout_full_width_under_30_height-2.snap @@ -0,0 +1,34 @@ +--- +source: src/tests/mod.rs +expression: "&terminal_draw_events_mirror[1]" +--- + 104Bps + + + + :443 => 2.2.2.2:54321 (tcp) 4 0Bps/33Bps 4 1 0Bps/33Bps + :443 => 3.3.3.3:1337 (tcp) 5 0Bps/25Bps 5 1 0Bps/25Bps + :443 => 1.1.1.1:12345 (tcp) 1 0Bps/24Bps 1 1 0Bps/24Bps + :443 => 4.4.4.4:1337 (tcp) 2 0Bps/22Bps 2 1 0Bps/22Bps + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/snapshots/tests__layout_full_width_under_30_height.snap b/src/tests/snapshots/tests__layout_full_width_under_30_height.snap new file mode 100644 index 0000000..bc69fdd --- /dev/null +++ b/src/tests/snapshots/tests__layout_full_width_under_30_height.snap @@ -0,0 +1,34 @@ +--- +source: src/tests/mod.rs +expression: "&terminal_draw_events_mirror[0]" +--- + Total Rate Up/Down: 0Bps/0Bps +┌Utilization by connection────────────────────────────────────────────────────────────────────┐┌Utilization by process name──────────────────────────────────────────────────────────────────┐ +│Connection Process Rate Up/Down ││Process Connection count Rate Up/Down │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +│ ││ │ +└─────────────────────────────────────────────────────────────────────────────────────────────┘└─────────────────────────────────────────────────────────────────────────────────────────────┘ + diff --git a/src/tests/snapshots/tests__layout_under_120_width_full_height-2.snap b/src/tests/snapshots/tests__layout_under_120_width_full_height-2.snap new file mode 100644 index 0000000..49a5f0c --- /dev/null +++ b/src/tests/snapshots/tests__layout_under_120_width_full_height-2.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/mod.rs +expression: "&terminal_draw_events_mirror[1]" +--- + 104Bps + + + + :443 => 2.2.2.2:54321 (tcp) 4 0Bps/33Bps + :443 => 3.3.3.3:1337 (tcp) 5 0Bps/25Bps + :443 => 1.1.1.1:12345 (tcp) 1 0Bps/24Bps + :443 => 4.4.4.4:1337 (tcp) 2 0Bps/22Bps + + + + + + + + + + + + + + + + + + + + + 4 1 0Bps/33Bps + 5 1 0Bps/25Bps + 1 1 0Bps/24Bps + 2 1 0Bps/22Bps + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/snapshots/tests__layout_under_120_width_full_height.snap b/src/tests/snapshots/tests__layout_under_120_width_full_height.snap new file mode 100644 index 0000000..0de82cd --- /dev/null +++ b/src/tests/snapshots/tests__layout_under_120_width_full_height.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/mod.rs +expression: "&terminal_draw_events_mirror[0]" +--- + Total Rate Up/Down: 0Bps/0Bps +┌Utilization by connection────────────────────────────────────────────────────────────────────────────────────────────┐ +│Connection Process Rate Up/Down │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +┌Utilization by process name──────────────────────────────────────────────────────────────────────────────────────────┐ +│Process Connection count Rate Up/Down │ +│ │ +│ │ +│ │ +│