Rewrite tests with a hyper server instead of raw TCP
This makes the tests much less brittle, by not depending on the exact order of the HTTP headers, nor always requiring to check for every single header.
This commit is contained in:
384
tests/cookie.rs
384
tests/cookie.rs
@@ -1,38 +1,32 @@
|
||||
#[macro_use]
|
||||
mod support;
|
||||
use support::*;
|
||||
|
||||
#[test]
|
||||
fn cookie_response_accessor() {
|
||||
let mut rt = tokio::runtime::current_thread::Runtime::new().expect("new rt");
|
||||
let client = reqwest::r#async::Client::new();
|
||||
#[tokio::test]
|
||||
async fn cookie_response_accessor() {
|
||||
let server = server::http(move |_req| {
|
||||
async move {
|
||||
http::Response::builder()
|
||||
.header("Set-Cookie", "key=val")
|
||||
.header(
|
||||
"Set-Cookie",
|
||||
"expires=1; Expires=Wed, 21 Oct 2015 07:28:00 GMT",
|
||||
)
|
||||
.header("Set-Cookie", "path=1; Path=/the-path")
|
||||
.header("Set-Cookie", "maxage=1; Max-Age=100")
|
||||
.header("Set-Cookie", "domain=1; Domain=mydomain")
|
||||
.header("Set-Cookie", "secure=1; Secure")
|
||||
.header("Set-Cookie", "httponly=1; HttpOnly")
|
||||
.header("Set-Cookie", "samesitelax=1; SameSite=Lax")
|
||||
.header("Set-Cookie", "samesitestrict=1; SameSite=Strict")
|
||||
.body(Default::default())
|
||||
.unwrap()
|
||||
}
|
||||
});
|
||||
|
||||
let server = server! {
|
||||
request: b"\
|
||||
GET / HTTP/1.1\r\n\
|
||||
user-agent: $USERAGENT\r\n\
|
||||
accept: */*\r\n\
|
||||
accept-encoding: gzip\r\n\
|
||||
host: $HOST\r\n\
|
||||
\r\n\
|
||||
",
|
||||
response: b"\
|
||||
HTTP/1.1 200 OK\r\n\
|
||||
Set-Cookie: key=val\r\n\
|
||||
Set-Cookie: expires=1; Expires=Wed, 21 Oct 2015 07:28:00 GMT\r\n\
|
||||
Set-Cookie: path=1; Path=/the-path\r\n\
|
||||
Set-Cookie: maxage=1; Max-Age=100\r\n\
|
||||
Set-Cookie: domain=1; Domain=mydomain\r\n\
|
||||
Set-Cookie: secure=1; Secure\r\n\
|
||||
Set-Cookie: httponly=1; HttpOnly\r\n\
|
||||
Set-Cookie: samesitelax=1; SameSite=Lax\r\n\
|
||||
Set-Cookie: samesitestrict=1; SameSite=Strict\r\n\
|
||||
Content-Length: 0\r\n\
|
||||
\r\n\
|
||||
"
|
||||
};
|
||||
let client = reqwest::Client::new();
|
||||
|
||||
let url = format!("http://{}/", server.addr());
|
||||
let res = rt.block_on(client.get(&url).send()).unwrap();
|
||||
let res = client.get(&url).send().await.unwrap();
|
||||
|
||||
let cookies = res.cookies().collect::<Vec<_>>();
|
||||
|
||||
@@ -79,273 +73,143 @@ fn cookie_response_accessor() {
|
||||
assert!(cookies[8].same_site_strict());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn cookie_store_simple() {
|
||||
let mut rt = tokio::runtime::current_thread::Runtime::new().expect("new rt");
|
||||
let client = reqwest::r#async::Client::builder()
|
||||
#[tokio::test]
|
||||
async fn cookie_store_simple() {
|
||||
let server = server::http(move |req| {
|
||||
async move {
|
||||
if req.uri() == "/2" {
|
||||
assert_eq!(req.headers()["cookie"], "key=val");
|
||||
}
|
||||
http::Response::builder()
|
||||
.header("Set-Cookie", "key=val; HttpOnly")
|
||||
.body(Default::default())
|
||||
.unwrap()
|
||||
}
|
||||
});
|
||||
|
||||
let client = reqwest::Client::builder()
|
||||
.cookie_store(true)
|
||||
.build()
|
||||
.unwrap();
|
||||
|
||||
let server = server! {
|
||||
request: b"\
|
||||
GET / HTTP/1.1\r\n\
|
||||
user-agent: $USERAGENT\r\n\
|
||||
accept: */*\r\n\
|
||||
accept-encoding: gzip\r\n\
|
||||
host: $HOST\r\n\
|
||||
\r\n\
|
||||
",
|
||||
response: b"\
|
||||
HTTP/1.1 200 OK\r\n\
|
||||
Set-Cookie: key=val; HttpOnly\r\n\
|
||||
Content-Length: 0\r\n\
|
||||
\r\n\
|
||||
"
|
||||
};
|
||||
let url = format!("http://{}/", server.addr());
|
||||
rt.block_on(client.get(&url).send()).unwrap();
|
||||
client.get(&url).send().await.unwrap();
|
||||
|
||||
let server = server! {
|
||||
request: b"\
|
||||
GET / HTTP/1.1\r\n\
|
||||
user-agent: $USERAGENT\r\n\
|
||||
accept: */*\r\n\
|
||||
cookie: key=val\r\n\
|
||||
accept-encoding: gzip\r\n\
|
||||
host: $HOST\r\n\
|
||||
\r\n\
|
||||
",
|
||||
response: b"\
|
||||
HTTP/1.1 200 OK\r\n\
|
||||
Content-Length: 0\r\n\
|
||||
\r\n\
|
||||
"
|
||||
};
|
||||
let url = format!("http://{}/", server.addr());
|
||||
rt.block_on(client.get(&url).send()).unwrap();
|
||||
let url = format!("http://{}/2", server.addr());
|
||||
client.get(&url).send().await.unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn cookie_store_overwrite_existing() {
|
||||
let mut rt = tokio::runtime::current_thread::Runtime::new().expect("new rt");
|
||||
let client = reqwest::r#async::Client::builder()
|
||||
#[tokio::test]
|
||||
async fn cookie_store_overwrite_existing() {
|
||||
let server = server::http(move |req| {
|
||||
async move {
|
||||
if req.uri() == "/" {
|
||||
http::Response::builder()
|
||||
.header("Set-Cookie", "key=val")
|
||||
.body(Default::default())
|
||||
.unwrap()
|
||||
} else if req.uri() == "/2" {
|
||||
assert_eq!(req.headers()["cookie"], "key=val");
|
||||
http::Response::builder()
|
||||
.header("Set-Cookie", "key=val2")
|
||||
.body(Default::default())
|
||||
.unwrap()
|
||||
} else {
|
||||
assert_eq!(req.uri(), "/3");
|
||||
assert_eq!(req.headers()["cookie"], "key=val2");
|
||||
http::Response::default()
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
let client = reqwest::Client::builder()
|
||||
.cookie_store(true)
|
||||
.build()
|
||||
.unwrap();
|
||||
|
||||
let server = server! {
|
||||
request: b"\
|
||||
GET / HTTP/1.1\r\n\
|
||||
user-agent: $USERAGENT\r\n\
|
||||
accept: */*\r\n\
|
||||
accept-encoding: gzip\r\n\
|
||||
host: $HOST\r\n\
|
||||
\r\n\
|
||||
",
|
||||
response: b"\
|
||||
HTTP/1.1 200 OK\r\n\
|
||||
Set-Cookie: key=val\r\n\
|
||||
Content-Length: 0\r\n\
|
||||
\r\n\
|
||||
"
|
||||
};
|
||||
let url = format!("http://{}/", server.addr());
|
||||
rt.block_on(client.get(&url).send()).unwrap();
|
||||
client.get(&url).send().await.unwrap();
|
||||
|
||||
let server = server! {
|
||||
request: b"\
|
||||
GET / HTTP/1.1\r\n\
|
||||
user-agent: $USERAGENT\r\n\
|
||||
accept: */*\r\n\
|
||||
cookie: key=val\r\n\
|
||||
accept-encoding: gzip\r\n\
|
||||
host: $HOST\r\n\
|
||||
\r\n\
|
||||
",
|
||||
response: b"\
|
||||
HTTP/1.1 200 OK\r\n\
|
||||
Set-Cookie: key=val2\r\n\
|
||||
Content-Length: 0\r\n\
|
||||
\r\n\
|
||||
"
|
||||
};
|
||||
let url = format!("http://{}/", server.addr());
|
||||
rt.block_on(client.get(&url).send()).unwrap();
|
||||
let url = format!("http://{}/2", server.addr());
|
||||
client.get(&url).send().await.unwrap();
|
||||
|
||||
let server = server! {
|
||||
request: b"\
|
||||
GET / HTTP/1.1\r\n\
|
||||
user-agent: $USERAGENT\r\n\
|
||||
accept: */*\r\n\
|
||||
cookie: key=val2\r\n\
|
||||
accept-encoding: gzip\r\n\
|
||||
host: $HOST\r\n\
|
||||
\r\n\
|
||||
",
|
||||
response: b"\
|
||||
HTTP/1.1 200 OK\r\n\
|
||||
Content-Length: 0\r\n\
|
||||
\r\n\
|
||||
"
|
||||
};
|
||||
let url = format!("http://{}/", server.addr());
|
||||
rt.block_on(client.get(&url).send()).unwrap();
|
||||
let url = format!("http://{}/3", server.addr());
|
||||
client.get(&url).send().await.unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn cookie_store_max_age() {
|
||||
let mut rt = tokio::runtime::current_thread::Runtime::new().expect("new rt");
|
||||
let client = reqwest::r#async::Client::builder()
|
||||
#[tokio::test]
|
||||
async fn cookie_store_max_age() {
|
||||
let server = server::http(move |req| {
|
||||
async move {
|
||||
assert_eq!(req.headers().get("cookie"), None);
|
||||
http::Response::builder()
|
||||
.header("Set-Cookie", "key=val; Max-Age=0")
|
||||
.body(Default::default())
|
||||
.unwrap()
|
||||
}
|
||||
});
|
||||
|
||||
let client = reqwest::Client::builder()
|
||||
.cookie_store(true)
|
||||
.build()
|
||||
.unwrap();
|
||||
|
||||
let server = server! {
|
||||
request: b"\
|
||||
GET / HTTP/1.1\r\n\
|
||||
user-agent: $USERAGENT\r\n\
|
||||
accept: */*\r\n\
|
||||
accept-encoding: gzip\r\n\
|
||||
host: $HOST\r\n\
|
||||
\r\n\
|
||||
",
|
||||
response: b"\
|
||||
HTTP/1.1 200 OK\r\n\
|
||||
Set-Cookie: key=val; Max-Age=0\r\n\
|
||||
Content-Length: 0\r\n\
|
||||
\r\n\
|
||||
"
|
||||
};
|
||||
let url = format!("http://{}/", server.addr());
|
||||
rt.block_on(client.get(&url).send()).unwrap();
|
||||
|
||||
let server = server! {
|
||||
request: b"\
|
||||
GET / HTTP/1.1\r\n\
|
||||
user-agent: $USERAGENT\r\n\
|
||||
accept: */*\r\n\
|
||||
accept-encoding: gzip\r\n\
|
||||
host: $HOST\r\n\
|
||||
\r\n\
|
||||
",
|
||||
response: b"\
|
||||
HTTP/1.1 200 OK\r\n\
|
||||
Content-Length: 0\r\n\
|
||||
\r\n\
|
||||
"
|
||||
};
|
||||
let url = format!("http://{}/", server.addr());
|
||||
rt.block_on(client.get(&url).send()).unwrap();
|
||||
client.get(&url).send().await.unwrap();
|
||||
client.get(&url).send().await.unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn cookie_store_expires() {
|
||||
let mut rt = tokio::runtime::current_thread::Runtime::new().expect("new rt");
|
||||
#[tokio::test]
|
||||
async fn cookie_store_expires() {
|
||||
let server = server::http(move |req| {
|
||||
async move {
|
||||
assert_eq!(req.headers().get("cookie"), None);
|
||||
http::Response::builder()
|
||||
.header(
|
||||
"Set-Cookie",
|
||||
"key=val; Expires=Wed, 21 Oct 2015 07:28:00 GMT",
|
||||
)
|
||||
.body(Default::default())
|
||||
.unwrap()
|
||||
}
|
||||
});
|
||||
|
||||
let client = reqwest::r#async::Client::builder()
|
||||
.cookie_store(true)
|
||||
.build()
|
||||
.unwrap();
|
||||
|
||||
let server = server! {
|
||||
request: b"\
|
||||
GET / HTTP/1.1\r\n\
|
||||
user-agent: $USERAGENT\r\n\
|
||||
accept: */*\r\n\
|
||||
accept-encoding: gzip\r\n\
|
||||
host: $HOST\r\n\
|
||||
\r\n\
|
||||
",
|
||||
response: b"\
|
||||
HTTP/1.1 200 OK\r\n\
|
||||
Set-Cookie: key=val; Expires=Wed, 21 Oct 2015 07:28:00 GMT\r\n\
|
||||
Content-Length: 0\r\n\
|
||||
\r\n\
|
||||
"
|
||||
};
|
||||
let url = format!("http://{}/", server.addr());
|
||||
rt.block_on(client.get(&url).send()).unwrap();
|
||||
|
||||
let server = server! {
|
||||
request: b"\
|
||||
GET / HTTP/1.1\r\n\
|
||||
user-agent: $USERAGENT\r\n\
|
||||
accept: */*\r\n\
|
||||
accept-encoding: gzip\r\n\
|
||||
host: $HOST\r\n\
|
||||
\r\n\
|
||||
",
|
||||
response: b"\
|
||||
HTTP/1.1 200 OK\r\n\
|
||||
Content-Length: 0\r\n\
|
||||
\r\n\
|
||||
"
|
||||
};
|
||||
let url = format!("http://{}/", server.addr());
|
||||
rt.block_on(client.get(&url).send()).unwrap();
|
||||
client.get(&url).send().await.unwrap();
|
||||
client.get(&url).send().await.unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn cookie_store_path() {
|
||||
let mut rt = tokio::runtime::current_thread::Runtime::new().expect("new rt");
|
||||
#[tokio::test]
|
||||
async fn cookie_store_path() {
|
||||
let server = server::http(move |req| {
|
||||
async move {
|
||||
if req.uri() == "/" {
|
||||
assert_eq!(req.headers().get("cookie"), None);
|
||||
http::Response::builder()
|
||||
.header("Set-Cookie", "key=val; Path=/subpath")
|
||||
.body(Default::default())
|
||||
.unwrap()
|
||||
} else {
|
||||
assert_eq!(req.uri(), "/subpath");
|
||||
assert_eq!(req.headers()["cookie"], "key=val");
|
||||
http::Response::default()
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
let client = reqwest::r#async::Client::builder()
|
||||
.cookie_store(true)
|
||||
.build()
|
||||
.unwrap();
|
||||
|
||||
let server = server! {
|
||||
request: b"\
|
||||
GET / HTTP/1.1\r\n\
|
||||
user-agent: $USERAGENT\r\n\
|
||||
accept: */*\r\n\
|
||||
accept-encoding: gzip\r\n\
|
||||
host: $HOST\r\n\
|
||||
\r\n\
|
||||
",
|
||||
response: b"\
|
||||
HTTP/1.1 200 OK\r\n\
|
||||
Set-Cookie: key=val; Path=/subpath\r\n\
|
||||
Content-Length: 0\r\n\
|
||||
\r\n\
|
||||
"
|
||||
};
|
||||
let url = format!("http://{}/", server.addr());
|
||||
rt.block_on(client.get(&url).send()).unwrap();
|
||||
client.get(&url).send().await.unwrap();
|
||||
client.get(&url).send().await.unwrap();
|
||||
|
||||
let server = server! {
|
||||
request: b"\
|
||||
GET / HTTP/1.1\r\n\
|
||||
user-agent: $USERAGENT\r\n\
|
||||
accept: */*\r\n\
|
||||
accept-encoding: gzip\r\n\
|
||||
host: $HOST\r\n\
|
||||
\r\n\
|
||||
",
|
||||
response: b"\
|
||||
HTTP/1.1 200 OK\r\n\
|
||||
Content-Length: 0\r\n\
|
||||
\r\n\
|
||||
"
|
||||
};
|
||||
let url = format!("http://{}/", server.addr());
|
||||
rt.block_on(client.get(&url).send()).unwrap();
|
||||
|
||||
let server = server! {
|
||||
request: b"\
|
||||
GET /subpath HTTP/1.1\r\n\
|
||||
user-agent: $USERAGENT\r\n\
|
||||
accept: */*\r\n\
|
||||
cookie: key=val\r\n\
|
||||
accept-encoding: gzip\r\n\
|
||||
host: $HOST\r\n\
|
||||
\r\n\
|
||||
",
|
||||
response: b"\
|
||||
HTTP/1.1 200 OK\r\n\
|
||||
Content-Length: 0\r\n\
|
||||
\r\n\
|
||||
"
|
||||
};
|
||||
let url = format!("http://{}/subpath", server.addr());
|
||||
rt.block_on(client.get(&url).send()).unwrap();
|
||||
client.get(&url).send().await.unwrap();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user