blob: 7b79cd3a1add0c906901fffc61ecb73b2104bed3 [file] [log] [blame]
use std::sync::Arc;
use std::net::TcpStream;
use std::io::{Read, Write};
use rustls;
use webpki;
use rustls_native_certs;
fn check_site(domain: &str) {
let mut config = rustls::ClientConfig::new();
config.root_store = rustls_native_certs::load_native_certs()
.unwrap();
let dns_name = webpki::DNSNameRef::try_from_ascii_str(domain)
.unwrap();
let mut sess = rustls::ClientSession::new(&Arc::new(config), dns_name);
let mut sock = TcpStream::connect(format!("{}:443", domain)).unwrap();
let mut tls = rustls::Stream::new(&mut sess, &mut sock);
tls.write(format!("GET / HTTP/1.1\r\n\
Host: {}\r\n\
Connection: close\r\n\
Accept-Encoding: identity\r\n\
\r\n", domain)
.as_bytes())
.unwrap();
let mut plaintext = [0u8; 1024];
let len = tls.read(&mut plaintext).unwrap();
assert!(plaintext[..len].starts_with(b"HTTP/1.1 ")); // or whatever
}
#[test]
fn google() {
check_site("google.com");
}
#[test]
fn amazon() {
check_site("amazon.com");
}
#[test]
fn facebook() {
check_site("facebook.com");
}
#[test]
fn netflix() {
check_site("netflix.com");
}
#[test]
fn ebay() {
check_site("ebay.com");
}
#[test]
fn apple() {
check_site("apple.com");
}