reformatting, tidying up
This commit is contained in:
@@ -1,43 +1,40 @@
|
||||
use crate::utils::{base_url, test_client, validate_json_response};
|
||||
use crate::utils::{base_url, make_request, validate_json_response};
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_health() {
|
||||
let url = format!("{}/v1/api-status/health", base_url());
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
let json = validate_json_response(res).await;
|
||||
async fn test_health() -> Result<(), String> {
|
||||
let url = format!("{}/v1/api-status/health", base_url()?);
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
|
||||
assert_eq!(json["status"], "up", "Expected status is 'up'");
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_build_information() {
|
||||
let url = format!("{}/v1/api-status/build-information", base_url());
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
let json = validate_json_response(res).await;
|
||||
async fn test_build_information() -> Result<(), String> {
|
||||
let url = format!("{}/v1/api-status/build-information", base_url()?);
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
|
||||
assert!(
|
||||
json.get("build_version").is_some(),
|
||||
"Expected a value for 'build_version'"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// ECASH API TEST
|
||||
// #[tokio::test]
|
||||
// async fn test_signer_information() {
|
||||
// let url = format!("{}/v1/api-status/signer-information", base_url());
|
||||
// println!("{}", url);
|
||||
// let res = test_client().get(&url).send().await.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
// ECASH API Test
|
||||
/*
|
||||
#[tokio::test]
|
||||
async fn test_signer_information() -> Result<(), String> {
|
||||
let url = format!("{}/v1/api-status/signer-information", base_url()?);
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
|
||||
// assert!(res.status().is_success(), "Expected 2xx but got {}", res.status());
|
||||
// let json: Value = res.json().await.unwrap_or_else(|err| panic!("Invalid JSON response: {}", err));
|
||||
|
||||
// assert!(json.get("signer_address").is_some(), "Expected a value for 'signer_address'");
|
||||
// }
|
||||
assert!(
|
||||
json.get("signer_address").is_some(),
|
||||
"Expected a value for 'signer_address'"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
*/
|
||||
|
||||
@@ -1,53 +1,44 @@
|
||||
use crate::utils::{base_url, test_client, validate_json_response};
|
||||
use crate::utils::{base_url, make_request, validate_json_response};
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_circulating_supply() {
|
||||
let url = format!("{}/v1/circulating-supply", base_url());
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
let json = validate_json_response(res).await;
|
||||
async fn test_get_circulating_supply() -> Result<(), String> {
|
||||
let url = format!("{}/v1/circulating-supply", base_url()?);
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
|
||||
assert!(
|
||||
json.get("circulating_supply").is_some(),
|
||||
"Expected a value for 'circulating_supply'"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_circulating_supply_value() {
|
||||
async fn test_get_circulating_supply_value() -> Result<(), String> {
|
||||
let url = format!(
|
||||
"{}/v1/circulating-supply/circulating-supply-value",
|
||||
base_url()
|
||||
base_url()?
|
||||
);
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
let json = validate_json_response(res).await;
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
|
||||
assert!(
|
||||
json.is_number(),
|
||||
"Expected a number for the circulating supply value"
|
||||
);
|
||||
let number = json.as_f64().unwrap();
|
||||
let number = json.as_f64().unwrap_or(-1.0);
|
||||
assert!(number >= 0.0, "Circulating supply should not be negative");
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_total_supply_value() {
|
||||
let url = format!("{}/v1/circulating-supply/total-supply-value", base_url());
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
let json = validate_json_response(res).await;
|
||||
async fn test_get_total_supply_value() -> Result<(), String> {
|
||||
let url = format!("{}/v1/circulating-supply/total-supply-value", base_url()?);
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
|
||||
assert!(json.is_number(), "Expected a number for total supply value");
|
||||
let number = json.as_f64().unwrap();
|
||||
assert!(number >= 0.0, "Total supply should not be negative");
|
||||
let number = json.as_f64().unwrap_or(-1.0);
|
||||
assert!(number >= 0.0, "Total supply shouldn't be negative");
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -1,14 +1,10 @@
|
||||
use crate::utils::{base_url, test_client, validate_json_response};
|
||||
use crate::utils::{base_url, make_request, validate_json_response};
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_current_epoch() {
|
||||
let url = format!("{}/v1/epoch/current", base_url());
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
let json = validate_json_response(res).await;
|
||||
async fn test_get_current_epoch() -> Result<(), String> {
|
||||
let url = format!("{}/v1/epoch/current", base_url()?);
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
|
||||
assert!(json.get("id").is_some(), "Expected a value for 'id'");
|
||||
assert!(
|
||||
@@ -19,21 +15,17 @@ async fn test_get_current_epoch() {
|
||||
json.get("total_elapsed_epochs").is_some(),
|
||||
"Expected a value for `total_elapsed_epochs`"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_reward_params() {
|
||||
let url = format!("{}/v1/epoch/reward_params", base_url());
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
let json = validate_json_response(res).await;
|
||||
|
||||
async fn test_get_reward_params() -> Result<(), String> {
|
||||
let url = format!("{}/v1/epoch/reward_params", base_url()?);
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
let interval = json
|
||||
.get("interval")
|
||||
.expect("Expected a value for 'interval'");
|
||||
.ok_or("Expected a value for 'interval'")?;
|
||||
assert!(
|
||||
interval.get("reward_pool").is_some(),
|
||||
"Expected a value for 'interval.reward_pool'"
|
||||
@@ -41,9 +33,10 @@ async fn test_get_reward_params() {
|
||||
|
||||
let rewarded_set = json
|
||||
.get("rewarded_set")
|
||||
.expect("Expected a value for 'rewarded_set'");
|
||||
.ok_or("Expected a value for 'rewarded_set'")?;
|
||||
assert!(
|
||||
rewarded_set.get("exit_gateways").is_some(),
|
||||
"Expected a value for 'rewarded_set.exit_gateways'"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
use crate::utils::{base_url, test_client, validate_json_response};
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_chain_status() {
|
||||
let url = format!("{}/v1/network/chain-status", base_url());
|
||||
async fn test_get_chain_status() -> Result<(), String> {
|
||||
let url = format!("{}/v1/network/chain-status", base_url()?);
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
let json = validate_json_response(res).await;
|
||||
.map_err(|err| format!("Failed to send request to {}: {}", url, err))?;
|
||||
let json = validate_json_response(res).await?;
|
||||
|
||||
let block_header = json
|
||||
.get("status")
|
||||
.and_then(|s| s.get("latest_block"))
|
||||
.and_then(|b| b.get("block"))
|
||||
.and_then(|b| b.get("header"))
|
||||
.expect("Expected a value for 'status.block.header'");
|
||||
.ok_or("Expected a value for 'status.block.header'")?;
|
||||
|
||||
assert!(
|
||||
block_header.get("chain_id").is_some(),
|
||||
@@ -25,17 +25,18 @@ async fn test_get_chain_status() {
|
||||
block_header.get("height").is_some(),
|
||||
"Expected a value for 'height'"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_network_details() {
|
||||
let url = format!("{}/v1/network/details", base_url());
|
||||
async fn test_get_network_details() -> Result<(), String> {
|
||||
let url = format!("{}/v1/network/details", base_url()?);
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
let json = validate_json_response(res).await;
|
||||
.map_err(|err| format!("Failed to send request to {}: {}", url, err))?;
|
||||
let json = validate_json_response(res).await?;
|
||||
|
||||
assert!(
|
||||
json.get("connected_nyxd").is_some(),
|
||||
@@ -44,22 +45,23 @@ async fn test_get_network_details() {
|
||||
let contracts = json
|
||||
.get("network")
|
||||
.and_then(|s| s.get("contracts"))
|
||||
.expect("Expected a value for 'contracts'");
|
||||
.ok_or("Expected a value for 'contracts'")?;
|
||||
assert!(
|
||||
contracts.get("mixnet_contract_address").is_some(),
|
||||
"Expected a value for 'mixnet_contract_address'"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_nym_contracts() {
|
||||
let url = format!("{}/v1/network/nym-contracts", base_url());
|
||||
async fn test_get_nym_contracts() -> Result<(), String> {
|
||||
let url = format!("{}/v1/network/nym-contracts", base_url()?);
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
let json = validate_json_response(res).await;
|
||||
.map_err(|err| format!("Failed to send request to {}: {}", url, err))?;
|
||||
let json = validate_json_response(res).await?;
|
||||
|
||||
assert!(
|
||||
json.get("nym-mixnet-contract").is_some(),
|
||||
@@ -69,22 +71,23 @@ async fn test_get_nym_contracts() {
|
||||
json.get("nym-ecash-contract").is_some(),
|
||||
"Expected a value for 'nym-ecash-contract'"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_nym_contracts_detailed() {
|
||||
let url = format!("{}/v1/network/nym-contracts-detailed", base_url());
|
||||
async fn test_get_nym_contracts_detailed() -> Result<(), String> {
|
||||
let url = format!("{}/v1/network/nym-contracts-detailed", base_url()?);
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
let json = validate_json_response(res).await;
|
||||
.map_err(|err| format!("Failed to send request to {}: {}", url, err))?;
|
||||
let json = validate_json_response(res).await?;
|
||||
|
||||
let mixnet_contract = json
|
||||
.get("nym-mixnet-contract")
|
||||
.and_then(|s| s.get("details"))
|
||||
.expect("Expected details for the mixnet contract");
|
||||
.ok_or("Expected details for the mixnet contract")?;
|
||||
assert!(
|
||||
mixnet_contract.get("commit_branch").is_some(),
|
||||
"Expected a value for 'commit_branch'"
|
||||
@@ -93,9 +96,10 @@ async fn test_get_nym_contracts_detailed() {
|
||||
let ecash_contract = json
|
||||
.get("nym-ecash-contract")
|
||||
.and_then(|s| s.get("details"))
|
||||
.expect("Expected details for the ecash contract");
|
||||
.ok_or("Expected details for the ecash contract")?;
|
||||
assert!(
|
||||
ecash_contract.get("commit_branch").is_some(),
|
||||
"Expected a value for 'commit_branch'"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -1,145 +1,131 @@
|
||||
use crate::utils::{base_url, get_any_node_id, test_client, validate_json_response};
|
||||
use crate::utils::{base_url, get_any_node_id, make_request, test_client, validate_json_response};
|
||||
use chrono::Utc;
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_bonded_nodes() {
|
||||
let url = format!("{}/v1/nym-nodes/bonded", base_url());
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
let json = validate_json_response(res).await;
|
||||
let data = json.get("data").expect("Expected a value for 'data' field");
|
||||
async fn test_get_bonded_nodes() -> Result<(), String> {
|
||||
let url = format!("{}/v1/nym-nodes/bonded", base_url()?);
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
let data = json
|
||||
.get("data")
|
||||
.ok_or("Expected a value for 'data' field")?;
|
||||
|
||||
assert!(data.is_array(), "Expected 'data' to be an array");
|
||||
assert!(
|
||||
!data.as_array().unwrap().is_empty(),
|
||||
"Expected at least one bonded node"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_described_nodes() {
|
||||
let url = format!("{}/v1/nym-nodes/described", base_url());
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
let json = validate_json_response(res).await;
|
||||
let data = json.get("data").expect("Expected a value for 'data' field");
|
||||
async fn test_get_described_nodes() -> Result<(), String> {
|
||||
let url = format!("{}/v1/nym-nodes/described", base_url()?);
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
let data = json
|
||||
.get("data")
|
||||
.ok_or("Expected a value for 'data' field")?;
|
||||
|
||||
assert!(data.is_array(), "Expected 'data' to be an array");
|
||||
assert!(
|
||||
!data.as_array().unwrap().is_empty(),
|
||||
"Expected at least one node to appear"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// TODO enable this once noise is properly integrated
|
||||
// #[tokio::test]
|
||||
// async fn test_get_noise() {
|
||||
// let url = format!("{}/v1/nym-nodes/noise", base_url());
|
||||
// let res = test_client().get(&url).send().await.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
// async fn test_get_noise() -> Result<(), String> {
|
||||
// let url = format!("{}/v1/nym-nodes/noise", base_url()?);
|
||||
// let res = test_client().get(&url).send().await.map_err(|err| panic!("Failed to send request to {}: {}", url, err))?;
|
||||
// let json = validate_json_response(res).await;
|
||||
// }
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_rewarded_set() {
|
||||
let url = format!("{}/v1/nym-nodes/rewarded-set", base_url());
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
let json = validate_json_response(res).await;
|
||||
async fn test_get_rewarded_set() -> Result<(), String> {
|
||||
let url = format!("{}/v1/nym-nodes/rewarded-set", base_url()?);
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
let exit_gateways = json
|
||||
.get("exit_gateways")
|
||||
.expect("Expected a value for 'exit_gateways' field");
|
||||
.ok_or("Expected a value for 'exit_gateways' field")?;
|
||||
|
||||
assert!(
|
||||
exit_gateways.is_array(),
|
||||
"Expected 'exit_gateways' to be an array"
|
||||
);
|
||||
assert!(
|
||||
exit_gateways.as_array().unwrap().len() > 0,
|
||||
!exit_gateways.as_array().unwrap().is_empty(),
|
||||
"We have no exit gateways!!"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_annotation_for_node() {
|
||||
let id = get_any_node_id().await;
|
||||
println!("Using node_id: {}", id);
|
||||
let url = format!("{}/v1/nym-nodes/annotation/{}", base_url(), id);
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
let json = validate_json_response(res).await;
|
||||
async fn test_get_annotation_for_node() -> Result<(), String> {
|
||||
let id = get_any_node_id().await?;
|
||||
let url = format!("{}/v1/nym-nodes/annotation/{}", base_url()?, id);
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
let annotation = json
|
||||
.get("annotation")
|
||||
.expect("Expected a value for 'annotation' field");
|
||||
.ok_or("Expected a value for 'annotation' field")?;
|
||||
|
||||
assert!(
|
||||
annotation.get("last_24h_performance").is_some(),
|
||||
"Expected a value for 'last_24h_performance'"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
#[tokio::test]
|
||||
async fn test_get_historical_performance() {
|
||||
let id = get_any_node_id().await;
|
||||
let date = Utc::now().date_naive().to_string();
|
||||
|
||||
let url = format!("{}/v1/nym-nodes/historical-performance/{}", base_url(), id);
|
||||
#[tokio::test]
|
||||
async fn test_get_historical_performance() -> Result<(), String> {
|
||||
let id = get_any_node_id().await?;
|
||||
let date = Utc::now().date_naive().to_string();
|
||||
let url = format!("{}/v1/nym-nodes/historical-performance/{}", base_url()?, id);
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.query(&[("date", date)])
|
||||
.send()
|
||||
.await
|
||||
.unwrap();
|
||||
.map_err(|err| format!("Failed to send request to {}: {}", url, err))?;
|
||||
let json = validate_json_response(res).await?;
|
||||
|
||||
let json = validate_json_response(res).await;
|
||||
assert!(
|
||||
json.get("performance").is_some(),
|
||||
"Expected a value for 'performance' field"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_performance_history() {
|
||||
let id = get_any_node_id().await;
|
||||
let url = format!("{}/v1/nym-nodes/performance-history/{}", base_url(), id);
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
let json = validate_json_response(res).await;
|
||||
async fn test_get_performance_history() -> Result<(), String> {
|
||||
let id = get_any_node_id().await?;
|
||||
let url = format!("{}/v1/nym-nodes/performance-history/{}", base_url()?, id);
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
let data = json
|
||||
.get("history")
|
||||
.and_then(|h| h.get("data"))
|
||||
.expect("Expected a value for 'history.data'");
|
||||
.ok_or("Expected a value for 'history.data'")?;
|
||||
|
||||
assert!(data.is_array(), "Expected 'history.data' to be an array");
|
||||
assert!(
|
||||
!data.as_array().unwrap().is_empty(),
|
||||
"Expected at least one performance history entry"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_performance() {
|
||||
let id = get_any_node_id().await;
|
||||
let url = format!("{}/v1/nym-nodes/performance/{}", base_url(), id);
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
let json = validate_json_response(res).await;
|
||||
async fn test_get_performance() -> Result<(), String> {
|
||||
let id = get_any_node_id().await?;
|
||||
let url = format!("{}/v1/nym-nodes/performance/{}", base_url()?, id);
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
|
||||
assert!(
|
||||
json.get("node_id").is_some(),
|
||||
"Expected a value for 'node_id'"
|
||||
@@ -148,28 +134,26 @@ async fn test_get_performance() {
|
||||
json.get("performance").is_some(),
|
||||
"Expected a value for 'performance'"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_uptime_history() {
|
||||
let id = get_any_node_id().await;
|
||||
let url = format!("{}/v1/nym-nodes/uptime-history/{}", base_url(), id);
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
let json = validate_json_response(res).await;
|
||||
async fn test_get_uptime_history() -> Result<(), String> {
|
||||
let id = get_any_node_id().await?;
|
||||
let url = format!("{}/v1/nym-nodes/uptime-history/{}", base_url()?, id);
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
let data = json
|
||||
.get("history")
|
||||
.and_then(|h| h.get("data"))
|
||||
.expect("Expected a value for 'history.data'");
|
||||
.ok_or("Expected a value for 'history.data'")?;
|
||||
|
||||
assert!(data.is_array(), "Expected 'history.data' to be an array");
|
||||
assert!(
|
||||
!data.as_array().unwrap().is_empty(),
|
||||
"Expected at least one performance history entry"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// TODO add the POST request test for `refresh-described`
|
||||
|
||||
@@ -1,29 +1,15 @@
|
||||
use crate::utils::{base_url, test_client};
|
||||
use serde_json::Value;
|
||||
use crate::utils::{base_url, make_request, validate_json_response};
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_config_score_details() {
|
||||
let url = format!("{}/v1/status/config-score-details", base_url());
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
assert!(
|
||||
res.status().is_success(),
|
||||
"Expected 200 OK, got {}",
|
||||
res.status()
|
||||
);
|
||||
|
||||
let json: Value = res
|
||||
.json()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to parse response as JSON: {}", err));
|
||||
async fn test_get_config_score_details() -> Result<(), String> {
|
||||
let url = format!("{}/v1/status/config-score-details", base_url()?);
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
|
||||
let version_history = json
|
||||
.get("version_history")
|
||||
.and_then(|v| v.as_array())
|
||||
.expect("Missing or invalid 'version_history' array");
|
||||
.ok_or("Missing or invalid 'version_history' array")?;
|
||||
|
||||
assert!(
|
||||
!version_history.is_empty(),
|
||||
@@ -33,7 +19,7 @@ async fn test_get_config_score_details() {
|
||||
let max_entry = version_history
|
||||
.iter()
|
||||
.max_by_key(|entry| entry.get("id").and_then(|id| id.as_u64()).unwrap_or(0))
|
||||
.expect("Unable to find max id entry");
|
||||
.ok_or("Unable to find max id entry")?;
|
||||
|
||||
let semver = max_entry
|
||||
.get("version_information")
|
||||
@@ -44,6 +30,7 @@ async fn test_get_config_score_details() {
|
||||
semver.is_some(),
|
||||
"Expected a value for 'semver' in the highest id entry"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// TODO add the POST request tests for:
|
||||
|
||||
@@ -1,253 +1,168 @@
|
||||
use crate::utils::{base_url, test_client};
|
||||
use serde_json::Value;
|
||||
use crate::utils::{base_url, make_request, validate_json_response};
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_skimmed_nodes_active() {
|
||||
let url = format!("{}/v1/unstable/nym-nodes/skimmed/active", base_url());
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
assert!(
|
||||
res.status().is_success(),
|
||||
"Expected 2xx but got {}",
|
||||
res.status()
|
||||
);
|
||||
|
||||
let json: Value = res
|
||||
.json()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to parse response as JSON: {}", err));
|
||||
async fn test_get_skimmed_nodes_active() -> Result<(), String> {
|
||||
let url = format!("{}/v1/unstable/nym-nodes/skimmed/active", base_url()?);
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
let data = json
|
||||
.get("nodes")
|
||||
.and_then(|r| r.get("data"))
|
||||
.expect("Missing 'data' field");
|
||||
.ok_or("Missing 'data' field")?;
|
||||
|
||||
assert!(data.is_array(), "Expected 'data' to be an array");
|
||||
assert!(
|
||||
!data.as_array().unwrap().is_empty(),
|
||||
"Expected at least one node to appear"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_skimmed_active_mixnodes() {
|
||||
async fn test_get_skimmed_active_mixnodes() -> Result<(), String> {
|
||||
let url = format!(
|
||||
"{}/v1/unstable/nym-nodes/skimmed/mixnodes/active",
|
||||
base_url()
|
||||
base_url()?
|
||||
);
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
assert!(
|
||||
res.status().is_success(),
|
||||
"Expected 2xx but got {}",
|
||||
res.status()
|
||||
);
|
||||
|
||||
let json: Value = res
|
||||
.json()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to parse response as JSON: {}", err));
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
let current_epoch_id = json
|
||||
.get("status")
|
||||
.and_then(|r| r.get("fresh"))
|
||||
.and_then(|r| r.get("current_epoch_id"))
|
||||
.expect("Missing 'current_epoch_id'");
|
||||
.ok_or("Missing 'current_epoch_id'")?;
|
||||
|
||||
assert!(
|
||||
current_epoch_id.is_number(),
|
||||
"Expected 'current_epoch_id' to be an array"
|
||||
"Expected 'current_epoch_id' to be a number"
|
||||
);
|
||||
assert!(
|
||||
json.get("refreshed_at").is_some(),
|
||||
"Expected a value for 'refreshed_at'"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_skimmed_all_mixnodes() {
|
||||
let url = format!("{}/v1/unstable/nym-nodes/skimmed/mixnodes/all", base_url());
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
assert!(
|
||||
res.status().is_success(),
|
||||
"Expected 2xx but got {}",
|
||||
res.status()
|
||||
);
|
||||
|
||||
let json: Value = res
|
||||
.json()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to parse response as JSON: {}", err));
|
||||
async fn test_get_skimmed_all_mixnodes() -> Result<(), String> {
|
||||
let url = format!("{}/v1/unstable/nym-nodes/skimmed/mixnodes/all", base_url()?);
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
let current_epoch_id = json
|
||||
.get("status")
|
||||
.and_then(|r| r.get("fresh"))
|
||||
.and_then(|r| r.get("current_epoch_id"))
|
||||
.expect("Expected a value for 'current_epoch_id'");
|
||||
.ok_or("Missing 'current_epoch_id'")?;
|
||||
|
||||
assert!(
|
||||
current_epoch_id.is_number(),
|
||||
"Expected 'current_epoch_id' to be an array"
|
||||
"Expected 'current_epoch_id' to be a number"
|
||||
);
|
||||
assert!(
|
||||
json.get("refreshed_at").is_some(),
|
||||
"Expected a value for 'refreshed_at'"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_skimmed_active_exit_gateways() {
|
||||
async fn test_get_skimmed_active_exit_gateways() -> Result<(), String> {
|
||||
let url = format!(
|
||||
"{}/v1/unstable/nym-nodes/skimmed/exit-gateways/active",
|
||||
base_url()
|
||||
base_url()?
|
||||
);
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
assert!(
|
||||
res.status().is_success(),
|
||||
"Expected 2xx but got {}",
|
||||
res.status()
|
||||
);
|
||||
|
||||
let json: Value = res
|
||||
.json()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to parse response as JSON: {}", err));
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
let current_epoch_id = json
|
||||
.get("status")
|
||||
.and_then(|r| r.get("fresh"))
|
||||
.and_then(|r| r.get("current_epoch_id"))
|
||||
.expect("Expected a value for 'current_epoch_id'");
|
||||
.ok_or("Missing 'current_epoch_id'")?;
|
||||
|
||||
assert!(
|
||||
current_epoch_id.is_number(),
|
||||
"Expected 'current_epoch_id' to be an array"
|
||||
"Expected 'current_epoch_id' to be a number"
|
||||
);
|
||||
assert!(
|
||||
json.get("refreshed_at").is_some(),
|
||||
"Expected a value for 'refreshed_at'"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_skimmed_all_exit_gateways() {
|
||||
async fn test_get_skimmed_all_exit_gateways() -> Result<(), String> {
|
||||
let url = format!(
|
||||
"{}/v1/unstable/nym-nodes/skimmed/exit-gateways/all",
|
||||
base_url()
|
||||
base_url()?
|
||||
);
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
assert!(
|
||||
res.status().is_success(),
|
||||
"Expected 2xx but got {}",
|
||||
res.status()
|
||||
);
|
||||
|
||||
let json: Value = res
|
||||
.json()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to parse response as JSON: {}", err));
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
let current_epoch_id = json
|
||||
.get("status")
|
||||
.and_then(|r| r.get("fresh"))
|
||||
.and_then(|r| r.get("current_epoch_id"))
|
||||
.expect("Expected a value for 'current_epoch_id'");
|
||||
.ok_or("Missing 'current_epoch_id'")?;
|
||||
|
||||
assert!(
|
||||
current_epoch_id.is_number(),
|
||||
"Expected 'current_epoch_id' to be an array"
|
||||
"Expected 'current_epoch_id' to be a number"
|
||||
);
|
||||
assert!(
|
||||
json.get("refreshed_at").is_some(),
|
||||
"Expected a value for 'refreshed_at'"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_skimmed_active_entry_gateways() {
|
||||
async fn test_get_skimmed_active_entry_gateways() -> Result<(), String> {
|
||||
let url = format!(
|
||||
"{}/v1/unstable/nym-nodes/skimmed/entry-gateways/active",
|
||||
base_url()
|
||||
base_url()?
|
||||
);
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
assert!(
|
||||
res.status().is_success(),
|
||||
"Expected 2xx but got {}",
|
||||
res.status()
|
||||
);
|
||||
|
||||
let json: Value = res
|
||||
.json()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to parse response as JSON: {}", err));
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
let current_epoch_id = json
|
||||
.get("status")
|
||||
.and_then(|r| r.get("fresh"))
|
||||
.and_then(|r| r.get("current_epoch_id"))
|
||||
.expect("Expected a value for 'current_epoch_id'");
|
||||
.ok_or("Missing 'current_epoch_id'")?;
|
||||
|
||||
assert!(
|
||||
current_epoch_id.is_number(),
|
||||
"Expected 'current_epoch_id' to be an array"
|
||||
"Expected 'current_epoch_id' to be a number"
|
||||
);
|
||||
assert!(
|
||||
json.get("refreshed_at").is_some(),
|
||||
"Expected a value for 'refreshed_at'"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_skimmed_all_entry_gateways() {
|
||||
async fn test_get_skimmed_all_entry_gateways() -> Result<(), String> {
|
||||
let url = format!(
|
||||
"{}/v1/unstable/nym-nodes/skimmed/entry-gateways/all",
|
||||
base_url()
|
||||
base_url()?
|
||||
);
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
assert!(
|
||||
res.status().is_success(),
|
||||
"Expected 2xx but got {}",
|
||||
res.status()
|
||||
);
|
||||
|
||||
let json: Value = res
|
||||
.json()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to parse response as JSON: {}", err));
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
let current_epoch_id = json
|
||||
.get("status")
|
||||
.and_then(|r| r.get("fresh"))
|
||||
.and_then(|r| r.get("current_epoch_id"))
|
||||
.expect("Expected a value for 'current_epoch_id'");
|
||||
.ok_or("Missing 'current_epoch_id'")?;
|
||||
|
||||
assert!(
|
||||
current_epoch_id.is_number(),
|
||||
"Expected 'current_epoch_id' to be an array"
|
||||
"Expected 'current_epoch_id' to be a number"
|
||||
);
|
||||
assert!(
|
||||
json.get("refreshed_at").is_some(),
|
||||
"Expected a value for 'refreshed_at'"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// Add the remining tests as the endpoints become active
|
||||
|
||||
@@ -1,41 +1,29 @@
|
||||
use crate::utils::{base_url, get_gateway_identity_key, get_mixnode_node_id, test_client};
|
||||
use serde_json::Value;
|
||||
mod utils;
|
||||
use crate::utils::{
|
||||
base_url, get_gateway_identity_key, get_mixnode_node_id, make_request, test_client,
|
||||
validate_json_response,
|
||||
};
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_gateway_unstable_test_results() {
|
||||
let identity = get_gateway_identity_key().await;
|
||||
async fn test_get_gateway_unstable_test_results() -> Result<(), String> {
|
||||
let identity = get_gateway_identity_key().await?;
|
||||
let url = format!(
|
||||
"{}/v1/status/gateways/unstable/{}/test-results",
|
||||
base_url(),
|
||||
base_url()?,
|
||||
identity
|
||||
);
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
assert!(
|
||||
res.status().is_success(),
|
||||
"Expected 2xx but got {}",
|
||||
res.status()
|
||||
);
|
||||
|
||||
let json: Value = res
|
||||
.json()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Invalid JSON response: {}", err));
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
let data_array = json
|
||||
.get("data")
|
||||
.and_then(|v| v.as_array())
|
||||
.expect("Missing or invalid 'data' array");
|
||||
|
||||
.ok_or("Missing or invalid 'data' array")?;
|
||||
assert!(!data_array.is_empty(), "'data' array is empty");
|
||||
|
||||
let gateway = data_array[0]
|
||||
.get("test_routes")
|
||||
.and_then(|r| r.get("gateway"))
|
||||
.expect("Expected a value for 'test_routes.gateway'");
|
||||
|
||||
.ok_or("Expected a value for 'test_routes.gateway'")?;
|
||||
assert!(
|
||||
gateway.get("node_id").is_some(),
|
||||
"Expected a value for 'node_id' in gateway"
|
||||
@@ -44,43 +32,29 @@ async fn test_get_gateway_unstable_test_results() {
|
||||
gateway.get("identity_key").is_some(),
|
||||
"Expected a value for 'identity_key' in gateway"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_mixnode_unstable_test_results() {
|
||||
let mix_id = get_mixnode_node_id().await;
|
||||
async fn test_get_mixnode_unstable_test_results() -> Result<(), String> {
|
||||
let mix_id = get_mixnode_node_id().await?;
|
||||
let url = format!(
|
||||
"{}/v1/status/mixnodes/unstable/{}/test-results",
|
||||
base_url(),
|
||||
base_url()?,
|
||||
mix_id
|
||||
);
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
assert!(
|
||||
res.status().is_success(),
|
||||
"Expected 2xx but got {}",
|
||||
res.status()
|
||||
);
|
||||
|
||||
let json: Value = res
|
||||
.json()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Invalid JSON response: {}", err));
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
let data_array = json
|
||||
.get("data")
|
||||
.and_then(|v| v.as_array())
|
||||
.expect("Missing or invalid 'data' array");
|
||||
|
||||
.ok_or("Missing or invalid 'data' array")?;
|
||||
assert!(!data_array.is_empty(), "'data' array is empty");
|
||||
|
||||
let layer3 = data_array[0]
|
||||
.get("test_routes")
|
||||
.and_then(|r| r.get("layer3"))
|
||||
.expect("Expected a value for 'test_routes.layer3'");
|
||||
|
||||
.ok_or("Expected a value for 'test_routes.layer3'")?;
|
||||
assert!(
|
||||
layer3.get("node_id").is_some(),
|
||||
"Expected a value for 'node_id' in layer3"
|
||||
@@ -89,39 +63,32 @@ async fn test_get_mixnode_unstable_test_results() {
|
||||
layer3.get("identity_key").is_some(),
|
||||
"Expected a value for 'identity_key' in layer3"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_latest_network_monitor_run_details() {
|
||||
async fn test_get_latest_network_monitor_run_details() -> Result<(), String> {
|
||||
let url = format!(
|
||||
"{}/v1/status/network-monitor/unstable/run/latest/details",
|
||||
base_url()
|
||||
base_url()?
|
||||
);
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
assert!(
|
||||
res.status().is_success(),
|
||||
"Expected 2xx but got {}",
|
||||
res.status()
|
||||
);
|
||||
|
||||
let json: Value = res
|
||||
.json()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to parse response as JSON: {}", err));
|
||||
let res = make_request(&url).await?;
|
||||
let json = validate_json_response(res).await?;
|
||||
let monitor_run_id = json
|
||||
.get("monitor_run_id")
|
||||
.and_then(|v| v.as_number())
|
||||
.expect("Missing or invalid 'monitor_run_id'");
|
||||
.and_then(|v| v.as_u64())
|
||||
.ok_or("Missing or invalid 'monitor_run_id'")?;
|
||||
|
||||
let follow_up_url = format!(
|
||||
"{}/v1/status/network-monitor/unstable/run/{}/details",
|
||||
base_url(),
|
||||
base_url()?,
|
||||
monitor_run_id
|
||||
);
|
||||
let follow_up_res = test_client().get(&follow_up_url).send().await.unwrap();
|
||||
let follow_up_res = test_client()
|
||||
.get(&follow_up_url)
|
||||
.send()
|
||||
.await
|
||||
.map_err(|err| format!("Failed to follow up with URL {}: {}", follow_up_url, err))?;
|
||||
assert!(follow_up_res.status().is_success());
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -1,80 +1,94 @@
|
||||
use dotenv::dotenv;
|
||||
use reqwest::Client;
|
||||
use reqwest::Response;
|
||||
use reqwest::{Client, Response};
|
||||
use serde_json::Value;
|
||||
|
||||
#[allow(dead_code)]
|
||||
#[allow(clippy::panic)]
|
||||
pub fn test_client() -> Client {
|
||||
Client::new()
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
#[allow(clippy::panic)]
|
||||
pub fn base_url() -> String {
|
||||
pub fn base_url() -> Result<String, String> {
|
||||
dotenv().ok();
|
||||
|
||||
std::env::var("NYM_API").unwrap_or_else(|_err| {
|
||||
std::env::var("NYM_API")
|
||||
.unwrap_or_else(|_| panic!("Couldn't find NYM_API env var"))
|
||||
.trim_end_matches('/')
|
||||
.to_string()
|
||||
})
|
||||
std::env::var("NYM_API")
|
||||
.map(|url| url.trim_end_matches('/').to_string())
|
||||
.map_err(|_| "Couldn't find NYM_API env var".to_string())
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
#[allow(clippy::panic)]
|
||||
pub async fn validate_json_response(res: Response) -> Value {
|
||||
assert!(
|
||||
res.status().is_success(),
|
||||
"Expected 2xx but got {}",
|
||||
res.status()
|
||||
);
|
||||
let json: Value = res
|
||||
.json()
|
||||
pub async fn make_request(url: &str) -> Result<Response, String> {
|
||||
let res = test_client()
|
||||
.get(url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Invalid JSON response: {}", err));
|
||||
json
|
||||
.map_err(|err| format!("Failed to send request to {}: {}", url, err))?;
|
||||
|
||||
if res.status().is_success() {
|
||||
Ok(res)
|
||||
} else {
|
||||
Err(format!("Expected 2xx but got {}", res.status()))
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
#[allow(clippy::panic)]
|
||||
pub async fn get_any_node_id() -> String {
|
||||
let url = format!("{}/v1/nym-nodes/bonded", base_url());
|
||||
pub async fn validate_json_response(res: Response) -> Result<Value, String> {
|
||||
if !res.status().is_success() {
|
||||
return Err(format!("Expected 2xx but got {}", res.status()));
|
||||
}
|
||||
|
||||
res.json::<Value>()
|
||||
.await
|
||||
.map_err(|err| format!("Invalid JSON response: {}", err))
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
#[allow(clippy::panic)]
|
||||
pub async fn get_any_node_id() -> Result<String, String> {
|
||||
let url = format!("{}/v1/nym-nodes/bonded", base_url()?);
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
.map_err(|err| format!("Failed to send request to {}: {}", url, err))?;
|
||||
let json: Value = res
|
||||
.json()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to parse response as JSON: {}", err));
|
||||
.map_err(|err| format!("Failed to parse response as JSON: {}", err))?;
|
||||
|
||||
json.get("data")
|
||||
let id = json
|
||||
.get("data")
|
||||
.and_then(|list| list.as_array())
|
||||
.and_then(|arr| arr.first())
|
||||
.and_then(|node| node.get("bond_information"))
|
||||
.and_then(|n| n.get("node_id"))
|
||||
.and_then(|v| v.as_u64())
|
||||
.unwrap_or(0)
|
||||
.to_string()
|
||||
.unwrap_or(0);
|
||||
|
||||
Ok(id.to_string())
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
#[allow(clippy::panic)]
|
||||
pub async fn get_mixnode_node_id() -> u64 {
|
||||
let url = format!("{}/v1/nym-nodes/described", base_url());
|
||||
pub async fn get_mixnode_node_id() -> Result<u64, String> {
|
||||
let url = format!("{}/v1/nym-nodes/described", base_url()?);
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
.map_err(|err| format!("Failed to send request to {}: {}", url, err))?;
|
||||
let json: Value = res
|
||||
.json()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to parse response as JSON: {}", err));
|
||||
.map_err(|err| format!("Failed to parse response as JSON: {}", err))?;
|
||||
|
||||
json.get("data")
|
||||
.and_then(|v| v.as_array())
|
||||
.unwrap_or_else(|| panic!("Expected 'data' to be an array"))
|
||||
.ok_or("Expected 'data' to be an array".to_string())?
|
||||
.iter()
|
||||
.find(|entry| {
|
||||
entry
|
||||
@@ -85,26 +99,27 @@ pub async fn get_mixnode_node_id() -> u64 {
|
||||
.unwrap_or(true)
|
||||
})
|
||||
.and_then(|node| node.get("node_id").and_then(|v| v.as_u64()))
|
||||
.expect("Unable to find mixnode node id")
|
||||
.ok_or("Unable to find mixnode node id".to_string())
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
#[allow(clippy::panic)]
|
||||
pub async fn get_gateway_identity_key() -> String {
|
||||
let url = format!("{}/v1/nym-nodes/described", base_url());
|
||||
pub async fn get_gateway_identity_key() -> Result<String, String> {
|
||||
let url = format!("{}/v1/nym-nodes/described", base_url()?);
|
||||
let res = test_client()
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to send request to {}: {}", url, err));
|
||||
.map_err(|err| format!("Failed to send request to {}: {}", url, err))?;
|
||||
let json: Value = res
|
||||
.json()
|
||||
.await
|
||||
.unwrap_or_else(|err| panic!("Failed to parse response as JSON: {}", err));
|
||||
.map_err(|err| format!("Failed to parse response as JSON: {}", err))?;
|
||||
|
||||
json.get("data")
|
||||
let key = json
|
||||
.get("data")
|
||||
.and_then(|v| v.as_array())
|
||||
.unwrap_or_else(|| panic!("Expected 'data' to be an array"))
|
||||
.ok_or("Expected 'data' to be an array".to_string())?
|
||||
.iter()
|
||||
.find(|entry| {
|
||||
entry
|
||||
@@ -112,7 +127,7 @@ pub async fn get_gateway_identity_key() -> String {
|
||||
.and_then(|d| d.get("declared_role"))
|
||||
.and_then(|r| r.get("mixnode"))
|
||||
.and_then(|m| m.as_bool())
|
||||
.map(|is_mixnode| !is_mixnode) // we want gateways, not mixnodes
|
||||
.map(|is_mixnode| !is_mixnode)
|
||||
.unwrap_or(false)
|
||||
})
|
||||
.and_then(|node| {
|
||||
@@ -122,6 +137,7 @@ pub async fn get_gateway_identity_key() -> String {
|
||||
.and_then(|k| k.get("ed25519"))
|
||||
.and_then(|v| v.as_str())
|
||||
})
|
||||
.expect("Unable to find gateway identity key with mixnode = false")
|
||||
.to_string()
|
||||
.ok_or("Unable to find gateway identity key with mixnode = false".to_string())?;
|
||||
|
||||
Ok(key.to_string())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user