use std::net::SocketAddr;
use chia_wallet_sdk::client::Peer;
pub(crate) async fn loopback_peer() -> Peer {
use tokio::net::{TcpListener, TcpStream};
use tokio_tungstenite::MaybeTlsStream;
let listener = TcpListener::bind("127.0.0.1:0")
.await
.expect("bind a loopback listener");
let addr = listener.local_addr().expect("read the listener address");
tokio::spawn(async move {
if let Ok((stream, _)) = listener.accept().await {
if let Ok(ws) = tokio_tungstenite::accept_async(stream).await {
let _keep_open = ws;
std::future::pending::<()>().await;
}
}
});
let stream = TcpStream::connect(addr).await.expect("dial the listener");
let (ws, _) =
tokio_tungstenite::client_async(format!("ws://{addr}/ws"), MaybeTlsStream::Plain(stream))
.await
.expect("complete the websocket handshake");
let (peer, _receiver) =
Peer::from_websocket(ws, Default::default()).expect("build a peer from the websocket");
peer
}
pub(crate) fn address(last_octet: u8) -> SocketAddr {
SocketAddr::new(
std::net::IpAddr::V4(std::net::Ipv4Addr::new(203, 0, 113, last_octet)),
8444,
)
}