in quic/s2n-quic-transport/src/stream/receive_stream/tests.rs [459:528]
fn reset_stream() {
for is_waiting in &[false, true] {
for has_buffered_data in &[false, true] {
let mut test_env = setup_receive_only_test_env();
assert_eq!(
stream_interests(&[]),
test_env.stream.get_stream_interests()
);
if *is_waiting {
test_env.assert_no_read_data();
}
// If we have buffered data, then it should be dropped after the
// reset is received.
if *has_buffered_data {
let mut events = StreamEvents::new();
assert!(test_env
.stream
.on_data(
&stream_data(
test_env.stream.stream_id,
VarInt::from_u8(0),
&[0, 1, 2, 3],
false
),
&mut events
)
.is_ok());
if *is_waiting {
assert_eq!(1, events.waker_count());
} else {
assert_eq!(0, events.waker_count());
}
events.wake_all();
}
let reset_frame = ResetStream {
stream_id: test_env.stream.stream_id.into(),
application_error_code: VarInt::from_u8(0),
final_size: VarInt::new(test_env.stream.receive_stream.receive_buffer.len() as u64)
.unwrap(),
};
let mut events = StreamEvents::new();
assert!(test_env.stream.on_reset(&reset_frame, &mut events).is_ok());
if *is_waiting && !*has_buffered_data {
assert_eq!(1, events.waker_count());
} else {
assert_eq!(0, events.waker_count());
}
events.wake_all();
assert_eq!(
stream_interests(&[]),
test_env.stream.get_stream_interests()
);
test_env.assert_pop_error();
if *is_waiting {
assert_eq!(test_env.wake_counter, 1);
} else {
assert_eq!(test_env.wake_counter, 0);
}
assert_eq!(
stream_interests(&["fin"]),
test_env.stream.get_stream_interests()
);
}
}
}