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

Side by Side Diff: net/spdy/spdy_alt_svc_wire_format_test.cc

Issue 1410343005: Update version parameter format in SpdyAltSvcWireFormat. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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/spdy/spdy_alt_svc_wire_format.cc ('k') | net/spdy/spdy_framer_test.cc » ('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 (c) 2015 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2015 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 4
5 #include "net/spdy/spdy_alt_svc_wire_format.h" 5 #include "net/spdy/spdy_alt_svc_wire_format.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "testing/gmock/include/gmock/gmock.h" 8 #include "testing/gmock/include/gmock/gmock.h"
9 #include "testing/platform_test.h" 9 #include "testing/platform_test.h"
10 10
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 } 87 }
88 if (i & 1 << 4) { 88 if (i & 1 << 4) {
89 header_field_value->append("; J=s"); 89 header_field_value->append("; J=s");
90 } 90 }
91 if (i & 1 << 5) { 91 if (i & 1 << 5) {
92 expected_altsvc->probability = 0.33; 92 expected_altsvc->probability = 0.33;
93 header_field_value->append("; P=\".33\""); 93 header_field_value->append("; P=\".33\"");
94 } 94 }
95 if (i & 1 << 6) { 95 if (i & 1 << 6) {
96 expected_altsvc->probability = 0.0; 96 expected_altsvc->probability = 0.0;
97 expected_altsvc->version = 24; 97 expected_altsvc->version.push_back(24);
98 header_field_value->append("; p=\"0\";v=24"); 98 header_field_value->append("; p=\"0\";v=\"24\"");
99 } 99 }
100 if (i & 1 << 7) { 100 if (i & 1 << 7) {
101 expected_altsvc->max_age = 999999999; 101 expected_altsvc->max_age = 999999999;
102 header_field_value->append("; Ma=999999999"); 102 header_field_value->append("; Ma=999999999");
103 } 103 }
104 if (i & 1 << 8) { 104 if (i & 1 << 8) {
105 expected_altsvc->probability = 0.0; 105 expected_altsvc->probability = 0.1;
106 header_field_value->append("; P=\"0.\""); 106 header_field_value->append("; P=\"0.1\"");
107 } 107 }
108 if (i & 1 << 9) { 108 if (i & 1 << 9) {
109 header_field_value->append(";"); 109 header_field_value->append(";");
110 } 110 }
111 if (i & 1 << 10) { 111 if (i & 1 << 10) {
112 header_field_value->append(" "); 112 header_field_value->append(" ");
113 } 113 }
114 if (i & 1 << 11) { 114 if (i & 1 << 11) {
115 header_field_value->append(","); 115 header_field_value->append(",");
116 } 116 }
(...skipping 12 matching lines...) Expand all
129 } 129 }
130 altsvc->protocol_id = "a=b%c"; 130 altsvc->protocol_id = "a=b%c";
131 altsvc->port = 42; 131 altsvc->port = 42;
132 expected_header_field_value->append("a%3Db%25c=\""); 132 expected_header_field_value->append("a%3Db%25c=\"");
133 if (i & 1 << 0) { 133 if (i & 1 << 0) {
134 altsvc->host = "foo\"bar\\baz"; 134 altsvc->host = "foo\"bar\\baz";
135 expected_header_field_value->append("foo\\\"bar\\\\baz"); 135 expected_header_field_value->append("foo\\\"bar\\\\baz");
136 } 136 }
137 expected_header_field_value->append(":42\""); 137 expected_header_field_value->append(":42\"");
138 if (i & 1 << 1) { 138 if (i & 1 << 1) {
139 altsvc->version = 24;
140 expected_header_field_value->append("; v=24");
141 }
142 if (i & 1 << 2) {
143 altsvc->max_age = 1111; 139 altsvc->max_age = 1111;
144 expected_header_field_value->append("; ma=1111"); 140 expected_header_field_value->append("; ma=1111");
145 } 141 }
146 if (i & 1 << 3) { 142 if (i & 1 << 2) {
147 altsvc->probability = 0.33; 143 altsvc->probability = 0.33;
148 expected_header_field_value->append("; p=\"0.33\""); 144 expected_header_field_value->append("; p=\"0.33\"");
149 } 145 }
146 if (i & 1 << 3) {
147 altsvc->version.push_back(24);
148 altsvc->version.push_back(25);
149 expected_header_field_value->append("; v=\"24,25\"");
150 }
150 } 151 }
151 152
152 class SpdyAltSvcWireFormatTest : public ::testing::Test {}; 153 class SpdyAltSvcWireFormatTest : public ::testing::Test {};
153 154
154 // Tests of public API. 155 // Tests of public API.
155 156
156 TEST(SpdyAltSvcWireFormatTest, DefaultValues) { 157 TEST(SpdyAltSvcWireFormatTest, DefaultValues) {
157 SpdyAltSvcWireFormat::AlternativeService altsvc; 158 SpdyAltSvcWireFormat::AlternativeService altsvc;
158 EXPECT_EQ("", altsvc.protocol_id); 159 EXPECT_EQ("", altsvc.protocol_id);
159 EXPECT_EQ("", altsvc.host); 160 EXPECT_EQ("", altsvc.host);
160 EXPECT_EQ(0u, altsvc.port); 161 EXPECT_EQ(0u, altsvc.port);
161 EXPECT_EQ(0u, altsvc.version);
162 EXPECT_EQ(86400u, altsvc.max_age); 162 EXPECT_EQ(86400u, altsvc.max_age);
163 EXPECT_DOUBLE_EQ(1.0, altsvc.probability); 163 EXPECT_DOUBLE_EQ(1.0, altsvc.probability);
164 EXPECT_TRUE(altsvc.version.empty());
164 } 165 }
165 166
166 TEST(SpdyAltSvcWireFormatTest, ParseInvalidEmptyHeaderFieldValue) { 167 TEST(SpdyAltSvcWireFormatTest, ParseInvalidEmptyHeaderFieldValue) {
167 SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector; 168 SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector;
168 ASSERT_FALSE(SpdyAltSvcWireFormat::ParseHeaderFieldValue("", &altsvc_vector)); 169 ASSERT_FALSE(SpdyAltSvcWireFormat::ParseHeaderFieldValue("", &altsvc_vector));
169 } 170 }
170 171
171 TEST(SpdyAltSvcWireFormatTest, ParseHeaderFieldValueClear) { 172 TEST(SpdyAltSvcWireFormatTest, ParseHeaderFieldValueClear) {
172 SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector; 173 SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector;
173 ASSERT_TRUE( 174 ASSERT_TRUE(
174 SpdyAltSvcWireFormat::ParseHeaderFieldValue("clear", &altsvc_vector)); 175 SpdyAltSvcWireFormat::ParseHeaderFieldValue("clear", &altsvc_vector));
175 EXPECT_EQ(0u, altsvc_vector.size()); 176 EXPECT_EQ(0u, altsvc_vector.size());
176 } 177 }
177 178
178 // Fuzz test of ParseHeaderFieldValue() with optional whitespaces, ignored 179 // Fuzz test of ParseHeaderFieldValue() with optional whitespaces, ignored
179 // parameters, duplicate parameters, trailing space, trailing alternate service 180 // parameters, duplicate parameters, trailing space, trailing alternate service
180 // separator, etc. Single alternative service at a time. 181 // separator, etc. Single alternative service at a time.
181 TEST(SpdyAltSvcWireFormatTest, ParseHeaderFieldValue) { 182 TEST(SpdyAltSvcWireFormatTest, ParseHeaderFieldValue) {
182 for (int i = 0; i < 1 << 13; ++i) { 183 for (int i = 0; i < 1 << 13; ++i) {
183 std::string header_field_value; 184 std::string header_field_value;
184 SpdyAltSvcWireFormat::AlternativeService expected_altsvc; 185 SpdyAltSvcWireFormat::AlternativeService expected_altsvc;
185 FuzzHeaderFieldValue(i, &header_field_value, &expected_altsvc); 186 FuzzHeaderFieldValue(i, &header_field_value, &expected_altsvc);
186 SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector; 187 SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector;
187 ASSERT_TRUE(SpdyAltSvcWireFormat::ParseHeaderFieldValue(header_field_value, 188 ASSERT_TRUE(SpdyAltSvcWireFormat::ParseHeaderFieldValue(header_field_value,
188 &altsvc_vector)); 189 &altsvc_vector));
189 ASSERT_EQ(1u, altsvc_vector.size()); 190 ASSERT_EQ(1u, altsvc_vector.size());
190 EXPECT_EQ(expected_altsvc.protocol_id, altsvc_vector[0].protocol_id); 191 EXPECT_EQ(expected_altsvc.protocol_id, altsvc_vector[0].protocol_id);
191 EXPECT_EQ(expected_altsvc.host, altsvc_vector[0].host); 192 EXPECT_EQ(expected_altsvc.host, altsvc_vector[0].host);
192 EXPECT_EQ(expected_altsvc.port, altsvc_vector[0].port); 193 EXPECT_EQ(expected_altsvc.port, altsvc_vector[0].port);
193 EXPECT_EQ(expected_altsvc.version, altsvc_vector[0].version);
194 EXPECT_EQ(expected_altsvc.max_age, altsvc_vector[0].max_age); 194 EXPECT_EQ(expected_altsvc.max_age, altsvc_vector[0].max_age);
195 EXPECT_DOUBLE_EQ(expected_altsvc.probability, altsvc_vector[0].probability); 195 EXPECT_DOUBLE_EQ(expected_altsvc.probability, altsvc_vector[0].probability);
196 EXPECT_EQ(expected_altsvc.version, altsvc_vector[0].version);
196 197
197 // Roundtrip test starting with |altsvc_vector|. 198 // Roundtrip test starting with |altsvc_vector|.
198 std::string reserialized_header_field_value = 199 std::string reserialized_header_field_value =
199 SpdyAltSvcWireFormat::SerializeHeaderFieldValue(altsvc_vector); 200 SpdyAltSvcWireFormat::SerializeHeaderFieldValue(altsvc_vector);
200 SpdyAltSvcWireFormat::AlternativeServiceVector roundtrip_altsvc_vector; 201 SpdyAltSvcWireFormat::AlternativeServiceVector roundtrip_altsvc_vector;
201 ASSERT_TRUE(SpdyAltSvcWireFormat::ParseHeaderFieldValue( 202 ASSERT_TRUE(SpdyAltSvcWireFormat::ParseHeaderFieldValue(
202 reserialized_header_field_value, &roundtrip_altsvc_vector)); 203 reserialized_header_field_value, &roundtrip_altsvc_vector));
203 ASSERT_EQ(1u, roundtrip_altsvc_vector.size()); 204 ASSERT_EQ(1u, roundtrip_altsvc_vector.size());
204 EXPECT_EQ(expected_altsvc.protocol_id, 205 EXPECT_EQ(expected_altsvc.protocol_id,
205 roundtrip_altsvc_vector[0].protocol_id); 206 roundtrip_altsvc_vector[0].protocol_id);
206 EXPECT_EQ(expected_altsvc.host, roundtrip_altsvc_vector[0].host); 207 EXPECT_EQ(expected_altsvc.host, roundtrip_altsvc_vector[0].host);
207 EXPECT_EQ(expected_altsvc.port, roundtrip_altsvc_vector[0].port); 208 EXPECT_EQ(expected_altsvc.port, roundtrip_altsvc_vector[0].port);
208 EXPECT_EQ(expected_altsvc.version, roundtrip_altsvc_vector[0].version);
209 EXPECT_EQ(expected_altsvc.max_age, roundtrip_altsvc_vector[0].max_age); 209 EXPECT_EQ(expected_altsvc.max_age, roundtrip_altsvc_vector[0].max_age);
210 EXPECT_DOUBLE_EQ(expected_altsvc.probability, 210 EXPECT_DOUBLE_EQ(expected_altsvc.probability,
211 roundtrip_altsvc_vector[0].probability); 211 roundtrip_altsvc_vector[0].probability);
212 EXPECT_EQ(expected_altsvc.version, roundtrip_altsvc_vector[0].version);
212 } 213 }
213 } 214 }
214 215
215 // Fuzz test of ParseHeaderFieldValue() with optional whitespaces, ignored 216 // Fuzz test of ParseHeaderFieldValue() with optional whitespaces, ignored
216 // parameters, duplicate parameters, trailing space, trailing alternate service 217 // parameters, duplicate parameters, trailing space, trailing alternate service
217 // separator, etc. Possibly multiple alternative service at a time. 218 // separator, etc. Possibly multiple alternative service at a time.
218 TEST(SpdyAltSvcWireFormatTest, ParseHeaderFieldValueMultiple) { 219 TEST(SpdyAltSvcWireFormatTest, ParseHeaderFieldValueMultiple) {
219 for (int i = 0; i < 1 << 13;) { 220 for (int i = 0; i < 1 << 13;) {
220 std::string header_field_value; 221 std::string header_field_value;
221 SpdyAltSvcWireFormat::AlternativeServiceVector expected_altsvc_vector; 222 SpdyAltSvcWireFormat::AlternativeServiceVector expected_altsvc_vector;
222 // This will generate almost two hundred header field values with two, 223 // This will generate almost two hundred header field values with two,
223 // three, four, five, six, and seven alternative services each, and 224 // three, four, five, six, and seven alternative services each, and
224 // thousands with a single one. 225 // thousands with a single one.
225 do { 226 do {
226 SpdyAltSvcWireFormat::AlternativeService expected_altsvc; 227 SpdyAltSvcWireFormat::AlternativeService expected_altsvc;
227 FuzzHeaderFieldValue(i, &header_field_value, &expected_altsvc); 228 FuzzHeaderFieldValue(i, &header_field_value, &expected_altsvc);
228 expected_altsvc_vector.push_back(expected_altsvc); 229 expected_altsvc_vector.push_back(expected_altsvc);
229 ++i; 230 ++i;
230 } while ((i < 1 << 13) && (i % 6 < i % 7)); 231 } while ((i < 1 << 13) && (i % 6 < i % 7));
231 SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector; 232 SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector;
232 ASSERT_TRUE(SpdyAltSvcWireFormat::ParseHeaderFieldValue(header_field_value, 233 ASSERT_TRUE(SpdyAltSvcWireFormat::ParseHeaderFieldValue(header_field_value,
233 &altsvc_vector)); 234 &altsvc_vector));
234 ASSERT_EQ(expected_altsvc_vector.size(), altsvc_vector.size()); 235 ASSERT_EQ(expected_altsvc_vector.size(), altsvc_vector.size());
235 for (unsigned int j = 0; j < altsvc_vector.size(); ++j) { 236 for (unsigned int j = 0; j < altsvc_vector.size(); ++j) {
236 EXPECT_EQ(expected_altsvc_vector[j].protocol_id, 237 EXPECT_EQ(expected_altsvc_vector[j].protocol_id,
237 altsvc_vector[j].protocol_id); 238 altsvc_vector[j].protocol_id);
238 EXPECT_EQ(expected_altsvc_vector[j].host, altsvc_vector[j].host); 239 EXPECT_EQ(expected_altsvc_vector[j].host, altsvc_vector[j].host);
239 EXPECT_EQ(expected_altsvc_vector[j].port, altsvc_vector[j].port); 240 EXPECT_EQ(expected_altsvc_vector[j].port, altsvc_vector[j].port);
240 EXPECT_EQ(expected_altsvc_vector[j].version, altsvc_vector[j].version);
241 EXPECT_EQ(expected_altsvc_vector[j].max_age, altsvc_vector[j].max_age); 241 EXPECT_EQ(expected_altsvc_vector[j].max_age, altsvc_vector[j].max_age);
242 EXPECT_DOUBLE_EQ(expected_altsvc_vector[j].probability, 242 EXPECT_DOUBLE_EQ(expected_altsvc_vector[j].probability,
243 altsvc_vector[j].probability); 243 altsvc_vector[j].probability);
244 EXPECT_EQ(expected_altsvc_vector[j].version, altsvc_vector[j].version);
244 } 245 }
245 246
246 // Roundtrip test starting with |altsvc_vector|. 247 // Roundtrip test starting with |altsvc_vector|.
247 std::string reserialized_header_field_value = 248 std::string reserialized_header_field_value =
248 SpdyAltSvcWireFormat::SerializeHeaderFieldValue(altsvc_vector); 249 SpdyAltSvcWireFormat::SerializeHeaderFieldValue(altsvc_vector);
249 SpdyAltSvcWireFormat::AlternativeServiceVector roundtrip_altsvc_vector; 250 SpdyAltSvcWireFormat::AlternativeServiceVector roundtrip_altsvc_vector;
250 ASSERT_TRUE(SpdyAltSvcWireFormat::ParseHeaderFieldValue( 251 ASSERT_TRUE(SpdyAltSvcWireFormat::ParseHeaderFieldValue(
251 reserialized_header_field_value, &roundtrip_altsvc_vector)); 252 reserialized_header_field_value, &roundtrip_altsvc_vector));
252 ASSERT_EQ(expected_altsvc_vector.size(), roundtrip_altsvc_vector.size()); 253 ASSERT_EQ(expected_altsvc_vector.size(), roundtrip_altsvc_vector.size());
253 for (unsigned int j = 0; j < roundtrip_altsvc_vector.size(); ++j) { 254 for (unsigned int j = 0; j < roundtrip_altsvc_vector.size(); ++j) {
254 EXPECT_EQ(expected_altsvc_vector[j].protocol_id, 255 EXPECT_EQ(expected_altsvc_vector[j].protocol_id,
255 roundtrip_altsvc_vector[j].protocol_id); 256 roundtrip_altsvc_vector[j].protocol_id);
256 EXPECT_EQ(expected_altsvc_vector[j].host, 257 EXPECT_EQ(expected_altsvc_vector[j].host,
257 roundtrip_altsvc_vector[j].host); 258 roundtrip_altsvc_vector[j].host);
258 EXPECT_EQ(expected_altsvc_vector[j].port, 259 EXPECT_EQ(expected_altsvc_vector[j].port,
259 roundtrip_altsvc_vector[j].port); 260 roundtrip_altsvc_vector[j].port);
260 EXPECT_EQ(expected_altsvc_vector[j].version,
261 roundtrip_altsvc_vector[j].version);
262 EXPECT_EQ(expected_altsvc_vector[j].max_age, 261 EXPECT_EQ(expected_altsvc_vector[j].max_age,
263 roundtrip_altsvc_vector[j].max_age); 262 roundtrip_altsvc_vector[j].max_age);
264 EXPECT_DOUBLE_EQ(expected_altsvc_vector[j].probability, 263 EXPECT_DOUBLE_EQ(expected_altsvc_vector[j].probability,
265 roundtrip_altsvc_vector[j].probability); 264 roundtrip_altsvc_vector[j].probability);
265 EXPECT_EQ(expected_altsvc_vector[j].version,
266 roundtrip_altsvc_vector[j].version);
266 } 267 }
267 } 268 }
268 } 269 }
269 270
270 TEST(SpdyAltSvcWireFormatTest, SerializeEmptyHeaderFieldValue) { 271 TEST(SpdyAltSvcWireFormatTest, SerializeEmptyHeaderFieldValue) {
271 SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector; 272 SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector;
272 EXPECT_EQ("clear", 273 EXPECT_EQ("clear",
273 SpdyAltSvcWireFormat::SerializeHeaderFieldValue(altsvc_vector)); 274 SpdyAltSvcWireFormat::SerializeHeaderFieldValue(altsvc_vector));
274 } 275 }
275 276
276 // Test ParseHeaderFieldValue() and SerializeHeaderFieldValue() on the same pair 277 // Test ParseHeaderFieldValue() and SerializeHeaderFieldValue() on the same pair
277 // of |expected_header_field_value| and |altsvc|, with and without hostname and 278 // of |expected_header_field_value| and |altsvc|, with and without hostname and
278 // each 279 // each
279 // parameter. Single alternative service at a time. 280 // parameter. Single alternative service at a time.
280 TEST(SpdyAltSvcWireFormatTest, RoundTrip) { 281 TEST(SpdyAltSvcWireFormatTest, RoundTrip) {
281 for (int i = 0; i < 1 << 4; ++i) { 282 for (int i = 0; i < 1 << 4; ++i) {
282 SpdyAltSvcWireFormat::AlternativeService altsvc; 283 SpdyAltSvcWireFormat::AlternativeService altsvc;
283 std::string expected_header_field_value; 284 std::string expected_header_field_value;
284 FuzzAlternativeService(i, &altsvc, &expected_header_field_value); 285 FuzzAlternativeService(i, &altsvc, &expected_header_field_value);
285 286
286 // Test ParseHeaderFieldValue(). 287 // Test ParseHeaderFieldValue().
287 SpdyAltSvcWireFormat::AlternativeServiceVector parsed_altsvc_vector; 288 SpdyAltSvcWireFormat::AlternativeServiceVector parsed_altsvc_vector;
288 ASSERT_TRUE(SpdyAltSvcWireFormat::ParseHeaderFieldValue( 289 ASSERT_TRUE(SpdyAltSvcWireFormat::ParseHeaderFieldValue(
289 expected_header_field_value, &parsed_altsvc_vector)); 290 expected_header_field_value, &parsed_altsvc_vector));
290 ASSERT_EQ(1u, parsed_altsvc_vector.size()); 291 ASSERT_EQ(1u, parsed_altsvc_vector.size());
291 EXPECT_EQ(altsvc.protocol_id, parsed_altsvc_vector[0].protocol_id); 292 EXPECT_EQ(altsvc.protocol_id, parsed_altsvc_vector[0].protocol_id);
292 EXPECT_EQ(altsvc.host, parsed_altsvc_vector[0].host); 293 EXPECT_EQ(altsvc.host, parsed_altsvc_vector[0].host);
293 EXPECT_EQ(altsvc.port, parsed_altsvc_vector[0].port); 294 EXPECT_EQ(altsvc.port, parsed_altsvc_vector[0].port);
294 EXPECT_EQ(altsvc.version, parsed_altsvc_vector[0].version);
295 EXPECT_EQ(altsvc.max_age, parsed_altsvc_vector[0].max_age); 295 EXPECT_EQ(altsvc.max_age, parsed_altsvc_vector[0].max_age);
296 EXPECT_DOUBLE_EQ(altsvc.probability, parsed_altsvc_vector[0].probability); 296 EXPECT_DOUBLE_EQ(altsvc.probability, parsed_altsvc_vector[0].probability);
297 EXPECT_EQ(altsvc.version, parsed_altsvc_vector[0].version);
297 298
298 // Test SerializeHeaderFieldValue(). 299 // Test SerializeHeaderFieldValue().
299 SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector; 300 SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector;
300 altsvc_vector.push_back(altsvc); 301 altsvc_vector.push_back(altsvc);
301 EXPECT_EQ(expected_header_field_value, 302 EXPECT_EQ(expected_header_field_value,
302 SpdyAltSvcWireFormat::SerializeHeaderFieldValue(altsvc_vector)); 303 SpdyAltSvcWireFormat::SerializeHeaderFieldValue(altsvc_vector));
303 } 304 }
304 } 305 }
305 306
306 // Test ParseHeaderFieldValue() and SerializeHeaderFieldValue() on the same pair 307 // Test ParseHeaderFieldValue() and SerializeHeaderFieldValue() on the same pair
(...skipping 15 matching lines...) Expand all
322 expected_header_field_value, &parsed_altsvc_vector)); 323 expected_header_field_value, &parsed_altsvc_vector));
323 ASSERT_EQ(altsvc_vector.size(), parsed_altsvc_vector.size()); 324 ASSERT_EQ(altsvc_vector.size(), parsed_altsvc_vector.size());
324 SpdyAltSvcWireFormat::AlternativeServiceVector::iterator expected_it = 325 SpdyAltSvcWireFormat::AlternativeServiceVector::iterator expected_it =
325 altsvc_vector.begin(); 326 altsvc_vector.begin();
326 SpdyAltSvcWireFormat::AlternativeServiceVector::iterator parsed_it = 327 SpdyAltSvcWireFormat::AlternativeServiceVector::iterator parsed_it =
327 parsed_altsvc_vector.begin(); 328 parsed_altsvc_vector.begin();
328 for (; expected_it != altsvc_vector.end(); ++expected_it, ++parsed_it) { 329 for (; expected_it != altsvc_vector.end(); ++expected_it, ++parsed_it) {
329 EXPECT_EQ(expected_it->protocol_id, parsed_it->protocol_id); 330 EXPECT_EQ(expected_it->protocol_id, parsed_it->protocol_id);
330 EXPECT_EQ(expected_it->host, parsed_it->host); 331 EXPECT_EQ(expected_it->host, parsed_it->host);
331 EXPECT_EQ(expected_it->port, parsed_it->port); 332 EXPECT_EQ(expected_it->port, parsed_it->port);
332 EXPECT_EQ(expected_it->version, parsed_it->version);
333 EXPECT_EQ(expected_it->max_age, parsed_it->max_age); 333 EXPECT_EQ(expected_it->max_age, parsed_it->max_age);
334 EXPECT_DOUBLE_EQ(expected_it->probability, parsed_it->probability); 334 EXPECT_DOUBLE_EQ(expected_it->probability, parsed_it->probability);
335 EXPECT_EQ(expected_it->version, parsed_it->version);
335 } 336 }
336 337
337 // Test SerializeHeaderFieldValue(). 338 // Test SerializeHeaderFieldValue().
338 EXPECT_EQ(expected_header_field_value, 339 EXPECT_EQ(expected_header_field_value,
339 SpdyAltSvcWireFormat::SerializeHeaderFieldValue(altsvc_vector)); 340 SpdyAltSvcWireFormat::SerializeHeaderFieldValue(altsvc_vector));
340 } 341 }
341 342
342 // ParseHeaderFieldValue() should return false on malformed field values: 343 // ParseHeaderFieldValue() should return false on malformed field values:
343 // invalid percent encoding, unmatched quotation mark, empty port, non-numeric 344 // invalid percent encoding, unmatched quotation mark, empty port, non-numeric
344 // characters in numeric fields, negative or larger than 1.0 probability. 345 // characters in numeric fields, negative or larger than 1.0 probability.
345 TEST(SpdyAltSvcWireFormatTest, ParseHeaderFieldValueInvalid) { 346 TEST(SpdyAltSvcWireFormatTest, ParseHeaderFieldValueInvalid) {
346 SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector; 347 SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector;
347 const char* invalid_field_value_array[] = {"a%", "a%x", "a%b", "a%9z", 348 const char* invalid_field_value_array[] = {"a%", "a%x", "a%b", "a%9z",
348 "a=", "a=\"", "a=\"b\"", "a=\":\"", "a=\"c:\"", "a=\"c:foo\"", 349 "a=", "a=\"", "a=\"b\"", "a=\":\"", "a=\"c:\"", "a=\"c:foo\"",
349 "a=\"c:42foo\"", "a=\"b:42\"bar", "a=\"b:42\" ; m", 350 "a=\"c:42foo\"", "a=\"b:42\"bar", "a=\"b:42\" ; m",
350 "a=\"b:42\" ; min-age", "a=\"b:42\" ; ma", "a=\"b:42\" ; ma=", 351 "a=\"b:42\" ; min-age", "a=\"b:42\" ; ma", "a=\"b:42\" ; ma=",
351 "a=\"b:42\" ; ma=ma", "a=\"b:42\" ; ma=123bar", "a=\"b:42\" ; p=\"-2\"", 352 "a=\"b:42\" ; ma=ma", "a=\"b:42\" ; ma=123bar", "a=\"b:42\" ; p=\"-2\"",
352 "a=\"b:42\" ; p=\"..\"", "a=\"b:42\" ; p=\"1.05\"", "a=\"b:42\" ; p=0.4", 353 "a=\"b:42\" ; p=\"..\"", "a=\"b:42\" ; p=\"1.05\"", "a=\"b:42\" ; p=0.4",
353 "a=\"b:42\" ; p=\" 1.0\"", "a=\"b:42\" ; v=-3", "a=\"b:42\" ; v=1.2"}; 354 "a=\"b:42\" ; p=\" 1.0\"", "a=\"b:42\" ; v=24", "a=\"b:42\" ; v=24,25",
355 "a=\"b:42\" ; v=\"-3\"", "a=\"b:42\" ; v=\"1.2\"",
356 "a=\"b:42\" ; v=\"24,\""};
354 for (const char* invalid_field_value : invalid_field_value_array) { 357 for (const char* invalid_field_value : invalid_field_value_array) {
355 EXPECT_FALSE(SpdyAltSvcWireFormat::ParseHeaderFieldValue( 358 EXPECT_FALSE(SpdyAltSvcWireFormat::ParseHeaderFieldValue(
356 invalid_field_value, &altsvc_vector)) 359 invalid_field_value, &altsvc_vector))
357 << invalid_field_value; 360 << invalid_field_value;
358 } 361 }
359 } 362 }
360 363
361 // ParseHeaderFieldValue() should return false on a field values truncated 364 // ParseHeaderFieldValue() should return false on a field values truncated
362 // before closing quotation mark, without trying to access memory beyond the end 365 // before closing quotation mark, without trying to access memory beyond the end
363 // of the input. 366 // of the input.
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
583 StringPiece input(invalid_input); 586 StringPiece input(invalid_input);
584 double probability; 587 double probability;
585 EXPECT_FALSE(test::SpdyAltSvcWireFormatPeer::ParseProbability( 588 EXPECT_FALSE(test::SpdyAltSvcWireFormatPeer::ParseProbability(
586 input.begin(), input.end(), &probability)); 589 input.begin(), input.end(), &probability));
587 } 590 }
588 } 591 }
589 592
590 } // namespace 593 } // namespace
591 594
592 } // namespace net 595 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_alt_svc_wire_format.cc ('k') | net/spdy/spdy_framer_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698