87 lines
2.9 KiB
Rust
87 lines
2.9 KiB
Rust
use trusty::{TipcChannel, DEFAULT_DEVICE};
|
|
|
|
const ECHO_NAME: &str = "com.android.ipc-unittest.srv.echo";
|
|
|
|
#[test]
|
|
fn recv_no_alloc() {
|
|
let mut connection = TipcChannel::connect(DEFAULT_DEVICE, ECHO_NAME)
|
|
.expect("Failed to connect to Trusty service");
|
|
|
|
// Send a message to the echo TA.
|
|
let send_buf = [7u8; 32];
|
|
connection.send(send_buf.as_slice()).unwrap();
|
|
|
|
// Receive the response message from the TA. The response message will be the
|
|
// same as the message we just sent.
|
|
let mut recv_buf = [0u8; 32];
|
|
let read_len = connection.recv_no_alloc(recv_buf.as_mut_slice()).unwrap();
|
|
|
|
assert_eq!(
|
|
send_buf.len(),
|
|
read_len,
|
|
"Received data was wrong size (expected {} bytes, received {})",
|
|
send_buf.len(),
|
|
read_len,
|
|
);
|
|
assert_eq!(send_buf, recv_buf, "Received data does not match sent data");
|
|
}
|
|
|
|
#[test]
|
|
fn recv_small_buf() {
|
|
let mut connection = TipcChannel::connect(DEFAULT_DEVICE, ECHO_NAME)
|
|
.expect("Failed to connect to Trusty service");
|
|
|
|
// Send a long message to the echo service so that we can test receiving a long
|
|
// message.
|
|
let send_buf = [7u8; 2048];
|
|
connection.send(send_buf.as_slice()).unwrap();
|
|
|
|
// Attempt to receive the response message with a buffer that is too small to
|
|
// contain the message.
|
|
let mut recv_buf = [0u8; 32];
|
|
let err = connection.recv_no_alloc(recv_buf.as_mut_slice()).unwrap_err();
|
|
|
|
assert_eq!(
|
|
Some(libc::EMSGSIZE),
|
|
err.raw_os_error(),
|
|
"Unexpected error err when receiving incoming message: {:?}",
|
|
err,
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn recv_empty_vec() {
|
|
let mut connection = TipcChannel::connect(DEFAULT_DEVICE, ECHO_NAME)
|
|
.expect("Failed to connect to Trusty service");
|
|
|
|
// Send a message to the echo TA.
|
|
let send_buf = [7u8; 2048];
|
|
connection.send(send_buf.as_slice()).unwrap();
|
|
|
|
// Receive the response message. `recv_buf` is initially empty, and `recv` is
|
|
// responsible for allocating enough space to hold the message.
|
|
let mut recv_buf = Vec::new();
|
|
connection.recv(&mut recv_buf).unwrap();
|
|
|
|
assert_eq!(send_buf.as_slice(), recv_buf, "Received data does not match sent data");
|
|
}
|
|
|
|
#[test]
|
|
fn recv_vec_existing_capacity() {
|
|
let mut connection = TipcChannel::connect(DEFAULT_DEVICE, ECHO_NAME)
|
|
.expect("Failed to connect to Trusty service");
|
|
|
|
// Send a message to the echo TA.
|
|
let send_buf = [7u8; 2048];
|
|
connection.send(send_buf.as_slice()).unwrap();
|
|
|
|
// Receive the response message into a buffer that already has enough capacity
|
|
// to hold the message. No additional capacity should be allocated when
|
|
// receiving the message.
|
|
let mut recv_buf = Vec::with_capacity(2048);
|
|
connection.recv(&mut recv_buf).unwrap();
|
|
|
|
assert_eq!(send_buf.as_slice(), recv_buf, "Received data does not match sent data");
|
|
assert_eq!(2048, recv_buf.capacity(), "Additional capacity was allocated when not needed");
|
|
}
|