use http1::*;
use http1::test::*;
use test::*;
macro_rules! setup {
() => ({
let (mut p, mut h) = http1_setup!();
assert_eos(
&mut p,
&mut h,
b"HTTP/1.1 200 ",
ParserState::ResponseStatus1,
b"HTTP/1.1 200 ".len()
);
(p, h)
});
}
#[test]
fn allowed() {
for b in non_control_vec().iter() {
let (mut p, mut h) = setup!();
assert_eos(
&mut p,
&mut h,
b"X",
ParserState::ResponseStatus2,
b"X".len()
);
assert_eos(
&mut p,
&mut h,
&[*b],
ParserState::ResponseStatus2,
[b].len()
);
}
}
#[test]
fn entire_iter() {
let (mut p, mut h) = setup!();
iter_assert_eos(
&mut p,
&mut h,
&[(b'N', ParserState::ResponseStatus2),
(b'O', ParserState::ResponseStatus2),
(b'T', ParserState::ResponseStatus2),
(b' ', ParserState::ResponseStatus2),
(b'F', ParserState::ResponseStatus2),
(b'O', ParserState::ResponseStatus2),
(b'U', ParserState::ResponseStatus2),
(b'N', ParserState::ResponseStatus2),
(b'D', ParserState::ResponseStatus2),
(b'\r', ParserState::InitialLf)]
);
assert_eq!(
h.status,
b"NOT FOUND"
);
}
#[test]
fn not_allowed_error() {
for b in control_vec().iter().filter(|&x| *x != b'\r') {
let (mut p, mut h) = setup!();
assert_eos(
&mut p,
&mut h,
b"X",
ParserState::ResponseStatus2,
b"X".len()
);
assert_error(
&mut p,
&mut h,
&[*b],
ParserError::Status(*b)
);
}
}
#[test]
fn state_lower_header_name() {
let (mut p, mut h) = setup!();
iter_assert_eos(
&mut p,
&mut h,
&[(b'O', ParserState::ResponseStatus2),
(b'K', ParserState::ResponseStatus2),
(b'\r', ParserState::InitialLf),
(b'\n', ParserState::HeaderCr2),
(b'H', ParserState::LowerHeaderName)]
);
}