Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1197)

Side by Side Diff: net/quic/core/spdy_utils_test.cc

Issue 2850573002: Landing Recent QUIC changes until 3:35 PM, Apr 26, 2017 UTC-4 (Closed)
Patch Set: Remove Disconnect from ~QuicTestClient Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/quic/core/spdy_utils.cc ('k') | net/quic/platform/api/quic_endian.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 #include "net/quic/core/spdy_utils.h" 4 #include "net/quic/core/spdy_utils.h"
5 5
6 #include "base/macros.h" 6 #include "base/macros.h"
7 #include "net/quic/platform/api/quic_string_piece.h" 7 #include "net/quic/platform/api/quic_string_piece.h"
8 #include "net/quic/platform/api/quic_text_utils.h" 8 #include "net/quic/platform/api/quic_text_utils.h"
9 #include "net/test/gtest_util.h" 9 #include "net/test/gtest_util.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
11 11
12 using std::string; 12 using std::string;
13 using testing::UnorderedElementsAre; 13 using testing::UnorderedElementsAre;
14 using testing::Pair; 14 using testing::Pair;
15 15
16 namespace net { 16 namespace net {
17 namespace test { 17 namespace test {
18 18
19 TEST(SpdyUtilsTest, SerializeAndParseHeaders) {
20 // Creates a SpdyHeaderBlock with some key->value pairs, serializes it, then
21 // parses the serialized output and verifies that the end result is the same
22 // as the headers that the test started with.
23
24 SpdyHeaderBlock input_headers;
25 input_headers[":pseudo1"] = "pseudo value1";
26 input_headers[":pseudo2"] = "pseudo value2";
27 input_headers["key1"] = "value1";
28 const int64_t kContentLength = 1234;
29 input_headers["content-length"] =
30 QuicTextUtils::Uint64ToString(kContentLength);
31 input_headers["key2"] = "value2";
32
33 // Serialize the header block.
34 string serialized_headers =
35 SpdyUtils::SerializeUncompressedHeaders(input_headers);
36
37 // Take the serialized header block, and parse back into SpdyHeaderBlock.
38 SpdyHeaderBlock output_headers;
39 int64_t content_length = -1;
40 ASSERT_TRUE(SpdyUtils::ParseHeaders(serialized_headers.data(),
41 serialized_headers.size(),
42 &content_length, &output_headers));
43
44 // Should be back to the original headers.
45 EXPECT_EQ(content_length, kContentLength);
46 EXPECT_EQ(output_headers, input_headers);
47 }
48
49 TEST(SpdyUtilsTest, SerializeAndParseHeadersLargeContentLength) {
50 // Creates a SpdyHeaderBlock with some key->value pairs, serializes it, then
51 // parses the serialized output and verifies that the end result is the same
52 // as the headers that the test started with.
53
54 SpdyHeaderBlock input_headers;
55 input_headers[":pseudo1"] = "pseudo value1";
56 input_headers[":pseudo2"] = "pseudo value2";
57 input_headers["key1"] = "value1";
58 const int64_t kContentLength = 12345678900;
59 input_headers["content-length"] =
60 QuicTextUtils::Uint64ToString(kContentLength);
61 input_headers["key2"] = "value2";
62
63 // Serialize the header block.
64 string serialized_headers =
65 SpdyUtils::SerializeUncompressedHeaders(input_headers);
66
67 // Take the serialized header block, and parse back into SpdyHeaderBlock.
68 SpdyHeaderBlock output_headers;
69 int64_t content_length = -1;
70 ASSERT_TRUE(SpdyUtils::ParseHeaders(serialized_headers.data(),
71 serialized_headers.size(),
72 &content_length, &output_headers));
73
74 // Should be back to the original headers.
75 EXPECT_EQ(content_length, kContentLength);
76 EXPECT_EQ(output_headers, input_headers);
77 }
78
79 TEST(SpdyUtilsTest, SerializeAndParseValidTrailers) {
80 // Creates a SpdyHeaderBlock with some valid Trailers key->value pairs,
81 // serializes it, then parses the serialized output and verifies that the end
82 // result is the same as the trailers that the test started with.
83 SpdyHeaderBlock input_trailers;
84 const size_t kFinalOffset = 5678;
85 input_trailers[kFinalOffsetHeaderKey] =
86 QuicTextUtils::Uint64ToString(kFinalOffset);
87 input_trailers["key1"] = "value1";
88 input_trailers["key2"] = "value2";
89
90 // Serialize the trailers.
91 string serialized_trailers =
92 SpdyUtils::SerializeUncompressedHeaders(input_trailers);
93
94 // Take the serialized trailers, and parse back into a SpdyHeaderBlock.
95 SpdyHeaderBlock output_trailers;
96 size_t final_byte_offset = 0;
97 EXPECT_TRUE(SpdyUtils::ParseTrailers(serialized_trailers.data(),
98 serialized_trailers.size(),
99 &final_byte_offset, &output_trailers));
100
101 // Should be back to the original trailers, without the final offset header.
102 EXPECT_EQ(final_byte_offset, kFinalOffset);
103 input_trailers.erase(kFinalOffsetHeaderKey);
104 EXPECT_EQ(output_trailers, input_trailers);
105 }
106
107 TEST(SpdyUtilsTest, SerializeAndParseTrailersWithoutFinalOffset) {
108 // Verifies that parsing fails if Trailers are missing a final offset header.
109
110 SpdyHeaderBlock input_trailers;
111 input_trailers["key1"] = "value1";
112 input_trailers["key2"] = "value2";
113
114 // Serialize the trailers.
115 string serialized_trailers =
116 SpdyUtils::SerializeUncompressedHeaders(input_trailers);
117
118 // Parsing the serialized trailers fails because of the missing final offset.
119 SpdyHeaderBlock output_trailers;
120 size_t final_byte_offset = 0;
121 EXPECT_FALSE(SpdyUtils::ParseTrailers(serialized_trailers.data(),
122 serialized_trailers.size(),
123 &final_byte_offset, &output_trailers));
124 EXPECT_EQ(final_byte_offset, 0u);
125 }
126
127 TEST(SpdyUtilsTest, SerializeAndParseTrailersWithPseudoHeaders) {
128 // Verifies that parsing fails if Trailers include pseudo-headers.
129
130 SpdyHeaderBlock input_trailers;
131 input_trailers[kFinalOffsetHeaderKey] = "12345";
132 input_trailers[":disallowed-pseudo-header"] = "pseudo value";
133 input_trailers["key1"] = "value1";
134 input_trailers["key2"] = "value2";
135
136 // Serialize the trailers.
137 string serialized_trailers =
138 SpdyUtils::SerializeUncompressedHeaders(input_trailers);
139
140 // Parsing the serialized trailers fails because of the extra pseudo header.
141 SpdyHeaderBlock output_trailers;
142 size_t final_byte_offset = 0;
143 EXPECT_FALSE(SpdyUtils::ParseTrailers(serialized_trailers.data(),
144 serialized_trailers.size(),
145 &final_byte_offset, &output_trailers));
146 }
147 static std::unique_ptr<QuicHeaderList> FromList( 19 static std::unique_ptr<QuicHeaderList> FromList(
148 const QuicHeaderList::ListType& src) { 20 const QuicHeaderList::ListType& src) {
149 std::unique_ptr<QuicHeaderList> headers(new QuicHeaderList); 21 std::unique_ptr<QuicHeaderList> headers(new QuicHeaderList);
150 headers->OnHeaderBlockStart(); 22 headers->OnHeaderBlockStart();
151 for (const auto& p : src) { 23 for (const auto& p : src) {
152 headers->OnHeader(p.first, p.second); 24 headers->OnHeader(p.first, p.second);
153 } 25 }
154 headers->OnHeaderBlockEnd(0); 26 headers->OnHeaderBlockEnd(0);
155 return headers; 27 return headers;
156 } 28 }
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 TEST(SpdyUtilsTest, PopulateHeaderBlockFromUrlFails) { 250 TEST(SpdyUtilsTest, PopulateHeaderBlockFromUrlFails) {
379 SpdyHeaderBlock headers; 251 SpdyHeaderBlock headers;
380 EXPECT_FALSE(SpdyUtils::PopulateHeaderBlockFromUrl("/", &headers)); 252 EXPECT_FALSE(SpdyUtils::PopulateHeaderBlockFromUrl("/", &headers));
381 EXPECT_FALSE(SpdyUtils::PopulateHeaderBlockFromUrl("/index.html", &headers)); 253 EXPECT_FALSE(SpdyUtils::PopulateHeaderBlockFromUrl("/index.html", &headers));
382 EXPECT_FALSE( 254 EXPECT_FALSE(
383 SpdyUtils::PopulateHeaderBlockFromUrl("www.google.com/", &headers)); 255 SpdyUtils::PopulateHeaderBlockFromUrl("www.google.com/", &headers));
384 } 256 }
385 257
386 } // namespace test 258 } // namespace test
387 } // namespace net 259 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/spdy_utils.cc ('k') | net/quic/platform/api/quic_endian.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698