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

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: Fix 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
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_METHOD2(OnDataReceived, int(const char*, int)); 54 MOCK_METHOD2(OnDataReceived, int(const char*, int));
62 MOCK_METHOD0(OnDataAvailable, void()); 55 MOCK_METHOD0(OnDataAvailable, void());
63 MOCK_METHOD0(OnClose, void()); 56 MOCK_METHOD0(OnClose, void());
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 } 247 }
255 248
256 QuicHeaderList ProcessTrailers(const SpdyHeaderBlock& headers) { 249 QuicHeaderList ProcessTrailers(const SpdyHeaderBlock& headers) {
257 QuicHeaderList h = AsHeaderList(headers); 250 QuicHeaderList h = AsHeaderList(headers);
258 stream_->OnStreamHeaderList(true, h.uncompressed_header_bytes(), h); 251 stream_->OnStreamHeaderList(true, h.uncompressed_header_bytes(), h);
259 return h; 252 return h;
260 } 253 }
261 254
262 QuicHeaderList ProcessHeadersFull(const SpdyHeaderBlock& headers) { 255 QuicHeaderList ProcessHeadersFull(const SpdyHeaderBlock& headers) {
263 QuicHeaderList h = ProcessHeaders(headers); 256 QuicHeaderList h = ProcessHeaders(headers);
264 EXPECT_CALL(delegate_, OnInitialHeadersAvailableMock( 257 TestCompletionCallback callback;
265 _, h.uncompressed_header_bytes())); 258 EXPECT_EQ(
266 base::RunLoop().RunUntilIdle(); 259 static_cast<int>(h.uncompressed_header_bytes()),
260 handle_->ReadInitialHeaders(&delegate_.headers_, callback.callback()));
267 EXPECT_EQ(headers, delegate_.headers_); 261 EXPECT_EQ(headers, delegate_.headers_);
268 EXPECT_TRUE(stream_->header_list().empty()); 262 EXPECT_TRUE(stream_->header_list().empty());
269 return h; 263 return h;
270 } 264 }
271 265
272 QuicStreamId GetNthClientInitiatedStreamId(int n) { 266 QuicStreamId GetNthClientInitiatedStreamId(int n) {
273 return QuicSpdySessionPeer::GetNthClientInitiatedStreamId(session_, n); 267 return QuicSpdySessionPeer::GetNthClientInitiatedStreamId(session_, n);
274 } 268 }
275 269
276 QuicStreamId GetNthServerInitiatedStreamId(int n) { 270 QuicStreamId GetNthServerInitiatedStreamId(int n) {
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 726
733 InitializeHeaders(); 727 InitializeHeaders();
734 728
735 // Receive the headers before the delegate is set. 729 // Receive the headers before the delegate is set.
736 QuicHeaderList header_list = AsHeaderList(headers_); 730 QuicHeaderList header_list = AsHeaderList(headers_);
737 stream2->OnStreamHeaderList(true, header_list.uncompressed_header_bytes(), 731 stream2->OnStreamHeaderList(true, header_list.uncompressed_header_bytes(),
738 header_list); 732 header_list);
739 EXPECT_TRUE(delegate2_.headers_.empty()); 733 EXPECT_TRUE(delegate2_.headers_.empty());
740 734
741 // Now set the delegate and verify that the headers are delivered. 735 // Now set the delegate and verify that the headers are delivered.
742 EXPECT_CALL(delegate2_, OnInitialHeadersAvailableMock(
743 _, header_list.uncompressed_header_bytes()));
744 handle2_ = stream2->CreateHandle(&delegate2_); 736 handle2_ = stream2->CreateHandle(&delegate2_);
745 base::RunLoop().RunUntilIdle(); 737 TestCompletionCallback callback;
738 EXPECT_EQ(
739 static_cast<int>(header_list.uncompressed_header_bytes()),
740 handle2_->ReadInitialHeaders(&delegate2_.headers_, callback.callback()));
746 EXPECT_EQ(headers_, delegate2_.headers_); 741 EXPECT_EQ(headers_, delegate2_.headers_);
747 742
748 // Both delegates should be notified that theirs streams are closed. 743 // Both delegates should be notified that theirs streams are closed.
749 EXPECT_CALL(delegate2_, OnClose()); 744 EXPECT_CALL(delegate2_, OnClose());
750 EXPECT_CALL(delegate_, OnClose()); 745 EXPECT_CALL(delegate_, OnClose());
751 } 746 }
752 747
753 TEST_P(QuicChromiumClientStreamTest, HeadersAndDataBeforeDelegate) { 748 TEST_P(QuicChromiumClientStreamTest, HeadersAndDataBeforeDelegate) {
754 // We don't use stream_ because we want an incoming server push 749 // We don't use stream_ because we want an incoming server push
755 // stream. 750 // stream.
756 QuicStreamId stream_id = GetNthServerInitiatedStreamId(0); 751 QuicStreamId stream_id = GetNthServerInitiatedStreamId(0);
757 QuicChromiumClientStream* stream2 = 752 QuicChromiumClientStream* stream2 =
758 new QuicChromiumClientStream(stream_id, &session_, NetLogWithSource()); 753 new QuicChromiumClientStream(stream_id, &session_, NetLogWithSource());
759 session_.ActivateStream(base::WrapUnique(stream2)); 754 session_.ActivateStream(base::WrapUnique(stream2));
760 755
761 InitializeHeaders(); 756 InitializeHeaders();
762 757
763 // Receive the headers and data before the delegate is set. 758 // Receive the headers and data before the delegate is set.
764 QuicHeaderList header_list = AsHeaderList(headers_); 759 QuicHeaderList header_list = AsHeaderList(headers_);
765 stream2->OnStreamHeaderList(false, header_list.uncompressed_header_bytes(), 760 stream2->OnStreamHeaderList(false, header_list.uncompressed_header_bytes(),
766 header_list); 761 header_list);
767 EXPECT_TRUE(delegate2_.headers_.empty()); 762 EXPECT_TRUE(delegate2_.headers_.empty());
768 const char data[] = "hello world!"; 763 const char data[] = "hello world!";
769 stream2->OnStreamFrame(QuicStreamFrame(stream_id, /*fin=*/false, 764 stream2->OnStreamFrame(QuicStreamFrame(stream_id, /*fin=*/false,
770 /*offset=*/0, data)); 765 /*offset=*/0, data));
771 766
772 // Now set the delegate and verify that the headers are delivered, but 767 // Now set the delegate and verify that the headers are delivered, but
773 // not the data, which needs to be read explicitly. 768 // not the data, which needs to be read explicitly.
774 EXPECT_CALL(delegate2_, OnInitialHeadersAvailableMock(
775 _, header_list.uncompressed_header_bytes()));
776 handle2_ = stream2->CreateHandle(&delegate2_); 769 handle2_ = stream2->CreateHandle(&delegate2_);
777 base::RunLoop().RunUntilIdle(); 770 TestCompletionCallback callback;
771 EXPECT_EQ(
772 static_cast<int>(header_list.uncompressed_header_bytes()),
773 handle2_->ReadInitialHeaders(&delegate2_.headers_, callback.callback()));
778 EXPECT_EQ(headers_, delegate2_.headers_); 774 EXPECT_EQ(headers_, delegate2_.headers_);
779 base::RunLoop().RunUntilIdle(); 775 base::RunLoop().RunUntilIdle();
780 776
781 // Now explicitly read the data. 777 // Now explicitly read the data.
782 int data_len = arraysize(data) - 1; 778 int data_len = arraysize(data) - 1;
783 scoped_refptr<IOBuffer> buffer(new IOBuffer(data_len + 1)); 779 scoped_refptr<IOBuffer> buffer(new IOBuffer(data_len + 1));
784 ASSERT_EQ(data_len, stream2->Read(buffer.get(), data_len + 1)); 780 ASSERT_EQ(data_len, stream2->Read(buffer.get(), data_len + 1));
785 EXPECT_EQ(QuicStringPiece(data), QuicStringPiece(buffer->data(), data_len)); 781 EXPECT_EQ(QuicStringPiece(data), QuicStringPiece(buffer->data(), data_len));
786 782
787 // Both delegates should be notified that theirs streams are closed. 783 // Both delegates should be notified that theirs streams are closed.
788 EXPECT_CALL(delegate2_, OnClose()); 784 EXPECT_CALL(delegate2_, OnClose());
789 EXPECT_CALL(delegate_, OnClose()); 785 EXPECT_CALL(delegate_, OnClose());
790 } 786 }
791 787
792 } // namespace 788 } // namespace
793 } // namespace test 789 } // namespace test
794 } // namespace net 790 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698