111 lines
2.7 KiB
Rust
111 lines
2.7 KiB
Rust
use crate::prelude::*;
|
|
|
|
#[test]
|
|
fn end_to_end () -> anyhow::Result <()> {
|
|
let rt = tokio::runtime::Runtime::new ()?;
|
|
rt.block_on (end_to_end_async ())?;
|
|
Ok (())
|
|
}
|
|
|
|
async fn end_to_end_async () -> anyhow::Result <()> {
|
|
use crate::executable_end_server as server;
|
|
use crate::executable_relay_server as relay;
|
|
|
|
let relay_opt = relay::Opt {
|
|
listen_addr: "127.0.0.1:0".to_string ().into (),
|
|
tcp_listen_port: Some (0),
|
|
};
|
|
let relay_app = relay::App::new (relay_opt).await?;
|
|
|
|
let relay_quic_port = relay_app.listen_addr ().port ();
|
|
let relay_cert = Vec::from (relay_app.server_cert ());
|
|
let relay_metrics = Arc::clone (&relay_app.metrics);
|
|
let tcp_listen_port = relay_app.tcp_listen_port ()?.unwrap ();
|
|
|
|
assert_ne! (tcp_listen_port, 0);
|
|
|
|
let task_relay = tokio::spawn (async move {
|
|
relay_app.run ().await
|
|
});
|
|
|
|
{
|
|
let m = relay_metrics.read ().await;
|
|
assert_eq! (m.connected_end_servers, 0);
|
|
}
|
|
|
|
// Connect with wrong port, should fail
|
|
|
|
let server_conf = server::Config {
|
|
debug_echo: false,
|
|
id: "bogus".into (),
|
|
relay_addr: "127.0.0.1:80".parse ()?,
|
|
relay_cert: relay_cert.clone (),
|
|
use_udp_over_tcp: false,
|
|
};
|
|
|
|
let server_err = server::P4EndServer::connect (server_conf).await;
|
|
|
|
assert! (server_err.is_err ());
|
|
|
|
// Connect with wrong cert, should fail
|
|
|
|
let server_conf = server::Config {
|
|
debug_echo: false,
|
|
id: "bogus".into (),
|
|
relay_addr: ([127, 0, 0, 1], relay_quic_port).into (),
|
|
relay_cert: vec! [],
|
|
use_udp_over_tcp: false,
|
|
};
|
|
|
|
let server_err = server::P4EndServer::connect (server_conf).await;
|
|
|
|
assert! (server_err.is_err ());
|
|
|
|
{
|
|
let m = relay_metrics.read ().await;
|
|
assert_eq! (m.connected_end_servers, 0);
|
|
}
|
|
|
|
// Connect over UDP
|
|
|
|
let server_conf = server::Config {
|
|
debug_echo: false,
|
|
id: "bogus_VZBNRUA5".into (),
|
|
relay_addr: ([127, 0, 0, 1], relay_quic_port).into (),
|
|
relay_cert: relay_cert.clone (),
|
|
use_udp_over_tcp: false,
|
|
};
|
|
|
|
let t = Instant::now ();
|
|
let (server, _) = server::P4EndServer::connect (server_conf).await?;
|
|
let dur = t.elapsed ();
|
|
assert! (dur < Duration::from_millis (1_000), "{:?}", dur);
|
|
|
|
{
|
|
let m = relay_metrics.read ().await;
|
|
assert_eq! (m.connected_end_servers, 1);
|
|
}
|
|
|
|
// Connect over TCP
|
|
|
|
let server_conf = server::Config {
|
|
debug_echo: false,
|
|
id: "bogus_6E5CZIAI".into (),
|
|
relay_addr: ([127, 0, 0, 1], tcp_listen_port).into (),
|
|
relay_cert: relay_cert.clone (),
|
|
use_udp_over_tcp: true,
|
|
};
|
|
|
|
let t = Instant::now ();
|
|
let (server, _) = server::P4EndServer::connect (server_conf).await?;
|
|
let dur = t.elapsed ();
|
|
assert! (dur < Duration::from_millis (1_000), "{:?}", dur);
|
|
|
|
{
|
|
let m = relay_metrics.read ().await;
|
|
assert_eq! (m.connected_end_servers, 2);
|
|
}
|
|
|
|
Ok (())
|
|
}
|