Merge pull request #546 from winding-lines/result-cov
test(request): increasing test coverage of request module
This commit is contained in:
		| @@ -15,6 +15,7 @@ use client::{Response, get_host_and_port}; | |||||||
|  |  | ||||||
|  |  | ||||||
| /// A client request to a remote server. | /// A client request to a remote server. | ||||||
|  | /// The W type tracks the state of the request, Fresh vs Streaming. | ||||||
| pub struct Request<W> { | pub struct Request<W> { | ||||||
|     /// The target URI for this request. |     /// The target URI for this request. | ||||||
|     pub url: Url, |     pub url: Url, | ||||||
| @@ -76,7 +77,6 @@ impl Request<Fresh> { | |||||||
|     /// returning a Streaming Request. |     /// returning a Streaming Request. | ||||||
|     pub fn start(mut self) -> ::Result<Request<Streaming>> { |     pub fn start(mut self) -> ::Result<Request<Streaming>> { | ||||||
|         let mut uri = self.url.serialize_path().unwrap(); |         let mut uri = self.url.serialize_path().unwrap(); | ||||||
|         //TODO: this needs a test |  | ||||||
|         if let Some(ref q) = self.url.query { |         if let Some(ref q) = self.url.query { | ||||||
|             uri.push('?'); |             uri.push('?'); | ||||||
|             uri.push_str(&q[..]); |             uri.push_str(&q[..]); | ||||||
| @@ -174,22 +174,33 @@ impl Write for Request<Streaming> { | |||||||
| mod tests { | mod tests { | ||||||
|     use std::str::from_utf8; |     use std::str::from_utf8; | ||||||
|     use url::Url; |     use url::Url; | ||||||
|     use method::Method::{Get, Head}; |     use method::Method::{Get, Head, Post}; | ||||||
|     use mock::{MockStream, MockConnector}; |     use mock::{MockStream, MockConnector}; | ||||||
|  |     use net::Fresh; | ||||||
|  |     use header::{ContentLength,TransferEncoding,Encoding}; | ||||||
|  |     use url::form_urlencoded; | ||||||
|     use super::Request; |     use super::Request; | ||||||
|  |  | ||||||
|  |     fn run_request(req: Request<Fresh>) -> Vec<u8> { | ||||||
|  |         let req = req.start().unwrap(); | ||||||
|  |         let stream = *req.body.end().unwrap() | ||||||
|  |             .into_inner().unwrap().downcast::<MockStream>().ok().unwrap(); | ||||||
|  |         stream.write | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     fn assert_no_body(s: &str) { | ||||||
|  |         assert!(!s.contains("Content-Length:")); | ||||||
|  |         assert!(!s.contains("Transfer-Encoding:")); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     #[test] |     #[test] | ||||||
|     fn test_get_empty_body() { |     fn test_get_empty_body() { | ||||||
|         let req = Request::with_connector( |         let req = Request::with_connector( | ||||||
|             Get, Url::parse("http://example.dom").unwrap(), &mut MockConnector |             Get, Url::parse("http://example.dom").unwrap(), &mut MockConnector | ||||||
|         ).unwrap(); |         ).unwrap(); | ||||||
|         let req = req.start().unwrap(); |         let bytes = run_request(req); | ||||||
|         let stream = *req.body.end().unwrap() |  | ||||||
|             .into_inner().unwrap().downcast::<MockStream>().ok().unwrap(); |  | ||||||
|         let bytes = stream.write; |  | ||||||
|         let s = from_utf8(&bytes[..]).unwrap(); |         let s = from_utf8(&bytes[..]).unwrap(); | ||||||
|         assert!(!s.contains("Content-Length:")); |         assert_no_body(s); | ||||||
|         assert!(!s.contains("Transfer-Encoding:")); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     #[test] |     #[test] | ||||||
| @@ -197,12 +208,56 @@ mod tests { | |||||||
|         let req = Request::with_connector( |         let req = Request::with_connector( | ||||||
|             Head, Url::parse("http://example.dom").unwrap(), &mut MockConnector |             Head, Url::parse("http://example.dom").unwrap(), &mut MockConnector | ||||||
|         ).unwrap(); |         ).unwrap(); | ||||||
|         let req = req.start().unwrap(); |         let bytes = run_request(req); | ||||||
|         let stream = *req.body.end().unwrap() |         let s = from_utf8(&bytes[..]).unwrap(); | ||||||
|             .into_inner().unwrap().downcast::<MockStream>().ok().unwrap(); |         assert_no_body(s); | ||||||
|         let bytes = stream.write; |     } | ||||||
|  |  | ||||||
|  |     #[test] | ||||||
|  |     fn test_url_query() { | ||||||
|  |         let url = Url::parse("http://example.dom?q=value").unwrap(); | ||||||
|  |         let req = Request::with_connector( | ||||||
|  |             Get, url, &mut MockConnector | ||||||
|  |         ).unwrap(); | ||||||
|  |         let bytes = run_request(req); | ||||||
|  |         let s = from_utf8(&bytes[..]).unwrap(); | ||||||
|  |         assert!(s.contains("?q=value")); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     #[test] | ||||||
|  |     fn test_post_content_length() { | ||||||
|  |         let url = Url::parse("http://example.dom").unwrap(); | ||||||
|  |         let mut req = Request::with_connector( | ||||||
|  |             Post, url, &mut MockConnector | ||||||
|  |         ).unwrap(); | ||||||
|  |         let body = form_urlencoded::serialize(vec!(("q","value")).into_iter()); | ||||||
|  |         req.headers_mut().set(ContentLength(body.len() as u64)); | ||||||
|  |         let bytes = run_request(req); | ||||||
|  |         let s = from_utf8(&bytes[..]).unwrap(); | ||||||
|  |         assert!(s.contains("Content-Length:")); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     #[test] | ||||||
|  |     fn test_post_chunked() { | ||||||
|  |         let url = Url::parse("http://example.dom").unwrap(); | ||||||
|  |         let req = Request::with_connector( | ||||||
|  |             Post, url, &mut MockConnector | ||||||
|  |         ).unwrap(); | ||||||
|  |         let bytes = run_request(req); | ||||||
|         let s = from_utf8(&bytes[..]).unwrap(); |         let s = from_utf8(&bytes[..]).unwrap(); | ||||||
|         assert!(!s.contains("Content-Length:")); |         assert!(!s.contains("Content-Length:")); | ||||||
|         assert!(!s.contains("Transfer-Encoding:")); |     } | ||||||
|  |  | ||||||
|  |     #[test] | ||||||
|  |     fn test_post_chunked_with_encoding() { | ||||||
|  |         let url = Url::parse("http://example.dom").unwrap(); | ||||||
|  |         let mut req = Request::with_connector( | ||||||
|  |             Post, url, &mut MockConnector | ||||||
|  |         ).unwrap(); | ||||||
|  |         req.headers_mut().set(TransferEncoding(vec![Encoding::Chunked])); | ||||||
|  |         let bytes = run_request(req); | ||||||
|  |         let s = from_utf8(&bytes[..]).unwrap(); | ||||||
|  |         assert!(!s.contains("Content-Length:")); | ||||||
|  |         assert!(s.contains("Transfer-Encoding:")); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user