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

Side by Side Diff: net/spdy/chromium/buffered_spdy_framer_unittest.cc

Issue 2847133003: Add NetLog event for invalid Http/2 response header (Closed)
Patch Set: address comments 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/spdy/chromium/buffered_spdy_framer.cc ('k') | net/spdy/chromium/header_coalescer.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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/chromium/buffered_spdy_framer.h" 5 #include "net/spdy/chromium/buffered_spdy_framer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "net/log/net_log_with_source.h"
11 #include "net/spdy/chromium/spdy_test_util_common.h" 12 #include "net/spdy/chromium/spdy_test_util_common.h"
12 #include "testing/platform_test.h" 13 #include "testing/platform_test.h"
13 14
14 namespace net { 15 namespace net {
15 16
16 namespace { 17 namespace {
17 18
18 class TestBufferedSpdyVisitor : public BufferedSpdyFramerVisitorInterface { 19 class TestBufferedSpdyVisitor : public BufferedSpdyFramerVisitorInterface {
19 public: 20 public:
20 TestBufferedSpdyVisitor() 21 TestBufferedSpdyVisitor()
21 : buffered_spdy_framer_(), 22 : buffered_spdy_framer_(NetLogWithSource()),
22 error_count_(0), 23 error_count_(0),
23 setting_count_(0), 24 setting_count_(0),
24 headers_frame_count_(0), 25 headers_frame_count_(0),
25 push_promise_frame_count_(0), 26 push_promise_frame_count_(0),
26 goaway_count_(0), 27 goaway_count_(0),
27 altsvc_count_(0), 28 altsvc_count_(0),
28 header_stream_id_(static_cast<SpdyStreamId>(-1)), 29 header_stream_id_(static_cast<SpdyStreamId>(-1)),
29 promised_stream_id_(static_cast<SpdyStreamId>(-1)) {} 30 promised_stream_id_(static_cast<SpdyStreamId>(-1)) {}
30 31
31 void OnError(SpdyFramer::SpdyFramerError spdy_framer_error) override { 32 void OnError(SpdyFramer::SpdyFramerError spdy_framer_error) override {
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 EXPECT_EQ(0, visitor.error_count_); 192 EXPECT_EQ(0, visitor.error_count_);
192 EXPECT_EQ(2, visitor.setting_count_); 193 EXPECT_EQ(2, visitor.setting_count_);
193 } 194 }
194 195
195 TEST_F(BufferedSpdyFramerTest, HeaderListTooLarge) { 196 TEST_F(BufferedSpdyFramerTest, HeaderListTooLarge) {
196 SpdyHeaderBlock headers; 197 SpdyHeaderBlock headers;
197 SpdyString long_header_value(256 * 1024, 'x'); 198 SpdyString long_header_value(256 * 1024, 'x');
198 headers["foo"] = long_header_value; 199 headers["foo"] = long_header_value;
199 SpdyHeadersIR headers_ir(/*stream_id=*/1, std::move(headers)); 200 SpdyHeadersIR headers_ir(/*stream_id=*/1, std::move(headers));
200 201
201 BufferedSpdyFramer framer; 202 NetLogWithSource net_log;
203 BufferedSpdyFramer framer(net_log);
202 SpdySerializedFrame control_frame = framer.SerializeFrame(headers_ir); 204 SpdySerializedFrame control_frame = framer.SerializeFrame(headers_ir);
203 205
204 TestBufferedSpdyVisitor visitor; 206 TestBufferedSpdyVisitor visitor;
205 visitor.SimulateInFramer(control_frame); 207 visitor.SimulateInFramer(control_frame);
206 208
207 EXPECT_EQ(1, visitor.error_count_); 209 EXPECT_EQ(1, visitor.error_count_);
208 EXPECT_EQ(0, visitor.headers_frame_count_); 210 EXPECT_EQ(0, visitor.headers_frame_count_);
209 EXPECT_EQ(0, visitor.push_promise_frame_count_); 211 EXPECT_EQ(0, visitor.push_promise_frame_count_);
210 EXPECT_EQ(SpdyHeaderBlock(), visitor.headers_); 212 EXPECT_EQ(SpdyHeaderBlock(), visitor.headers_);
211 } 213 }
(...skipping 20 matching lines...) Expand all
232 EXPECT_EQ(1, visitor.error_count_); 234 EXPECT_EQ(1, visitor.error_count_);
233 EXPECT_EQ(1, visitor.headers_frame_count_); 235 EXPECT_EQ(1, visitor.headers_frame_count_);
234 } 236 }
235 237
236 TEST_F(BufferedSpdyFramerTest, ReadHeadersHeaderBlock) { 238 TEST_F(BufferedSpdyFramerTest, ReadHeadersHeaderBlock) {
237 SpdyHeaderBlock headers; 239 SpdyHeaderBlock headers;
238 headers["alpha"] = "beta"; 240 headers["alpha"] = "beta";
239 headers["gamma"] = "delta"; 241 headers["gamma"] = "delta";
240 SpdyHeadersIR headers_ir(/*stream_id=*/1, headers.Clone()); 242 SpdyHeadersIR headers_ir(/*stream_id=*/1, headers.Clone());
241 243
242 BufferedSpdyFramer framer; 244 NetLogWithSource net_log;
245 BufferedSpdyFramer framer(net_log);
243 SpdySerializedFrame control_frame = framer.SerializeFrame(headers_ir); 246 SpdySerializedFrame control_frame = framer.SerializeFrame(headers_ir);
244 247
245 TestBufferedSpdyVisitor visitor; 248 TestBufferedSpdyVisitor visitor;
246 visitor.SimulateInFramer(control_frame); 249 visitor.SimulateInFramer(control_frame);
247 EXPECT_EQ(0, visitor.error_count_); 250 EXPECT_EQ(0, visitor.error_count_);
248 EXPECT_EQ(1, visitor.headers_frame_count_); 251 EXPECT_EQ(1, visitor.headers_frame_count_);
249 EXPECT_EQ(0, visitor.push_promise_frame_count_); 252 EXPECT_EQ(0, visitor.push_promise_frame_count_);
250 EXPECT_EQ(headers, visitor.headers_); 253 EXPECT_EQ(headers, visitor.headers_);
251 } 254 }
252 255
253 TEST_F(BufferedSpdyFramerTest, ReadPushPromiseHeaderBlock) { 256 TEST_F(BufferedSpdyFramerTest, ReadPushPromiseHeaderBlock) {
254 SpdyHeaderBlock headers; 257 SpdyHeaderBlock headers;
255 headers["alpha"] = "beta"; 258 headers["alpha"] = "beta";
256 headers["gamma"] = "delta"; 259 headers["gamma"] = "delta";
257 BufferedSpdyFramer framer; 260 NetLogWithSource net_log;
261 BufferedSpdyFramer framer(net_log);
258 SpdyPushPromiseIR push_promise_ir(/*stream_id=*/1, /*promised_stream_id=*/2, 262 SpdyPushPromiseIR push_promise_ir(/*stream_id=*/1, /*promised_stream_id=*/2,
259 headers.Clone()); 263 headers.Clone());
260 SpdySerializedFrame control_frame = framer.SerializeFrame(push_promise_ir); 264 SpdySerializedFrame control_frame = framer.SerializeFrame(push_promise_ir);
261 265
262 TestBufferedSpdyVisitor visitor; 266 TestBufferedSpdyVisitor visitor;
263 visitor.SimulateInFramer(control_frame); 267 visitor.SimulateInFramer(control_frame);
264 EXPECT_EQ(0, visitor.error_count_); 268 EXPECT_EQ(0, visitor.error_count_);
265 EXPECT_EQ(0, visitor.headers_frame_count_); 269 EXPECT_EQ(0, visitor.headers_frame_count_);
266 EXPECT_EQ(1, visitor.push_promise_frame_count_); 270 EXPECT_EQ(1, visitor.push_promise_frame_count_);
267 EXPECT_EQ(headers, visitor.headers_); 271 EXPECT_EQ(headers, visitor.headers_);
268 EXPECT_EQ(1u, visitor.header_stream_id_); 272 EXPECT_EQ(1u, visitor.header_stream_id_);
269 EXPECT_EQ(2u, visitor.promised_stream_id_); 273 EXPECT_EQ(2u, visitor.promised_stream_id_);
270 } 274 }
271 275
272 TEST_F(BufferedSpdyFramerTest, GoAwayDebugData) { 276 TEST_F(BufferedSpdyFramerTest, GoAwayDebugData) {
273 SpdyGoAwayIR go_ir(/*last_accepted_stream_id=*/2, ERROR_CODE_FRAME_SIZE_ERROR, 277 SpdyGoAwayIR go_ir(/*last_accepted_stream_id=*/2, ERROR_CODE_FRAME_SIZE_ERROR,
274 "foo"); 278 "foo");
275 BufferedSpdyFramer framer; 279 NetLogWithSource net_log;
280 BufferedSpdyFramer framer(net_log);
276 SpdySerializedFrame goaway_frame = framer.SerializeFrame(go_ir); 281 SpdySerializedFrame goaway_frame = framer.SerializeFrame(go_ir);
277 282
278 TestBufferedSpdyVisitor visitor; 283 TestBufferedSpdyVisitor visitor;
279 visitor.SimulateInFramer(goaway_frame); 284 visitor.SimulateInFramer(goaway_frame);
280 EXPECT_EQ(0, visitor.error_count_); 285 EXPECT_EQ(0, visitor.error_count_);
281 EXPECT_EQ(1, visitor.goaway_count_); 286 EXPECT_EQ(1, visitor.goaway_count_);
282 EXPECT_EQ(2u, visitor.goaway_last_accepted_stream_id_); 287 EXPECT_EQ(2u, visitor.goaway_last_accepted_stream_id_);
283 EXPECT_EQ(ERROR_CODE_FRAME_SIZE_ERROR, visitor.goaway_error_code_); 288 EXPECT_EQ(ERROR_CODE_FRAME_SIZE_ERROR, visitor.goaway_error_code_);
284 EXPECT_EQ("foo", visitor.goaway_debug_data_); 289 EXPECT_EQ("foo", visitor.goaway_debug_data_);
285 } 290 }
286 291
287 // ALTSVC frame on stream 0 must have an origin. 292 // ALTSVC frame on stream 0 must have an origin.
288 TEST_F(BufferedSpdyFramerTest, OnAltSvcOnStreamZero) { 293 TEST_F(BufferedSpdyFramerTest, OnAltSvcOnStreamZero) {
289 const SpdyStreamId altsvc_stream_id(0); 294 const SpdyStreamId altsvc_stream_id(0);
290 SpdyAltSvcIR altsvc_ir(altsvc_stream_id); 295 SpdyAltSvcIR altsvc_ir(altsvc_stream_id);
291 SpdyAltSvcWireFormat::AlternativeService alternative_service( 296 SpdyAltSvcWireFormat::AlternativeService alternative_service(
292 "quic", "alternative.example.org", 443, 86400, 297 "quic", "alternative.example.org", 443, 86400,
293 SpdyAltSvcWireFormat::VersionVector()); 298 SpdyAltSvcWireFormat::VersionVector());
294 altsvc_ir.add_altsvc(alternative_service); 299 altsvc_ir.add_altsvc(alternative_service);
295 const char altsvc_origin[] = "https://www.example.org"; 300 const char altsvc_origin[] = "https://www.example.org";
296 altsvc_ir.set_origin(altsvc_origin); 301 altsvc_ir.set_origin(altsvc_origin);
297 BufferedSpdyFramer framer; 302 NetLogWithSource net_log;
303 BufferedSpdyFramer framer(net_log);
298 SpdySerializedFrame altsvc_frame(framer.SerializeFrame(altsvc_ir)); 304 SpdySerializedFrame altsvc_frame(framer.SerializeFrame(altsvc_ir));
299 305
300 TestBufferedSpdyVisitor visitor; 306 TestBufferedSpdyVisitor visitor;
301 visitor.SimulateInFramer(altsvc_frame); 307 visitor.SimulateInFramer(altsvc_frame);
302 EXPECT_EQ(0, visitor.error_count_); 308 EXPECT_EQ(0, visitor.error_count_);
303 EXPECT_EQ(1, visitor.altsvc_count_); 309 EXPECT_EQ(1, visitor.altsvc_count_);
304 EXPECT_EQ(altsvc_stream_id, visitor.altsvc_stream_id_); 310 EXPECT_EQ(altsvc_stream_id, visitor.altsvc_stream_id_);
305 EXPECT_EQ(altsvc_origin, visitor.altsvc_origin_); 311 EXPECT_EQ(altsvc_origin, visitor.altsvc_origin_);
306 ASSERT_EQ(1u, visitor.altsvc_vector_.size()); 312 ASSERT_EQ(1u, visitor.altsvc_vector_.size());
307 EXPECT_EQ(alternative_service, visitor.altsvc_vector_[0]); 313 EXPECT_EQ(alternative_service, visitor.altsvc_vector_[0]);
308 } 314 }
309 315
310 // ALTSVC frame on a non-zero stream must not have an origin. 316 // ALTSVC frame on a non-zero stream must not have an origin.
311 TEST_F(BufferedSpdyFramerTest, OnAltSvcOnNonzeroStream) { 317 TEST_F(BufferedSpdyFramerTest, OnAltSvcOnNonzeroStream) {
312 const SpdyStreamId altsvc_stream_id(1); 318 const SpdyStreamId altsvc_stream_id(1);
313 SpdyAltSvcIR altsvc_ir(altsvc_stream_id); 319 SpdyAltSvcIR altsvc_ir(altsvc_stream_id);
314 SpdyAltSvcWireFormat::AlternativeService alternative_service( 320 SpdyAltSvcWireFormat::AlternativeService alternative_service(
315 "quic", "alternative.example.org", 443, 86400, 321 "quic", "alternative.example.org", 443, 86400,
316 SpdyAltSvcWireFormat::VersionVector()); 322 SpdyAltSvcWireFormat::VersionVector());
317 altsvc_ir.add_altsvc(alternative_service); 323 altsvc_ir.add_altsvc(alternative_service);
318 BufferedSpdyFramer framer; 324 NetLogWithSource net_log;
325 BufferedSpdyFramer framer(net_log);
319 SpdySerializedFrame altsvc_frame(framer.SerializeFrame(altsvc_ir)); 326 SpdySerializedFrame altsvc_frame(framer.SerializeFrame(altsvc_ir));
320 327
321 TestBufferedSpdyVisitor visitor; 328 TestBufferedSpdyVisitor visitor;
322 visitor.SimulateInFramer(altsvc_frame); 329 visitor.SimulateInFramer(altsvc_frame);
323 EXPECT_EQ(0, visitor.error_count_); 330 EXPECT_EQ(0, visitor.error_count_);
324 EXPECT_EQ(1, visitor.altsvc_count_); 331 EXPECT_EQ(1, visitor.altsvc_count_);
325 EXPECT_EQ(altsvc_stream_id, visitor.altsvc_stream_id_); 332 EXPECT_EQ(altsvc_stream_id, visitor.altsvc_stream_id_);
326 EXPECT_TRUE(visitor.altsvc_origin_.empty()); 333 EXPECT_TRUE(visitor.altsvc_origin_.empty());
327 ASSERT_EQ(1u, visitor.altsvc_vector_.size()); 334 ASSERT_EQ(1u, visitor.altsvc_vector_.size());
328 EXPECT_EQ(alternative_service, visitor.altsvc_vector_[0]); 335 EXPECT_EQ(alternative_service, visitor.altsvc_vector_[0]);
329 } 336 }
330 337
331 } // namespace net 338 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/chromium/buffered_spdy_framer.cc ('k') | net/spdy/chromium/header_coalescer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698