Index: net/dns/dns_transaction_unittest.cc |
diff --git a/net/dns/dns_transaction_unittest.cc b/net/dns/dns_transaction_unittest.cc |
index 2693a5ca9cf4dbf3126c244e1923f5800a616c2e..800e394d26bf4c4839526cbaa85538ba99aefa44 100644 |
--- a/net/dns/dns_transaction_unittest.cc |
+++ b/net/dns/dns_transaction_unittest.cc |
@@ -46,12 +46,12 @@ class DnsSocketData { |
*length = base::HostToNet16(query_->io_buffer()->size()); |
writes_.push_back(MockWrite(mode, |
reinterpret_cast<const char*>(length.get()), |
- sizeof(uint16))); |
+ sizeof(uint16), num_reads_and_writes())); |
lengths_.push_back(length.release()); |
} |
- writes_.push_back(MockWrite(mode, |
- query_->io_buffer()->data(), |
- query_->io_buffer()->size())); |
+ writes_.push_back(MockWrite(mode, query_->io_buffer()->data(), |
+ query_->io_buffer()->size(), |
+ num_reads_and_writes())); |
} |
~DnsSocketData() {} |
@@ -66,12 +66,12 @@ class DnsSocketData { |
*length = base::HostToNet16(tcp_length); |
reads_.push_back(MockRead(mode, |
reinterpret_cast<const char*>(length.get()), |
- sizeof(uint16))); |
+ sizeof(uint16), num_reads_and_writes())); |
lengths_.push_back(length.release()); |
} |
- reads_.push_back(MockRead(mode, |
- response->io_buffer()->data(), |
- response->io_buffer()->size())); |
+ reads_.push_back(MockRead(mode, response->io_buffer()->data(), |
+ response->io_buffer()->size(), |
+ num_reads_and_writes())); |
responses_.push_back(response.release()); |
} |
@@ -102,19 +102,20 @@ class DnsSocketData { |
// Add error response. |
void AddReadError(int error, IoMode mode) { |
- reads_.push_back(MockRead(mode, error)); |
+ reads_.push_back(MockRead(mode, error, num_reads_and_writes())); |
} |
// Build, if needed, and return the SocketDataProvider. No new responses |
// should be added afterwards. |
- SocketDataProvider* GetProvider() { |
+ SequencedSocketData* GetProvider() { |
if (provider_.get()) |
return provider_.get(); |
// Terminate the reads with ERR_IO_PENDING to prevent overrun and default to |
// timeout. |
- reads_.push_back(MockRead(ASYNC, ERR_IO_PENDING)); |
- provider_.reset(new DelayedSocketData(1, &reads_[0], reads_.size(), |
- &writes_[0], writes_.size())); |
+ reads_.push_back( |
+ MockRead(ASYNC, ERR_IO_PENDING, writes_.size() + reads_.size())); |
+ provider_.reset(new SequencedSocketData(&reads_[0], reads_.size(), |
+ &writes_[0], writes_.size())); |
if (use_tcp_) { |
provider_->set_connect_data(MockConnect(reads_[0].mode, OK)); |
} |
@@ -125,20 +126,16 @@ class DnsSocketData { |
return query_->id(); |
} |
- // Returns true if the expected query was written to the socket. |
- bool was_written() const { |
- CHECK(provider_.get()); |
- return provider_->write_index() > 0; |
- } |
- |
private: |
+ size_t num_reads_and_writes() const { return reads_.size() + writes_.size(); } |
+ |
scoped_ptr<DnsQuery> query_; |
bool use_tcp_; |
ScopedVector<uint16> lengths_; |
ScopedVector<DnsResponse> responses_; |
std::vector<MockWrite> writes_; |
std::vector<MockRead> reads_; |
- scoped_ptr<DelayedSocketData> provider_; |
+ scoped_ptr<SequencedSocketData> provider_; |
DISALLOW_COPY_AND_ASSIGN(DnsSocketData); |
}; |
@@ -454,7 +451,7 @@ class DnsTransactionTest : public testing::Test { |
void TearDown() override { |
// Check that all socket data was at least written to. |
for (size_t i = 0; i < socket_data_.size(); ++i) { |
- EXPECT_TRUE(socket_data_[i]->was_written()) << i; |
+ EXPECT_TRUE(socket_data_[i]->GetProvider()->AllWriteDataConsumed()) << i; |
} |
} |
@@ -517,6 +514,11 @@ TEST_F(DnsTransactionTest, CancelLookup) { |
helper1.StartTransaction(transaction_factory_.get()); |
helper0.Cancel(); |
+ // Since the transaction has been cancelled, the assocaited socket has been |
+ // destroyed, so make sure the data provide does not attempt to callback |
+ // to the socket. |
+ // TODO(rch): Make the SocketDataProvider and MockSocket do this by default. |
+ socket_data_[0]->GetProvider()->set_socket(nullptr); |
base::MessageLoop::current()->RunUntilIdle(); |