use motorcortex_rust::core::Request;
use motorcortex_rust::{ConnectionOptions, StatusCode};
use crate::{CERT_PATH, URL_REQ};
#[tokio::test]
async fn test_async_request_parameter_tree_populates_cache() {
let req = Request::new();
let opts = ConnectionOptions::new(CERT_PATH.to_string(), 5000, 5000);
req.connect(URL_REQ, opts).await.expect("connect");
{
let tree = req.parameter_tree();
let guard = tree.read().unwrap();
assert!(
guard.get_parameter_info("root/Control/dummyDouble").is_none(),
"fresh cache must not know server parameters",
);
}
let status = req
.request_parameter_tree()
.await
.expect("tree RPC completes");
assert_eq!(status, StatusCode::Ok);
{
let tree = req.parameter_tree();
let guard = tree.read().unwrap();
assert!(
guard.get_parameter_info("root/Control/dummyDouble").is_some(),
"tree cache should contain root/Control/dummyDouble after refresh",
);
assert!(
guard
.get_parameter_data_type("root/Control/dummyDouble")
.is_some()
);
}
req.disconnect().await.expect("disconnect");
}
#[tokio::test]
async fn test_async_get_parameter_tree_hash_returns_nonzero() {
let req = Request::new();
let opts = ConnectionOptions::new(CERT_PATH.to_string(), 5000, 5000);
req.connect(URL_REQ, opts).await.expect("connect");
let hash = req
.get_parameter_tree_hash()
.await
.expect("hash RPC completes");
assert_ne!(hash, 0, "expected non-zero hash for a populated tree");
req.disconnect().await.expect("disconnect");
}
#[tokio::test]
async fn test_async_connect_to_convenience_constructor() {
let opts = ConnectionOptions::new(CERT_PATH.to_string(), 5000, 5000);
let req = Request::connect_to(URL_REQ, opts)
.await
.expect("connect_to must succeed against the test server");
req.request_parameter_tree().await.expect("tree");
req.disconnect().await.expect("disconnect");
}
#[tokio::test]
async fn test_async_tree_cache_visible_on_cloned_handle() {
let req = Request::new();
let opts = ConnectionOptions::new(CERT_PATH.to_string(), 5000, 5000);
req.connect(URL_REQ, opts).await.expect("connect");
req.request_parameter_tree().await.expect("tree");
let clone = req.clone();
let tree = clone.parameter_tree();
{
let guard = tree.read().unwrap();
assert!(guard.get_parameter_info("root/Control/dummyDouble").is_some());
}
req.disconnect().await.expect("disconnect");
}