use motorcortex_rust::core::Request;
use motorcortex_rust::{ConnectionOptions, StatusCode};
use crate::common::parameters::{test_values, test_vectors};
use crate::{CERT_PATH, URL_REQ};
#[tokio::test]
async fn test_async_broad_type_conversions() {
let req = Request::connect_to(
URL_REQ,
ConnectionOptions::new(CERT_PATH.to_string(), 5000, 5000),
)
.await
.expect("connect");
req.request_parameter_tree().await.expect("tree");
test_values(&req).await;
test_vectors(&req).await;
req.disconnect().await.expect("disconnect");
}
#[tokio::test]
async fn test_async_set_then_get_parameter_round_trip() {
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 populated");
let status = req
.set_parameter("root/Control/dummyDouble", 2.345f64)
.await
.expect("set RPC completes");
assert_eq!(status, StatusCode::Ok);
let read_back: f64 = req
.get_parameter("root/Control/dummyDouble")
.await
.expect("get RPC completes");
assert_eq!(read_back, 2.345);
req.disconnect().await.expect("disconnect");
}
#[tokio::test]
async fn test_async_set_parameters_and_get_parameters_tuple() {
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 paths = [
"root/Control/dummyBool",
"root/Control/dummyDouble",
"root/Control/dummyInt32",
];
let written = (true, 1.999, 67i32);
req.set_parameters(&paths, written)
.await
.expect("set_parameters");
let read: (bool, f64, i32) = req
.get_parameters(&paths)
.await
.expect("get_parameters");
assert_eq!(read, written);
req.disconnect().await.expect("disconnect");
}
#[tokio::test]
async fn test_async_single_element_tuple_round_trip() {
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");
req.set_parameters(&["root/Control/dummyBool"], (true,))
.await
.expect("set_parameters");
let (b,): (bool,) = req
.get_parameters(&["root/Control/dummyBool"])
.await
.expect("get_parameters");
assert!(b);
req.disconnect().await.expect("disconnect");
}
#[tokio::test]
async fn test_async_set_parameter_cross_typed_reads() {
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");
req.set_parameter("root/Control/dummyDouble", 7.0f64)
.await
.unwrap();
let as_f32: f32 = req
.get_parameter("root/Control/dummyDouble")
.await
.unwrap();
assert_eq!(as_f32, 7.0);
let as_i64: i64 = req
.get_parameter("root/Control/dummyDouble")
.await
.unwrap();
assert_eq!(as_i64, 7);
let as_string: String = req
.get_parameter("root/Control/dummyDouble")
.await
.unwrap();
assert_eq!(as_string, "7");
req.disconnect().await.expect("disconnect");
}