base/src: Add Unix StreamChannel Message test

Prior to this CL, the StreamChannel in base/src/sys/unix had no tests
for FramingMode::Message. This CL adds a test for that framing mode.

Bug: b:231641496
Change-Id: I75e13709d558258eca838c3190aaf0237e39513b
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/3793688
Reviewed-by: Noah Gold <nkgold@google.com>
Commit-Queue: Clarissa Garvey <clarissagarvey@chromium.org>
Tested-by: Clarissa Garvey <clarissagarvey@chromium.org>
This commit is contained in:
Clarissa Garvey 2022-07-29 01:17:23 +00:00 committed by crosvm LUCI
parent 0076579e95
commit 00be3d5180

View file

@ -181,7 +181,7 @@ mod test {
}
#[test]
fn test_non_blocking_pair() {
fn test_non_blocking_pair_byte() {
let (mut sender, mut receiver) =
StreamChannel::pair(BlockingMode::Nonblocking, FramingMode::Byte).unwrap();
@ -220,6 +220,43 @@ mod test {
);
}
#[test]
fn test_non_blocking_pair_message() {
let (mut sender, mut receiver) =
StreamChannel::pair(BlockingMode::Nonblocking, FramingMode::Message).unwrap();
sender.write_all(&[75, 77, 54, 82, 76, 65]).unwrap();
// Wait for the data to arrive.
let event_ctx: EventContext<Token> =
EventContext::build_with(&[(receiver.get_read_notifier(), Token::ReceivedData)])
.unwrap();
let events = event_ctx.wait().unwrap();
let tokens: Vec<Token> = events
.iter()
.filter(|e| e.is_readable)
.map(|e| e.token)
.collect();
assert_eq!(tokens, vec! {Token::ReceivedData});
// Unlike Byte format, Message mode panics if the buffer is smaller than the packet size;
// make the buffer the right size.
let mut recv_buffer: [u8; 6] = [0; 6];
let size = receiver.read(&mut recv_buffer).unwrap();
assert_eq!(size, 6);
assert_eq!(recv_buffer, [75, 77, 54, 82, 76, 65]);
// Now that we've polled for & received all data, polling again should show no events.
assert_eq!(
event_ctx
.wait_timeout(std::time::Duration::new(0, 0))
.unwrap()
.len(),
0
);
}
#[test]
fn test_non_blocking_pair_error_no_data() {
let (mut sender, mut receiver) =