use isahc::prelude::*;
use testserver::{mock, socks4::Socks4Server};
#[test]
fn no_proxy() {
let m = mock!();
Request::get(m.url())
.proxy(None)
.body(())
.unwrap()
.send()
.unwrap();
assert_eq!(m.requests().len(), 1);
}
#[test]
fn http_proxy() {
let m = mock!();
let proxy = m.url().parse::<http::Uri>().unwrap();
let upstream = "http://127.0.0.2:1234/".parse::<http::Uri>().unwrap();
Request::get(upstream.clone())
.proxy(proxy)
.body(())
.unwrap()
.send()
.unwrap();
assert_eq!(m.request().url, upstream.to_string());
m.request().expect_header("host", upstream.authority().unwrap().as_str());
m.request().expect_header("proxy-connection", "Keep-Alive");
}
#[test]
#[cfg_attr(tarpaulin, ignore)]
fn socks4_proxy() {
let proxy_server = Socks4Server::new("127.0.0.1:0").unwrap();
let proxy_uri = http::Uri::builder()
.scheme("socks4")
.authority(proxy_server.addr().to_string().as_str())
.path_and_query("/")
.build()
.unwrap();
proxy_server.spawn();
let m = mock!();
Request::get(m.url())
.header("connection", "close")
.proxy(proxy_uri)
.body(())
.unwrap()
.send()
.unwrap();
assert_eq!(m.requests().len(), 1);
}
#[test]
fn proxy_blacklist_works() {
let proxy = "http://127.0.0.2:1234/".parse::<http::Uri>().unwrap();
let m = mock!();
let upstream = m.url().parse::<http::Uri>().unwrap();
Request::get(&upstream)
.proxy(proxy)
.proxy_blacklist(Some(upstream.host().unwrap().to_string()))
.body(())
.unwrap()
.send()
.unwrap();
assert_eq!(m.requests().len(), 1);
}