Index: net/quic/quic_chromium_client_stream_test.cc |
diff --git a/net/quic/quic_chromium_client_stream_test.cc b/net/quic/quic_chromium_client_stream_test.cc |
index 6792fbe47ebc4c843934f7c33848be29bfaf9584..7a1e5a6d4797e9df759218632f01c2cd896fdf3e 100644 |
--- a/net/quic/quic_chromium_client_stream_test.cc |
+++ b/net/quic/quic_chromium_client_stream_test.cc |
@@ -39,7 +39,12 @@ class MockDelegate : public QuicChromiumClientStream::Delegate { |
MOCK_METHOD0(OnSendData, int()); |
MOCK_METHOD2(OnSendDataComplete, int(int, bool*)); |
- MOCK_METHOD2(OnHeadersAvailable, |
+ void OnHeadersAvailable(const SpdyHeaderBlock& headers, |
+ size_t frame_len) override { |
+ headers_ = headers.Clone(); |
+ OnHeadersAvailableMock(headers, frame_len); |
+ } |
+ MOCK_METHOD2(OnHeadersAvailableMock, |
void(const SpdyHeaderBlock& headers, size_t frame_len)); |
MOCK_METHOD2(OnDataReceived, int(const char*, int)); |
MOCK_METHOD0(OnDataAvailable, void()); |
@@ -47,6 +52,8 @@ class MockDelegate : public QuicChromiumClientStream::Delegate { |
MOCK_METHOD1(OnError, void(int)); |
MOCK_METHOD0(HasSendHeadersComplete, bool()); |
+ SpdyHeaderBlock headers_; |
+ |
private: |
DISALLOW_COPY_AND_ASSIGN(MockDelegate); |
}; |
@@ -92,9 +99,19 @@ class MockQuicClientSessionBase : public QuicClientSessionBase { |
QuicStreamId promised_stream_id, |
size_t frame_len)); |
MOCK_METHOD0(IsCryptoHandshakeConfirmed, bool()); |
- MOCK_METHOD5(WriteHeaders, |
+ // Methods taking non-copyable types like SpdyHeaderBlock by value cannot be |
+ // mocked directly. |
+ size_t WriteHeaders( |
+ QuicStreamId id, |
+ SpdyHeaderBlock headers, |
+ bool fin, |
+ SpdyPriority priority, |
+ QuicAckListenerInterface* ack_notifier_delegate) override { |
+ return WriteHeadersMock(id, headers, fin, priority, ack_notifier_delegate); |
+ } |
+ MOCK_METHOD5(WriteHeadersMock, |
size_t(QuicStreamId id, |
- SpdyHeaderBlock headers, |
+ const SpdyHeaderBlock& headers, |
bool fin, |
SpdyPriority priority, |
QuicAckListenerInterface* ack_notifier_delegate)); |
@@ -218,8 +235,9 @@ TEST_P(QuicChromiumClientStreamTest, OnFinRead) { |
stream_->OnStreamHeadersComplete(false, uncompressed_headers.length()); |
EXPECT_CALL(delegate_, |
- OnHeadersAvailable(headers_, uncompressed_headers.length())); |
+ OnHeadersAvailableMock(_, uncompressed_headers.length())); |
base::RunLoop().RunUntilIdle(); |
+ EXPECT_EQ(headers_, delegate_.headers_); |
EXPECT_TRUE(stream_->decompressed_headers().empty()); |
QuicStreamFrame frame2(kTestStreamId, true, offset, StringPiece()); |
@@ -242,8 +260,9 @@ TEST_P(QuicChromiumClientStreamTest, OnDataAvailable) { |
stream_->OnStreamHeadersComplete(false, uncompressed_headers.length()); |
EXPECT_CALL(delegate_, |
- OnHeadersAvailable(headers_, uncompressed_headers.length())); |
+ OnHeadersAvailableMock(_, uncompressed_headers.length())); |
base::RunLoop().RunUntilIdle(); |
+ EXPECT_EQ(headers_, delegate_.headers_); |
EXPECT_TRUE(stream_->decompressed_headers().empty()); |
const char data[] = "hello world!"; |
@@ -281,8 +300,9 @@ TEST_P(QuicChromiumClientStreamTest, OnDataAvailableWithError) { |
stream_->OnStreamHeadersComplete(false, uncompressed_headers.length()); |
EXPECT_CALL(delegate_, |
- OnHeadersAvailable(headers_, uncompressed_headers.length())); |
+ OnHeadersAvailableMock(_, uncompressed_headers.length())); |
base::RunLoop().RunUntilIdle(); |
+ EXPECT_EQ(headers_, delegate_.headers_); |
EXPECT_TRUE(stream_->decompressed_headers().empty()); |
const char data[] = "hello world!"; |
@@ -312,8 +332,9 @@ TEST_P(QuicChromiumClientStreamTest, OnTrailers) { |
stream_->OnStreamHeadersComplete(false, uncompressed_headers.length()); |
EXPECT_CALL(delegate_, |
- OnHeadersAvailable(headers_, uncompressed_headers.length())); |
+ OnHeadersAvailableMock(_, uncompressed_headers.length())); |
base::RunLoop().RunUntilIdle(); |
+ EXPECT_EQ(headers_, delegate_.headers_); |
EXPECT_TRUE(stream_->decompressed_headers().empty()); |
const char data[] = "hello world!"; |
@@ -334,18 +355,15 @@ TEST_P(QuicChromiumClientStreamTest, OnTrailers) { |
stream_->OnStreamHeaders(uncompressed_trailers); |
stream_->OnStreamHeadersComplete(true, uncompressed_trailers.length()); |
- SpdyHeaderBlock actual_trailers; |
- |
base::RunLoop run_loop; |
- EXPECT_CALL(delegate_, OnHeadersAvailable(_, uncompressed_trailers.length())) |
- .WillOnce(testing::DoAll( |
- testing::SaveArg<0>(&actual_trailers), |
- testing::InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }))); |
+ EXPECT_CALL(delegate_, |
+ OnHeadersAvailableMock(_, uncompressed_trailers.length())) |
+ .WillOnce(testing::InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
run_loop.Run(); |
// Make sure kFinalOffsetHeaderKey is gone from the delivered actual trailers. |
trailers.erase(kFinalOffsetHeaderKey); |
- EXPECT_EQ(trailers, actual_trailers); |
+ EXPECT_EQ(trailers, delegate_.headers_); |
base::RunLoop().RunUntilIdle(); |
EXPECT_CALL(delegate_, OnClose()); |
} |
@@ -360,8 +378,9 @@ TEST_P(QuicChromiumClientStreamTest, MarkTrailersConsumedWhenNotifyDelegate) { |
stream_->OnStreamHeadersComplete(false, uncompressed_headers.length()); |
EXPECT_CALL(delegate_, |
- OnHeadersAvailable(headers_, uncompressed_headers.length())); |
+ OnHeadersAvailableMock(_, uncompressed_headers.length())); |
base::RunLoop().RunUntilIdle(); |
+ EXPECT_EQ(headers_, delegate_.headers_); |
EXPECT_TRUE(stream_->decompressed_headers().empty()); |
const char data[] = "hello world!"; |
@@ -410,12 +429,10 @@ TEST_P(QuicChromiumClientStreamTest, MarkTrailersConsumedWhenNotifyDelegate) { |
// The OnHeadersAvailable call should follow. |
base::RunLoop run_loop3; |
- SpdyHeaderBlock actual_trailers; |
EXPECT_CALL(delegate_, |
- OnHeadersAvailable(_, uncompressed_trailers.length())) |
- .WillOnce(testing::DoAll( |
- testing::SaveArg<0>(&actual_trailers), |
- testing::InvokeWithoutArgs([&run_loop3]() { run_loop3.Quit(); }))); |
+ OnHeadersAvailableMock(_, uncompressed_trailers.length())) |
+ .WillOnce( |
+ testing::InvokeWithoutArgs([&run_loop3]() { run_loop3.Quit(); })); |
run_loop3.Run(); |
// Make sure the stream is properly closed since trailers and data are all |
@@ -423,7 +440,7 @@ TEST_P(QuicChromiumClientStreamTest, MarkTrailersConsumedWhenNotifyDelegate) { |
EXPECT_TRUE(stream_->IsDoneReading()); |
// Make sure kFinalOffsetHeaderKey is gone from the delivered actual trailers. |
trailers.erase(kFinalOffsetHeaderKey); |
- EXPECT_EQ(trailers, actual_trailers); |
+ EXPECT_EQ(trailers, delegate_.headers_); |
base::RunLoop().RunUntilIdle(); |
EXPECT_CALL(delegate_, OnClose()); |
@@ -528,9 +545,10 @@ TEST_P(QuicChromiumClientStreamTest, HeadersBeforeDelegate) { |
EXPECT_TRUE(stream->decompressed_headers().empty()); |
EXPECT_CALL(delegate_, |
- OnHeadersAvailable(headers_, uncompressed_headers.length())); |
+ OnHeadersAvailableMock(_, uncompressed_headers.length())); |
stream->SetDelegate(&delegate_); |
base::RunLoop().RunUntilIdle(); |
+ EXPECT_EQ(headers_, delegate_.headers_); |
// Times(2) because OnClose will be called for stream and stream_. |
EXPECT_CALL(delegate_, OnClose()).Times(2); |