summaryrefslogtreecommitdiffstats
path: root/src/tests
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2019-11-05 20:33:12 +0100
committerAram Drevekenin <aram@poor.dev>2019-11-05 20:33:12 +0100
commit53d165b2a033615e2cce7ab5cc42ff2bf85e50da (patch)
tree1506e6e227d2d2fe622a73539480ec38bfb61c2d /src/tests
parentdb0f4d109403da54574a6469fe676f167c97e2c6 (diff)
feat(raw): machine friendly output
Diffstat (limited to 'src/tests')
-rw-r--r--src/tests/cases/mod.rs2
-rw-r--r--src/tests/cases/raw_mode.rs1115
-rw-r--r--src/tests/cases/snapshots/raw_mode__basic_startup.snap5
-rw-r--r--src/tests/cases/snapshots/raw_mode__bi_directional_traffic.snap8
-rw-r--r--src/tests/cases/snapshots/raw_mode__multiple_connections_from_remote_address.snap10
-rw-r--r--src/tests/cases/snapshots/raw_mode__multiple_packets_of_traffic_from_different_connections.snap11
-rw-r--r--src/tests/cases/snapshots/raw_mode__multiple_packets_of_traffic_from_single_connection.snap8
-rw-r--r--src/tests/cases/snapshots/raw_mode__multiple_processes_with_multiple_connections.snap17
-rw-r--r--src/tests/cases/snapshots/raw_mode__no_resolve_mode.snap17
-rw-r--r--src/tests/cases/snapshots/raw_mode__one_packet_of_traffic.snap8
-rw-r--r--src/tests/cases/snapshots/raw_mode__one_process_with_multiple_connections.snap11
-rw-r--r--src/tests/cases/snapshots/raw_mode__sustained_traffic_from_multiple_processes.snap17
-rw-r--r--src/tests/cases/snapshots/raw_mode__sustained_traffic_from_multiple_processes_bi_directional.snap17
-rw-r--r--src/tests/cases/snapshots/raw_mode__sustained_traffic_from_one_process.snap11
-rw-r--r--src/tests/cases/snapshots/raw_mode__traffic_with_host_names.snap17
-rw-r--r--src/tests/cases/snapshots/ui__basic_startup.snap55
-rw-r--r--src/tests/cases/snapshots/ui__bi_directional_traffic-2.snap55
-rw-r--r--src/tests/cases/snapshots/ui__bi_directional_traffic.snap55
-rw-r--r--src/tests/cases/snapshots/ui__layout_full_width_under_30_height-2.snap34
-rw-r--r--src/tests/cases/snapshots/ui__layout_full_width_under_30_height.snap34
-rw-r--r--src/tests/cases/snapshots/ui__layout_under_120_width_full_height-2.snap55
-rw-r--r--src/tests/cases/snapshots/ui__layout_under_120_width_full_height.snap55
-rw-r--r--src/tests/cases/snapshots/ui__layout_under_120_width_under_30_height-2.snap34
-rw-r--r--src/tests/cases/snapshots/ui__layout_under_120_width_under_30_height.snap34
-rw-r--r--src/tests/cases/snapshots/ui__layout_under_120_width_under_full_height-2.snap55
-rw-r--r--src/tests/cases/snapshots/ui__layout_under_120_width_under_full_height.snap55
-rw-r--r--src/tests/cases/snapshots/ui__layout_under_150_width_full_height-2.snap55
-rw-r--r--src/tests/cases/snapshots/ui__layout_under_150_width_full_height.snap55
-rw-r--r--src/tests/cases/snapshots/ui__layout_under_150_width_under_30_height-2.snap34
-rw-r--r--src/tests/cases/snapshots/ui__layout_under_150_width_under_30_height.snap34
-rw-r--r--src/tests/cases/snapshots/ui__multiple_connections_from_remote_address-2.snap55
-rw-r--r--src/tests/cases/snapshots/ui__multiple_connections_from_remote_address.snap55
-rw-r--r--src/tests/cases/snapshots/ui__multiple_connections_from_remote_ip-2.snap55
-rw-r--r--src/tests/cases/snapshots/ui__multiple_connections_from_remote_ip.snap55
-rw-r--r--src/tests/cases/snapshots/ui__multiple_packets_of_traffic_from_different_connections-2.snap55
-rw-r--r--src/tests/cases/snapshots/ui__multiple_packets_of_traffic_from_different_connections.snap55
-rw-r--r--src/tests/cases/snapshots/ui__multiple_packets_of_traffic_from_single_connection-2.snap55
-rw-r--r--src/tests/cases/snapshots/ui__multiple_packets_of_traffic_from_single_connection.snap55
-rw-r--r--src/tests/cases/snapshots/ui__multiple_processes_with_multiple_connections-2.snap55
-rw-r--r--src/tests/cases/snapshots/ui__multiple_processes_with_multiple_connections.snap55
-rw-r--r--src/tests/cases/snapshots/ui__no_resolve_mode-2.snap55
-rw-r--r--src/tests/cases/snapshots/ui__no_resolve_mode.snap55
-rw-r--r--src/tests/cases/snapshots/ui__one_packet_of_traffic-2.snap55
-rw-r--r--src/tests/cases/snapshots/ui__one_packet_of_traffic.snap55
-rw-r--r--src/tests/cases/snapshots/ui__one_process_with_multiple_connections-2.snap55
-rw-r--r--src/tests/cases/snapshots/ui__one_process_with_multiple_connections.snap55
-rw-r--r--src/tests/cases/snapshots/ui__sustained_traffic_from_multiple_processes-2.snap55
-rw-r--r--src/tests/cases/snapshots/ui__sustained_traffic_from_multiple_processes.snap55
-rw-r--r--src/tests/cases/snapshots/ui__sustained_traffic_from_multiple_processes_bi_directional-2.snap55
-rw-r--r--src/tests/cases/snapshots/ui__sustained_traffic_from_multiple_processes_bi_directional.snap55
-rw-r--r--src/tests/cases/snapshots/ui__sustained_traffic_from_one_process-2.snap55
-rw-r--r--src/tests/cases/snapshots/ui__sustained_traffic_from_one_process.snap55
-rw-r--r--src/tests/cases/snapshots/ui__traffic_with_host_names-2.snap55
-rw-r--r--src/tests/cases/snapshots/ui__traffic_with_host_names.snap55
-rw-r--r--src/tests/cases/snapshots/ui__traffic_with_winch_event-2.snap55
-rw-r--r--src/tests/cases/snapshots/ui__traffic_with_winch_event-3.snap55
-rw-r--r--src/tests/cases/snapshots/ui__traffic_with_winch_event.snap55
-rw-r--r--src/tests/cases/ui.rs1682
-rw-r--r--src/tests/fakes/fake_input.rs2
-rw-r--r--src/tests/mod.rs1373
-rw-r--r--src/tests/snapshots/tests__basic_startup.snap2
-rw-r--r--src/tests/snapshots/tests__bi_directional_traffic.snap2
-rw-r--r--src/tests/snapshots/tests__layout_under_150_width_full_height.snap2
-rw-r--r--src/tests/snapshots/tests__multiple_connections_from_remote_address-2.snap55
-rw-r--r--src/tests/snapshots/tests__multiple_connections_from_remote_address.snap55
-rw-r--r--src/tests/snapshots/tests__multiple_packets_of_traffic_from_different_connections.snap2
-rw-r--r--src/tests/snapshots/tests__multiple_packets_of_traffic_from_single_connection.snap2
-rw-r--r--src/tests/snapshots/tests__multiple_processes_with_multiple_connections.snap2
-rw-r--r--src/tests/snapshots/tests__no_resolve_mode-2.snap55
-rw-r--r--src/tests/snapshots/tests__no_resolve_mode.snap55
-rw-r--r--src/tests/snapshots/tests__one_packet_of_traffic.snap2
-rw-r--r--src/tests/snapshots/tests__one_process_with_multiple_connections.snap2
-rw-r--r--src/tests/snapshots/tests__traffic_with_winch_event.snap2
73 files changed, 5372 insertions, 1381 deletions
diff --git a/src/tests/cases/mod.rs b/src/tests/cases/mod.rs
new file mode 100644
index 0000000..c917d49
--- /dev/null
+++ b/src/tests/cases/mod.rs
@@ -0,0 +1,2 @@
+pub mod ui;
+pub mod raw_mode;
diff --git a/src/tests/cases/raw_mode.rs b/src/tests/cases/raw_mode.rs
new file mode 100644
index 0000000..4e05c3f
--- /dev/null
+++ b/src/tests/cases/raw_mode.rs
@@ -0,0 +1,1115 @@
+use crate::tests::fakes::{
+ create_fake_lookup_addr, create_fake_on_winch, get_interface, get_open_sockets, KeyboardEvents,
+ NetworkFrames, TestBackend,
+};
+
+use ::insta::assert_snapshot;
+use ::std::sync::{Arc, Mutex};
+use ::termion::event::{Event, Key};
+
+use ::std::collections::HashMap;
+use ::std::net::IpAddr;
+
+use packet_builder::payload::PayloadData;
+use packet_builder::*;
+use pnet::packet::Packet;
+use pnet_base::MacAddr;
+
+use ::std::io::Write;
+
+use crate::{start, Opt, OsInputOutput};
+
+fn build_tcp_packet(
+ source_ip: &str,
+ destination_ip: &str,
+ source_port: u16,
+ destination_port: u16,
+ payload: &'static [u8],
+) -> Vec<u8> {
+ let mut pkt_buf = [0u8; 1500];
+ let pkt = packet_builder!(
+ pkt_buf,
+ ether({set_destination => MacAddr(0,0,0,0,0,0), set_source => MacAddr(0,0,0,0,0,0)}) /
+ ipv4({set_source => ipv4addr!(source_ip), set_destination => ipv4addr!(destination_ip) }) /
+ tcp({set_source => source_port, set_destination => destination_port }) /
+ payload(payload)
+ );
+ pkt.packet().to_vec()
+}
+
+fn format_raw_output<'t> (output: Vec<u8>) -> String {
+ let stdout_utf8 = String::from_utf8(output).unwrap();
+ use regex::Regex;
+ let timestamp = Regex::new(r"<\d+>").unwrap();
+ let replaced = timestamp.replace_all(&stdout_utf8, "<TIMESTAMP_REMOVED>");
+ format!("{}", replaced)
+}
+
+struct LogWithMirror<T> {
+ pub write: Arc<Mutex<T>>,
+ pub mirror: Arc<Mutex<T>>,
+}
+
+impl<T> LogWithMirror<T> {
+ pub fn new(log: T) -> Self {
+ let write = Arc::new(Mutex::new(log));
+ let mirror = write.clone();
+ LogWithMirror { write, mirror }
+ }
+}
+
+// #[test]
+// fn basic_startup() {
+// let keyboard_events = Box::new(KeyboardEvents::new(vec![
+// None, // sleep
+// Some(Event::Key(Key::Ctrl('c'))),
+// ]));
+// let network_frames = NetworkFrames::new(vec![
+// 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,
+// terminal_width,
+// terminal_height,
+// );
+// let network_interface = get_interface();
+// let lookup_addr = create_fake_lookup_addr(HashMap::new());
+// let on_winch = create_fake_on_winch(false);
+// let cleanup = Box::new(|| {});
+//
+// let os_input = OsInputOutput {
+// network_interface,
+// network_frames,
+// get_open_sockets,
+// keyboard_events,
+// lookup_addr,
+// on_winch,
+// cleanup,
+// };
+// let opts = Opt {
+// interface: String::from("interface_name"),
+// raw: true,
+// no_resolve: false,
+// };
+// let fake_stdout = Box::new(Vec::new());
+// let clone_stdout = fake_stdout.clone();
+// start(backend, os_input, Box::new(fake_stdout), opts);
+//
+// assert_snapshot!(String::from_utf8(*clone_stdout).unwrap());
+// }
+
+#[test]
+fn one_packet_of_traffic() {
+ 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(
+ "10.0.0.2",
+ "1.1.1.1",
+ 443,
+ 12345,
+ 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,
+ terminal_width,
+ terminal_height,
+ );
+ let network_interface = get_interface();
+ let lookup_addr = create_fake_lookup_addr(HashMap::new());
+ let on_winch = create_fake_on_winch(false);
+ let cleanup = Box::new(|| {});
+ let stdout = Arc::new(Mutex::new(Vec::new()));
+ let write_to_stdout = Box::new({
+ let stdout = stdout.clone();
+ move |output: String| {
+ let mut stdout = stdout.lock().unwrap();
+ writeln!(&mut stdout, "{}", output).unwrap();
+ }
+ });
+
+ let os_input = OsInputOutput {
+ network_interface,
+ network_frames,
+ get_open_sockets,
+ keyboard_events,
+ lookup_addr,
+ on_winch,
+ cleanup,
+ write_to_stdout,
+ };
+ let opts = Opt {
+ interface: String::from("interface_name"),
+ raw: true,
+ no_resolve: false,
+ };
+ start(backend, os_input, opts);
+ let stdout = Arc::try_unwrap(stdout).unwrap().into_inner().unwrap();
+ let formatted = format_raw_output(stdout);
+ assert_snapshot!(formatted);
+}
+
+#[test]
+fn bi_directional_traffic() {
+ 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(
+ "10.0.0.2",
+ "1.1.1.1",
+ 443,
+ 12345,
+ b"I am a fake tcp upload packet",
+ )),
+ Some(build_tcp_packet(
+ "1.1.1.1",
+ "10.0.0.2",
+ 12345,
+ 443,
+ b"I am a fake tcp download 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,
+ terminal_width,
+ terminal_height,
+ );
+ let network_interface = get_interface();
+ let lookup_addr = create_fake_lookup_addr(HashMap::new());
+ let on_winch = create_fake_on_winch(false);
+ let cleanup = Box::new(|| {});
+ let stdout = Arc::new(Mutex::new(Vec::new()));
+ let write_to_stdout = Box::new({
+ let stdout = stdout.clone();
+ move |output: String| {
+ let mut stdout = stdout.lock().unwrap();
+ writeln!(&mut stdout, "{}", output).unwrap();
+ }
+ });
+
+ let os_input = OsInputOutput {
+ network_interface,
+ network_frames,
+ get_open_sockets,
+ keyboard_events,
+ lookup_addr,
+ on_winch,
+ cleanup,
+ write_to_stdout,
+ };
+ let opts = Opt {
+ interface: String::from("interface_name"),
+ raw: true,
+ no_resolve: false,
+ };
+ start(backend, os_input, opts);
+ let stdout = Arc::try_unwrap(stdout).unwrap().into_inner().unwrap();
+ let formatted = format_raw_output(stdout);
+ assert_snapshot!(formatted);
+}
+
+#[test]
+fn multiple_packets_of_traffic_from_different_connections() {
+ 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(
+ "2.2.2.2",
+ "10.0.0.2",
+ 54321,
+ 443,
+ b"I come from 2.2.2.2",
+ )),
+ ]);
+
+ 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,
+ terminal_width,
+ terminal_height,
+ );
+ let on_winch = create_fake_on_winch(false);
+ let cleanup = Box::new(|| {});
+ let network_interface = get_interface();
+ let lookup_addr = create_fake_lookup_addr(HashMap::new());
+ let stdout = Arc::new(Mutex::new(Vec::new()));
+ let write_to_stdout = Box::new({
+ let stdout = stdout.clone();
+ move |output: String| {
+ let mut stdout = stdout.lock().unwrap();
+ writeln!(&mut stdout, "{}", output).unwrap();
+ }
+ });
+
+ let os_input = OsInputOutput {
+ network_interface,
+ network_frames,
+ get_open_sockets,
+ on_winch,
+ cleanup,
+ keyboard_events,
+ lookup_addr,
+ write_to_stdout,
+ };
+ let opts = Opt {
+ interface: String::from("interface_name"),
+ raw: true,
+ no_resolve: false,
+ };
+ start(backend, os_input, opts);
+ let stdout = Arc::try_unwrap(stdout).unwrap().into_inner().unwrap();
+ let formatted = format_raw_output(stdout);
+ assert_snapshot!(formatted);
+}
+
+#[test]
+fn multiple_packets_of_traffic_from_single_connection() {
+ 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(
+ "1.1.1.1",
+ "10.0.0.2",
+ 12345,
+ 443,
+ b"I've come from 1.1.1.1 too!",
+ )),
+ ]);
+
+ 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,
+ terminal_width,
+ terminal_height,
+ );
+ let network_interface = get_interface();
+ let lookup_addr = create_fake_lookup_addr(HashMap::new());
+ let on_winch = create_fake_on_winch(false);
+ let cleanup = Box::new(|| {});
+ let stdout = Arc::new(Mutex::new(Vec::new()));
+ let write_to_stdout = Box::new({
+ let stdout = stdout.clone();
+ move |output: String| {
+ let mut stdout = stdout.lock().unwrap();
+ writeln!(&mut stdout, "{}", output).unwrap();
+ }
+ });
+
+ let os_input = OsInputOutput {
+ network_interface,
+ network_frames,
+ get_open_sockets,
+ keyboard_events,
+ lookup_addr,
+ on_winch,
+ cleanup,
+ write_to_stdout,
+ };
+ let opts = Opt {
+ interface: String::from("interface_name"),
+ raw: true,
+ no_resolve: false,
+ };
+ start(backend, os_input, opts);
+ let stdout = Arc::try_unwrap(stdout).unwrap().into_inner().unwrap();
+ let formatted = format_raw_output(stdout);
+ assert_snapshot!(formatted);
+}
+
+#[test]
+fn one_process_with_multiple_connections() {
+ 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"Funny that, I'm from 3.3.3.3",
+ )),
+ ]);
+
+ let terminal_width = Arc::new(Mutex::new(190));