use detee_shared::{ general_proto::brain_general_cli_server::BrainGeneralCliServer, vm_proto::brain_vm_cli_server::BrainVmCliServer, }; use surreal_brain::grpc::{BrainGeneralCliMock, BrainVmCliMock}; use tokio::sync::OnceCell; use tonic::transport::Channel; pub const DB_URL: &str = "localhost:8000"; pub const DB_NS: &str = "test_brain"; pub const DB_NAME: &str = "test_migration_db"; pub const GRPC_ADDR: &str = "127.0.0.1:31337"; pub static TEST_STATE: OnceCell = OnceCell::const_new(); pub async fn prepare_test_db() { surreal_brain::db::init(DB_URL, DB_NS, DB_NAME) .await .expect("Failed to initialize the database"); let old_brain_data = surreal_brain::old_brain::BrainData::load_from_disk().unwrap(); let _ = surreal_brain::db::DB.query(format!("REMOVE DATABASE {DB_NAME}")).await; surreal_brain::db::migration0(&old_brain_data).await.unwrap(); } pub async fn fake_grpc_server() { tonic::transport::Server::builder() .add_service(BrainGeneralCliServer::new(BrainGeneralCliMock {})) .add_service(BrainVmCliServer::new(BrainVmCliMock {})) .serve(GRPC_ADDR.parse().unwrap()) .await .unwrap(); } pub async fn fake_grpc_client() -> Channel { let url = format!("http://{GRPC_ADDR}"); Channel::from_shared(url).unwrap().connect().await.unwrap() } pub async fn prepare_test_setup() { TEST_STATE .get_or_init(|| async { prepare_test_db().await; tokio::spawn(async { fake_grpc_server().await; }); tokio::time::sleep(std::time::Duration::from_secs(1)).await; fake_grpc_client().await }) .await; }