ALPHA: wire is a tool to deploy nixos systems wire.althaea.zone/

add test for handle_rawmode_data

+75 -2
+75 -2
wire/lib/src/commands/interactive.rs
··· 541 541 Ok(()) 542 542 } 543 543 544 - fn handle_rawmode_data( 545 - stderr: &mut std::io::Stderr, 544 + /// Returns Ok(true) if the data indicates the command was started 545 + fn handle_rawmode_data<W: std::io::Write>( 546 + stderr: &mut W, 546 547 buffer: &[u8], 547 548 n: usize, 548 549 raw_mode_buffer: &mut Vec<u8>, ··· 656 657 debug!("stdin_thread: goodbye"); 657 658 Ok(()) 658 659 } 660 + 661 + #[cfg(test)] 662 + mod tests { 663 + use super::*; 664 + use std::{assert_matches::assert_matches, sync::mpsc::TryRecvError}; 665 + 666 + #[test] 667 + fn test_rawmode_data() { 668 + let aho_corasick = AhoCorasick::builder() 669 + .ascii_case_insensitive(false) 670 + .match_kind(aho_corasick::MatchKind::LeftmostFirst) 671 + .build(["START_NEEDLE"]) 672 + .unwrap(); 673 + let mut stderr = vec![]; 674 + let (began_tx, began_rx) = mpsc::channel::<()>(); 675 + 676 + // each "Bla" is 4 bytes. 677 + let buffer = "bla bla bla START_NEEDLE bla bla bla".as_bytes(); 678 + let mut raw_mode_buffer = vec![]; 679 + 680 + // handle 1 "bla" 681 + assert_matches!( 682 + handle_rawmode_data( 683 + &mut stderr, 684 + buffer, 685 + 4, 686 + &mut raw_mode_buffer, 687 + &aho_corasick, 688 + &began_tx 689 + ), 690 + Ok(false) 691 + ); 692 + assert_eq!(raw_mode_buffer, b"bla "); 693 + assert_matches!(began_rx.try_recv(), Err(TryRecvError::Empty)); 694 + 695 + let buffer = &buffer[4..]; 696 + 697 + // handle 2 "bla"'s and half a "START_NEEDLE" 698 + let n = 4 + 4 + 6; 699 + assert_matches!( 700 + handle_rawmode_data( 701 + &mut stderr, 702 + buffer, 703 + n, 704 + &mut raw_mode_buffer, 705 + &aho_corasick, 706 + &began_tx 707 + ), 708 + Ok(false) 709 + ); 710 + assert_matches!(began_rx.try_recv(), Err(TryRecvError::Empty)); 711 + assert_eq!(raw_mode_buffer, b"bla bla bla START_"); 712 + 713 + let buffer = &buffer[n..]; 714 + 715 + // handle rest of the data 716 + let n = buffer.len(); 717 + assert_matches!( 718 + handle_rawmode_data( 719 + &mut stderr, 720 + buffer, 721 + n, 722 + &mut raw_mode_buffer, 723 + &aho_corasick, 724 + &began_tx 725 + ), 726 + Ok(true) 727 + ); 728 + assert_matches!(began_rx.try_recv(), Ok(())); 729 + assert_eq!(raw_mode_buffer, b"bla bla bla START_NEEDLE bla bla bla"); 730 + } 731 + }