use http2::{ Flags,
FrameType,
Parser,
ParserState };
use http2::test::*;
#[test]
fn with_padding_without_priority() {
let mut v = Vec::new();
pack_u32!(
v,
(24 << 8) | 0x1
);
pack_u8!(v, 0x8);
pack_u32!(v, 0x7FFFFFFF);
pack_u8!(
v,
10
);
pack_bytes!(
v,
b"Hello, world!"
);
pack_bytes!(
v,
b"XXXXXXXXXX"
);
let mut h = DebugHandler::new();
let mut p = Parser::new();
p.resume(&mut h, &v);
assert!(Flags::from_u8(h.frame_flags).is_padded());
assert_eq!(
FrameType::from_u8(h.frame_type),
FrameType::Headers
);
assert!(!h.headers_exclusive);
assert_eq!(
h.headers_stream_id,
0
);
assert_eq!(
h.headers_weight,
0
);
assert_eq!(
h.headers_data,
b"Hello, world!"
);
assert_eq!(
p.state(),
ParserState::FrameLength1
);
}
#[test]
fn with_padding_with_priority() {
let mut v = Vec::new();
pack_u32!(
v,
(29 << 8) | 0x1
);
pack_u8!(v, 0x8 | 0x20);
pack_u32!(v, 0x7FFFFFFF);
pack_u8!(
v,
10
);
pack_u32!(
v,
0xFFFFFFFF
);
pack_u8!(
v,
99
);
pack_bytes!(
v,
b"Hello, world!"
);
pack_bytes!(
v,
b"XXXXXXXXXX"
);
let mut h = DebugHandler::new();
let mut p = Parser::new();
p.resume(&mut h, &v);
assert!(Flags::from_u8(h.frame_flags).is_padded());
assert!(Flags::from_u8(h.frame_flags).is_priority());
assert_eq!(
FrameType::from_u8(h.frame_type),
FrameType::Headers
);
assert!(h.headers_exclusive);
assert_eq!(
h.headers_stream_id,
0x7FFFFFFF
);
assert_eq!(
h.headers_weight,
99
);
assert_eq!(
h.headers_data,
b"Hello, world!"
);
assert_eq!(
p.state(),
ParserState::FrameLength1
);
}
#[test]
fn without_padding_without_priority() {
let mut v = Vec::new();
pack_u32!(
v,
(13 << 8) | 0x1
);
pack_u8!(v, 0);
pack_u32!(v, 0x7FFFFFFF);
pack_bytes!(
v,
b"Hello, world!"
);
let mut h = DebugHandler::new();
let mut p = Parser::new();
p.resume(&mut h, &v);
assert!(Flags::from_u8(h.frame_flags).is_empty());
assert_eq!(
FrameType::from_u8(h.frame_type),
FrameType::Headers
);
assert!(!h.headers_exclusive);
assert_eq!(
h.headers_stream_id,
0
);
assert_eq!(
h.headers_weight,
0
);
assert_eq!(
h.headers_data,
b"Hello, world!"
);
assert!(h.headers_data_finished);
assert_eq!(
p.state(),
ParserState::FrameLength1
);
}
#[test]
fn without_padding_with_priority() {
let mut v = Vec::new();
pack_u32!(
v,
(18 << 8) | 0x1
);
pack_u8!(v, 0x20);
pack_u32!(v, 0x7FFFFFFF);
pack_u32!(
v,
0xFFFFFFFF
);
pack_u8!(
v,
99
);
pack_bytes!(
v,
b"Hello, world!"
);
let mut h = DebugHandler::new();
let mut p = Parser::new();
p.resume(&mut h, &v);
assert!(Flags::from_u8(h.frame_flags).is_priority());
assert_eq!(
FrameType::from_u8(h.frame_type),
FrameType::Headers
);
assert!(h.headers_exclusive);
assert_eq!(
h.headers_stream_id,
0x7FFFFFFF
);
assert_eq!(
h.headers_weight,
99
);
assert_eq!(
h.headers_data,
b"Hello, world!"
);
assert!(h.headers_data_finished);
assert_eq!(
p.state(),
ParserState::FrameLength1
);
}