pub mod echo;
pub mod auth;
pub mod validation;
use std::net::SocketAddr;
use tokio::task::JoinHandle;
use tonic::transport::Server;
#[derive(Debug, Clone)]
pub struct TestServerConfig {
pub host: String,
pub port: u16,
}
impl Default for TestServerConfig {
fn default() -> Self {
Self {
host: "127.0.0.1".to_string(),
port: 50051,
}
}
}
pub struct TestServerHandle {
pub handle: JoinHandle<Result<(), tonic::transport::Error>>,
pub address: SocketAddr,
}
impl TestServerHandle {
pub fn stop(self) {
self.handle.abort();
}
}
pub async fn start_all_test_servers(
config: TestServerConfig,
) -> Result<Vec<TestServerHandle>, Box<dyn std::error::Error>> {
let mut handles = Vec::new();
let echo_handle = echo::start_echo_server(config.clone()).await?;
handles.push(echo_handle);
let auth_handle = auth::start_auth_server(config.clone()).await?;
handles.push(auth_handle);
let validation_handle = validation::start_validation_server(config).await?;
handles.push(validation_handle);
Ok(handles)
}
pub async fn start_test_server(
server_type: &str,
port: u16,
) -> Result<TestServerHandle, Box<dyn std::error::Error>> {
let config = TestServerConfig {
host: "127.0.0.1".to_string(),
port,
};
match server_type {
"echo" => echo::start_echo_server(config).await,
"auth" => auth::start_auth_server(config).await,
"validation" => validation::start_validation_server(config).await,
_ => Err(format!("Unknown server type: {}", server_type).into()),
}
}