| OLD | NEW |
| 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/quic_reliable_client_stream.h" | 5 #include "net/quic/quic_reliable_client_stream.h" |
| 6 | 6 |
| 7 #include "net/base/net_errors.h" | 7 #include "net/base/net_errors.h" |
| 8 #include "net/base/test_completion_callback.h" | 8 #include "net/base/test_completion_callback.h" |
| 9 #include "net/quic/quic_client_session.h" | 9 #include "net/quic/quic_client_session.h" |
| 10 #include "net/quic/quic_utils.h" | 10 #include "net/quic/quic_utils.h" |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 78 "JBCScs_ejbKaqBDoB7ZGxTvqlrB__2ZmnHHjCr8RgMRtKNtIeuZAo "; | 78 "JBCScs_ejbKaqBDoB7ZGxTvqlrB__2ZmnHHjCr8RgMRtKNtIeuZAo "; |
| 79 } | 79 } |
| 80 | 80 |
| 81 testing::StrictMock<MockDelegate> delegate_; | 81 testing::StrictMock<MockDelegate> delegate_; |
| 82 MockSession session_; | 82 MockSession session_; |
| 83 QuicReliableClientStream* stream_; | 83 QuicReliableClientStream* stream_; |
| 84 QuicCryptoClientConfig crypto_config_; | 84 QuicCryptoClientConfig crypto_config_; |
| 85 SpdyHeaderBlock headers_; | 85 SpdyHeaderBlock headers_; |
| 86 }; | 86 }; |
| 87 | 87 |
| 88 INSTANTIATE_TEST_CASE_P(Version, QuicReliableClientStreamTest, | 88 INSTANTIATE_TEST_CASE_P(Version, |
| 89 QuicReliableClientStreamTest, |
| 89 ::testing::ValuesIn(QuicSupportedVersions())); | 90 ::testing::ValuesIn(QuicSupportedVersions())); |
| 90 | 91 |
| 91 TEST_P(QuicReliableClientStreamTest, OnFinRead) { | 92 TEST_P(QuicReliableClientStreamTest, OnFinRead) { |
| 92 InitializeHeaders(); | 93 InitializeHeaders(); |
| 93 string uncompressed_headers = | 94 string uncompressed_headers = |
| 94 SpdyUtils::SerializeUncompressedHeaders(headers_); | 95 SpdyUtils::SerializeUncompressedHeaders(headers_); |
| 95 EXPECT_CALL(delegate_, OnDataReceived(StrEq(uncompressed_headers.data()), | 96 EXPECT_CALL(delegate_, |
| 96 uncompressed_headers.size())); | 97 OnDataReceived(StrEq(uncompressed_headers.data()), |
| 98 uncompressed_headers.size())); |
| 97 QuicStreamOffset offset = 0; | 99 QuicStreamOffset offset = 0; |
| 98 stream_->OnStreamHeaders(uncompressed_headers); | 100 stream_->OnStreamHeaders(uncompressed_headers); |
| 99 stream_->OnStreamHeadersComplete(false, uncompressed_headers.length()); | 101 stream_->OnStreamHeadersComplete(false, uncompressed_headers.length()); |
| 100 | 102 |
| 101 IOVector iov; | 103 IOVector iov; |
| 102 QuicStreamFrame frame2(kStreamId, true, offset, iov); | 104 QuicStreamFrame frame2(kStreamId, true, offset, iov); |
| 103 EXPECT_CALL(delegate_, OnClose(QUIC_NO_ERROR)); | 105 EXPECT_CALL(delegate_, OnClose(QUIC_NO_ERROR)); |
| 104 stream_->OnStreamFrame(frame2); | 106 stream_->OnStreamFrame(frame2); |
| 105 } | 107 } |
| 106 | 108 |
| 107 TEST_P(QuicReliableClientStreamTest, ProcessData) { | 109 TEST_P(QuicReliableClientStreamTest, ProcessData) { |
| 108 const char data[] = "hello world!"; | 110 const char data[] = "hello world!"; |
| 109 EXPECT_CALL(delegate_, OnDataReceived(StrEq(data), arraysize(data))); | 111 EXPECT_CALL(delegate_, OnDataReceived(StrEq(data), arraysize(data))); |
| 110 EXPECT_CALL(delegate_, OnClose(QUIC_NO_ERROR)); | 112 EXPECT_CALL(delegate_, OnClose(QUIC_NO_ERROR)); |
| 111 | 113 |
| 112 EXPECT_EQ(arraysize(data), stream_->ProcessData(data, arraysize(data))); | 114 EXPECT_EQ(arraysize(data), stream_->ProcessData(data, arraysize(data))); |
| 113 } | 115 } |
| 114 | 116 |
| 115 TEST_P(QuicReliableClientStreamTest, ProcessDataWithError) { | 117 TEST_P(QuicReliableClientStreamTest, ProcessDataWithError) { |
| 116 const char data[] = "hello world!"; | 118 const char data[] = "hello world!"; |
| 117 EXPECT_CALL(delegate_, | 119 EXPECT_CALL(delegate_, OnDataReceived(StrEq(data), arraysize(data))) |
| 118 OnDataReceived(StrEq(data), | 120 .WillOnce(Return(ERR_UNEXPECTED)); |
| 119 arraysize(data))).WillOnce(Return(ERR_UNEXPECTED)); | |
| 120 EXPECT_CALL(delegate_, OnClose(QUIC_NO_ERROR)); | 121 EXPECT_CALL(delegate_, OnClose(QUIC_NO_ERROR)); |
| 121 | 122 |
| 122 | |
| 123 EXPECT_EQ(0u, stream_->ProcessData(data, arraysize(data))); | 123 EXPECT_EQ(0u, stream_->ProcessData(data, arraysize(data))); |
| 124 } | 124 } |
| 125 | 125 |
| 126 TEST_P(QuicReliableClientStreamTest, OnError) { | 126 TEST_P(QuicReliableClientStreamTest, OnError) { |
| 127 EXPECT_CALL(delegate_, OnError(ERR_INTERNET_DISCONNECTED)); | 127 EXPECT_CALL(delegate_, OnError(ERR_INTERNET_DISCONNECTED)); |
| 128 | 128 |
| 129 stream_->OnError(ERR_INTERNET_DISCONNECTED); | 129 stream_->OnError(ERR_INTERNET_DISCONNECTED); |
| 130 EXPECT_FALSE(stream_->GetDelegate()); | 130 EXPECT_FALSE(stream_->GetDelegate()); |
| 131 } | 131 } |
| 132 | 132 |
| 133 TEST_P(QuicReliableClientStreamTest, WriteStreamData) { | 133 TEST_P(QuicReliableClientStreamTest, WriteStreamData) { |
| 134 EXPECT_CALL(delegate_, OnClose(QUIC_NO_ERROR)); | 134 EXPECT_CALL(delegate_, OnClose(QUIC_NO_ERROR)); |
| 135 | 135 |
| 136 const char kData1[] = "hello world"; | 136 const char kData1[] = "hello world"; |
| 137 const size_t kDataLen = arraysize(kData1); | 137 const size_t kDataLen = arraysize(kData1); |
| 138 | 138 |
| 139 // All data written. | 139 // All data written. |
| 140 EXPECT_CALL(session_, WritevData(stream_->id(), _, _, _, _)).WillOnce( | 140 EXPECT_CALL(session_, WritevData(stream_->id(), _, _, _, _)) |
| 141 Return(QuicConsumedData(kDataLen, true))); | 141 .WillOnce(Return(QuicConsumedData(kDataLen, true))); |
| 142 TestCompletionCallback callback; | 142 TestCompletionCallback callback; |
| 143 EXPECT_EQ(OK, stream_->WriteStreamData(base::StringPiece(kData1, kDataLen), | 143 EXPECT_EQ( |
| 144 true, callback.callback())); | 144 OK, |
| 145 stream_->WriteStreamData( |
| 146 base::StringPiece(kData1, kDataLen), true, callback.callback())); |
| 145 } | 147 } |
| 146 | 148 |
| 147 TEST_P(QuicReliableClientStreamTest, WriteStreamDataAsync) { | 149 TEST_P(QuicReliableClientStreamTest, WriteStreamDataAsync) { |
| 148 EXPECT_CALL(delegate_, HasSendHeadersComplete()).Times(AnyNumber()); | 150 EXPECT_CALL(delegate_, HasSendHeadersComplete()).Times(AnyNumber()); |
| 149 EXPECT_CALL(delegate_, OnClose(QUIC_NO_ERROR)); | 151 EXPECT_CALL(delegate_, OnClose(QUIC_NO_ERROR)); |
| 150 | 152 |
| 151 const char kData1[] = "hello world"; | 153 const char kData1[] = "hello world"; |
| 152 const size_t kDataLen = arraysize(kData1); | 154 const size_t kDataLen = arraysize(kData1); |
| 153 | 155 |
| 154 // No data written. | 156 // No data written. |
| 155 EXPECT_CALL(session_, WritevData(stream_->id(), _, _, _, _)).WillOnce( | 157 EXPECT_CALL(session_, WritevData(stream_->id(), _, _, _, _)) |
| 156 Return(QuicConsumedData(0, false))); | 158 .WillOnce(Return(QuicConsumedData(0, false))); |
| 157 TestCompletionCallback callback; | 159 TestCompletionCallback callback; |
| 158 EXPECT_EQ(ERR_IO_PENDING, | 160 EXPECT_EQ( |
| 159 stream_->WriteStreamData(base::StringPiece(kData1, kDataLen), | 161 ERR_IO_PENDING, |
| 160 true, callback.callback())); | 162 stream_->WriteStreamData( |
| 163 base::StringPiece(kData1, kDataLen), true, callback.callback())); |
| 161 ASSERT_FALSE(callback.have_result()); | 164 ASSERT_FALSE(callback.have_result()); |
| 162 | 165 |
| 163 // All data written. | 166 // All data written. |
| 164 EXPECT_CALL(session_, WritevData(stream_->id(), _, _, _, _)).WillOnce( | 167 EXPECT_CALL(session_, WritevData(stream_->id(), _, _, _, _)) |
| 165 Return(QuicConsumedData(kDataLen, true))); | 168 .WillOnce(Return(QuicConsumedData(kDataLen, true))); |
| 166 stream_->OnCanWrite(); | 169 stream_->OnCanWrite(); |
| 167 ASSERT_TRUE(callback.have_result()); | 170 ASSERT_TRUE(callback.have_result()); |
| 168 EXPECT_EQ(OK, callback.WaitForResult()); | 171 EXPECT_EQ(OK, callback.WaitForResult()); |
| 169 } | 172 } |
| 170 | 173 |
| 171 } // namespace | 174 } // namespace |
| 172 } // namespace test | 175 } // namespace test |
| 173 } // namespace net | 176 } // namespace net |
| OLD | NEW |