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

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

Issue 2102253003: Make SpdyHeaderBlock non-copyable. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: iOS fix. Created 4 years, 5 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/hpack/hpack_decoder_test.cc ('k') | net/spdy/spdy_header_block.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/spdy_framer.h" 5 #include "net/spdy/spdy_framer.h"
6 6
7 #include <stdlib.h> 7 #include <stdlib.h>
8 #include <string.h> 8 #include <string.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 SpdyHeadersHandlerInterface* OnHeaderFrameStart( 85 SpdyHeadersHandlerInterface* OnHeaderFrameStart(
86 SpdyStreamId stream_id) override { 86 SpdyStreamId stream_id) override {
87 if (headers_handler_ == nullptr) { 87 if (headers_handler_ == nullptr) {
88 headers_handler_.reset(new TestHeadersHandler); 88 headers_handler_.reset(new TestHeadersHandler);
89 } 89 }
90 return headers_handler_.get(); 90 return headers_handler_.get();
91 } 91 }
92 92
93 void OnHeaderFrameEnd(SpdyStreamId stream_id, bool end_headers) override { 93 void OnHeaderFrameEnd(SpdyStreamId stream_id, bool end_headers) override {
94 CHECK(!finished_); 94 CHECK(!finished_);
95 frame_->set_header_block(headers_handler_->decoded_block()); 95 frame_->set_header_block(headers_handler_->decoded_block().Clone());
96 finished_ = true; 96 finished_ = true;
97 if (end_headers) { 97 if (end_headers) {
98 headers_handler_.reset(); 98 headers_handler_.reset();
99 } 99 }
100 } 100 }
101 101
102 void OnSynStream(SpdyStreamId stream_id, 102 void OnSynStream(SpdyStreamId stream_id,
103 SpdyStreamId associated_stream_id, 103 SpdyStreamId associated_stream_id,
104 SpdyPriority priority, 104 SpdyPriority priority,
105 bool fin, 105 bool fin,
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after
487 SpdyHeadersHandlerInterface* OnHeaderFrameStart( 487 SpdyHeadersHandlerInterface* OnHeaderFrameStart(
488 SpdyStreamId stream_id) override { 488 SpdyStreamId stream_id) override {
489 if (headers_handler_ == nullptr) { 489 if (headers_handler_ == nullptr) {
490 headers_handler_.reset(new TestHeadersHandler); 490 headers_handler_.reset(new TestHeadersHandler);
491 } 491 }
492 return headers_handler_.get(); 492 return headers_handler_.get();
493 } 493 }
494 494
495 void OnHeaderFrameEnd(SpdyStreamId stream_id, bool end_headers) override { 495 void OnHeaderFrameEnd(SpdyStreamId stream_id, bool end_headers) override {
496 CHECK(headers_handler_ != nullptr); 496 CHECK(headers_handler_ != nullptr);
497 headers_ = headers_handler_->decoded_block(); 497 headers_ = headers_handler_->decoded_block().Clone();
498 header_bytes_received_ = headers_handler_->header_bytes_parsed(); 498 header_bytes_received_ = headers_handler_->header_bytes_parsed();
499 if (end_headers) { 499 if (end_headers) {
500 headers_handler_.reset(); 500 headers_handler_.reset();
501 } 501 }
502 } 502 }
503 503
504 bool OnControlFrameHeaderData(SpdyStreamId stream_id, 504 bool OnControlFrameHeaderData(SpdyStreamId stream_id,
505 const char* header_data, 505 const char* header_data,
506 size_t len) override { 506 size_t len) override {
507 VLOG(1) << "OnControlFrameHeaderData(" << stream_id << ", data, " << len 507 VLOG(1) << "OnControlFrameHeaderData(" << stream_id << ", data, " << len
(...skipping 1443 matching lines...) Expand 10 before | Expand all | Expand 10 after
1951 const char kHeader2[] = "header2"; 1951 const char kHeader2[] = "header2";
1952 const char kHeader3[] = "header3"; 1952 const char kHeader3[] = "header3";
1953 const char kValue1[] = "value1"; 1953 const char kValue1[] = "value1";
1954 const char kValue2[] = "value2"; 1954 const char kValue2[] = "value2";
1955 const char kValue3[] = "value3"; 1955 const char kValue3[] = "value3";
1956 1956
1957 // SYN_STREAM #1 1957 // SYN_STREAM #1
1958 SpdyHeaderBlock block; 1958 SpdyHeaderBlock block;
1959 block[kHeader1] = kValue1; 1959 block[kHeader1] = kValue1;
1960 block[kHeader2] = kValue2; 1960 block[kHeader2] = kValue2;
1961 SpdySynStreamIR syn_ir_1(1, block); 1961 SpdySynStreamIR syn_ir_1(1, block.Clone());
1962 SpdySerializedFrame syn_frame_1(send_framer.SerializeFrame(syn_ir_1)); 1962 SpdySerializedFrame syn_frame_1(send_framer.SerializeFrame(syn_ir_1));
1963 1963
1964 // SYN_STREAM #2 1964 // SYN_STREAM #2
1965 block[kHeader3] = kValue3; 1965 block[kHeader3] = kValue3;
1966 SpdySynStreamIR syn_stream(3, std::move(block)); 1966 SpdySynStreamIR syn_stream(3, std::move(block));
1967 SpdySerializedFrame syn_frame_2(send_framer.SerializeSynStream(syn_stream)); 1967 SpdySerializedFrame syn_frame_2(send_framer.SerializeSynStream(syn_stream));
1968 1968
1969 // Decompress SYN_STREAM #1 1969 // Decompress SYN_STREAM #1
1970 SpdySerializedFrame decompressed( 1970 SpdySerializedFrame decompressed(
1971 SpdyFramerTestUtil::DecompressFrame(&recv_framer, syn_frame_1)); 1971 SpdyFramerTestUtil::DecompressFrame(&recv_framer, syn_frame_1));
(...skipping 1990 matching lines...) Expand 10 before | Expand all | Expand 10 after
3962 TEST_P(SpdyFramerTest, ReadCompressedSynStreamHeaderBlock) { 3962 TEST_P(SpdyFramerTest, ReadCompressedSynStreamHeaderBlock) {
3963 if (!IsSpdy3()) { 3963 if (!IsSpdy3()) {
3964 return; 3964 return;
3965 } 3965 }
3966 3966
3967 SpdyFramer framer(spdy_version_); 3967 SpdyFramer framer(spdy_version_);
3968 SpdySynStreamIR syn_stream(1); 3968 SpdySynStreamIR syn_stream(1);
3969 syn_stream.set_priority(1); 3969 syn_stream.set_priority(1);
3970 syn_stream.SetHeader("aa", "vv"); 3970 syn_stream.SetHeader("aa", "vv");
3971 syn_stream.SetHeader("bb", "ww"); 3971 syn_stream.SetHeader("bb", "ww");
3972 SpdyHeaderBlock headers = syn_stream.header_block();
3973 SpdySerializedFrame control_frame(framer.SerializeSynStream(syn_stream)); 3972 SpdySerializedFrame control_frame(framer.SerializeSynStream(syn_stream));
3974 TestSpdyVisitor visitor(spdy_version_); 3973 TestSpdyVisitor visitor(spdy_version_);
3975 visitor.use_compression_ = true; 3974 visitor.use_compression_ = true;
3976 visitor.SimulateInFramer( 3975 visitor.SimulateInFramer(
3977 reinterpret_cast<unsigned char*>(control_frame.data()), 3976 reinterpret_cast<unsigned char*>(control_frame.data()),
3978 control_frame.size()); 3977 control_frame.size());
3979 EXPECT_EQ(1, visitor.syn_frame_count_); 3978 EXPECT_EQ(1, visitor.syn_frame_count_);
3980 EXPECT_EQ(headers, visitor.headers_); 3979 EXPECT_EQ(syn_stream.header_block(), visitor.headers_);
3981 } 3980 }
3982 3981
3983 TEST_P(SpdyFramerTest, ReadCompressedSynReplyHeaderBlock) { 3982 TEST_P(SpdyFramerTest, ReadCompressedSynReplyHeaderBlock) {
3984 if (!IsSpdy3()) { 3983 if (!IsSpdy3()) {
3985 return; 3984 return;
3986 } 3985 }
3987 3986
3988 SpdyFramer framer(spdy_version_); 3987 SpdyFramer framer(spdy_version_);
3989 SpdySynReplyIR syn_reply(1); 3988 SpdySynReplyIR syn_reply(1);
3990 syn_reply.SetHeader("alpha", "beta"); 3989 syn_reply.SetHeader("alpha", "beta");
3991 syn_reply.SetHeader("gamma", "delta"); 3990 syn_reply.SetHeader("gamma", "delta");
3992 SpdyHeaderBlock headers = syn_reply.header_block();
3993 SpdySerializedFrame control_frame(framer.SerializeSynReply(syn_reply)); 3991 SpdySerializedFrame control_frame(framer.SerializeSynReply(syn_reply));
3994 TestSpdyVisitor visitor(spdy_version_); 3992 TestSpdyVisitor visitor(spdy_version_);
3995 visitor.use_compression_ = true; 3993 visitor.use_compression_ = true;
3996 visitor.SimulateInFramer( 3994 visitor.SimulateInFramer(
3997 reinterpret_cast<unsigned char*>(control_frame.data()), 3995 reinterpret_cast<unsigned char*>(control_frame.data()),
3998 control_frame.size()); 3996 control_frame.size());
3999 EXPECT_EQ(1, visitor.syn_reply_frame_count_); 3997 EXPECT_EQ(1, visitor.syn_reply_frame_count_);
4000 EXPECT_EQ(0, visitor.headers_frame_count_); 3998 EXPECT_EQ(0, visitor.headers_frame_count_);
4001 EXPECT_EQ(headers, visitor.headers_); 3999 EXPECT_EQ(syn_reply.header_block(), visitor.headers_);
4002 } 4000 }
4003 4001
4004 TEST_P(SpdyFramerTest, ReadCompressedHeadersHeaderBlock) { 4002 TEST_P(SpdyFramerTest, ReadCompressedHeadersHeaderBlock) {
4005 SpdyFramer framer(spdy_version_); 4003 SpdyFramer framer(spdy_version_);
4006 SpdyHeadersIR headers_ir(1); 4004 SpdyHeadersIR headers_ir(1);
4007 headers_ir.SetHeader("alpha", "beta"); 4005 headers_ir.SetHeader("alpha", "beta");
4008 headers_ir.SetHeader("gamma", "delta"); 4006 headers_ir.SetHeader("gamma", "delta");
4009 SpdyHeaderBlock headers = headers_ir.header_block();
4010 SpdySerializedFrame control_frame(framer.SerializeHeaders(headers_ir)); 4007 SpdySerializedFrame control_frame(framer.SerializeHeaders(headers_ir));
4011 TestSpdyVisitor visitor(spdy_version_); 4008 TestSpdyVisitor visitor(spdy_version_);
4012 visitor.use_compression_ = true; 4009 visitor.use_compression_ = true;
4013 visitor.SimulateInFramer( 4010 visitor.SimulateInFramer(
4014 reinterpret_cast<unsigned char*>(control_frame.data()), 4011 reinterpret_cast<unsigned char*>(control_frame.data()),
4015 control_frame.size()); 4012 control_frame.size());
4016 EXPECT_EQ(1, visitor.headers_frame_count_); 4013 EXPECT_EQ(1, visitor.headers_frame_count_);
4017 EXPECT_EQ(0, visitor.control_frame_header_data_count_); 4014 EXPECT_EQ(0, visitor.control_frame_header_data_count_);
4018 EXPECT_EQ(0, visitor.zero_length_control_frame_header_data_count_); 4015 EXPECT_EQ(0, visitor.zero_length_control_frame_header_data_count_);
4019 EXPECT_EQ(0, visitor.end_of_stream_count_); 4016 EXPECT_EQ(0, visitor.end_of_stream_count_);
4020 EXPECT_EQ(headers, visitor.headers_); 4017 EXPECT_EQ(headers_ir.header_block(), visitor.headers_);
4021 } 4018 }
4022 4019
4023 TEST_P(SpdyFramerTest, ReadCompressedHeadersHeaderBlockWithHalfClose) { 4020 TEST_P(SpdyFramerTest, ReadCompressedHeadersHeaderBlockWithHalfClose) {
4024 SpdyFramer framer(spdy_version_); 4021 SpdyFramer framer(spdy_version_);
4025 SpdyHeadersIR headers_ir(1); 4022 SpdyHeadersIR headers_ir(1);
4026 headers_ir.set_fin(true); 4023 headers_ir.set_fin(true);
4027 headers_ir.SetHeader("alpha", "beta"); 4024 headers_ir.SetHeader("alpha", "beta");
4028 headers_ir.SetHeader("gamma", "delta"); 4025 headers_ir.SetHeader("gamma", "delta");
4029 SpdyHeaderBlock headers = headers_ir.header_block();
4030 SpdySerializedFrame control_frame(framer.SerializeHeaders(headers_ir)); 4026 SpdySerializedFrame control_frame(framer.SerializeHeaders(headers_ir));
4031 TestSpdyVisitor visitor(spdy_version_); 4027 TestSpdyVisitor visitor(spdy_version_);
4032 visitor.use_compression_ = true; 4028 visitor.use_compression_ = true;
4033 visitor.SimulateInFramer( 4029 visitor.SimulateInFramer(
4034 reinterpret_cast<unsigned char*>(control_frame.data()), 4030 reinterpret_cast<unsigned char*>(control_frame.data()),
4035 control_frame.size()); 4031 control_frame.size());
4036 EXPECT_EQ(1, visitor.headers_frame_count_); 4032 EXPECT_EQ(1, visitor.headers_frame_count_);
4037 EXPECT_EQ(0, visitor.control_frame_header_data_count_); 4033 EXPECT_EQ(0, visitor.control_frame_header_data_count_);
4038 EXPECT_EQ(0, visitor.zero_length_control_frame_header_data_count_); 4034 EXPECT_EQ(0, visitor.zero_length_control_frame_header_data_count_);
4039 EXPECT_EQ(1, visitor.end_of_stream_count_); 4035 EXPECT_EQ(1, visitor.end_of_stream_count_);
4040 EXPECT_EQ(headers, visitor.headers_); 4036 EXPECT_EQ(headers_ir.header_block(), visitor.headers_);
4041 } 4037 }
4042 4038
4043 TEST_P(SpdyFramerTest, ControlFrameAtMaxSizeLimit) { 4039 TEST_P(SpdyFramerTest, ControlFrameAtMaxSizeLimit) {
4044 if (!IsSpdy3()) { 4040 if (!IsSpdy3()) {
4045 // TODO(jgraettinger): This test setup doesn't work with HPACK. 4041 // TODO(jgraettinger): This test setup doesn't work with HPACK.
4046 return; 4042 return;
4047 } 4043 }
4048 4044
4049 // First find the size of the header value in order to just reach the control 4045 // First find the size of the header value in order to just reach the control
4050 // frame max size. 4046 // frame max size.
(...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after
4613 4609
4614 TEST_P(SpdyFramerTest, ReadCompressedPushPromise) { 4610 TEST_P(SpdyFramerTest, ReadCompressedPushPromise) {
4615 if (!IsHttp2()) { 4611 if (!IsHttp2()) {
4616 return; 4612 return;
4617 } 4613 }
4618 4614
4619 SpdyFramer framer(spdy_version_); 4615 SpdyFramer framer(spdy_version_);
4620 SpdyPushPromiseIR push_promise(42, 57); 4616 SpdyPushPromiseIR push_promise(42, 57);
4621 push_promise.SetHeader("foo", "bar"); 4617 push_promise.SetHeader("foo", "bar");
4622 push_promise.SetHeader("bar", "foofoo"); 4618 push_promise.SetHeader("bar", "foofoo");
4623 SpdyHeaderBlock headers = push_promise.header_block();
4624 SpdySerializedFrame frame(framer.SerializePushPromise(push_promise)); 4619 SpdySerializedFrame frame(framer.SerializePushPromise(push_promise));
4625 TestSpdyVisitor visitor(spdy_version_); 4620 TestSpdyVisitor visitor(spdy_version_);
4626 visitor.use_compression_ = true; 4621 visitor.use_compression_ = true;
4627 visitor.SimulateInFramer(reinterpret_cast<unsigned char*>(frame.data()), 4622 visitor.SimulateInFramer(reinterpret_cast<unsigned char*>(frame.data()),
4628 frame.size()); 4623 frame.size());
4629 EXPECT_EQ(42u, visitor.last_push_promise_stream_); 4624 EXPECT_EQ(42u, visitor.last_push_promise_stream_);
4630 EXPECT_EQ(57u, visitor.last_push_promise_promised_stream_); 4625 EXPECT_EQ(57u, visitor.last_push_promise_promised_stream_);
4631 EXPECT_EQ(headers, visitor.headers_); 4626 EXPECT_EQ(push_promise.header_block(), visitor.headers_);
4632 } 4627 }
4633 4628
4634 TEST_P(SpdyFramerTest, ReadHeadersWithContinuation) { 4629 TEST_P(SpdyFramerTest, ReadHeadersWithContinuation) {
4635 if (!IsHttp2()) { 4630 if (!IsHttp2()) {
4636 return; 4631 return;
4637 } 4632 }
4638 4633
4639 // frame-format off 4634 // frame-format off
4640 const unsigned char kInput[] = { 4635 const unsigned char kInput[] = {
4641 0x00, 0x00, 0x14, // Length: 20 4636 0x00, 0x00, 0x14, // Length: 20
(...skipping 1713 matching lines...) Expand 10 before | Expand all | Expand 10 after
6355 6350
6356 EXPECT_EQ(1, visitor->data_frame_count_); 6351 EXPECT_EQ(1, visitor->data_frame_count_);
6357 EXPECT_EQ(strlen(four_score), static_cast<unsigned>(visitor->data_bytes_)); 6352 EXPECT_EQ(strlen(four_score), static_cast<unsigned>(visitor->data_bytes_));
6358 EXPECT_EQ(0, visitor->headers_frame_count_); 6353 EXPECT_EQ(0, visitor->headers_frame_count_);
6359 } 6354 }
6360 } 6355 }
6361 6356
6362 } // namespace test 6357 } // namespace test
6363 6358
6364 } // namespace net 6359 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/hpack/hpack_decoder_test.cc ('k') | net/spdy/spdy_header_block.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698