in optee-utee/src/extension.rs [309:340]
fn test_invoke_with_writer() {
let plugin = LoadablePlugin {
uuid: Uuid::parse_str("7dd54ee6-a705-4e4d-8b6b-aa5024dfcd10").unwrap(),
};
// impl a writer for Command
struct Wrapper<'a, 'b>(&'b mut LoadablePluginCommand<'a>);
impl<'a, 'b> std::io::Write for Wrapper<'a, 'b> {
fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
self.0.write_body(buf);
Ok(buf.len())
}
fn flush(&mut self) -> std::io::Result<()> {
Ok(())
}
}
// serialize data into command directly
let test_data = serde_json::json!({
"code": 100,
"message": "error"
});
let mut exp_request = serde_json::to_vec(&test_data).unwrap();
let buffer_len = exp_request.len() * 2;
let (cmd, sub_cmd, _, exp_response) = generate_test_pairs(0, buffer_len);
let mut plugin_cmd = plugin.invoke_with_capacity(cmd, sub_cmd, buffer_len);
exp_request.resize(exp_response.len(), 0);
set_ree_expected_value(cmd, sub_cmd, exp_request);
set_ree_return_value(cmd, sub_cmd, exp_response.clone());
serde_json::to_writer(Wrapper(&mut plugin_cmd), &test_data).unwrap();
let response = plugin_cmd.call().unwrap();
std::println!("*TA*: response is {:?}", response);
assert_eq!(response, exp_response);
}