This adds a `Codec` based testing API. This is a bit less annoying than writing at the raw H2 wire protocol level...
		
			
				
	
	
		
			114 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| #[macro_use]
 | |
| extern crate h2_test_support;
 | |
| use h2_test_support::prelude::*;
 | |
| 
 | |
| #[test]
 | |
| fn read_none() {
 | |
|     let mut codec = Codec::from(
 | |
|         mock_io::Builder::new()
 | |
|         .build());
 | |
| 
 | |
|     assert_closed!(codec);
 | |
| }
 | |
| 
 | |
| #[test]
 | |
| fn read_frame_too_big() {
 | |
| }
 | |
| 
 | |
| // ===== DATA =====
 | |
| 
 | |
| #[test]
 | |
| fn read_data_no_padding() {
 | |
|     let mut codec = raw_codec! {
 | |
|         read => [
 | |
|             0, 0, 5, 0, 0, 0, 0, 0, 1,
 | |
|             "hello",
 | |
|         ];
 | |
|     };
 | |
| 
 | |
|     let data = poll_data!(codec);
 | |
|     assert_eq!(data.stream_id(), 1);
 | |
|     assert_eq!(data.payload(), &b"hello"[..]);
 | |
|     assert!(!data.is_end_stream());
 | |
| 
 | |
|     assert_closed!(codec);
 | |
| }
 | |
| 
 | |
| #[test]
 | |
| fn read_data_empty_payload() {
 | |
|     let mut codec = raw_codec! {
 | |
|         read => [
 | |
|             0, 0, 0, 0, 0, 0, 0, 0, 1,
 | |
|         ];
 | |
|     };
 | |
| 
 | |
|     let data = poll_data!(codec);
 | |
|     assert_eq!(data.stream_id(), 1);
 | |
|     assert_eq!(data.payload(), &b""[..]);
 | |
|     assert!(!data.is_end_stream());
 | |
| 
 | |
|     assert_closed!(codec);
 | |
| }
 | |
| 
 | |
| #[test]
 | |
| fn read_data_end_stream() {
 | |
|     let mut codec = raw_codec! {
 | |
|         read => [
 | |
|             0, 0, 5, 0, 1, 0, 0, 0, 1,
 | |
|             "hello",
 | |
|         ];
 | |
|     };
 | |
| 
 | |
|     let data = poll_data!(codec);
 | |
|     assert_eq!(data.stream_id(), 1);
 | |
|     assert_eq!(data.payload(), &b"hello"[..]);
 | |
|     assert!(data.is_end_stream());
 | |
| 
 | |
|     assert_closed!(codec);
 | |
| }
 | |
| 
 | |
| #[test]
 | |
| fn read_data_padding() {
 | |
|     let mut codec = raw_codec! {
 | |
|         read => [
 | |
|             0, 0, 11, 0, 0x8, 0, 0, 0, 1,
 | |
|             5,       // Pad length
 | |
|             "hello", // Data
 | |
|             "world", // Padding
 | |
|         ];
 | |
|     };
 | |
| 
 | |
|     let data = poll_data!(codec);
 | |
|     assert_eq!(data.stream_id(), 1);
 | |
|     assert_eq!(data.payload(), &b"hello"[..]);
 | |
|     assert!(!data.is_end_stream());
 | |
| 
 | |
|     assert_closed!(codec);
 | |
| }
 | |
| 
 | |
| #[test]
 | |
| fn read_data_stream_id_zero() {
 | |
|     let mut codec = raw_codec! {
 | |
|         read => [
 | |
|             0, 0, 5, 0, 0, 0, 0, 0, 0,
 | |
|             "hello", // Data
 | |
|         ];
 | |
|     };
 | |
| 
 | |
|     poll_err!(codec);
 | |
| }
 | |
| 
 | |
| // ===== HEADERS =====
 | |
| 
 | |
| #[test]
 | |
| fn read_headers_without_pseudo() {
 | |
| }
 | |
| 
 | |
| #[test]
 | |
| fn read_headers_with_pseudo() {
 | |
| }
 | |
| 
 | |
| #[test]
 | |
| fn read_headers_empty_payload() {
 | |
| }
 |