Skip to content

Commit d004690

Browse files
committed
Add test for issue #11
1 parent d489d2d commit d004690

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

tests/stream_states.rs

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,60 @@ fn recv_goaway_finishes_processed_streams() {
367367
h2.join(srv).wait().expect("wait");
368368
}
369369

370+
#[test]
371+
fn skipped_stream_ids_are_implicitly_closed() {
372+
let _ = ::env_logger::init();
373+
let (io, srv) = mock::new();
374+
375+
let srv = srv
376+
.assert_client_handshake()
377+
.expect("handshake")
378+
.recv_settings()
379+
.recv_frame(frames::headers(5)
380+
.request("GET", "https://example.com/")
381+
.eos(),
382+
)
383+
// send the response on a lower-numbered stream, which should be
384+
// implicitly closed.
385+
.send_frame(frames::headers(3).response(200));
386+
387+
let h2 = Client::builder()
388+
.initial_stream_id(5)
389+
.handshake::<_, Bytes>(io)
390+
.expect("handshake")
391+
.and_then(|(mut client, h2)| {
392+
let request = Request::builder()
393+
.method(Method::GET)
394+
.uri("https://example.com/")
395+
.body(())
396+
.unwrap();
397+
398+
let req = client.send_request(request, true)
399+
.unwrap()
400+
.0.then(|res| {
401+
let err = res.unwrap_err();
402+
assert_eq!(
403+
err.to_string(),
404+
"protocol error: unspecific protocol error detected");
405+
Ok::<(), ()>(())
406+
});
407+
// client should see a conn error
408+
let conn = h2.then(|res| {
409+
let err = res.unwrap_err();
410+
assert_eq!(
411+
err.to_string(),
412+
"protocol error: unspecific protocol error detected"
413+
);
414+
Ok::<(), ()>(())
415+
});
416+
conn.unwrap().join(req)
417+
});
418+
419+
420+
h2.join(srv).wait().expect("wait");
421+
422+
}
423+
370424
/*
371425
#[test]
372426
fn send_data_after_headers_eos() {

0 commit comments

Comments
 (0)