use exonum_node::ExternalMessage;
use exonum_testkit::{ApiKind, TestKit, TestKitBuilder};
use pretty_assertions::assert_eq;
use exonum_system_api::{
private::{ConsensusStatus, NodeInfo, NodeStats},
SystemApiPlugin,
};
fn create_testkit() -> TestKit {
TestKitBuilder::validator()
.with_validators(2)
.with_plugin(SystemApiPlugin)
.build()
}
#[tokio::test]
async fn info() {
let mut testkit = create_testkit();
let api = testkit.api();
let info: NodeInfo = api.private(ApiKind::System).get("v1/info").await.unwrap();
assert_eq!(info.consensus_status, ConsensusStatus::Enabled);
assert!(info.connected_peers.is_empty());
assert_eq!(info.rust_version.major, 1);
}
#[tokio::test]
async fn stats() {
let mut testkit = create_testkit();
let api = testkit.api();
let info: NodeStats = api.private(ApiKind::System).get("v1/stats").await.unwrap();
assert_eq!(info.height, 0);
assert_eq!(info.tx_cache_size, 0);
}
#[tokio::test]
async fn shutdown() {
let mut testkit = create_testkit();
let api = testkit.api();
api.private(ApiKind::System)
.post::<()>("v1/shutdown")
.await
.unwrap();
let control_messages = testkit.poll_control_messages();
match control_messages.as_slice() {
[ExternalMessage::Shutdown] => {}
_ => panic!("Unexpected control messages: {:?}", control_messages),
}
}