Fix flaky test_recv_mmsg_batch_size (#6399)

automerge
This commit is contained in:
Pankaj Garg
2019-10-16 11:01:41 -07:00
committed by Grimes
parent 1fd84cb52b
commit a258e1e0b3

View File

@ -221,34 +221,41 @@ mod tests {
let reader = UdpSocket::bind("127.0.0.1:0").expect("bind"); let reader = UdpSocket::bind("127.0.0.1:0").expect("bind");
let addr = reader.local_addr().unwrap(); let addr = reader.local_addr().unwrap();
let sender = UdpSocket::bind("127.0.0.1:0").expect("bind"); let sender = UdpSocket::bind("127.0.0.1:0").expect("bind");
let sent = TEST_NUM_MSGS;
const TEST_BATCH_SIZE: usize = 64;
let sent = TEST_BATCH_SIZE;
let mut elapsed_in_max_batch = 0;
(0..1000).for_each(|_| {
for _ in 0..sent { for _ in 0..sent {
let data = [0; PACKET_DATA_SIZE]; let data = [0; PACKET_DATA_SIZE];
sender.send_to(&data[..], &addr).unwrap(); sender.send_to(&data[..], &addr).unwrap();
} }
let mut packets = vec![Packet::default(); TEST_BATCH_SIZE];
let now = Instant::now(); let now = Instant::now();
let mut packets = vec![Packet::default(); TEST_NUM_MSGS];
let recv = recv_mmsg(&reader, &mut packets[..]).unwrap().1; let recv = recv_mmsg(&reader, &mut packets[..]).unwrap().1;
assert_eq!(TEST_NUM_MSGS, recv); elapsed_in_max_batch += now.elapsed().as_nanos();
let elapsed_in_max_batch = now.elapsed().as_millis(); assert_eq!(TEST_BATCH_SIZE, recv);
});
let mut elapsed_in_small_batch = 0;
(0..1000).for_each(|_| {
for _ in 0..sent { for _ in 0..sent {
let data = [0; PACKET_DATA_SIZE]; let data = [0; PACKET_DATA_SIZE];
sender.send_to(&data[..], &addr).unwrap(); sender.send_to(&data[..], &addr).unwrap();
} }
let mut packets = vec![Packet::default(); 4];
let now = Instant::now();
let mut packets = vec![Packet::default(); TEST_NUM_MSGS / 4];
let mut recv = 0; let mut recv = 0;
let now = Instant::now();
while let Ok(num) = recv_mmsg(&reader, &mut packets[..]) { while let Ok(num) = recv_mmsg(&reader, &mut packets[..]) {
recv += num.1; recv += num.1;
if recv >= TEST_NUM_MSGS { if recv >= TEST_BATCH_SIZE {
break; break;
} }
} }
assert_eq!(TEST_NUM_MSGS, recv); elapsed_in_small_batch += now.elapsed().as_nanos();
let elapsed_in_small_batch = now.elapsed().as_millis(); assert_eq!(TEST_BATCH_SIZE, recv);
});
assert!(elapsed_in_max_batch <= elapsed_in_small_batch); assert!(elapsed_in_max_batch <= elapsed_in_small_batch);
} }