Skip to content

Commit 32c92c9

Browse files
committed
Merge pull request #546 from winding-lines/result-cov
test(request): increasing test coverage of request module
2 parents 221f2c9 + 43e274c commit 32c92c9

File tree

1 file changed

+68
-13
lines changed

1 file changed

+68
-13
lines changed

src/client/request.rs

Lines changed: 68 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use client::{Response, get_host_and_port};
1515

1616

1717
/// A client request to a remote server.
18+
/// The W type tracks the state of the request, Fresh vs Streaming.
1819
pub struct Request<W> {
1920
/// The target URI for this request.
2021
pub url: Url,
@@ -76,7 +77,6 @@ impl Request<Fresh> {
7677
/// returning a Streaming Request.
7778
pub fn start(mut self) -> ::Result<Request<Streaming>> {
7879
let mut uri = self.url.serialize_path().unwrap();
79-
//TODO: this needs a test
8080
if let Some(ref q) = self.url.query {
8181
uri.push('?');
8282
uri.push_str(&q[..]);
@@ -174,35 +174,90 @@ impl Write for Request<Streaming> {
174174
mod tests {
175175
use std::str::from_utf8;
176176
use url::Url;
177-
use method::Method::{Get, Head};
177+
use method::Method::{Get, Head, Post};
178178
use mock::{MockStream, MockConnector};
179+
use net::Fresh;
180+
use header::{ContentLength,TransferEncoding,Encoding};
181+
use url::form_urlencoded;
179182
use super::Request;
180183

184+
fn run_request(req: Request<Fresh>) -> Vec<u8> {
185+
let req = req.start().unwrap();
186+
let stream = *req.body.end().unwrap()
187+
.into_inner().unwrap().downcast::<MockStream>().ok().unwrap();
188+
stream.write
189+
}
190+
191+
fn assert_no_body(s: &str) {
192+
assert!(!s.contains("Content-Length:"));
193+
assert!(!s.contains("Transfer-Encoding:"));
194+
}
195+
181196
#[test]
182197
fn test_get_empty_body() {
183198
let req = Request::with_connector(
184199
Get, Url::parse("http://example.dom").unwrap(), &mut MockConnector
185200
).unwrap();
186-
let req = req.start().unwrap();
187-
let stream = *req.body.end().unwrap()
188-
.into_inner().unwrap().downcast::<MockStream>().ok().unwrap();
189-
let bytes = stream.write;
201+
let bytes = run_request(req);
190202
let s = from_utf8(&bytes[..]).unwrap();
191-
assert!(!s.contains("Content-Length:"));
192-
assert!(!s.contains("Transfer-Encoding:"));
203+
assert_no_body(s);
193204
}
194205

195206
#[test]
196207
fn test_head_empty_body() {
197208
let req = Request::with_connector(
198209
Head, Url::parse("http://example.dom").unwrap(), &mut MockConnector
199210
).unwrap();
200-
let req = req.start().unwrap();
201-
let stream = *req.body.end().unwrap()
202-
.into_inner().unwrap().downcast::<MockStream>().ok().unwrap();
203-
let bytes = stream.write;
211+
let bytes = run_request(req);
212+
let s = from_utf8(&bytes[..]).unwrap();
213+
assert_no_body(s);
214+
}
215+
216+
#[test]
217+
fn test_url_query() {
218+
let url = Url::parse("http://example.dom?q=value").unwrap();
219+
let req = Request::with_connector(
220+
Get, url, &mut MockConnector
221+
).unwrap();
222+
let bytes = run_request(req);
223+
let s = from_utf8(&bytes[..]).unwrap();
224+
assert!(s.contains("?q=value"));
225+
}
226+
227+
#[test]
228+
fn test_post_content_length() {
229+
let url = Url::parse("http://example.dom").unwrap();
230+
let mut req = Request::with_connector(
231+
Post, url, &mut MockConnector
232+
).unwrap();
233+
let body = form_urlencoded::serialize(vec!(("q","value")).into_iter());
234+
req.headers_mut().set(ContentLength(body.len() as u64));
235+
let bytes = run_request(req);
236+
let s = from_utf8(&bytes[..]).unwrap();
237+
assert!(s.contains("Content-Length:"));
238+
}
239+
240+
#[test]
241+
fn test_post_chunked() {
242+
let url = Url::parse("http://example.dom").unwrap();
243+
let req = Request::with_connector(
244+
Post, url, &mut MockConnector
245+
).unwrap();
246+
let bytes = run_request(req);
204247
let s = from_utf8(&bytes[..]).unwrap();
205248
assert!(!s.contains("Content-Length:"));
206-
assert!(!s.contains("Transfer-Encoding:"));
249+
}
250+
251+
#[test]
252+
fn test_post_chunked_with_encoding() {
253+
let url = Url::parse("http://example.dom").unwrap();
254+
let mut req = Request::with_connector(
255+
Post, url, &mut MockConnector
256+
).unwrap();
257+
req.headers_mut().set(TransferEncoding(vec![Encoding::Chunked]));
258+
let bytes = run_request(req);
259+
let s = from_utf8(&bytes[..]).unwrap();
260+
assert!(!s.contains("Content-Length:"));
261+
assert!(s.contains("Transfer-Encoding:"));
207262
}
208263
}

0 commit comments

Comments
 (0)