use std::net::SocketAddr;
use std::sync::Arc;
use tokio_util::sync::CancellationToken;
use topiq_core::BrokerConfig;
use topiq_broker::{Router, SubscriptionRegistry};
use topiq_transport_tcp::TcpTransportListener;
pub async fn start_test_server() -> (SocketAddr, CancellationToken) {
let shutdown = CancellationToken::new();
let registry = Arc::new(SubscriptionRegistry::new());
let router = Arc::new(Router::new(registry.clone()));
let config = BrokerConfig {
bind_addr: ([127, 0, 0, 1], 0).into(), max_connections: 64,
channel_buffer_size: 64,
max_frame_size: 64 * 1024,
..Default::default()
};
let listener = TcpTransportListener::bind(&config, router, registry, shutdown.clone())
.await
.expect("failed to bind test server");
let addr = listener.local_addr().expect("failed to get local addr");
tokio::spawn(async move {
let _ = listener.run().await;
});
(addr, shutdown)
}