Test for tor_dirclient::read_headers

This commit is contained in:
Nick Mathewson 2021-04-20 14:52:58 -04:00
parent 68ce1da4b0
commit 572565bce2
1 changed files with 39 additions and 0 deletions

View File

@ -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(())
}
} }