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"); }