Test for tor_dirclient::read_headers
This commit is contained in:
parent
68ce1da4b0
commit
572565bce2
|
@ -118,6 +118,7 @@ where
|
||||||
let mut buffered = BufReader::new(stream);
|
let mut buffered = BufReader::new(stream);
|
||||||
|
|
||||||
// Handle the response
|
// Handle the response
|
||||||
|
// TODO: should there be a separate timeout here?
|
||||||
let header = read_headers(&mut buffered).await?;
|
let header = read_headers(&mut buffered).await?;
|
||||||
if header.status != Some(200) {
|
if header.status != Some(200) {
|
||||||
return Err(Error::HttpStatus(header.status));
|
return Err(Error::HttpStatus(header.status));
|
||||||
|
@ -211,6 +212,7 @@ where
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return value from read_headers
|
/// Return value from read_headers
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
struct HeaderStatus {
|
struct HeaderStatus {
|
||||||
/// HTTP status code.
|
/// HTTP status code.
|
||||||
status: Option<u16>,
|
status: Option<u16>,
|
||||||
|
@ -469,4 +471,41 @@ mod test {
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[async_test]
|
||||||
|
async fn headers_ok() -> Result<()> {
|
||||||
|
let text = b"HTTP/1.0 200 OK\r\nDate: ignored\r\nContent-Encoding: Waffles\r\n\r\n";
|
||||||
|
|
||||||
|
let mut s = &text[..];
|
||||||
|
let h = read_headers(&mut s).await?;
|
||||||
|
|
||||||
|
assert_eq!(h.status, Some(200));
|
||||||
|
assert_eq!(h.encoding.as_deref(), Some("Waffles"));
|
||||||
|
|
||||||
|
// now try truncated
|
||||||
|
let mut s = &text[..15];
|
||||||
|
let h = read_headers(&mut s).await;
|
||||||
|
assert!(matches!(h, Err(Error::TruncatedHeaders)));
|
||||||
|
|
||||||
|
// now try with no encoding.
|
||||||
|
let text = b"HTTP/1.0 404 Not found\r\n\r\n";
|
||||||
|
let mut s = &text[..];
|
||||||
|
let h = read_headers(&mut s).await?;
|
||||||
|
|
||||||
|
assert_eq!(h.status, Some(404));
|
||||||
|
assert!(h.encoding.is_none());
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[async_test]
|
||||||
|
async fn headers_bogus() -> Result<()> {
|
||||||
|
let text = b"HTTP/999.0 WHAT EVEN\r\n\r\n";
|
||||||
|
let mut s = &text[..];
|
||||||
|
let h = read_headers(&mut s).await;
|
||||||
|
|
||||||
|
assert!(h.is_err());
|
||||||
|
assert!(matches!(h, Err(Error::HttparseError(_))));
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue