mod fakes;
use fakes::TerminalEvent::*;
use fakes::{
create_fake_lookup_addr, create_fake_receive_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;
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()
}
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);
<