Skip to content

Commit 17f82a0

Browse files
authored
Merge pull request #73 from http-rs/append-headr
Append headers on client response instead of overwriting them
2 parents d29bf81 + b9cf20e commit 17f82a0

File tree

6 files changed

+29
-7
lines changed

6 files changed

+29
-7
lines changed

src/client.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ where
174174
for header in httparse_res.headers.iter() {
175175
let name = HeaderName::from_str(header.name)?;
176176
let value = HeaderValue::from_str(std::str::from_utf8(header.value)?)?;
177-
res.insert_header(name, value)?;
177+
res.append_header(name, value)?;
178178
}
179179

180180
if res.header(&DATE).is_none() {

tests/client.rs

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
use crate::common::fixture_path;
22
use async_h1::client;
33
use async_std::fs::File;
4-
use async_std::io::SeekFrom;
5-
use async_std::prelude::*;
64
use http_types::{headers, Method, Request, StatusCode};
75
use url::Url;
86

@@ -12,7 +10,11 @@ use common::TestCase;
1210

1311
#[async_std::test]
1412
async fn test_encode_request_add_date() {
15-
let case = TestCase::new_client("fixtures/request1.txt", "fixtures/response1.txt").await;
13+
let case = TestCase::new_client(
14+
"fixtures/request-add-date.txt",
15+
"fixtures/response-add-date.txt",
16+
)
17+
.await;
1618

1719
let url = Url::parse("http://localhost:8080").unwrap();
1820
let mut req = Request::new(Method::Post, url);
@@ -26,12 +28,22 @@ async fn test_encode_request_add_date() {
2628

2729
#[async_std::test]
2830
async fn test_response_no_date() {
29-
let mut response_fixture = File::open(fixture_path("fixtures/response-no-date.txt"))
31+
let response_fixture = File::open(fixture_path("fixtures/response-no-date.txt"))
3032
.await
3133
.unwrap();
32-
response_fixture.seek(SeekFrom::Start(0)).await.unwrap();
3334

3435
let res = client::decode(response_fixture).await.unwrap();
3536

3637
pretty_assertions::assert_eq!(res.header(&headers::DATE).is_some(), true);
3738
}
39+
40+
#[async_std::test]
41+
async fn test_multiple_header_values_for_same_header_name() {
42+
let response_fixture = File::open(fixture_path("fixtures/response-multiple-cookies.txt"))
43+
.await
44+
.unwrap();
45+
46+
let res = client::decode(response_fixture).await.unwrap();
47+
48+
pretty_assertions::assert_eq!(res.header(&headers::SET_COOKIE).unwrap().len(), 2);
49+
}
File renamed without changes.
File renamed without changes.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
HTTP/1.1 200 OK
2+
host: example.com
3+
content-length: 0
4+
set-cookie: sessionId=e8bb43229de9
5+
set-cookie: qwerty=219ffwef9w0f
6+

tests/server.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@ mod common;
77

88
#[async_std::test]
99
async fn test_basic_request() {
10-
let case = TestCase::new_server("fixtures/request1.txt", "fixtures/response1.txt").await;
10+
let case = TestCase::new_server(
11+
"fixtures/request-add-date.txt",
12+
"fixtures/response-add-date.txt",
13+
)
14+
.await;
1115
let addr = "http://example.com";
1216

1317
async_h1::accept(addr, case.clone(), |_req| async {

0 commit comments

Comments
 (0)