fix(server): coerce responses with HTTP2 version to HTTP/1.1 when protocol is 1.x

This commit is contained in:
Sean McArthur
2018-08-10 13:07:52 -07:00
parent 853266d873
commit 195fbb2a37
2 changed files with 32 additions and 0 deletions

View File

@@ -1542,6 +1542,25 @@ fn streaming_body() {
rt.block_on(fut.join(rx)).unwrap();
}
#[test]
fn http1_response_with_http2_version() {
let server = serve();
let addr_str = format!("http://{}", server.addr());
let mut rt = Runtime::new().expect("runtime new");
server
.reply()
.version(hyper::Version::HTTP_2);
rt.block_on(hyper::rt::lazy(move || {
let client = Client::new();
let uri = addr_str.parse().expect("server addr should parse");
client.get(uri)
})).unwrap();
}
#[test]
fn try_h2() {
let server = serve();
@@ -1641,6 +1660,11 @@ impl<'a> ReplyBuilder<'a> {
self
}
fn version(self, version: hyper::Version) -> Self {
self.tx.send(Reply::Version(version)).unwrap();
self
}
fn header<V: AsRef<str>>(self, name: &str, value: V) -> Self {
let name = HeaderName::from_bytes(name.as_bytes()).expect("header name");
let value = HeaderValue::from_str(value.as_ref()).expect("header value");
@@ -1681,6 +1705,7 @@ struct TestService {
#[derive(Debug)]
enum Reply {
Status(hyper::StatusCode),
Version(hyper::Version),
Header(HeaderName, HeaderValue),
Body(hyper::Body),
End,
@@ -1718,6 +1743,9 @@ impl TestService {
Reply::Status(s) => {
*res.status_mut() = s;
},
Reply::Version(v) => {
*res.version_mut() = v;
},
Reply::Header(name, value) => {
res.headers_mut().insert(name, value);
},