refactor(tests): use macro to assign request properties
This commit is contained in:
211
tests/client.rs
211
tests/client.rs
@@ -36,11 +36,16 @@ macro_rules! test {
|
|||||||
expected: $server_expected:expr,
|
expected: $server_expected:expr,
|
||||||
reply: $server_reply:expr,
|
reply: $server_reply:expr,
|
||||||
client:
|
client:
|
||||||
request:
|
request: {$(
|
||||||
|
$c_req_prop:ident: $c_req_val: tt,
|
||||||
|
)*},
|
||||||
|
/*
|
||||||
method: $client_method:ident,
|
method: $client_method:ident,
|
||||||
url: $client_url:expr,
|
url: $client_url:expr,
|
||||||
headers: { $($request_header_name:expr => $request_header_val:expr,)* },
|
headers: { $($request_header_name:expr => $request_header_val:expr,)* },
|
||||||
body: $request_body:expr,
|
body: $request_body:expr,
|
||||||
|
},
|
||||||
|
*/
|
||||||
|
|
||||||
response:
|
response:
|
||||||
status: $client_status:ident,
|
status: $client_status:ident,
|
||||||
@@ -54,11 +59,9 @@ macro_rules! test {
|
|||||||
reply: $server_reply,
|
reply: $server_reply,
|
||||||
client:
|
client:
|
||||||
set_host: true,
|
set_host: true,
|
||||||
request:
|
request: {$(
|
||||||
method: $client_method,
|
$c_req_prop: $c_req_val,
|
||||||
url: $client_url,
|
)*},
|
||||||
headers: { $($request_header_name => $request_header_val,)* },
|
|
||||||
body: $request_body,
|
|
||||||
|
|
||||||
response:
|
response:
|
||||||
status: $client_status,
|
status: $client_status,
|
||||||
@@ -73,11 +76,9 @@ macro_rules! test {
|
|||||||
reply: $server_reply:expr,
|
reply: $server_reply:expr,
|
||||||
client:
|
client:
|
||||||
set_host: $set_host:expr,
|
set_host: $set_host:expr,
|
||||||
request:
|
request: {$(
|
||||||
method: $client_method:ident,
|
$c_req_prop:ident: $c_req_val:tt,
|
||||||
url: $client_url:expr,
|
)*},
|
||||||
headers: { $($request_header_name:expr => $request_header_val:expr,)* },
|
|
||||||
body: $request_body:expr,
|
|
||||||
|
|
||||||
response:
|
response:
|
||||||
status: $client_status:ident,
|
status: $client_status:ident,
|
||||||
@@ -92,11 +93,9 @@ macro_rules! test {
|
|||||||
client:
|
client:
|
||||||
set_host: $set_host,
|
set_host: $set_host,
|
||||||
title_case_headers: false,
|
title_case_headers: false,
|
||||||
request:
|
request: {$(
|
||||||
method: $client_method,
|
$c_req_prop: $c_req_val,
|
||||||
url: $client_url,
|
)*},
|
||||||
headers: { $($request_header_name => $request_header_val,)* },
|
|
||||||
body: $request_body,
|
|
||||||
|
|
||||||
response:
|
response:
|
||||||
status: $client_status,
|
status: $client_status,
|
||||||
@@ -112,11 +111,9 @@ macro_rules! test {
|
|||||||
client:
|
client:
|
||||||
set_host: $set_host:expr,
|
set_host: $set_host:expr,
|
||||||
title_case_headers: $title_case_headers:expr,
|
title_case_headers: $title_case_headers:expr,
|
||||||
request:
|
request: {$(
|
||||||
method: $client_method:ident,
|
$c_req_prop:ident: $c_req_val:tt,
|
||||||
url: $client_url:expr,
|
)*},
|
||||||
headers: { $($request_header_name:expr => $request_header_val:expr,)* },
|
|
||||||
body: $request_body:expr,
|
|
||||||
|
|
||||||
response:
|
response:
|
||||||
status: $client_status:ident,
|
status: $client_status:ident,
|
||||||
@@ -138,17 +135,23 @@ macro_rules! test {
|
|||||||
client:
|
client:
|
||||||
set_host: $set_host,
|
set_host: $set_host,
|
||||||
title_case_headers: $title_case_headers,
|
title_case_headers: $title_case_headers,
|
||||||
request:
|
request: {$(
|
||||||
method: $client_method,
|
$c_req_prop: $c_req_val,
|
||||||
url: $client_url,
|
)*},
|
||||||
headers: { $($request_header_name => $request_header_val,)* },
|
|
||||||
body: $request_body,
|
|
||||||
}.expect("test");
|
}.expect("test");
|
||||||
|
|
||||||
|
|
||||||
assert_eq!(res.status(), StatusCode::$client_status);
|
assert_eq!(res.status(), StatusCode::$client_status);
|
||||||
$(
|
$(
|
||||||
assert_eq!(res.headers()[$response_header_name], $response_header_val);
|
assert_eq!(
|
||||||
|
res
|
||||||
|
.headers()
|
||||||
|
.get($response_header_name)
|
||||||
|
.expect(concat!("response header '", stringify!($response_header_name), "'")),
|
||||||
|
$response_header_val,
|
||||||
|
"response header '{}'",
|
||||||
|
stringify!($response_header_name),
|
||||||
|
);
|
||||||
)*
|
)*
|
||||||
|
|
||||||
let body = rt.block_on(res
|
let body = rt.block_on(res
|
||||||
@@ -167,11 +170,9 @@ macro_rules! test {
|
|||||||
expected: $server_expected:expr,
|
expected: $server_expected:expr,
|
||||||
reply: $server_reply:expr,
|
reply: $server_reply:expr,
|
||||||
client:
|
client:
|
||||||
request:
|
request: {$(
|
||||||
method: $client_method:ident,
|
$c_req_prop:ident: $c_req_val:tt,
|
||||||
url: $client_url:expr,
|
)*},
|
||||||
headers: { $($request_header_name:expr => $request_header_val:expr,)* },
|
|
||||||
body: $request_body:expr,
|
|
||||||
|
|
||||||
error: $err:expr,
|
error: $err:expr,
|
||||||
) => (
|
) => (
|
||||||
@@ -190,11 +191,9 @@ macro_rules! test {
|
|||||||
client:
|
client:
|
||||||
set_host: true,
|
set_host: true,
|
||||||
title_case_headers: false,
|
title_case_headers: false,
|
||||||
request:
|
request: {$(
|
||||||
method: $client_method,
|
$c_req_prop: $c_req_val,
|
||||||
url: $client_url,
|
)*},
|
||||||
headers: { $($request_header_name => $request_header_val,)* },
|
|
||||||
body: $request_body,
|
|
||||||
}.unwrap_err();
|
}.unwrap_err();
|
||||||
|
|
||||||
fn infer_closure<F: FnOnce(&::hyper::Error) -> bool>(f: F) -> F { f }
|
fn infer_closure<F: FnOnce(&::hyper::Error) -> bool>(f: F) -> F { f }
|
||||||
@@ -216,11 +215,9 @@ macro_rules! test {
|
|||||||
client:
|
client:
|
||||||
set_host: $set_host:expr,
|
set_host: $set_host:expr,
|
||||||
title_case_headers: $title_case_headers:expr,
|
title_case_headers: $title_case_headers:expr,
|
||||||
request:
|
request: {$(
|
||||||
method: $client_method:ident,
|
$c_req_prop:ident: $c_req_val:tt,
|
||||||
url: $client_url:expr,
|
)*},
|
||||||
headers: { $($request_header_name:expr => $request_header_val:expr,)* },
|
|
||||||
body: $request_body:expr,
|
|
||||||
) => ({
|
) => ({
|
||||||
let server = TcpListener::bind("127.0.0.1:0").expect("bind");
|
let server = TcpListener::bind("127.0.0.1:0").expect("bind");
|
||||||
let addr = server.local_addr().expect("local_addr");
|
let addr = server.local_addr().expect("local_addr");
|
||||||
@@ -232,18 +229,13 @@ macro_rules! test {
|
|||||||
.http1_title_case_headers($title_case_headers)
|
.http1_title_case_headers($title_case_headers)
|
||||||
.build(connector);
|
.build(connector);
|
||||||
|
|
||||||
let body = if let Some(body) = $request_body {
|
#[allow(unused_assignments)]
|
||||||
let body: &'static str = body;
|
let mut body = Body::empty();
|
||||||
body.into()
|
let mut req_builder = Request::builder();
|
||||||
} else {
|
|
||||||
Body::empty()
|
|
||||||
};
|
|
||||||
let req = Request::builder()
|
|
||||||
.method(Method::$client_method)
|
|
||||||
.uri(&*format!($client_url, addr=addr))
|
|
||||||
$(
|
$(
|
||||||
.header($request_header_name, $request_header_val)
|
test!(@client_request; req_builder, body, addr, $c_req_prop: $c_req_val);
|
||||||
)*
|
)*
|
||||||
|
let req = req_builder
|
||||||
.body(body)
|
.body(body)
|
||||||
.expect("request builder");
|
.expect("request builder");
|
||||||
|
|
||||||
@@ -286,6 +278,42 @@ macro_rules! test {
|
|||||||
resp
|
resp
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
|
(
|
||||||
|
@client_request;
|
||||||
|
$req_builder:ident,
|
||||||
|
$body:ident,
|
||||||
|
$addr:ident,
|
||||||
|
$c_req_prop:ident: $c_req_val:tt
|
||||||
|
) => ({
|
||||||
|
__client_req_prop!($req_builder, $body, $addr, $c_req_prop: $c_req_val)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! __client_req_prop {
|
||||||
|
($req_builder:ident, $body:ident, $addr:ident, headers: $map:tt) => ({
|
||||||
|
__client_req_header!($req_builder, $map)
|
||||||
|
});
|
||||||
|
|
||||||
|
($req_builder:ident, $body:ident, $addr:ident, method: $method:ident) => ({
|
||||||
|
$req_builder.method(Method::$method);
|
||||||
|
});
|
||||||
|
|
||||||
|
($req_builder:ident, $body:ident, $addr:ident, url: $url:expr) => ({
|
||||||
|
$req_builder.uri(format!($url, addr=$addr));
|
||||||
|
});
|
||||||
|
|
||||||
|
($req_builder:ident, $body:ident, $addr:ident, body: $body_e:expr) => ({
|
||||||
|
$body = $body_e.into();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! __client_req_header {
|
||||||
|
($req_builder:ident, { $($name:expr => $val:expr,)* }) => {
|
||||||
|
$(
|
||||||
|
$req_builder.header($name, $val);
|
||||||
|
)*
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static REPLY_OK: &'static str = "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n";
|
static REPLY_OK: &'static str = "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n";
|
||||||
@@ -298,11 +326,10 @@ test! {
|
|||||||
reply: REPLY_OK,
|
reply: REPLY_OK,
|
||||||
|
|
||||||
client:
|
client:
|
||||||
request:
|
request: {
|
||||||
method: GET,
|
method: GET,
|
||||||
url: "http://{addr}/",
|
url: "http://{addr}/",
|
||||||
headers: {},
|
},
|
||||||
body: None,
|
|
||||||
response:
|
response:
|
||||||
status: OK,
|
status: OK,
|
||||||
headers: {
|
headers: {
|
||||||
@@ -319,11 +346,10 @@ test! {
|
|||||||
reply: REPLY_OK,
|
reply: REPLY_OK,
|
||||||
|
|
||||||
client:
|
client:
|
||||||
request:
|
request: {
|
||||||
method: GET,
|
method: GET,
|
||||||
url: "http://{addr}/foo?key=val#dont_send_me",
|
url: "http://{addr}/foo?key=val#dont_send_me",
|
||||||
headers: {},
|
},
|
||||||
body: None,
|
|
||||||
response:
|
response:
|
||||||
status: OK,
|
status: OK,
|
||||||
headers: {
|
headers: {
|
||||||
@@ -340,11 +366,11 @@ test! {
|
|||||||
reply: REPLY_OK,
|
reply: REPLY_OK,
|
||||||
|
|
||||||
client:
|
client:
|
||||||
request:
|
request: {
|
||||||
method: GET,
|
method: GET,
|
||||||
url: "http://{addr}/",
|
url: "http://{addr}/",
|
||||||
headers: {},
|
body: "", // not Body::empty
|
||||||
body: Some(""),
|
},
|
||||||
response:
|
response:
|
||||||
status: OK,
|
status: OK,
|
||||||
headers: {
|
headers: {
|
||||||
@@ -367,13 +393,14 @@ test! {
|
|||||||
reply: REPLY_OK,
|
reply: REPLY_OK,
|
||||||
|
|
||||||
client:
|
client:
|
||||||
request:
|
request: {
|
||||||
method: POST,
|
method: POST,
|
||||||
url: "http://{addr}/length",
|
url: "http://{addr}/length",
|
||||||
headers: {
|
headers: {
|
||||||
"Content-Length" => "7",
|
"Content-Length" => "7",
|
||||||
},
|
},
|
||||||
body: Some("foo bar"),
|
body: "foo bar",
|
||||||
|
},
|
||||||
response:
|
response:
|
||||||
status: OK,
|
status: OK,
|
||||||
headers: {},
|
headers: {},
|
||||||
@@ -396,13 +423,14 @@ test! {
|
|||||||
reply: REPLY_OK,
|
reply: REPLY_OK,
|
||||||
|
|
||||||
client:
|
client:
|
||||||
request:
|
request: {
|
||||||
method: POST,
|
method: POST,
|
||||||
url: "http://{addr}/chunks",
|
url: "http://{addr}/chunks",
|
||||||
headers: {
|
headers: {
|
||||||
"Transfer-Encoding" => "chunked",
|
"Transfer-Encoding" => "chunked",
|
||||||
},
|
},
|
||||||
body: Some("foo bar baz"),
|
body: "foo bar baz",
|
||||||
|
},
|
||||||
response:
|
response:
|
||||||
status: OK,
|
status: OK,
|
||||||
headers: {},
|
headers: {},
|
||||||
@@ -422,13 +450,13 @@ test! {
|
|||||||
reply: REPLY_OK,
|
reply: REPLY_OK,
|
||||||
|
|
||||||
client:
|
client:
|
||||||
request:
|
request: {
|
||||||
method: POST,
|
method: POST,
|
||||||
url: "http://{addr}/empty",
|
url: "http://{addr}/empty",
|
||||||
headers: {
|
headers: {
|
||||||
"Content-Length" => "0",
|
"Content-Length" => "0",
|
||||||
},
|
},
|
||||||
body: None,
|
},
|
||||||
response:
|
response:
|
||||||
status: OK,
|
status: OK,
|
||||||
headers: {},
|
headers: {},
|
||||||
@@ -452,11 +480,10 @@ test! {
|
|||||||
",
|
",
|
||||||
|
|
||||||
client:
|
client:
|
||||||
request:
|
request: {
|
||||||
method: HEAD,
|
method: HEAD,
|
||||||
url: "http://{addr}/head",
|
url: "http://{addr}/head",
|
||||||
headers: {},
|
},
|
||||||
body: None,
|
|
||||||
response:
|
response:
|
||||||
status: OK,
|
status: OK,
|
||||||
headers: {},
|
headers: {},
|
||||||
@@ -482,11 +509,10 @@ test! {
|
|||||||
",
|
",
|
||||||
|
|
||||||
client:
|
client:
|
||||||
request:
|
request: {
|
||||||
method: GET,
|
method: GET,
|
||||||
url: "http://{addr}/pipe",
|
url: "http://{addr}/pipe",
|
||||||
headers: {},
|
},
|
||||||
body: None,
|
|
||||||
response:
|
response:
|
||||||
status: OK,
|
status: OK,
|
||||||
headers: {},
|
headers: {},
|
||||||
@@ -501,11 +527,10 @@ test! {
|
|||||||
reply: "won't reply",
|
reply: "won't reply",
|
||||||
|
|
||||||
client:
|
client:
|
||||||
request:
|
request: {
|
||||||
method: GET,
|
method: GET,
|
||||||
url: "/relative-{addr}",
|
url: "/relative-{addr}",
|
||||||
headers: {},
|
},
|
||||||
body: None,
|
|
||||||
error: |err| err.to_string() == "client requires absolute-form URIs",
|
error: |err| err.to_string() == "client requires absolute-form URIs",
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -523,11 +548,10 @@ test! {
|
|||||||
", // unexpected eof before double CRLF
|
", // unexpected eof before double CRLF
|
||||||
|
|
||||||
client:
|
client:
|
||||||
request:
|
request: {
|
||||||
method: GET,
|
method: GET,
|
||||||
url: "http://{addr}/err",
|
url: "http://{addr}/err",
|
||||||
headers: {},
|
},
|
||||||
body: None,
|
|
||||||
error: |err| err.to_string() == "parsed HTTP message from remote is incomplete",
|
error: |err| err.to_string() == "parsed HTTP message from remote is incomplete",
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -546,11 +570,10 @@ test! {
|
|||||||
",
|
",
|
||||||
|
|
||||||
client:
|
client:
|
||||||
request:
|
request: {
|
||||||
method: GET,
|
method: GET,
|
||||||
url: "http://{addr}/err",
|
url: "http://{addr}/err",
|
||||||
headers: {},
|
},
|
||||||
body: None,
|
|
||||||
// should get a Parse(Version) error
|
// should get a Parse(Version) error
|
||||||
error: |err| err.is_parse(),
|
error: |err| err.is_parse(),
|
||||||
|
|
||||||
@@ -576,13 +599,14 @@ test! {
|
|||||||
",
|
",
|
||||||
|
|
||||||
client:
|
client:
|
||||||
request:
|
request: {
|
||||||
method: POST,
|
method: POST,
|
||||||
url: "http://{addr}/continue",
|
url: "http://{addr}/continue",
|
||||||
headers: {
|
headers: {
|
||||||
"Content-Length" => "7",
|
"Content-Length" => "7",
|
||||||
},
|
},
|
||||||
body: Some("foo bar"),
|
body: "foo bar",
|
||||||
|
},
|
||||||
response:
|
response:
|
||||||
status: OK,
|
status: OK,
|
||||||
headers: {},
|
headers: {},
|
||||||
@@ -604,11 +628,10 @@ test! {
|
|||||||
",
|
",
|
||||||
|
|
||||||
client:
|
client:
|
||||||
request:
|
request: {
|
||||||
method: CONNECT,
|
method: CONNECT,
|
||||||
url: "{addr}",
|
url: "{addr}",
|
||||||
headers: {},
|
},
|
||||||
body: None,
|
|
||||||
response:
|
response:
|
||||||
status: OK,
|
status: OK,
|
||||||
headers: {},
|
headers: {},
|
||||||
@@ -631,11 +654,10 @@ test! {
|
|||||||
",
|
",
|
||||||
|
|
||||||
client:
|
client:
|
||||||
request:
|
request: {
|
||||||
method: CONNECT,
|
method: CONNECT,
|
||||||
url: "http://{addr}",
|
url: "http://{addr}",
|
||||||
headers: {},
|
},
|
||||||
body: None,
|
|
||||||
response:
|
response:
|
||||||
status: OK,
|
status: OK,
|
||||||
headers: {},
|
headers: {},
|
||||||
@@ -660,11 +682,10 @@ test! {
|
|||||||
|
|
||||||
client:
|
client:
|
||||||
set_host: false,
|
set_host: false,
|
||||||
request:
|
request: {
|
||||||
method: GET,
|
method: GET,
|
||||||
url: "http://{addr}/no-host/{addr}",
|
url: "http://{addr}/no-host/{addr}",
|
||||||
headers: {},
|
},
|
||||||
body: None,
|
|
||||||
response:
|
response:
|
||||||
status: OK,
|
status: OK,
|
||||||
headers: {},
|
headers: {},
|
||||||
@@ -690,13 +711,13 @@ test! {
|
|||||||
client:
|
client:
|
||||||
set_host: true,
|
set_host: true,
|
||||||
title_case_headers: true,
|
title_case_headers: true,
|
||||||
request:
|
request: {
|
||||||
method: GET,
|
method: GET,
|
||||||
url: "http://{addr}/",
|
url: "http://{addr}/",
|
||||||
headers: {
|
headers: {
|
||||||
"X-Test-Header" => "test",
|
"X-Test-Header" => "test",
|
||||||
},
|
},
|
||||||
body: None,
|
},
|
||||||
response:
|
response:
|
||||||
status: OK,
|
status: OK,
|
||||||
headers: {},
|
headers: {},
|
||||||
|
|||||||
Reference in New Issue
Block a user