tangled
alpha
login
or
join now
althaea.zone
/
wire
3
fork
atom
ALPHA: wire is a tool to deploy nixos systems
wire.althaea.zone/
3
fork
atom
overview
issues
pulls
pipelines
add test for handle_rawmode_data
marshmallow
4 months ago
115b27c1
40323393
+75
-2
1 changed file
expand all
collapse all
unified
split
wire
lib
src
commands
interactive.rs
+75
-2
wire/lib/src/commands/interactive.rs
···
541
541
Ok(())
542
542
}
543
543
544
544
-
fn handle_rawmode_data(
545
545
-
stderr: &mut std::io::Stderr,
544
544
+
/// Returns Ok(true) if the data indicates the command was started
545
545
+
fn handle_rawmode_data<W: std::io::Write>(
546
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
660
+
661
661
+
#[cfg(test)]
662
662
+
mod tests {
663
663
+
use super::*;
664
664
+
use std::{assert_matches::assert_matches, sync::mpsc::TryRecvError};
665
665
+
666
666
+
#[test]
667
667
+
fn test_rawmode_data() {
668
668
+
let aho_corasick = AhoCorasick::builder()
669
669
+
.ascii_case_insensitive(false)
670
670
+
.match_kind(aho_corasick::MatchKind::LeftmostFirst)
671
671
+
.build(["START_NEEDLE"])
672
672
+
.unwrap();
673
673
+
let mut stderr = vec![];
674
674
+
let (began_tx, began_rx) = mpsc::channel::<()>();
675
675
+
676
676
+
// each "Bla" is 4 bytes.
677
677
+
let buffer = "bla bla bla START_NEEDLE bla bla bla".as_bytes();
678
678
+
let mut raw_mode_buffer = vec![];
679
679
+
680
680
+
// handle 1 "bla"
681
681
+
assert_matches!(
682
682
+
handle_rawmode_data(
683
683
+
&mut stderr,
684
684
+
buffer,
685
685
+
4,
686
686
+
&mut raw_mode_buffer,
687
687
+
&aho_corasick,
688
688
+
&began_tx
689
689
+
),
690
690
+
Ok(false)
691
691
+
);
692
692
+
assert_eq!(raw_mode_buffer, b"bla ");
693
693
+
assert_matches!(began_rx.try_recv(), Err(TryRecvError::Empty));
694
694
+
695
695
+
let buffer = &buffer[4..];
696
696
+
697
697
+
// handle 2 "bla"'s and half a "START_NEEDLE"
698
698
+
let n = 4 + 4 + 6;
699
699
+
assert_matches!(
700
700
+
handle_rawmode_data(
701
701
+
&mut stderr,
702
702
+
buffer,
703
703
+
n,
704
704
+
&mut raw_mode_buffer,
705
705
+
&aho_corasick,
706
706
+
&began_tx
707
707
+
),
708
708
+
Ok(false)
709
709
+
);
710
710
+
assert_matches!(began_rx.try_recv(), Err(TryRecvError::Empty));
711
711
+
assert_eq!(raw_mode_buffer, b"bla bla bla START_");
712
712
+
713
713
+
let buffer = &buffer[n..];
714
714
+
715
715
+
// handle rest of the data
716
716
+
let n = buffer.len();
717
717
+
assert_matches!(
718
718
+
handle_rawmode_data(
719
719
+
&mut stderr,
720
720
+
buffer,
721
721
+
n,
722
722
+
&mut raw_mode_buffer,
723
723
+
&aho_corasick,
724
724
+
&began_tx
725
725
+
),
726
726
+
Ok(true)
727
727
+
);
728
728
+
assert_matches!(began_rx.try_recv(), Ok(()));
729
729
+
assert_eq!(raw_mode_buffer, b"bla bla bla START_NEEDLE bla bla bla");
730
730
+
}
731
731
+
}