Index: net/quic/bidirectional_stream_quic_impl_unittest.cc |
diff --git a/net/quic/bidirectional_stream_quic_impl_unittest.cc b/net/quic/bidirectional_stream_quic_impl_unittest.cc |
index 00a48990f045fb0955693bd59f3d6858aed2b16d..1bd676204ae86a39884e8600cac5f035da6d11f0 100644 |
--- a/net/quic/bidirectional_stream_quic_impl_unittest.cc |
+++ b/net/quic/bidirectional_stream_quic_impl_unittest.cc |
@@ -68,6 +68,7 @@ class TestDelegateBase : public BidirectionalStreamImpl::Delegate { |
on_data_read_count_(0), |
on_data_sent_count_(0), |
not_expect_callback_(false), |
+ on_failed_called_(false), |
send_request_headers_automatically_(true) { |
loop_.reset(new base::RunLoop); |
} |
@@ -75,12 +76,14 @@ class TestDelegateBase : public BidirectionalStreamImpl::Delegate { |
~TestDelegateBase() override {} |
void OnStreamReady(bool request_headers_sent) override { |
+ CHECK(!on_failed_called_); |
EXPECT_EQ(send_request_headers_automatically_, request_headers_sent); |
CHECK(!not_expect_callback_); |
loop_->Quit(); |
} |
void OnHeadersReceived(const SpdyHeaderBlock& response_headers) override { |
+ CHECK(!on_failed_called_); |
CHECK(!not_expect_callback_); |
response_headers_ = response_headers; |
@@ -88,6 +91,7 @@ class TestDelegateBase : public BidirectionalStreamImpl::Delegate { |
} |
void OnDataRead(int bytes_read) override { |
+ CHECK(!on_failed_called_); |
CHECK(!not_expect_callback_); |
CHECK(!callback_.is_null()); |
@@ -98,6 +102,7 @@ class TestDelegateBase : public BidirectionalStreamImpl::Delegate { |
} |
void OnDataSent() override { |
+ CHECK(!on_failed_called_); |
CHECK(!not_expect_callback_); |
++on_data_sent_count_; |
@@ -105,6 +110,7 @@ class TestDelegateBase : public BidirectionalStreamImpl::Delegate { |
} |
void OnTrailersReceived(const SpdyHeaderBlock& trailers) override { |
+ CHECK(!on_failed_called_); |
CHECK(!not_expect_callback_); |
trailers_ = trailers; |
@@ -112,10 +118,12 @@ class TestDelegateBase : public BidirectionalStreamImpl::Delegate { |
} |
void OnFailed(int error) override { |
+ CHECK(!on_failed_called_); |
CHECK(!not_expect_callback_); |
CHECK_EQ(OK, error_); |
CHECK_NE(OK, error); |
+ on_failed_called_ = true; |
error_ = error; |
loop_->Quit(); |
} |
@@ -186,6 +194,7 @@ class TestDelegateBase : public BidirectionalStreamImpl::Delegate { |
const SpdyHeaderBlock& trailers() const { return trailers_; } |
int on_data_read_count() const { return on_data_read_count_; } |
int on_data_sent_count() const { return on_data_sent_count_; } |
+ bool on_failed_called() const { return on_failed_called_; } |
protected: |
// Quits |loop_|. |
@@ -209,6 +218,7 @@ class TestDelegateBase : public BidirectionalStreamImpl::Delegate { |
// This is to ensure that delegate callback is not invoked synchronously when |
// calling into |stream_|. |
bool not_expect_callback_; |
+ bool on_failed_called_; |
CompletionCallback callback_; |
bool send_request_headers_automatically_; |
@@ -1273,6 +1283,11 @@ TEST_P(BidirectionalStreamQuicImplTest, CancelStreamAfterSendData) { |
delegate->CancelStream(); |
base::MessageLoop::current()->RunUntilIdle(); |
+ // Try to send data after Cancel(), should not get called back. |
+ delegate->SendData(buf, buf->size(), false); |
+ base::MessageLoop::current()->RunUntilIdle(); |
+ EXPECT_FALSE(delegate->on_failed_called()); |
+ |
EXPECT_EQ(0, delegate->on_data_read_count()); |
EXPECT_EQ(1, delegate->on_data_sent_count()); |
EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); |
@@ -1284,16 +1299,16 @@ TEST_P(BidirectionalStreamQuicImplTest, CancelStreamAfterSendData) { |
} |
TEST_P(BidirectionalStreamQuicImplTest, SessionClosedBeforeReadData) { |
- SetRequest("GET", "/", DEFAULT_PRIORITY); |
+ SetRequest("POST", "/", DEFAULT_PRIORITY); |
size_t spdy_request_headers_frame_length; |
- AddWrite(ConstructRequestHeadersPacket(1, kFin, DEFAULT_PRIORITY, |
+ AddWrite(ConstructRequestHeadersPacket(1, !kFin, DEFAULT_PRIORITY, |
&spdy_request_headers_frame_length)); |
Initialize(); |
BidirectionalStreamRequestInfo request; |
- request.method = "GET"; |
+ request.method = "POST"; |
request.url = GURL("http://www.google.com/"); |
- request.end_stream_on_headers = true; |
+ request.end_stream_on_headers = false; |
request.priority = DEFAULT_PRIORITY; |
scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
@@ -1321,7 +1336,11 @@ TEST_P(BidirectionalStreamQuicImplTest, SessionClosedBeforeReadData) { |
session()->connection()->CloseConnection( |
QUIC_NO_ERROR, "test", ConnectionCloseBehavior::SILENT_CLOSE); |
delegate->WaitUntilNextCallback(); // OnFailed |
+ EXPECT_TRUE(delegate->on_failed_called()); |
+ // Try to send data after OnFailed(), should not get called back. |
+ scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(kUploadData)); |
+ delegate->SendData(buf, buf->size(), false); |
base::MessageLoop::current()->RunUntilIdle(); |
EXPECT_EQ(ERR_UNEXPECTED, delegate->ReadData(cb.callback())); |