#![allow(dead_code)]
use std::net::SocketAddr;
use axol::{Router, Server};
use tokio::task::JoinHandle;
pub struct TestServer {
addr: SocketAddr,
handle: JoinHandle<()>,
}
impl TestServer {
pub fn addr(&self) -> SocketAddr {
self.addr
}
pub fn url(&self, path: &str) -> String {
format!("http://{}{path}", self.addr)
}
pub fn ws_url(&self, path: &str) -> String {
format!("ws://{}{path}", self.addr)
}
}
impl Drop for TestServer {
fn drop(&mut self) {
self.handle.abort();
}
}
pub async fn spawn_router(router: Router) -> TestServer {
let server = Server::bind("127.0.0.1:0".parse().unwrap(), router)
.await
.expect("bind failure");
let addr = server.local_addr().expect("no local addr");
let handle = tokio::spawn(async move {
server.serve().await.expect("server failed");
});
TestServer { addr, handle }
}