fix panic when a stream is canceled (#164)

This commit is contained in:
Sean McArthur
2017-10-20 17:47:58 -07:00
committed by GitHub
parent 0ed1460016
commit 75db186378
3 changed files with 38 additions and 1 deletions

View File

@@ -135,3 +135,36 @@ fn sent_invalid_authority() {
srv.join(client).wait().expect("wait");
}
#[test]
fn sends_reset_cancel_when_body_is_dropped() {
let _ = ::env_logger::init();
let (io, client) = mock::new();
let client = client
.assert_server_handshake()
.unwrap()
.recv_settings()
.send_frame(
frames::headers(1)
.request("POST", "https://example.com/")
)
.recv_frame(frames::headers(1).response(200).eos())
.recv_frame(frames::reset(1).cancel())
.close();
let srv = Server::handshake(io).expect("handshake").and_then(|srv| {
srv.into_future().unwrap().and_then(|(reqstream, srv)| {
let (req, mut stream) = reqstream.unwrap();
assert_eq!(req.method(), &http::Method::POST);
let rsp = http::Response::builder().status(200).body(()).unwrap();
stream.send_response(rsp, true).unwrap();
srv.into_future().unwrap()
})
});
srv.join(client).wait().expect("wait");
}

View File

@@ -258,6 +258,11 @@ impl Mock<frame::Reset> {
let id = self.0.stream_id();
Mock(frame::Reset::new(id, frame::Reason::REFUSED_STREAM))
}
pub fn cancel(self) -> Self {
let id = self.0.stream_id();
Mock(frame::Reset::new(id, frame::Reason::CANCEL))
}
}
impl From<Mock<frame::Reset>> for SendFrame {