diff --git a/Cargo.lock b/Cargo.lock index 5e912e8..375e041 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1000,7 +1000,7 @@ dependencies = [ [[package]] name = "detee-shared" version = "0.1.0" -source = "git+ssh://git@gitea.detee.cloud/testnet/proto?branch=surreal_brain_app#005677153b3fcd3251b64111a736c806106fdc04" +source = "git+ssh://git@gitea.detee.cloud/testnet/proto?branch=surreal_brain_app#0b195b4589e4ec689af7ddca27dc051716ecee78" dependencies = [ "bincode 2.0.1", "prost", diff --git a/src/db/app.rs b/src/db/app.rs index 3753d58..1e4710e 100644 --- a/src/db/app.rs +++ b/src/db/app.rs @@ -222,7 +222,7 @@ impl AppNodeWithReports { limit_one: bool, ) -> Result, Error> { let mut filter_query = format!( - "select *, <-report.* from {APP_NODE} where + "select *, <-report.* as reports from {APP_NODE} where avail_ports >= {} && max_ports_per_app >= {} && avail_vcpus >= {} && @@ -232,7 +232,7 @@ impl AppNodeWithReports { filters.free_ports, filters.vcpus, filters.memory_mb, - filters.storage_mb + filters.storage_gb ); if !filters.city.is_empty() { @@ -584,7 +584,7 @@ pub struct AppNodeResources { pub avail_no_of_port: u32, pub avail_vcpus: u32, pub avail_memory_mb: u32, - pub avail_storage_mb: u32, + pub avail_storage_gb: u32, pub max_ports_per_app: u32, } diff --git a/src/grpc/types.rs b/src/grpc/types.rs index bc2b098..81188c7 100644 --- a/src/grpc/types.rs +++ b/src/grpc/types.rs @@ -376,7 +376,7 @@ impl From for db::AppNodeResources { avail_no_of_port: value.avail_no_of_port, avail_vcpus: value.avail_vcpus, avail_memory_mb: value.avail_memory_mb, - avail_storage_mb: value.avail_storage_mb, + avail_storage_gb: value.avail_storage_gb, max_ports_per_app: value.max_ports_per_app, } } diff --git a/tests/grpc_app_cli_test.rs b/tests/grpc_app_cli_test.rs index 1c21b28..603daa5 100644 --- a/tests/grpc_app_cli_test.rs +++ b/tests/grpc_app_cli_test.rs @@ -2,7 +2,7 @@ use common::app_daemon_utils::mock_app_daemon; use common::prepare_test_env::{prepare_test_db, run_service_for_stream}; use common::test_utils::{airdrop, Key}; use detee_shared::app_proto::brain_app_cli_client::BrainAppCliClient; -use detee_shared::app_proto::{self, DelAppReq}; +use detee_shared::app_proto::{self, AppNodeFilters, DelAppReq}; use std::vec; use surreal_brain::constants::{ACCOUNT, ACTIVE_APP, DELETED_APP, NEW_APP_REQ, TOKEN_DECIMAL}; use surreal_brain::db::prelude as db; @@ -179,4 +179,34 @@ async fn test_app_deletion() { assert!(deleted_app.is_some()); } +#[tokio::test] +async fn test_get_one_app_node() { + let _ = prepare_test_db().await.unwrap(); + let brain_channel = run_service_for_stream().await.unwrap(); + + let mut client_app_cli = BrainAppCliClient::new(brain_channel.clone()); + let key = Key::new(); + + let mut req = AppNodeFilters { ..Default::default() }; + + let mock_app_node = client_app_cli + .get_one_app_node(key.sign_request(req.clone()).unwrap()) + .await + .unwrap() + .into_inner(); + + assert_eq!( + mock_app_node.node_pubkey, + "BiqoPUEoAxYxMRXUmyofoS9H1TBQgQqvLJ6MbWh88AQg".to_string() + ); + + let node_pubkey = mock_app_daemon(&brain_channel, None).await.unwrap(); + req.node_pubkey = node_pubkey.clone(); + + let new_app_node = + client_app_cli.get_one_app_node(key.sign_request(req).unwrap()).await.unwrap().into_inner(); + + assert_eq!(new_app_node.node_pubkey, node_pubkey); +} + // TODO: test register app node, delete app contract while node offline, kick, etc.. diff --git a/tests/grpc_vm_cli_test.rs b/tests/grpc_vm_cli_test.rs index dd5ebf6..b3ca078 100644 --- a/tests/grpc_vm_cli_test.rs +++ b/tests/grpc_vm_cli_test.rs @@ -4,7 +4,7 @@ use common::vm_cli_utils::{create_new_vm, user_list_vm_contracts}; use common::vm_daemon_utils::{mock_vm_daemon, register_vm_node}; use detee_shared::vm_proto::brain_vm_cli_client::BrainVmCliClient; use detee_shared::vm_proto::brain_vm_daemon_client::BrainVmDaemonClient; -use detee_shared::vm_proto::{self, DeleteVmReq}; +use detee_shared::vm_proto::{self, DeleteVmReq, VmNodeFilters}; use detee_shared::vm_proto::{ExtendVmReq, ListVmContractsReq, NewVmReq}; use futures::StreamExt; use std::vec; @@ -300,4 +300,39 @@ async fn test_extend_vm() { assert_eq!(acc.balance, expected_bal_02); } +#[tokio::test] +async fn test_get_one_vm_node() { + let _ = prepare_test_db().await.unwrap(); + let brain_channel = run_service_for_stream().await.unwrap(); + + let mut client_vm_cli = BrainVmCliClient::new(brain_channel.clone()); + let key = Key::new(); + + let mut req = VmNodeFilters { ..Default::default() }; + + let mock_vm_node = client_vm_cli + .get_one_vm_node(key.sign_request(req.clone()).unwrap()) + .await + .unwrap() + .into_inner(); + + let mock_data_vm_nodes = [ + "2Uf5pxhxKTUm6gRMnpbJHYDuyA6BWUfFsdmPyWfbMV1f", + "3zRxiGRnf46vd3zAEmpaYBJocTV9oJB6yXf5GZFR1Sq4", + "7Xw3RxbP5pvfjZ8U6yA3HHVSS9YXjKH5Vkas3JRbQYd9", + "DgkbsrwttkZXvzxY5kDwQQoDd79GLmZ5tc7fYJUFkQQb", + "Du3UfPSUUZmA5thQmc9Vrxdy7UimpygcpDsQNnwRQPtu", + "HiyMp21zaBVbRCjDsD5hEjQnHeHv4e1gpUR6pVfHTKqv", + ]; + assert!(mock_data_vm_nodes.contains(&mock_vm_node.node_pubkey.as_str())); + + let node_pubkey = mock_vm_daemon(&brain_channel, None).await.unwrap(); + req.node_pubkey = node_pubkey.clone(); + + let new_app_node = + client_vm_cli.get_one_vm_node(key.sign_request(req).unwrap()).await.unwrap().into_inner(); + + assert_eq!(new_app_node.node_pubkey, node_pubkey); +} + // TODO: test register vm node, delete vm contract while node offline, kick, etc..