| 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);
|
|
|