Independently test IPv4, IPv6, and dual-stack connections

This commit is contained in:
Benjamin Saunders
2019-01-01 13:41:27 -08:00
committed by Dirkjan Ochtman
parent d47c8b8430
commit b5dbe2b602
+36 -5
View File
@@ -5,11 +5,39 @@ use super::{
use futures::{Future, Stream};
use rustls::internal::pemfile;
use slog::{Drain, Logger, KV};
use std::{fmt, fs, io, str};
use std::{
fmt, fs, io,
net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr, UdpSocket},
str,
};
use tokio;
#[test]
fn simple_echo() {
fn echo_v6() {
run_echo(
SocketAddr::new(IpAddr::V6(Ipv6Addr::UNSPECIFIED), 0),
SocketAddr::new(IpAddr::V6(Ipv6Addr::LOCALHOST), 0),
);
}
#[test]
fn echo_v4() {
run_echo(
SocketAddr::new(IpAddr::V4(Ipv4Addr::UNSPECIFIED), 0),
SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), 0),
);
}
#[test]
#[cfg(target_os = "linux")] // Dual-stack sockets aren't the default anywhere else.
fn echo_dualstack() {
run_echo(
SocketAddr::new(IpAddr::V6(Ipv6Addr::UNSPECIFIED), 0),
SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), 0),
);
}
fn run_echo(client_addr: SocketAddr, server_addr: SocketAddr) {
let log = logger();
let mut server_config = ServerConfigBuilder::default();
let keys = {
@@ -30,7 +58,9 @@ fn simple_echo() {
});
server.logger(log.clone());
server.listen(server_config.build());
let (_, server_driver, server_incoming) = server.bind("[::1]:14433").unwrap();
let server_sock = UdpSocket::bind(server_addr).unwrap();
let server_addr = server_sock.local_addr().unwrap();
let (_, server_driver, server_incoming) = server.from_socket(server_sock).unwrap();
let mut client_config = ClientConfigBuilder::default();
client_config
@@ -39,7 +69,7 @@ fn simple_echo() {
let mut client = Endpoint::new();
client.logger(log.clone());
client.default_client_config(client_config.build());
let (client, client_driver, _) = client.bind("[::1]:24433").unwrap();
let (client, client_driver, _) = client.bind(client_addr).unwrap();
let mut runtime = tokio::runtime::current_thread::Runtime::new().unwrap();
runtime.spawn(server_driver.map_err(|e| panic!("server driver failed: {}", e)));
@@ -49,10 +79,11 @@ fn simple_echo() {
Ok(())
}));
info!(log, "connecting from {} to {}", client_addr, server_addr);
runtime
.block_on(
client
.connect(&"[::1]:14433".parse().unwrap(), "localhost")
.connect(&server_addr, "localhost")
.unwrap()
.map_err(|e| panic!("connection failed: {}", e))
.and_then(move |conn| {