impl more robust test for HTTP Request
This commit is contained in:
		
							parent
							
								
									ce7e49af47
								
							
						
					
					
						commit
						6e994f1b90
					
				| @ -10,14 +10,12 @@ type RequestParts = (String, String, String); | |||||||
| #[derive(Debug)] | #[derive(Debug)] | ||||||
| pub enum HTTPVersion { | pub enum HTTPVersion { | ||||||
|     Http1, |     Http1, | ||||||
|     //Http2,
 |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl Into<String> for HTTPVersion { | impl Into<String> for HTTPVersion { | ||||||
|     fn into(self) -> String { |     fn into(self) -> String { | ||||||
|         match self { |         match self { | ||||||
|             Self::Http1 => "HTTP/1.1".to_string(), |             Self::Http1 => "HTTP/1.1".to_string(), | ||||||
|             //Self::Http2 => "HTTP/2.2".to_string(),
 |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -55,7 +53,7 @@ impl HTTPStartLine { | |||||||
|         )) |         )) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fn is_valid(self) -> bool { |     fn is_valid(&self) -> bool { | ||||||
|         return self.method != "" && self.target != ""; |         return self.method != "" && self.target != ""; | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -189,7 +187,7 @@ impl HTTPRequest { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fn is_valid(self) -> bool { |     fn is_valid(&self) -> bool { | ||||||
|         return self.start_line.is_valid(); |         return self.start_line.is_valid(); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -221,23 +219,88 @@ pub fn handle_request(request: &str) -> HTTPRequest { | |||||||
| 
 | 
 | ||||||
| #[test] | #[test] | ||||||
| fn test_handle_request() { | fn test_handle_request() { | ||||||
|     let test_cases: [(&str, bool); 7] = [ |     struct expect { | ||||||
|         ("GET / HTTP/1.1\r\n\r\n", true), |         start_line: String, | ||||||
|  |         body: Option<String>, | ||||||
|  |         is_valid: bool, | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     let test_cases: [(&str, expect); 7] = [ | ||||||
|  |         ( | ||||||
|  |             "GET / HTTP/1.1\r\n\r\n", | ||||||
|  |             expect { | ||||||
|  |                 start_line: "GET / HTTP/1.1".to_string(), | ||||||
|  |                 body: None, | ||||||
|  |                 is_valid: true, | ||||||
|  |             }, | ||||||
|  |         ), | ||||||
|  |         // intentionally add HTTP with no version number
 | ||||||
|         ( |         ( | ||||||
|             "OPTIONS /admin/2 HTTP/\r\nContent-Type: application/json\r\n", |             "OPTIONS /admin/2 HTTP/\r\nContent-Type: application/json\r\n", | ||||||
|             true, |             expect { | ||||||
|         ), // intentionally add HTTP with no version number
 |                 start_line: "OPTIONS /admin/2 HTTP/1.1".to_string(), | ||||||
|         ("POST HTTP/1.1", false), |                 body: None, | ||||||
|         ("", false), |                 is_valid: true, | ||||||
|         ("fjlqskjd /oks?id=65 HTTP/2\r\n\r\n", true), |             }, | ||||||
|         ("   ", false), |         ), | ||||||
|         ("lm //// skkss\r\ndkldklkdl\r\n", true), |         ( | ||||||
|  |             "POST HTTP", | ||||||
|  |             expect { | ||||||
|  |                 start_line: "  HTTP/1.1".to_string(), | ||||||
|  |                 body: None, | ||||||
|  |                 is_valid: false, | ||||||
|  |             } | ||||||
|  |         ), | ||||||
|  |         ( | ||||||
|  |             "", | ||||||
|  |             expect { | ||||||
|  |                 start_line: "  HTTP/1.1".to_string(), | ||||||
|  |                 body: None, | ||||||
|  |                 is_valid: false, | ||||||
|  |             } | ||||||
|  |         ), | ||||||
|  |         ( | ||||||
|  |             "fjlqskjd /oks?id=65 HTTP/2\r\n\r\n", | ||||||
|  |             expect { | ||||||
|  |                 start_line: "fjlqskjd /oks?id=65 HTTP/1.1".to_string(), | ||||||
|  |                 body: None, | ||||||
|  |                 is_valid: false, | ||||||
|  |             } | ||||||
|  |         ), | ||||||
|  |         ( | ||||||
|  |             "   ", | ||||||
|  |             expect { | ||||||
|  |                 start_line: "  HTTP/1.1".to_string(), | ||||||
|  |                 body: None, | ||||||
|  |                 is_valid: false, | ||||||
|  |             } | ||||||
|  |         ), | ||||||
|  |         ( | ||||||
|  |             r#"lm //// skkss\r\ndkldklkdl\r\n"{"access_token":"AAAAAAAAAAAA.BBBBBBBBBB.CCCCCCCCCC","refresh_token": "DDDDDDDDDDD.EEEEEEEEEEE.FFFFF"}""#, | ||||||
|  |             expect { | ||||||
|  |                 start_line: "  HTTP/1.1".to_string(), | ||||||
|  |                 body: Some(r#"{"access_token":"AAAAAAAAAAAA.BBBBBBBBBB.CCCCCCCCCC","refresh_token": "DDDDDDDDDDD.EEEEEEEEEEE.FFFFF"}"#.to_string()), | ||||||
|  |                 is_valid: false, | ||||||
|  |             } | ||||||
|  |         ), | ||||||
|     ]; |     ]; | ||||||
| 
 | 
 | ||||||
|     for (request, is_valid) in test_cases { |     for (request, expect) in test_cases { | ||||||
|         let http_request = HTTPRequest::from(request); |         let http_request = HTTPRequest::from(request); | ||||||
|         println!("{:?}", http_request); |         println!("{:?}", http_request); | ||||||
|         assert_eq!(http_request.is_valid(), is_valid); |         assert_eq!(expect.is_valid, http_request.is_valid()); | ||||||
|  | 
 | ||||||
|  |         let start_line: String = http_request.start_line.into(); | ||||||
|  |         assert_eq!(expect.start_line, start_line); | ||||||
|  | 
 | ||||||
|  |         match http_request.body { | ||||||
|  |             Some(v) => { | ||||||
|  |                 assert_eq!(expect.body.unwrap(), v.data) | ||||||
|  |             } | ||||||
|  |             None => { | ||||||
|  |                 assert!(expect.body.is_none()) | ||||||
|  |             } | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user