94 lines · 3.4 KB · Rust
RawDownload
use git_packetline::PacketLine;use std::io;use std::path::PathBuf; fn fixture_path(path: &str) -> PathBuf {    PathBuf::from("tests/fixtures").join(path)} fn fixture_bytes(path: &str) -> Vec<u8> {    std::fs::read(fixture_path(path)).expect("readable fixture")} mod to_read {    use crate::packet_line::read::fixture_bytes;    use bstr::ByteSlice;    use git_odb::pack;    use git_packetline::RemoteProgress;    use std::io::Read;     #[test]    fn read_pack_with_progress_extraction() -> crate::Result {        let buf = fixture_bytes("v1/01-clone.combined-output");        let mut rd = git_packetline::Reader::new(&buf[..], None);         // Read without sideband decoding        let mut out = Vec::new();        rd.as_read().read_to_end(&mut out)?;        assert_eq!(out.as_bstr(), b"808e50d724f604f69ab93c6da2919c014667bedb HEAD\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since deepen-not deepen-relative no-progress include-tag multi_ack_detailed symref=HEAD:refs/heads/master object-format=sha1 agent=git/2.28.0\n808e50d724f604f69ab93c6da2919c014667bedb refs/heads/master\n".as_bstr());         rd.reset();        assert_eq!(            rd.read_line()                .expect("line")??                .to_text()                .expect("data line")                .0                .as_bstr(),            b"NAK".as_bstr()        );        fn no_parsing(_: &[u8]) -> Option<RemoteProgress> {            None        }        let pack_read = rd.as_read_with_sidebands(git_features::progress::Discard, no_parsing);        let pack_entries = pack::data::Iter::new_from_header(            pack_read,            pack::data::iter::Mode::Verify,            pack::data::iter::CompressedBytesMode::Ignore,        )?;        let size = pack_entries.size_hint().0 - 1;        let last = pack_entries.skip(size).next().expect("last entry")?;        assert_eq!(            last.trailer                .expect("trailer to exist on last entry")                .to_sha1_hex_string(),            "150a1045f04dc0fc2dbf72313699fda696bf4126"        );        Ok(())    }} #[test]fn read_from_file_and_reader_advancement() -> crate::Result {    let mut bytes = fixture_bytes("v1/fetch/01-many-refs.response");    bytes.extend(fixture_bytes("v1/fetch/01-many-refs.response").into_iter());    let mut rd = git_packetline::Reader::new(&bytes[..], None);    assert_eq!(        rd.read_line().expect("line")??.as_bstr(),        PacketLine::Data(b"7814e8a05a59c0cf5fb186661d1551c75d1299b5 HEAD\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since deepen-not deepen-relative no-progress include-tag multi_ack_detailed symref=HEAD:refs/heads/master object-format=sha1 agent=git/2.28.0\n").as_bstr()    );    assert_eq!(exhaust(&mut rd) + 1, 1561, "it stops after seeing the flush byte");    rd.reset();    assert_eq!(        exhaust(&mut rd),        1561,        "it should read the second part of the identical file from the previously advanced reader"    );     // this reset is will cause actual io::Errors to occour    rd.reset();    assert_eq!(        rd.read_line().expect("some error").unwrap_err().kind(),        io::ErrorKind::UnexpectedEof,        "trying to keep reading from exhausted input results in Some() containing the original error"    );    Ok(())} fn exhaust(rd: &mut git_packetline::Reader<&[u8]>) -> i32 {    let mut count = 0;    while let Some(_) = rd.read_line() {        count += 1;    }    count}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t