query string test
This commit is contained in:
@@ -29,6 +29,11 @@ impl ConnectionPool {
|
||||
.unwrap_or(false);
|
||||
|
||||
let hostname = url.host_str().unwrap_or("localhost"); // is localhost a good alternative?
|
||||
let query_string = if request.query.len() > 0 {
|
||||
format!("{}", request.query)
|
||||
} else {
|
||||
"".to_string()
|
||||
};
|
||||
let is_secure = url.scheme().eq_ignore_ascii_case("https");
|
||||
|
||||
let cookie_headers: Vec<_> = {
|
||||
@@ -65,7 +70,7 @@ impl ConnectionPool {
|
||||
|
||||
// send the request start + headers
|
||||
let mut prelude: Vec<u8> = vec![];
|
||||
write!(prelude, "{} {} HTTP/1.1\r\n", method, url.path())?;
|
||||
write!(prelude, "{} {}{} HTTP/1.1\r\n", method, url.path(), query_string)?;
|
||||
if !request.has("host") {
|
||||
write!(prelude, "Host: {}\r\n", url.host().unwrap())?;
|
||||
}
|
||||
|
||||
@@ -72,7 +72,7 @@ impl SizedReader {
|
||||
impl Payload {
|
||||
fn into_read(self) -> SizedReader {
|
||||
match self {
|
||||
Payload::Empty => SizedReader::new(Some(0), Box::new(empty())),
|
||||
Payload::Empty => SizedReader::new(None, Box::new(empty())),
|
||||
Payload::Text(s) => {
|
||||
let bytes = s.into_bytes();
|
||||
let len = bytes.len();
|
||||
@@ -134,28 +134,28 @@ impl Request {
|
||||
let mut state = self.state.lock().unwrap();
|
||||
self.to_url()
|
||||
.and_then(|url| {
|
||||
if state.is_none() {
|
||||
// create a one off pool/jar.
|
||||
ConnectionPool::new().connect(
|
||||
self,
|
||||
&self.method,
|
||||
&url,
|
||||
self.redirects,
|
||||
None,
|
||||
payload.into_read(),
|
||||
)
|
||||
} else {
|
||||
// reuse connection pool.
|
||||
let state = state.as_mut().unwrap();
|
||||
let jar = &mut state.jar;
|
||||
state.pool.connect(
|
||||
self,
|
||||
&self.method,
|
||||
&url,
|
||||
self.redirects,
|
||||
Some(jar),
|
||||
payload.into_read(),
|
||||
)
|
||||
match state.as_mut() {
|
||||
None =>
|
||||
// create a one off pool/jar.
|
||||
ConnectionPool::new().connect(
|
||||
self,
|
||||
&self.method,
|
||||
&url,
|
||||
self.redirects,
|
||||
None,
|
||||
payload.into_read(),
|
||||
),
|
||||
Some(state) => {
|
||||
let jar = &mut state.jar;
|
||||
state.pool.connect(
|
||||
self,
|
||||
&self.method,
|
||||
&url,
|
||||
self.redirects,
|
||||
Some(jar),
|
||||
payload.into_read(),
|
||||
)
|
||||
},
|
||||
}
|
||||
})
|
||||
.unwrap_or_else(|e| e.into())
|
||||
|
||||
@@ -14,6 +14,19 @@ fn content_length_on_str() {
|
||||
assert!(s.contains("\r\nContent-Length: 14\r\n"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn user_set_content_length_on_str() {
|
||||
test::set_handler("/user_set_content_length_on_str", |_req, _url| {
|
||||
test::make_response(200, "OK", vec![], vec![])
|
||||
});
|
||||
let resp = get("test://host/user_set_content_length_on_str")
|
||||
.set("Content-Length", "12345")
|
||||
.send_str("Hello World!!!");
|
||||
let vec = resp.to_write_vec();
|
||||
let s = String::from_utf8_lossy(&vec);
|
||||
assert!(s.contains("\r\nContent-Length: 12345\r\n"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn content_length_on_json() {
|
||||
test::set_handler("/content_length_on_json", |_req, _url| {
|
||||
|
||||
@@ -12,6 +12,7 @@ mod agent_test;
|
||||
mod auth;
|
||||
mod body_read;
|
||||
mod body_send;
|
||||
mod query_string;
|
||||
mod simple;
|
||||
|
||||
type RequestHandler = Fn(&Request, &Url) -> Result<Stream, Error> + Send + 'static;
|
||||
|
||||
29
src/test/query_string.rs
Normal file
29
src/test/query_string.rs
Normal file
@@ -0,0 +1,29 @@
|
||||
use test;
|
||||
|
||||
use super::super::*;
|
||||
|
||||
#[test]
|
||||
fn no_query_string() {
|
||||
test::set_handler("/no_query_string", |_req, _url| {
|
||||
test::make_response(200, "OK", vec![], vec![])
|
||||
});
|
||||
let resp = get("test://host/no_query_string")
|
||||
.call();
|
||||
let vec = resp.to_write_vec();
|
||||
let s = String::from_utf8_lossy(&vec);
|
||||
assert!(s.contains("GET /no_query_string HTTP/1.1"))
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn escaped_query_string() {
|
||||
test::set_handler("/escaped_query_string", |_req, _url| {
|
||||
test::make_response(200, "OK", vec![], vec![])
|
||||
});
|
||||
let resp = get("test://host/escaped_query_string")
|
||||
.query("foo", "bar")
|
||||
.query("baz", "yo lo")
|
||||
.call();
|
||||
let vec = resp.to_write_vec();
|
||||
let s = String::from_utf8_lossy(&vec);
|
||||
assert!(s.contains("GET /escaped_query_string?foo=bar&baz=yo%20lo HTTP/1.1"))
|
||||
}
|
||||
Reference in New Issue
Block a user