Misc bug fixes related to stream state (#273)

This patch includes two new significant debug assertions:

* Assert stream counts are zero when the connection finalizes.
* Assert all stream state has been released when the connection is 
  dropped.

These two assertions were added in an effort to test the fix provided
by #261. In doing so, many related bugs have been discovered and fixed.
The details related to these bugs can be found in #273.
This commit is contained in:
Carl Lerche
2018-05-09 15:03:21 -07:00
committed by GitHub
parent b4383b6a8c
commit cf62b783e0
11 changed files with 319 additions and 144 deletions

View File

@@ -258,6 +258,13 @@ impl Mock<frame::GoAway> {
frame::Reason::FRAME_SIZE_ERROR,
))
}
pub fn no_error(self) -> Self {
Mock(frame::GoAway::new(
self.0.last_stream_id(),
frame::Reason::NO_ERROR,
))
}
}
impl From<Mock<frame::GoAway>> for SendFrame {

View File

@@ -839,6 +839,7 @@ fn rst_while_closing() {
// Send the RST_STREAM frame which causes the client to panic.
.send_frame(frames::reset(1).cancel())
.ping_pong([1; 8])
.recv_frame(frames::go_away(0).no_error())
.close();
;
@@ -1038,6 +1039,7 @@ fn send_err_with_buffered_data() {
.recv_frame(
frames::data(1, vec![0; 16_384]))
.recv_frame(frames::reset(1).cancel())
.recv_frame(frames::go_away(0).no_error())
.close()
;