Skip to content

Commit 4268bc2

Browse files
committed
fix: use test code from iroh_net
1 parent 370075c commit 4268bc2

File tree

2 files changed

+4
-124
lines changed

2 files changed

+4
-124
lines changed

iroh-gossip/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ iroh-base = { version = "0.16.0", path = "../iroh-base" }
3232

3333
# net dependencies (optional)
3434
futures-lite = { version = "2.3", optional = true }
35-
iroh-net = { path = "../iroh-net", version = "0.16.0", optional = true, default-features = false }
35+
iroh-net = { path = "../iroh-net", version = "0.16.0", optional = true, default-features = false, features = ["test-utils"] }
3636
tokio = { version = "1", optional = true, features = ["io-util", "sync", "rt", "macros", "net", "fs"] }
3737
tokio-util = { version = "0.7.8", optional = true, features = ["codec"] }
3838
genawaiter = { version = "0.99.1", default-features = false, features = ["futures03"] }

iroh-gossip/src/net.rs

Lines changed: 3 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -665,6 +665,7 @@ mod test {
665665
Endpoint::builder()
666666
.alpns(vec![GOSSIP_ALPN.to_vec()])
667667
.relay_mode(RelayMode::Custom(relay_map))
668+
.insecure_skip_relay_cert_verify(true)
668669
.bind(0)
669670
.await
670671
}
@@ -688,12 +689,10 @@ mod test {
688689
}
689690

690691
#[tokio::test]
691-
#[ignore = "flaky"]
692692
async fn gossip_net_smoke() {
693693
let _guard = iroh_test::logging::setup();
694-
let (relay_map, relay_url, cleanup) = util::run_relay_and_stun([127, 0, 0, 1].into())
695-
.await
696-
.unwrap();
694+
let (relay_map, relay_url, _guard) =
695+
iroh_net::test_utils::run_relay_server().await.unwrap();
697696

698697
let ep1 = create_endpoint(relay_map.clone()).await.unwrap();
699698
let ep2 = create_endpoint(relay_map.clone()).await.unwrap();
@@ -814,124 +813,5 @@ mod test {
814813
.unwrap()
815814
.unwrap();
816815
}
817-
drop(cleanup);
818-
}
819-
820-
// This is copied from iroh-net/src/hp/magicsock/conn.rs
821-
// TODO: Move into a public test_utils module in iroh-net?
822-
mod util {
823-
use std::net::{IpAddr, SocketAddr};
824-
825-
use anyhow::Result;
826-
use iroh_net::{
827-
key::SecretKey,
828-
relay::{RelayMap, RelayUrl},
829-
stun::{is, parse_binding_request, response},
830-
};
831-
use tokio::sync::oneshot;
832-
use tracing::{debug, info, trace};
833-
834-
/// A drop guard to clean up test infrastructure.
835-
///
836-
/// After dropping the test infrastructure will asynchronously shutdown and release its
837-
/// resources.
838-
// Nightly sees the sender as dead code currently, but we only rely on Drop of the
839-
// sender.
840-
#[derive(Debug)]
841-
#[allow(dead_code)]
842-
pub(crate) struct CleanupDropGuard(pub(crate) oneshot::Sender<()>);
843-
844-
/// Runs a relay server with STUN enabled suitable for tests.
845-
///
846-
/// The returned `Url` is the url of the relay server in the returned [`RelayMap`], it
847-
/// is always `Some` as that is how the [`Endpoint::connect`] API expects it.
848-
///
849-
/// [`Endpoint::connect`]: crate::endpoint::Endpoint
850-
pub(crate) async fn run_relay_and_stun(
851-
stun_ip: IpAddr,
852-
) -> Result<(RelayMap, RelayUrl, CleanupDropGuard)> {
853-
let server_key = SecretKey::generate();
854-
let server = iroh_net::relay::http::ServerBuilder::new("127.0.0.1:0".parse().unwrap())
855-
.secret_key(Some(server_key))
856-
.tls_config(None)
857-
.spawn()
858-
.await?;
859-
860-
let http_addr = server.addr();
861-
info!("relay listening on {:?}", http_addr);
862-
863-
let (stun_addr, stun_drop_guard) = serve(stun_ip).await?;
864-
let relay_url: RelayUrl = format!("http://localhost:{}", http_addr.port())
865-
.parse()
866-
.unwrap();
867-
let m = RelayMap::default_from_node(relay_url.clone(), stun_addr.port());
868-
869-
let (tx, rx) = oneshot::channel();
870-
tokio::spawn(async move {
871-
let _stun_cleanup = stun_drop_guard; // move into this closure
872-
873-
// Wait until we're dropped or receive a message.
874-
rx.await.ok();
875-
server.shutdown().await;
876-
});
877-
878-
Ok((m, relay_url, CleanupDropGuard(tx)))
879-
}
880-
881-
/// Sets up a simple STUN server.
882-
async fn serve(ip: IpAddr) -> Result<(SocketAddr, CleanupDropGuard)> {
883-
let pc = tokio::net::UdpSocket::bind((ip, 0)).await?;
884-
let mut addr = pc.local_addr()?;
885-
match addr.ip() {
886-
IpAddr::V4(ip) => {
887-
if ip.octets() == [0, 0, 0, 0] {
888-
addr.set_ip("127.0.0.1".parse().unwrap());
889-
}
890-
}
891-
_ => unreachable!("using ipv4"),
892-
}
893-
894-
info!("STUN listening on {}", addr);
895-
let (s, r) = oneshot::channel();
896-
tokio::task::spawn(async move {
897-
run_stun(pc, r).await;
898-
});
899-
900-
Ok((addr, CleanupDropGuard(s)))
901-
}
902-
903-
async fn run_stun(pc: tokio::net::UdpSocket, mut done: oneshot::Receiver<()>) {
904-
let mut buf = vec![0u8; 64 << 10];
905-
loop {
906-
trace!("read loop");
907-
tokio::select! {
908-
_ = &mut done => {
909-
debug!("shutting down");
910-
break;
911-
}
912-
res = pc.recv_from(&mut buf) => match res {
913-
Ok((n, addr)) => {
914-
trace!("read packet {}bytes from {}", n, addr);
915-
let pkt = &buf[..n];
916-
if !is(pkt) {
917-
debug!("received non STUN pkt");
918-
continue;
919-
}
920-
if let Ok(txid) = parse_binding_request(pkt) {
921-
debug!("received binding request");
922-
923-
let res = response(txid, addr);
924-
if let Err(err) = pc.send_to(&res, addr).await {
925-
eprintln!("STUN server write failed: {:?}", err);
926-
}
927-
}
928-
}
929-
Err(err) => {
930-
eprintln!("failed to read: {:?}", err);
931-
}
932-
}
933-
}
934-
}
935-
}
936816
}
937817
}

0 commit comments

Comments
 (0)