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.
183 lines
4.6 KiB
Rust
183 lines
4.6 KiB
Rust
mod support;
|
|
use support::*;
|
|
|
|
use std::env;
|
|
|
|
#[tokio::test]
|
|
async fn http_proxy() {
|
|
let url = "http://hyper.rs/prox";
|
|
let server = server::http(move |req| {
|
|
assert_eq!(req.method(), "GET");
|
|
assert_eq!(req.uri(), url);
|
|
assert_eq!(req.headers()["host"], "hyper.rs");
|
|
|
|
async { http::Response::default() }
|
|
});
|
|
|
|
let proxy = format!("http://{}", server.addr());
|
|
|
|
let res = reqwest::Client::builder()
|
|
.proxy(reqwest::Proxy::http(&proxy).unwrap())
|
|
.build()
|
|
.unwrap()
|
|
.get(url)
|
|
.send()
|
|
.await
|
|
.unwrap();
|
|
|
|
assert_eq!(res.url().as_str(), url);
|
|
assert_eq!(res.status(), reqwest::StatusCode::OK);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn http_proxy_basic_auth() {
|
|
let url = "http://hyper.rs/prox";
|
|
let server = server::http(move |req| {
|
|
assert_eq!(req.method(), "GET");
|
|
assert_eq!(req.uri(), url);
|
|
assert_eq!(req.headers()["host"], "hyper.rs");
|
|
assert_eq!(
|
|
req.headers()["proxy-authorization"],
|
|
"Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
|
|
);
|
|
|
|
async { http::Response::default() }
|
|
});
|
|
|
|
let proxy = format!("http://{}", server.addr());
|
|
|
|
let res = reqwest::Client::builder()
|
|
.proxy(
|
|
reqwest::Proxy::http(&proxy)
|
|
.unwrap()
|
|
.basic_auth("Aladdin", "open sesame"),
|
|
)
|
|
.build()
|
|
.unwrap()
|
|
.get(url)
|
|
.send()
|
|
.await
|
|
.unwrap();
|
|
|
|
assert_eq!(res.url().as_str(), url);
|
|
assert_eq!(res.status(), reqwest::StatusCode::OK);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn http_proxy_basic_auth_parsed() {
|
|
let url = "http://hyper.rs/prox";
|
|
let server = server::http(move |req| {
|
|
assert_eq!(req.method(), "GET");
|
|
assert_eq!(req.uri(), url);
|
|
assert_eq!(req.headers()["host"], "hyper.rs");
|
|
assert_eq!(
|
|
req.headers()["proxy-authorization"],
|
|
"Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
|
|
);
|
|
|
|
async { http::Response::default() }
|
|
});
|
|
|
|
let proxy = format!("http://Aladdin:open sesame@{}", server.addr());
|
|
|
|
let res = reqwest::Client::builder()
|
|
.proxy(reqwest::Proxy::http(&proxy).unwrap())
|
|
.build()
|
|
.unwrap()
|
|
.get(url)
|
|
.send()
|
|
.await
|
|
.unwrap();
|
|
|
|
assert_eq!(res.url().as_str(), url);
|
|
assert_eq!(res.status(), reqwest::StatusCode::OK);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn test_no_proxy() {
|
|
let server = server::http(move |req| {
|
|
assert_eq!(req.method(), "GET");
|
|
assert_eq!(req.uri(), "/4");
|
|
|
|
async { http::Response::default() }
|
|
});
|
|
let proxy = format!("http://{}", server.addr());
|
|
let url = format!("http://{}/4", server.addr());
|
|
|
|
// set up proxy and use no_proxy to clear up client builder proxies.
|
|
let res = reqwest::Client::builder()
|
|
.proxy(reqwest::Proxy::http(&proxy).unwrap())
|
|
.no_proxy()
|
|
.build()
|
|
.unwrap()
|
|
.get(&url)
|
|
.send()
|
|
.await
|
|
.unwrap();
|
|
|
|
assert_eq!(res.url().as_str(), &url);
|
|
assert_eq!(res.status(), reqwest::StatusCode::OK);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn test_using_system_proxy() {
|
|
let url = "http://hyper.rs/prox";
|
|
let server = server::http(move |req| {
|
|
assert_eq!(req.method(), "GET");
|
|
assert_eq!(req.uri(), url);
|
|
assert_eq!(req.headers()["host"], "hyper.rs");
|
|
|
|
async { http::Response::default() }
|
|
});
|
|
|
|
// save system setting first.
|
|
let system_proxy = env::var("http_proxy");
|
|
// set-up http proxy.
|
|
env::set_var("http_proxy", format!("http://{}", server.addr()));
|
|
|
|
let res = reqwest::Client::builder()
|
|
.use_sys_proxy()
|
|
.build()
|
|
.unwrap()
|
|
.get(url)
|
|
.send()
|
|
.await
|
|
.unwrap();
|
|
|
|
assert_eq!(res.url().as_str(), url);
|
|
assert_eq!(res.status(), reqwest::StatusCode::OK);
|
|
|
|
// reset user setting.
|
|
match system_proxy {
|
|
Err(_) => env::remove_var("http_proxy"),
|
|
Ok(proxy) => env::set_var("http_proxy", proxy),
|
|
}
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn http_over_http() {
|
|
let url = "http://hyper.rs/prox";
|
|
|
|
let server = server::http(move |req| {
|
|
assert_eq!(req.method(), "GET");
|
|
assert_eq!(req.uri(), url);
|
|
assert_eq!(req.headers()["host"], "hyper.rs");
|
|
|
|
async { http::Response::default() }
|
|
});
|
|
|
|
let proxy = format!("http://{}", server.addr());
|
|
|
|
let res = reqwest::Client::builder()
|
|
.proxy(reqwest::Proxy::http(&proxy).unwrap())
|
|
.build()
|
|
.unwrap()
|
|
.get(url)
|
|
.send()
|
|
.await
|
|
.unwrap();
|
|
|
|
assert_eq!(res.url().as_str(), url);
|
|
assert_eq!(res.status(), reqwest::StatusCode::OK);
|
|
}
|