| #include "http2/adapter/oghttp2_util.h" | |
| #include <utility> | |
| #include <vector> | |
| #include "http2/adapter/http2_protocol.h" | |
| #include "http2/adapter/test_frame_sequence.h" | |
| #include "common/platform/api/quiche_test.h" | |
| namespace http2 { | |
| namespace adapter { | |
| namespace test { | |
| namespace { | |
| using HeaderPair = std::pair<absl::string_view, absl::string_view>; | |
| TEST(ToHeaderBlock, EmptySpan) { | |
| spdy::SpdyHeaderBlock block = ToHeaderBlock({}); | |
| EXPECT_TRUE(block.empty()); | |
| } | |
| TEST(ToHeaderBlock, ExampleRequestHeaders) { | |
| const std::vector<HeaderPair> pairs = {{":authority", "example.com"}, | |
| {":method", "GET"}, | |
| {":path", "/example.html"}, | |
| {":scheme", "http"}, | |
| {"accept", "text/plain, text/html"}}; | |
| const std::vector<Header> headers = ToHeaders(pairs); | |
| spdy::SpdyHeaderBlock block = ToHeaderBlock(headers); | |
| EXPECT_THAT(block, testing::ElementsAreArray(pairs)); | |
| } | |
| TEST(ToHeaderBlock, ExampleResponseHeaders) { | |
| const std::vector<HeaderPair> pairs = { | |
| {":status", "403"}, | |
| {"content-length", "1023"}, | |
| {"x-extra-info", "humblest apologies"}}; | |
| const std::vector<Header> headers = ToHeaders(pairs); | |
| spdy::SpdyHeaderBlock block = ToHeaderBlock(headers); | |
| EXPECT_THAT(block, testing::ElementsAreArray(pairs)); | |
| } | |
| TEST(ToHeaderBlock, RepeatedRequestHeaderNames) { | |
| const std::vector<HeaderPair> pairs = { | |
| {":authority", "example.com"}, {":method", "GET"}, | |
| {":path", "/example.html"}, {":scheme", "http"}, | |
| {"cookie", "chocolate_chips=yes"}, {"accept", "text/plain, text/html"}, | |
| {"cookie", "raisins=no"}}; | |
| const std::vector<HeaderPair> expected = { | |
| {":authority", "example.com"}, | |
| {":method", "GET"}, | |
| {":path", "/example.html"}, | |
| {":scheme", "http"}, | |
| {"cookie", "chocolate_chips=yes; raisins=no"}, | |
| {"accept", "text/plain, text/html"}}; | |
| const std::vector<Header> headers = ToHeaders(pairs); | |
| spdy::SpdyHeaderBlock block = ToHeaderBlock(headers); | |
| EXPECT_THAT(block, testing::ElementsAreArray(expected)); | |
| } | |
| TEST(ToHeaderBlock, RepeatedResponseHeaderNames) { | |
| const std::vector<HeaderPair> pairs = { | |
| {":status", "403"}, {"x-extra-info", "sorry"}, | |
| {"content-length", "1023"}, {"x-extra-info", "humblest apologies"}, | |
| {"content-length", "1024"}, {"set-cookie", "chocolate_chips=yes"}, | |
| {"set-cookie", "raisins=no"}}; | |
| const std::vector<HeaderPair> expected = { | |
| {":status", "403"}, | |
| {"x-extra-info", absl::string_view("sorry\0humblest apologies", 24)}, | |
| {"content-length", absl::string_view("1023" | |
| "\0" | |
| "1024", | |
| 9)}, | |
| {"set-cookie", absl::string_view("chocolate_chips=yes\0raisins=no", 30)}}; | |
| const std::vector<Header> headers = ToHeaders(pairs); | |
| spdy::SpdyHeaderBlock block = ToHeaderBlock(headers); | |
| EXPECT_THAT(block, testing::ElementsAreArray(expected)); | |
| } | |
| } // namespace | |
| } // namespace test | |
| } // namespace adapter | |
| } // namespace http2 |