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

Side by Side Diff: net/quic/chromium/quic_chromium_client_stream_test.cc

Issue 2873963003: Add an async ReadInitialHeaders method to QuicChromiumClientStream::Handle (Closed)
Patch Set: Rebase 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/chromium/quic_chromium_client_stream.cc ('k') | net/quic/chromium/quic_http_stream.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/quic/chromium/quic_chromium_client_stream.h" 5 #include "net/quic/chromium/quic_chromium_client_stream.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
(...skipping 26 matching lines...) Expand all
37 namespace { 37 namespace {
38 38
39 const QuicStreamId kTestStreamId = 5u; 39 const QuicStreamId kTestStreamId = 5u;
40 40
41 class MockDelegate : public QuicChromiumClientStream::Delegate { 41 class MockDelegate : public QuicChromiumClientStream::Delegate {
42 public: 42 public:
43 MockDelegate() {} 43 MockDelegate() {}
44 44
45 MOCK_METHOD0(OnSendData, int()); 45 MOCK_METHOD0(OnSendData, int());
46 MOCK_METHOD2(OnSendDataComplete, int(int, bool*)); 46 MOCK_METHOD2(OnSendDataComplete, int(int, bool*));
47 void OnInitialHeadersAvailable(const SpdyHeaderBlock& headers,
48 size_t frame_len) override {
49 headers_ = headers.Clone();
50 OnInitialHeadersAvailableMock(headers, frame_len);
51 }
52 MOCK_METHOD2(OnInitialHeadersAvailableMock,
53 void(const SpdyHeaderBlock& headers, size_t frame_len));
54 void OnTrailingHeadersAvailable(const SpdyHeaderBlock& headers, 47 void OnTrailingHeadersAvailable(const SpdyHeaderBlock& headers,
55 size_t frame_len) override { 48 size_t frame_len) override {
56 trailers_ = headers.Clone(); 49 trailers_ = headers.Clone();
57 OnTrailingHeadersAvailableMock(headers, frame_len); 50 OnTrailingHeadersAvailableMock(headers, frame_len);
58 } 51 }
59 MOCK_METHOD2(OnTrailingHeadersAvailableMock, 52 MOCK_METHOD2(OnTrailingHeadersAvailableMock,
60 void(const SpdyHeaderBlock& headers, size_t frame_len)); 53 void(const SpdyHeaderBlock& headers, size_t frame_len));
61 MOCK_METHOD0(OnDataAvailable, void()); 54 MOCK_METHOD0(OnDataAvailable, void());
62 MOCK_METHOD0(OnClose, void()); 55 MOCK_METHOD0(OnClose, void());
63 MOCK_METHOD1(OnError, void(int)); 56 MOCK_METHOD1(OnError, void(int));
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 } 239 }
247 240
248 QuicHeaderList ProcessTrailers(const SpdyHeaderBlock& headers) { 241 QuicHeaderList ProcessTrailers(const SpdyHeaderBlock& headers) {
249 QuicHeaderList h = AsHeaderList(headers); 242 QuicHeaderList h = AsHeaderList(headers);
250 stream_->OnStreamHeaderList(true, h.uncompressed_header_bytes(), h); 243 stream_->OnStreamHeaderList(true, h.uncompressed_header_bytes(), h);
251 return h; 244 return h;
252 } 245 }
253 246
254 QuicHeaderList ProcessHeadersFull(const SpdyHeaderBlock& headers) { 247 QuicHeaderList ProcessHeadersFull(const SpdyHeaderBlock& headers) {
255 QuicHeaderList h = ProcessHeaders(headers); 248 QuicHeaderList h = ProcessHeaders(headers);
256 EXPECT_CALL(delegate_, OnInitialHeadersAvailableMock( 249 TestCompletionCallback callback;
257 _, h.uncompressed_header_bytes())); 250 EXPECT_EQ(
258 base::RunLoop().RunUntilIdle(); 251 static_cast<int>(h.uncompressed_header_bytes()),
252 handle_->ReadInitialHeaders(&delegate_.headers_, callback.callback()));
259 EXPECT_EQ(headers, delegate_.headers_); 253 EXPECT_EQ(headers, delegate_.headers_);
260 EXPECT_TRUE(stream_->header_list().empty()); 254 EXPECT_TRUE(stream_->header_list().empty());
261 return h; 255 return h;
262 } 256 }
263 257
264 QuicStreamId GetNthClientInitiatedStreamId(int n) { 258 QuicStreamId GetNthClientInitiatedStreamId(int n) {
265 return QuicSpdySessionPeer::GetNthClientInitiatedStreamId(session_, n); 259 return QuicSpdySessionPeer::GetNthClientInitiatedStreamId(session_, n);
266 } 260 }
267 261
268 QuicStreamId GetNthServerInitiatedStreamId(int n) { 262 QuicStreamId GetNthServerInitiatedStreamId(int n) {
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
724 718
725 InitializeHeaders(); 719 InitializeHeaders();
726 720
727 // Receive the headers before the delegate is set. 721 // Receive the headers before the delegate is set.
728 QuicHeaderList header_list = AsHeaderList(headers_); 722 QuicHeaderList header_list = AsHeaderList(headers_);
729 stream2->OnStreamHeaderList(true, header_list.uncompressed_header_bytes(), 723 stream2->OnStreamHeaderList(true, header_list.uncompressed_header_bytes(),
730 header_list); 724 header_list);
731 EXPECT_TRUE(delegate2_.headers_.empty()); 725 EXPECT_TRUE(delegate2_.headers_.empty());
732 726
733 // Now set the delegate and verify that the headers are delivered. 727 // Now set the delegate and verify that the headers are delivered.
734 EXPECT_CALL(delegate2_, OnInitialHeadersAvailableMock(
735 _, header_list.uncompressed_header_bytes()));
736 handle2_ = stream2->CreateHandle(&delegate2_); 728 handle2_ = stream2->CreateHandle(&delegate2_);
737 base::RunLoop().RunUntilIdle(); 729 TestCompletionCallback callback;
730 EXPECT_EQ(
731 static_cast<int>(header_list.uncompressed_header_bytes()),
732 handle2_->ReadInitialHeaders(&delegate2_.headers_, callback.callback()));
738 EXPECT_EQ(headers_, delegate2_.headers_); 733 EXPECT_EQ(headers_, delegate2_.headers_);
739 734
740 // Both delegates should be notified that theirs streams are closed. 735 // Both delegates should be notified that theirs streams are closed.
741 EXPECT_CALL(delegate2_, OnClose()); 736 EXPECT_CALL(delegate2_, OnClose());
742 EXPECT_CALL(delegate_, OnClose()); 737 EXPECT_CALL(delegate_, OnClose());
743 } 738 }
744 739
745 TEST_P(QuicChromiumClientStreamTest, HeadersAndDataBeforeDelegate) { 740 TEST_P(QuicChromiumClientStreamTest, HeadersAndDataBeforeDelegate) {
746 // We don't use stream_ because we want an incoming server push 741 // We don't use stream_ because we want an incoming server push
747 // stream. 742 // stream.
748 QuicStreamId stream_id = GetNthServerInitiatedStreamId(0); 743 QuicStreamId stream_id = GetNthServerInitiatedStreamId(0);
749 QuicChromiumClientStream* stream2 = 744 QuicChromiumClientStream* stream2 =
750 new QuicChromiumClientStream(stream_id, &session_, NetLogWithSource()); 745 new QuicChromiumClientStream(stream_id, &session_, NetLogWithSource());
751 session_.ActivateStream(base::WrapUnique(stream2)); 746 session_.ActivateStream(base::WrapUnique(stream2));
752 747
753 InitializeHeaders(); 748 InitializeHeaders();
754 749
755 // Receive the headers and data before the delegate is set. 750 // Receive the headers and data before the delegate is set.
756 QuicHeaderList header_list = AsHeaderList(headers_); 751 QuicHeaderList header_list = AsHeaderList(headers_);
757 stream2->OnStreamHeaderList(false, header_list.uncompressed_header_bytes(), 752 stream2->OnStreamHeaderList(false, header_list.uncompressed_header_bytes(),
758 header_list); 753 header_list);
759 EXPECT_TRUE(delegate2_.headers_.empty()); 754 EXPECT_TRUE(delegate2_.headers_.empty());
760 const char data[] = "hello world!"; 755 const char data[] = "hello world!";
761 stream2->OnStreamFrame(QuicStreamFrame(stream_id, /*fin=*/false, 756 stream2->OnStreamFrame(QuicStreamFrame(stream_id, /*fin=*/false,
762 /*offset=*/0, data)); 757 /*offset=*/0, data));
763 758
764 // Now set the delegate and verify that the headers are delivered, but 759 // Now set the delegate and verify that the headers are delivered, but
765 // not the data, which needs to be read explicitly. 760 // not the data, which needs to be read explicitly.
766 EXPECT_CALL(delegate2_, OnInitialHeadersAvailableMock(
767 _, header_list.uncompressed_header_bytes()));
768 handle2_ = stream2->CreateHandle(&delegate2_); 761 handle2_ = stream2->CreateHandle(&delegate2_);
769 base::RunLoop().RunUntilIdle(); 762 TestCompletionCallback callback;
763 EXPECT_EQ(
764 static_cast<int>(header_list.uncompressed_header_bytes()),
765 handle2_->ReadInitialHeaders(&delegate2_.headers_, callback.callback()));
770 EXPECT_EQ(headers_, delegate2_.headers_); 766 EXPECT_EQ(headers_, delegate2_.headers_);
771 base::RunLoop().RunUntilIdle(); 767 base::RunLoop().RunUntilIdle();
772 768
773 // Now explicitly read the data. 769 // Now explicitly read the data.
774 int data_len = arraysize(data) - 1; 770 int data_len = arraysize(data) - 1;
775 scoped_refptr<IOBuffer> buffer(new IOBuffer(data_len + 1)); 771 scoped_refptr<IOBuffer> buffer(new IOBuffer(data_len + 1));
776 ASSERT_EQ(data_len, stream2->Read(buffer.get(), data_len + 1)); 772 ASSERT_EQ(data_len, stream2->Read(buffer.get(), data_len + 1));
777 EXPECT_EQ(QuicStringPiece(data), QuicStringPiece(buffer->data(), data_len)); 773 EXPECT_EQ(QuicStringPiece(data), QuicStringPiece(buffer->data(), data_len));
778 774
779 // Both delegates should be notified that theirs streams are closed. 775 // Both delegates should be notified that theirs streams are closed.
780 EXPECT_CALL(delegate2_, OnClose()); 776 EXPECT_CALL(delegate2_, OnClose());
781 EXPECT_CALL(delegate_, OnClose()); 777 EXPECT_CALL(delegate_, OnClose());
782 } 778 }
783 779
784 } // namespace 780 } // namespace
785 } // namespace test 781 } // namespace test
786 } // namespace net 782 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/chromium/quic_chromium_client_stream.cc ('k') | net/quic/chromium/quic_http_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698