use common::prepare_test_env::{prepare_test_db, run_service_for_stream}; use common::test_utils::{airdrop, Key}; use common::vm_daemon_utils::register_vm_node; use detee_shared::vm_proto; use detee_shared::vm_proto::brain_vm_cli_client::BrainVmCliClient; use detee_shared::vm_proto::brain_vm_daemon_client::BrainVmDaemonClient; mod common; #[tokio::test] async fn test_pub_sub_redirect() { let _ = prepare_test_db().await.unwrap(); let brain_channel = run_service_for_stream().await.unwrap(); let mut vm_daemon_client = BrainVmDaemonClient::new(brain_channel.clone()); let node_key = Key::new(); let pubsub_brain_endpoint = "192.168.1.1:31337"; std::env::set_var("BRAIN_PUBLIC_ENDPOINT", pubsub_brain_endpoint); register_vm_node(&mut vm_daemon_client, &node_key, &Key::new().pubkey).await.unwrap(); std::env::set_var("BRAIN_PUBLIC_ENDPOINT", "127.0.0.1:31337"); let client_key = Key::new(); let new_vm_req = vm_proto::NewVmReq { admin_pubkey: client_key.pubkey.clone(), node_pubkey: node_key.pubkey.clone(), price_per_unit: 1200, extra_ports: vec![8080, 8081], locked_nano: 100, ..Default::default() }; airdrop(&brain_channel, &client_key.pubkey, 10).await.unwrap(); std::env::set_var("BRAIN_PUBLIC_ENDPOINT", "10.0.0.1:31337"); let mut client_vm_cli = BrainVmCliClient::new(brain_channel.clone()); let redirect = client_vm_cli.new_vm(client_key.sign_request(new_vm_req).unwrap()).await.err().unwrap(); std::env::set_var("BRAIN_PUBLIC_ENDPOINT", "127.0.0.1:31337"); assert_eq!(redirect.code(), tonic::Code::Unavailable); let redirect_url = redirect.metadata().get("location").and_then(|v| v.to_str().ok()).unwrap_or_default(); assert_eq!(redirect_url, pubsub_brain_endpoint); }