blob: 6bff47909f773e378b7804273036e947d5ab1349 [file] [log] [blame]
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");
}